diff --git a/briar-api/build.gradle b/briar-api/build.gradle
index 479b38fdcba2e4c60c74408cf16460b445c8da50..42314bfd5f9d1e2e047258b98982e3bc6c4d3793 100644
--- a/briar-api/build.gradle
+++ b/briar-api/build.gradle
@@ -4,10 +4,15 @@ targetCompatibility = 1.6
 
 apply plugin: 'witness'
 
+repositories {
+	mavenCentral()
+}
+
 dependencies {
 	compile "com.google.dagger:dagger:2.0.2"
 	compile 'com.google.dagger:dagger-compiler:2.0.2'
 	compile 'org.jetbrains:annotations-java5:15.0'
+	compile 'com.google.code.findbugs:jsr305:3.0.1'
 }
 
 dependencyVerification {
@@ -18,6 +23,7 @@ dependencyVerification {
 			'javax.inject:javax.inject:91c77044a50c481636c32d916fd89c9118a72195390452c81065080f957de7ff',
 			'com.google.dagger:dagger-producers:99ec15e8a0507ba569e7655bc1165ee5e5ca5aa914b3c8f7e2c2458f724edd6b',
 			'com.google.guava:guava:d664fbfc03d2e5ce9cab2a44fb01f1d0bf9dfebeccc1a473b1f9ea31f79f6f99',
+			'com.google.code.findbugs:jsr305:c885ce34249682bc0236b4a7d56efcc12048e6135a5baf7a9cde8ad8cda13fcd'
 	]
 }
 
diff --git a/briar-api/src/org/briarproject/api/nullsafety/FieldsNotNullByDefault.java b/briar-api/src/org/briarproject/api/nullsafety/FieldsNotNullByDefault.java
new file mode 100644
index 0000000000000000000000000000000000000000..bdfd8f523bd1a3bc3fcec886aebcb69911ed752f
--- /dev/null
+++ b/briar-api/src/org/briarproject/api/nullsafety/FieldsNotNullByDefault.java
@@ -0,0 +1,26 @@
+package org.briarproject.api.nullsafety;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+
+import javax.annotation.Nonnull;
+import javax.annotation.meta.TypeQualifierDefault;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+/**
+ * This annotation can be applied to a package or class to indicate that
+ * the fields in that element are non-null by default unless:
+ * <ul>
+ * <li> There is an explicit nullness annotation
+ * <li> There is a default nullness annotation applied to a more tightly
+ * nested element.
+ * </ul>
+ */
+@Documented
+@Nonnull
+@TypeQualifierDefault(FIELD)
+@Retention(RUNTIME)
+public @interface FieldsNotNullByDefault {
+}
diff --git a/briar-api/src/org/briarproject/api/nullsafety/MethodsNotNullByDefault.java b/briar-api/src/org/briarproject/api/nullsafety/MethodsNotNullByDefault.java
new file mode 100644
index 0000000000000000000000000000000000000000..417e792de0af0dbdfa9e4328dc3f34b48fb01592
--- /dev/null
+++ b/briar-api/src/org/briarproject/api/nullsafety/MethodsNotNullByDefault.java
@@ -0,0 +1,28 @@
+package org.briarproject.api.nullsafety;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+
+import javax.annotation.Nonnull;
+import javax.annotation.meta.TypeQualifierDefault;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+/**
+ * This annotation can be applied to a package or class to indicate that
+ * the methods in that element are non-null by default unless:
+ * <ul>
+ * <li> There is an explicit nullness annotation
+ * <li> The method overrides a method in a superclass (in which case the
+ * annotation of the corresponding method in the superclass applies)
+ * <li> There is a default nullness annotation applied to a more tightly
+ * nested element.
+ * </ul>
+ */
+@Documented
+@Nonnull
+@TypeQualifierDefault(METHOD)
+@Retention(RUNTIME)
+public @interface MethodsNotNullByDefault {
+}
diff --git a/briar-api/src/org/briarproject/api/nullsafety/NotNullByDefault.java b/briar-api/src/org/briarproject/api/nullsafety/NotNullByDefault.java
new file mode 100644
index 0000000000000000000000000000000000000000..29ae96b7cc2452294888c9de6643417ef6c675be
--- /dev/null
+++ b/briar-api/src/org/briarproject/api/nullsafety/NotNullByDefault.java
@@ -0,0 +1,32 @@
+package org.briarproject.api.nullsafety;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+
+import javax.annotation.Nonnull;
+import javax.annotation.meta.TypeQualifierDefault;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+/**
+ * This annotation can be applied to a package or class to indicate that
+ * the fields, methods and parameters in that element are non-null by default
+ * unless:
+ * <ul>
+ * <li> There is an explicit nullness annotation
+ * <li> The method overrides a method in a superclass (in which case the
+ * annotation of the corresponding method or parameter in the superclass
+ * applies)
+ * <li> There is a default nullness annotation applied to a more tightly
+ * nested element.
+ * </ul>
+ */
+@Documented
+@Nonnull
+@TypeQualifierDefault({FIELD, METHOD, PARAMETER})
+@Retention(RUNTIME)
+public @interface NotNullByDefault {
+}
diff --git a/briar-api/src/org/briarproject/api/nullsafety/ParametersNotNullByDefault.java b/briar-api/src/org/briarproject/api/nullsafety/ParametersNotNullByDefault.java
new file mode 100644
index 0000000000000000000000000000000000000000..ac5de25e25c61715d8b70b7a06dd430bbc1fcc74
--- /dev/null
+++ b/briar-api/src/org/briarproject/api/nullsafety/ParametersNotNullByDefault.java
@@ -0,0 +1,28 @@
+package org.briarproject.api.nullsafety;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+
+import javax.annotation.Nonnull;
+import javax.annotation.meta.TypeQualifierDefault;
+
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+/**
+ * This annotation can be applied to a package or class to indicate that
+ * the method parameters in that element are non-null by default unless:
+ * <ul>
+ * <li> There is an explicit nullness annotation
+ * <li> The method overrides a method in a superclass (in which case the
+ * annotation of the corresponding parameter in the superclass applies)
+ * <li> There is a default nullness annotation applied to a more tightly
+ * nested element.
+ * </ul>
+ */
+@Documented
+@Nonnull
+@TypeQualifierDefault(PARAMETER)
+@Retention(RUNTIME)
+public @interface ParametersNotNullByDefault {
+}