diff --git a/pom.xml b/pom.xml
index 123393b..4636865 100644
--- a/pom.xml
+++ b/pom.xml
@@ -301,9 +301,9 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>com.google.code.findbugs</groupId>
-            <artifactId>jsr305</artifactId>
-            <version>2.0.0</version>
+            <groupId>org.jetbrains</groupId>
+            <artifactId>annotations</artifactId>
+            <version>16.0.2</version>
             <scope>provided</scope>
         </dependency>
 
diff --git a/src/main/java/org/apache/sling/distribution/agent/impl/DistributionRequestAuthorizationStrategy.java b/src/main/java/org/apache/sling/distribution/agent/impl/DistributionRequestAuthorizationStrategy.java
index 44d98a4..4d2fde0 100644
--- a/src/main/java/org/apache/sling/distribution/agent/impl/DistributionRequestAuthorizationStrategy.java
+++ b/src/main/java/org/apache/sling/distribution/agent/impl/DistributionRequestAuthorizationStrategy.java
@@ -18,13 +18,12 @@
  */
 package org.apache.sling.distribution.agent.impl;
 
-import javax.annotation.Nonnull;
-
 import aQute.bnd.annotation.ConsumerType;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.distribution.DistributionRequest;
 import org.apache.sling.distribution.common.DistributionException;
 import org.apache.sling.distribution.packaging.DistributionPackage;
+import org.jetbrains.annotations.NotNull;
 
 /**
  * Strategy for authorizing requests
@@ -39,6 +38,6 @@
      * @throws DistributionException if the {@link org.apache.sling.api.resource.ResourceResolver} is
      *                                                  not authorized to execute the given {@link org.apache.sling.distribution.DistributionRequest}
      */
-    void checkPermission(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionRequest distributionRequest) throws DistributionException;
+    void checkPermission(@NotNull ResourceResolver resourceResolver, @NotNull DistributionRequest distributionRequest) throws DistributionException;
 
 }
diff --git a/src/main/java/org/apache/sling/distribution/agent/impl/PrivilegeDistributionRequestAuthorizationStrategy.java b/src/main/java/org/apache/sling/distribution/agent/impl/PrivilegeDistributionRequestAuthorizationStrategy.java
index 454e6eb..e1d57f4 100644
--- a/src/main/java/org/apache/sling/distribution/agent/impl/PrivilegeDistributionRequestAuthorizationStrategy.java
+++ b/src/main/java/org/apache/sling/distribution/agent/impl/PrivilegeDistributionRequestAuthorizationStrategy.java
@@ -18,7 +18,6 @@
  */
 package org.apache.sling.distribution.agent.impl;
 
-import javax.annotation.Nonnull;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 import javax.jcr.security.AccessControlManager;
@@ -29,6 +28,7 @@
 import org.apache.sling.distribution.DistributionRequest;
 import org.apache.sling.distribution.DistributionRequestType;
 import org.apache.sling.distribution.common.DistributionException;
+import org.jetbrains.annotations.NotNull;
 
 /**
  * {@link DistributionRequestAuthorizationStrategy} based on JCR privileges over a certain {@link Session}
@@ -45,7 +45,7 @@
         this.jcrPrivilege = jcrPrivilege;
     }
 
-    public void checkPermission(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionRequest distributionRequest) throws DistributionException {
+    public void checkPermission(@NotNull ResourceResolver resourceResolver, @NotNull DistributionRequest distributionRequest) throws DistributionException {
         Session session = resourceResolver.adaptTo(Session.class);
 
         if (session == null) {
diff --git a/src/main/java/org/apache/sling/distribution/agent/impl/PrivilegeDistributionRequestAuthorizationStrategyFactory.java b/src/main/java/org/apache/sling/distribution/agent/impl/PrivilegeDistributionRequestAuthorizationStrategyFactory.java
index b98519c..72302c9 100644
--- a/src/main/java/org/apache/sling/distribution/agent/impl/PrivilegeDistributionRequestAuthorizationStrategyFactory.java
+++ b/src/main/java/org/apache/sling/distribution/agent/impl/PrivilegeDistributionRequestAuthorizationStrategyFactory.java
@@ -18,9 +18,7 @@
  */
 package org.apache.sling.distribution.agent.impl;
 
-import javax.annotation.Nonnull;
 import java.util.Map;
-
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.ConfigurationPolicy;
@@ -31,6 +29,7 @@
 import org.apache.sling.distribution.DistributionRequest;
 import org.apache.sling.distribution.component.impl.DistributionComponentConstants;
 import org.apache.sling.distribution.common.DistributionException;
+import org.jetbrains.annotations.NotNull;
 import org.osgi.framework.BundleContext;
 
 /**
@@ -69,7 +68,7 @@
         authorizationStrategy = new PrivilegeDistributionRequestAuthorizationStrategy(jcrPrivilege);
     }
 
-    public void checkPermission(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionRequest distributionRequest) throws DistributionException {
+    public void checkPermission(@NotNull ResourceResolver resourceResolver, @NotNull DistributionRequest distributionRequest) throws DistributionException {
         authorizationStrategy.checkPermission(resourceResolver, distributionRequest);
     }
 }
diff --git a/src/main/java/org/apache/sling/distribution/agent/impl/QueueingDistributionPackageProcessor.java b/src/main/java/org/apache/sling/distribution/agent/impl/QueueingDistributionPackageProcessor.java
index 68353f3..2d6c764 100644
--- a/src/main/java/org/apache/sling/distribution/agent/impl/QueueingDistributionPackageProcessor.java
+++ b/src/main/java/org/apache/sling/distribution/agent/impl/QueueingDistributionPackageProcessor.java
@@ -18,14 +18,11 @@
  */
 package org.apache.sling.distribution.agent.impl;
 
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
 import java.util.Collection;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicLong;
-
 import org.apache.sling.distribution.DistributionRequestState;
 import org.apache.sling.distribution.DistributionResponse;
 import org.apache.sling.distribution.common.DistributionException;
@@ -41,6 +38,8 @@
 import org.apache.sling.distribution.queue.DistributionQueueItemStatus;
 import org.apache.sling.distribution.queue.impl.DistributionQueueProvider;
 import org.apache.sling.distribution.queue.impl.DistributionQueueDispatchingStrategy;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 
 /**
  * The package exporter callback function is responsible to process the exported packages.
@@ -77,11 +76,11 @@
         return packagesSize.get();
     }
 
-    QueueingDistributionPackageProcessor(@Nullable String callingUser, @Nonnull String requestId, long requestStartTime,
-                                         @Nonnull DistributionEventFactory distributionEventFactory,
-                                         @Nonnull DistributionQueueDispatchingStrategy scheduleQueueStrategy,
-                                         @Nonnull DistributionQueueProvider queueProvider, @Nonnull DefaultDistributionLog log,
-                                         @Nonnull String agentName) {
+    QueueingDistributionPackageProcessor(@Nullable String callingUser, @NotNull String requestId, long requestStartTime,
+                                         @NotNull DistributionEventFactory distributionEventFactory,
+                                         @NotNull DistributionQueueDispatchingStrategy scheduleQueueStrategy,
+                                         @NotNull DistributionQueueProvider queueProvider, @NotNull DefaultDistributionLog log,
+                                         @NotNull String agentName) {
         this.callingUser = callingUser;
         this.requestId = requestId;
         this.requestStartTime = requestStartTime;
diff --git a/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgent.java b/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgent.java
index 257286f..96c3d7f 100644
--- a/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgent.java
+++ b/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgent.java
@@ -48,14 +48,13 @@
 import org.apache.sling.distribution.trigger.DistributionTrigger;
 import org.apache.sling.distribution.util.impl.DistributionUtils;
 import org.apache.sling.jcr.api.SlingRepository;
+import org.jetbrains.annotations.NotNull;
 
-import javax.annotation.Nonnull;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Set;
 import java.util.TreeSet;
 import java.util.concurrent.atomic.AtomicInteger;
-
 /**
  * Basic implementation of a {@link DistributionAgent}
  */
@@ -145,8 +144,8 @@
         }
     }
 
-    @Nonnull
-    public DistributionResponse execute(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionRequest distributionRequest)
+    @NotNull
+    public DistributionResponse execute(@NotNull ResourceResolver resourceResolver, @NotNull DistributionRequest distributionRequest)
             throws DistributionException {
 
         ResourceResolver agentResourceResolver = null;
@@ -230,7 +229,7 @@
         return new CompositeDistributionResponse(distributionResponses, packagesCount, packagesSize, endTime - startTime);
     }
 
-    @Nonnull
+    @NotNull
     public Set<String> getQueueNames() {
         Set<String> queueNames = new TreeSet<String>();
         queueNames.addAll(scheduleQueueStrategy.getQueueNames());
@@ -240,7 +239,7 @@
         return queueNames;
     }
 
-    public DistributionQueue getQueue(@Nonnull final String queueName) {
+    public DistributionQueue getQueue(@NotNull final String queueName) {
         Set<String> queues = getQueueNames();
         if (!queues.contains(queueName)) {
             return null;
@@ -262,12 +261,12 @@
         return queue;
     }
 
-    @Nonnull
+    @NotNull
     public DistributionLog getLog() {
         return log;
     }
 
-    @Nonnull
+    @NotNull
     public DistributionAgentState getState() {
         DistributionAgentState agentState = DistributionAgentState.IDLE;
 
@@ -416,4 +415,4 @@
         return true;
     }
 
-}
\ No newline at end of file
+}
diff --git a/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgentAuthenticationInfo.java b/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgentAuthenticationInfo.java
index d268f9e..f26d8a2 100644
--- a/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgentAuthenticationInfo.java
+++ b/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgentAuthenticationInfo.java
@@ -18,11 +18,10 @@
  */
 package org.apache.sling.distribution.agent.impl;
 
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-
 import org.apache.sling.api.resource.ResourceResolverFactory;
 import org.apache.sling.jcr.api.SlingRepository;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 
 /**
  * Authentication information required by a {@link SimpleDistributionAgent} to perform its tasks.
@@ -35,8 +34,8 @@
     private final ResourceResolverFactory resourceResolverFactory;
     private final String subServiceName;
 
-    public SimpleDistributionAgentAuthenticationInfo(@Nonnull SlingRepository slingRepository, @Nonnull String agentService,
-                                                     @Nonnull ResourceResolverFactory resourceResolverFactory,
+    public SimpleDistributionAgentAuthenticationInfo(@NotNull SlingRepository slingRepository, @NotNull String agentService,
+                                                     @NotNull ResourceResolverFactory resourceResolverFactory,
                                                      @Nullable String subServiceName) {
         this.slingRepository = slingRepository;
         this.agentService = agentService;
diff --git a/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgentQueueProcessor.java b/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgentQueueProcessor.java
index 0d96219..1a04fa7 100644
--- a/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgentQueueProcessor.java
+++ b/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgentQueueProcessor.java
@@ -18,8 +18,6 @@
  */
 package org.apache.sling.distribution.agent.impl;
 
-import javax.annotation.Nonnull;
-
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.distribution.DistributionRequestType;
 import org.apache.sling.distribution.common.DistributionException;
@@ -39,6 +37,7 @@
 import org.apache.sling.distribution.queue.impl.DistributionQueueProvider;
 import org.apache.sling.distribution.queue.impl.DistributionQueueDispatchingStrategy;
 import org.apache.sling.distribution.util.impl.DistributionUtils;
+import org.jetbrains.annotations.NotNull;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -81,7 +80,7 @@
     }
 
     @Override
-    public boolean process(@Nonnull String queueName, @Nonnull DistributionQueueEntry queueEntry) {
+    public boolean process(@NotNull String queueName, @NotNull DistributionQueueEntry queueEntry) {
         DistributionQueueItem queueItem = queueEntry.getItem();
 
         try {
diff --git a/src/main/java/org/apache/sling/distribution/agent/impl/TriggerAgentRequestHandler.java b/src/main/java/org/apache/sling/distribution/agent/impl/TriggerAgentRequestHandler.java
index 21b76c7..6ec25a2 100644
--- a/src/main/java/org/apache/sling/distribution/agent/impl/TriggerAgentRequestHandler.java
+++ b/src/main/java/org/apache/sling/distribution/agent/impl/TriggerAgentRequestHandler.java
@@ -18,9 +18,6 @@
  */
 package org.apache.sling.distribution.agent.impl;
 
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.distribution.DistributionRequest;
 import org.apache.sling.distribution.agent.spi.DistributionAgent;
@@ -28,6 +25,8 @@
 import org.apache.sling.distribution.log.impl.DefaultDistributionLog;
 import org.apache.sling.distribution.trigger.DistributionRequestHandler;
 import org.apache.sling.distribution.util.impl.DistributionUtils;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 
 /**
  * A {@link DistributionRequestHandler} to trigger an agent.
@@ -39,10 +38,10 @@
     private final DistributionAgent agent;
     private final String agentName;
 
-    public TriggerAgentRequestHandler(@Nonnull DistributionAgent agent,
-                                      @Nonnull String agentName,
-                                      @Nonnull SimpleDistributionAgentAuthenticationInfo authenticationInfo,
-                                      @Nonnull DefaultDistributionLog log,
+    public TriggerAgentRequestHandler(@NotNull DistributionAgent agent,
+                                      @NotNull String agentName,
+                                      @NotNull SimpleDistributionAgentAuthenticationInfo authenticationInfo,
+                                      @NotNull DefaultDistributionLog log,
                                       boolean active) {
         this.authenticationInfo = authenticationInfo;
         this.log = log;
@@ -59,7 +58,7 @@
         return DistributionComponentKind.AGENT;
     }
 
-    public void handle(@Nullable ResourceResolver resourceResolver, @Nonnull DistributionRequest request) {
+    public void handle(@Nullable ResourceResolver resourceResolver, @NotNull DistributionRequest request) {
 
         if (!active) {
             log.warn("skipping agent handler as agent is disabled");
diff --git a/src/main/java/org/apache/sling/distribution/agent/spi/DistributionAgent.java b/src/main/java/org/apache/sling/distribution/agent/spi/DistributionAgent.java
index 66b2ddb..a27ee05 100644
--- a/src/main/java/org/apache/sling/distribution/agent/spi/DistributionAgent.java
+++ b/src/main/java/org/apache/sling/distribution/agent/spi/DistributionAgent.java
@@ -18,9 +18,6 @@
  */
 package org.apache.sling.distribution.agent.spi;
 
-import javax.annotation.CheckForNull;
-import javax.annotation.Nonnull;
-
 import aQute.bnd.annotation.ConsumerType;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.distribution.DistributionRequest;
@@ -29,6 +26,8 @@
 import org.apache.sling.distribution.common.DistributionException;
 import org.apache.sling.distribution.log.spi.DistributionLog;
 import org.apache.sling.distribution.queue.spi.DistributionQueue;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 
 /**
  * A distribution agent is responsible for handling {@link org.apache.sling.distribution.DistributionRequest}s.
@@ -45,7 +44,7 @@
      *
      * @return the list of queue names
      */
-    @Nonnull
+    @NotNull
     Iterable<String> getQueueNames();
 
     /**
@@ -55,21 +54,21 @@
      * @return a {@link DistributionQueue} with the given name bound to this agent, if it exists,
      * {@code null} otherwise
      */
-    @CheckForNull
-    DistributionQueue getQueue(@Nonnull String name);
+    @Nullable
+    DistributionQueue getQueue(@NotNull String name);
 
     /**
      * Get the agent log
      * @return the log for this agent
      */
-    @Nonnull
+    @NotNull
     DistributionLog getLog();
 
     /**
      * returns the state of the agent
      * @return the agent state
      */
-    @Nonnull
+    @NotNull
     DistributionAgentState getState();
 
     /**
@@ -87,7 +86,7 @@
      * @return a {@link org.apache.sling.distribution.DistributionResponse}
      * @throws DistributionException if any error happens during the execution of the request or if the authentication fails
      */
-    @Nonnull
-    DistributionResponse execute(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionRequest distributionRequest) throws DistributionException;
+    @NotNull
+    DistributionResponse execute(@NotNull ResourceResolver resourceResolver, @NotNull DistributionRequest distributionRequest) throws DistributionException;
 
 }
diff --git a/src/main/java/org/apache/sling/distribution/agent/spi/package-info.java b/src/main/java/org/apache/sling/distribution/agent/spi/package-info.java
index e60a106..dfd1253 100644
--- a/src/main/java/org/apache/sling/distribution/agent/spi/package-info.java
+++ b/src/main/java/org/apache/sling/distribution/agent/spi/package-info.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-@Version("0.0.0")
+@Version("0.0.1")
 package org.apache.sling.distribution.agent.spi;
 
 import aQute.bnd.annotation.Version;
diff --git a/src/main/java/org/apache/sling/distribution/component/impl/DistributionComponentFactoryMap.java b/src/main/java/org/apache/sling/distribution/component/impl/DistributionComponentFactoryMap.java
index e2b029f..dfe2f53 100644
--- a/src/main/java/org/apache/sling/distribution/component/impl/DistributionComponentFactoryMap.java
+++ b/src/main/java/org/apache/sling/distribution/component/impl/DistributionComponentFactoryMap.java
@@ -24,9 +24,6 @@
 import java.util.List;
 import java.util.Map;
 
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Property;
@@ -50,6 +47,8 @@
 import org.apache.sling.distribution.trigger.impl.PersistedJcrEventDistributionTriggerFactory;
 import org.apache.sling.distribution.trigger.impl.ResourceEventDistributionTriggerFactory;
 import org.apache.sling.distribution.trigger.impl.ScheduledDistributionTriggerFactory;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -154,7 +153,7 @@
         mapping.put(TRIGGER, parse(toStringArray(config.get(MAPPING_TRIGGER)), MAPPING_TRIGGER_DEFAULT));
     }
 
-    String getType(DistributionComponentKind kind, @Nonnull String factoryPid) {
+    String getType(DistributionComponentKind kind, @NotNull String factoryPid) {
         Map<String,String> entries = getEntries(kind);
         for (Map.Entry<String, String> entry : entries.entrySet()) {
             if (factoryPid.equals(entry.getValue())) {
@@ -174,7 +173,7 @@
 
     //
 
-    private Map<String,String> parse(@Nullable String[] mappings, @Nonnull String[] defaultMappings) {
+    private Map<String,String> parse(@Nullable String[] mappings, @NotNull String[] defaultMappings) {
         Map<String,String> parsed = new HashMap<String, String>();
         parsed.putAll(parse(defaultMappings));
         if (mappings != null) {
@@ -183,7 +182,7 @@
         return parsed;
     }
 
-    private Map<String,String> parse(@Nonnull String[] mappings) {
+    private Map<String,String> parse(@NotNull String[] mappings) {
         Map<String, String> map = new HashMap<String, String>();
         for (String mapping : mappings) {
             String[] chunks = mapping.split(":");
diff --git a/src/main/java/org/apache/sling/distribution/event/impl/DefaultDistributionEventFactory.java b/src/main/java/org/apache/sling/distribution/event/impl/DefaultDistributionEventFactory.java
index 3337db6..be02716 100644
--- a/src/main/java/org/apache/sling/distribution/event/impl/DefaultDistributionEventFactory.java
+++ b/src/main/java/org/apache/sling/distribution/event/impl/DefaultDistributionEventFactory.java
@@ -18,16 +18,15 @@
  */
 package org.apache.sling.distribution.event.impl;
 
-import javax.annotation.Nonnull;
 import java.util.Dictionary;
 import java.util.Hashtable;
-
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.distribution.component.impl.DistributionComponentKind;
 import org.apache.sling.distribution.event.DistributionEventProperties;
 import org.apache.sling.distribution.packaging.DistributionPackageInfo;
+import org.jetbrains.annotations.NotNull;
 import org.osgi.service.event.Event;
 import org.osgi.service.event.EventAdmin;
 import org.slf4j.Logger;
@@ -45,13 +44,13 @@
     @Reference
     private EventAdmin eventAdmin;
 
-    private void generateEvent(@Nonnull String distributionEventTopic, @Nonnull Dictionary<?, ?> properties) {
+    private void generateEvent(@NotNull String distributionEventTopic, @NotNull Dictionary<?, ?> properties) {
         eventAdmin.postEvent(new Event(distributionEventTopic, properties));
         log.debug("distribution event {} posted", distributionEventTopic);
     }
 
-    public void generatePackageEvent(@Nonnull String distributionEventTopic, @Nonnull DistributionComponentKind kind,
-                                     @Nonnull String name, @Nonnull DistributionPackageInfo info) {
+    public void generatePackageEvent(@NotNull String distributionEventTopic, @NotNull DistributionComponentKind kind,
+                                     @NotNull String name, @NotNull DistributionPackageInfo info) {
         try {
             Dictionary<String, Object> dictionary = new Hashtable<String, Object>();
             dictionary.put(DistributionEventProperties.DISTRIBUTION_COMPONENT_NAME, name);
diff --git a/src/main/java/org/apache/sling/distribution/event/impl/DistributionEventFactory.java b/src/main/java/org/apache/sling/distribution/event/impl/DistributionEventFactory.java
index d312caf..5babff4 100644
--- a/src/main/java/org/apache/sling/distribution/event/impl/DistributionEventFactory.java
+++ b/src/main/java/org/apache/sling/distribution/event/impl/DistributionEventFactory.java
@@ -18,10 +18,9 @@
  */
 package org.apache.sling.distribution.event.impl;
 
-import javax.annotation.Nonnull;
-
 import org.apache.sling.distribution.component.impl.DistributionComponentKind;
 import org.apache.sling.distribution.packaging.DistributionPackageInfo;
+import org.jetbrains.annotations.NotNull;
 
 /**
  * generate distribution related events
@@ -33,7 +32,7 @@
      *
      * @param distributionEventType the type of event to be generated
      */
-    void generatePackageEvent(@Nonnull String distributionEventType, @Nonnull DistributionComponentKind kind,
-                              @Nonnull String name, @Nonnull DistributionPackageInfo info);
+    void generatePackageEvent(@NotNull String distributionEventType, @NotNull DistributionComponentKind kind,
+                              @NotNull String name, @NotNull DistributionPackageInfo info);
 
 }
diff --git a/src/main/java/org/apache/sling/distribution/impl/CompositeDistributionResponse.java b/src/main/java/org/apache/sling/distribution/impl/CompositeDistributionResponse.java
index 027e3cf..702494e 100644
--- a/src/main/java/org/apache/sling/distribution/impl/CompositeDistributionResponse.java
+++ b/src/main/java/org/apache/sling/distribution/impl/CompositeDistributionResponse.java
@@ -20,11 +20,10 @@
 package org.apache.sling.distribution.impl;
 
 
-import javax.annotation.Nonnull;
 import java.util.List;
-
 import org.apache.sling.distribution.DistributionRequestState;
 import org.apache.sling.distribution.DistributionResponse;
+import org.jetbrains.annotations.NotNull;
 
 /**
  * A composite {@link SimpleDistributionResponse}.
@@ -66,7 +65,7 @@
         return DistributionRequestState.ACCEPTED.equals(state) || DistributionRequestState.DISTRIBUTED.equals(state);
     }
 
-    @Nonnull
+    @NotNull
     @Override
     public DistributionRequestState getState() {
         return state;
diff --git a/src/main/java/org/apache/sling/distribution/impl/DefaultDistributor.java b/src/main/java/org/apache/sling/distribution/impl/DefaultDistributor.java
index ef1bf87..3b2537c 100644
--- a/src/main/java/org/apache/sling/distribution/impl/DefaultDistributor.java
+++ b/src/main/java/org/apache/sling/distribution/impl/DefaultDistributor.java
@@ -19,8 +19,6 @@
 
 package org.apache.sling.distribution.impl;
 
-import javax.annotation.Nonnull;
-
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.Service;
@@ -32,6 +30,7 @@
 import org.apache.sling.distribution.agent.spi.DistributionAgent;
 import org.apache.sling.distribution.component.impl.DistributionComponentProvider;
 import org.apache.sling.distribution.common.DistributionException;
+import org.jetbrains.annotations.NotNull;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -49,8 +48,8 @@
     private
     DistributionComponentProvider componentProvider;
 
-    @Nonnull
-    public DistributionResponse distribute(@Nonnull String agentName, @Nonnull ResourceResolver resourceResolver, @Nonnull DistributionRequest distributionRequest) {
+    @NotNull
+    public DistributionResponse distribute(@NotNull String agentName, @NotNull ResourceResolver resourceResolver, @NotNull DistributionRequest distributionRequest) {
         DistributionAgent agent = componentProvider.getService(DistributionAgent.class, agentName);
 
         if (agent == null) {
diff --git a/src/main/java/org/apache/sling/distribution/impl/SimpleDistributionResponse.java b/src/main/java/org/apache/sling/distribution/impl/SimpleDistributionResponse.java
index 5c51b7b..730bb5d 100644
--- a/src/main/java/org/apache/sling/distribution/impl/SimpleDistributionResponse.java
+++ b/src/main/java/org/apache/sling/distribution/impl/SimpleDistributionResponse.java
@@ -19,10 +19,9 @@
 
 package org.apache.sling.distribution.impl;
 
-import javax.annotation.Nonnull;
-
 import org.apache.sling.distribution.DistributionRequestState;
 import org.apache.sling.distribution.DistributionResponse;
+import org.jetbrains.annotations.NotNull;
 
 /**
  * Simple implementation of {@link DistributionResponse} where success is given by not being in FAILED state.
@@ -43,7 +42,7 @@
         return DistributionRequestState.ACCEPTED.equals(state) || DistributionRequestState.DISTRIBUTED.equals(state);
     }
 
-    @Nonnull
+    @NotNull
     public DistributionRequestState getState() {
         return state;
     }
diff --git a/src/main/java/org/apache/sling/distribution/monitor/impl/MonitoringDistributionPackageBuilder.java b/src/main/java/org/apache/sling/distribution/monitor/impl/MonitoringDistributionPackageBuilder.java
index 32066c9..a3472a9 100644
--- a/src/main/java/org/apache/sling/distribution/monitor/impl/MonitoringDistributionPackageBuilder.java
+++ b/src/main/java/org/apache/sling/distribution/monitor/impl/MonitoringDistributionPackageBuilder.java
@@ -24,7 +24,6 @@
 import java.util.Queue;
 import java.util.concurrent.LinkedBlockingDeque;
 
-import javax.annotation.Nonnull;
 import javax.management.ObjectName;
 
 import org.apache.sling.api.resource.ResourceResolver;
@@ -33,6 +32,7 @@
 import org.apache.sling.distribution.packaging.DistributionPackage;
 import org.apache.sling.distribution.packaging.DistributionPackageBuilder;
 import org.apache.sling.distribution.packaging.DistributionPackageInfo;
+import org.jetbrains.annotations.NotNull;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceRegistration;
 
@@ -59,9 +59,9 @@
         return wrapped.getType();
     }
 
-    @Nonnull
+    @NotNull
     @Override
-    public DistributionPackage createPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionRequest request) throws DistributionException {
+    public DistributionPackage createPackage(@NotNull ResourceResolver resourceResolver, @NotNull DistributionRequest request) throws DistributionException {
         long start = System.currentTimeMillis();
         DistributionPackage distributionPackage = wrapped.createPackage(resourceResolver, request);
         if (queueCapacity > 0) {
@@ -70,25 +70,25 @@
         return distributionPackage;
     }
 
-    @Nonnull
+    @NotNull
     @Override
-    public DistributionPackage readPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull InputStream stream) throws DistributionException {
+    public DistributionPackage readPackage(@NotNull ResourceResolver resourceResolver, @NotNull InputStream stream) throws DistributionException {
         return wrapped.readPackage(resourceResolver, stream);
     }
 
     @Override
-    public DistributionPackage getPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull String id) throws DistributionException {
+    public DistributionPackage getPackage(@NotNull ResourceResolver resourceResolver, @NotNull String id) throws DistributionException {
         return wrapped.getPackage(resourceResolver, id);
     }
 
     @Override
-    public boolean installPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionPackage distributionPackage) throws DistributionException {
+    public boolean installPackage(@NotNull ResourceResolver resourceResolver, @NotNull DistributionPackage distributionPackage) throws DistributionException {
         return wrapped.installPackage(resourceResolver, distributionPackage);
     }
 
-    @Nonnull
+    @NotNull
     @Override
-    public DistributionPackageInfo installPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull InputStream stream) throws DistributionException {
+    public DistributionPackageInfo installPackage(@NotNull ResourceResolver resourceResolver, @NotNull InputStream stream) throws DistributionException {
         return wrapped.installPackage(resourceResolver, stream);
     }
 
diff --git a/src/main/java/org/apache/sling/distribution/packaging/DistributionPackage.java b/src/main/java/org/apache/sling/distribution/packaging/DistributionPackage.java
index 6c96da2..a2925d0 100644
--- a/src/main/java/org/apache/sling/distribution/packaging/DistributionPackage.java
+++ b/src/main/java/org/apache/sling/distribution/packaging/DistributionPackage.java
@@ -18,12 +18,12 @@
  */
 package org.apache.sling.distribution.packaging;
 
-import javax.annotation.Nonnull;
 import java.io.IOException;
 import java.io.InputStream;
-
 import aQute.bnd.annotation.ProviderType;
 
+import org.jetbrains.annotations.NotNull;
+
 /**
  * A distribution package
  */
@@ -35,7 +35,7 @@
      *
      * @return the package id
      */
-    @Nonnull
+    @NotNull
     String getId();
 
     /**
@@ -43,7 +43,7 @@
      *
      * @return the package type
      */
-    @Nonnull
+    @NotNull
     String getType();
 
     /**
@@ -53,7 +53,7 @@
      * @return an {@link InputStream}
      * @throws IOException
      */
-    @Nonnull
+    @NotNull
     InputStream createInputStream() throws IOException;
 
     /**
@@ -79,7 +79,7 @@
      *
      * @return the associated metadata to this package
      */
-    @Nonnull
+    @NotNull
     DistributionPackageInfo getInfo();
 
 }
diff --git a/src/main/java/org/apache/sling/distribution/packaging/DistributionPackageBuilder.java b/src/main/java/org/apache/sling/distribution/packaging/DistributionPackageBuilder.java
index 6713072..46f0e4d 100644
--- a/src/main/java/org/apache/sling/distribution/packaging/DistributionPackageBuilder.java
+++ b/src/main/java/org/apache/sling/distribution/packaging/DistributionPackageBuilder.java
@@ -18,14 +18,13 @@
  */
 package org.apache.sling.distribution.packaging;
 
-import javax.annotation.CheckForNull;
-import javax.annotation.Nonnull;
 import java.io.InputStream;
-
 import aQute.bnd.annotation.ProviderType;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.distribution.DistributionRequest;
 import org.apache.sling.distribution.common.DistributionException;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 
 /**
  * A builder for {@link DistributionPackage}s
@@ -47,8 +46,8 @@
      * @return a {@link DistributionPackage} or <code>null</code> if it could not be created
      * @throws org.apache.sling.distribution.common.DistributionException if any error occurs while creating the package, or if the resource resolver is not authorized to do that
      */
-    @Nonnull
-    DistributionPackage createPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionRequest request) throws DistributionException;
+    @NotNull
+    DistributionPackage createPackage(@NotNull ResourceResolver resourceResolver, @NotNull DistributionRequest request) throws DistributionException;
 
     /**
      * reads a stream and tries to convert it to a {@link DistributionPackage} this provider can read and install
@@ -58,8 +57,8 @@
      * @return a {@link DistributionPackage} if it can read it from the stream
      * @throws DistributionException when the stream cannot be read as a {@link DistributionPackage}
      */
-    @Nonnull
-    DistributionPackage readPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull InputStream stream) throws DistributionException;
+    @NotNull
+    DistributionPackage readPackage(@NotNull ResourceResolver resourceResolver, @NotNull InputStream stream) throws DistributionException;
 
     /**
      * get an already created (and saved into the repository) {@link DistributionPackage} by its id
@@ -69,8 +68,8 @@
      * @return a {@link DistributionPackage} if one with such an id exists, <code>null</code> otherwise
      * @throws DistributionException when the stream the package with that id cannot be retrieved
      */
-    @CheckForNull
-    DistributionPackage getPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull String id) throws DistributionException;
+    @Nullable
+    DistributionPackage getPackage(@NotNull ResourceResolver resourceResolver, @NotNull String id) throws DistributionException;
 
     /**
      * Installs the given distributionPackage into the repository
@@ -80,7 +79,7 @@
      * @return <code>true</code> if the package was installed successfully
      * @throws DistributionException
      */
-    boolean installPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionPackage distributionPackage) throws DistributionException;
+    boolean installPackage(@NotNull ResourceResolver resourceResolver, @NotNull DistributionPackage distributionPackage) throws DistributionException;
 
 
     /**
@@ -91,7 +90,7 @@
      * @return a {@link DistributionPackage} if it can read it from the stream
      * @throws DistributionException when the stream cannot be read as a {@link DistributionPackage}
      */
-    @Nonnull
-    DistributionPackageInfo installPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull InputStream stream) throws DistributionException;
+    @NotNull
+    DistributionPackageInfo installPackage(@NotNull ResourceResolver resourceResolver, @NotNull InputStream stream) throws DistributionException;
 
 }
diff --git a/src/main/java/org/apache/sling/distribution/packaging/DistributionPackageInfo.java b/src/main/java/org/apache/sling/distribution/packaging/DistributionPackageInfo.java
index 7c65a5d..828af92 100644
--- a/src/main/java/org/apache/sling/distribution/packaging/DistributionPackageInfo.java
+++ b/src/main/java/org/apache/sling/distribution/packaging/DistributionPackageInfo.java
@@ -18,16 +18,15 @@
  */
 package org.apache.sling.distribution.packaging;
 
-import javax.annotation.CheckForNull;
-import javax.annotation.Nonnull;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Map;
-
 import aQute.bnd.annotation.ProviderType;
 import org.apache.sling.api.resource.ValueMap;
 import org.apache.sling.api.wrappers.ValueMapDecorator;
 import org.apache.sling.distribution.DistributionRequestType;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 
 /**
  * Additional information about a package.
@@ -82,7 +81,7 @@
     }
 
 
-    @Nonnull
+    @NotNull
     public String getType() {
         return get(PROPERTY_PACKAGE_TYPE, String.class);
     }
@@ -92,7 +91,7 @@
      *
      * @return an array of paths
      */
-    @CheckForNull
+    @Nullable
     public String[] getPaths() {
         return get(PROPERTY_REQUEST_PATHS, String[].class);
     }
@@ -102,7 +101,7 @@
      *
      * @return the request type
      */
-    @CheckForNull
+    @Nullable
     public DistributionRequestType getRequestType() {
         return get(PROPERTY_REQUEST_TYPE, DistributionRequestType.class);
     }
diff --git a/src/main/java/org/apache/sling/distribution/packaging/impl/AbstractDistributionPackage.java b/src/main/java/org/apache/sling/distribution/packaging/impl/AbstractDistributionPackage.java
index b7aed66..37f9f4e 100644
--- a/src/main/java/org/apache/sling/distribution/packaging/impl/AbstractDistributionPackage.java
+++ b/src/main/java/org/apache/sling/distribution/packaging/impl/AbstractDistributionPackage.java
@@ -18,11 +18,10 @@
  */
 package org.apache.sling.distribution.packaging.impl;
 
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-
 import org.apache.sling.distribution.packaging.DistributionPackage;
 import org.apache.sling.distribution.packaging.DistributionPackageInfo;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 
 /**
  * abstract implementation of a {@link DistributionPackage}
@@ -43,17 +42,17 @@
         this.digestMessage = digestMessage;
     }
 
-    @Nonnull
+    @NotNull
     public DistributionPackageInfo getInfo() {
         return info;
     }
 
-    @Nonnull
+    @NotNull
     public String getId() {
         return id;
     }
 
-    @Nonnull
+    @NotNull
     public String getType() {
         return info.getType();
     }
diff --git a/src/main/java/org/apache/sling/distribution/packaging/impl/AbstractDistributionPackageBuilder.java b/src/main/java/org/apache/sling/distribution/packaging/impl/AbstractDistributionPackageBuilder.java
index c9d9ad3..0993667 100644
--- a/src/main/java/org/apache/sling/distribution/packaging/impl/AbstractDistributionPackageBuilder.java
+++ b/src/main/java/org/apache/sling/distribution/packaging/impl/AbstractDistributionPackageBuilder.java
@@ -24,8 +24,6 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import javax.annotation.CheckForNull;
-import javax.annotation.Nonnull;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 
@@ -39,6 +37,8 @@
 import org.apache.sling.distribution.packaging.DistributionPackageInfo;
 import org.apache.sling.distribution.serialization.impl.vlt.VltUtils;
 import org.apache.sling.distribution.util.DistributionJcrUtils;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -59,8 +59,8 @@
         return type;
     }
 
-    @Nonnull
-    public DistributionPackage createPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionRequest request)
+    @NotNull
+    public DistributionPackage createPackage(@NotNull ResourceResolver resourceResolver, @NotNull DistributionRequest request)
             throws DistributionException {
         DistributionPackage distributionPackage;
 
@@ -85,8 +85,8 @@
         return distributionPackage;
     }
 
-    @Nonnull
-    public DistributionPackage readPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull InputStream stream) throws DistributionException {
+    @NotNull
+    public DistributionPackage readPackage(@NotNull ResourceResolver resourceResolver, @NotNull InputStream stream) throws DistributionException {
 
         if (!stream.markSupported()) {
             stream = new BufferedInputStream(stream);
@@ -117,7 +117,7 @@
         return distributionPackage;
     }
 
-    public boolean installPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionPackage distributionPackage) throws DistributionException {
+    public boolean installPackage(@NotNull ResourceResolver resourceResolver, @NotNull DistributionPackage distributionPackage) throws DistributionException {
 
         DistributionRequestType actionType = distributionPackage.getInfo().getRequestType();
 
@@ -138,9 +138,9 @@
         return installed;
     }
 
-    @Nonnull
+    @NotNull
     @Override
-    public DistributionPackageInfo installPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull InputStream stream) throws DistributionException {
+    public DistributionPackageInfo installPackage(@NotNull ResourceResolver resourceResolver, @NotNull InputStream stream) throws DistributionException {
         if (!stream.markSupported()) {
             stream = new BufferedInputStream(stream);
         }
@@ -166,7 +166,7 @@
         }
     }
 
-    private boolean installDeletePackage(@Nonnull ResourceResolver resourceResolver, @CheckForNull DistributionPackage distributionPackage) throws DistributionException {
+    private boolean installDeletePackage(@NotNull ResourceResolver resourceResolver, @Nullable DistributionPackage distributionPackage) throws DistributionException {
         Session session = null;
         try {
             if (distributionPackage != null) {
@@ -188,7 +188,7 @@
     }
 
 
-    private boolean installAddPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionPackage distributionPackage)
+    private boolean installAddPackage(@NotNull ResourceResolver resourceResolver, @NotNull DistributionPackage distributionPackage)
             throws DistributionException {
         InputStream inputStream = null;
         try {
@@ -201,8 +201,8 @@
         }
     }
 
-    @CheckForNull
-    public DistributionPackage getPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull String id) {
+    @Nullable
+    public DistributionPackage getPackage(@NotNull ResourceResolver resourceResolver, @NotNull String id) {
         DistributionPackage distributionPackage = SimpleDistributionPackage.fromIdString(id, type);
 
         // not a simple package
@@ -242,19 +242,19 @@
     }
 
 
-    @CheckForNull
-    protected abstract DistributionPackage createPackageForAdd(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionRequest request)
+    @Nullable
+    protected abstract DistributionPackage createPackageForAdd(@NotNull ResourceResolver resourceResolver, @NotNull DistributionRequest request)
             throws DistributionException;
 
-    @CheckForNull
-    protected abstract DistributionPackage readPackageInternal(@Nonnull ResourceResolver resourceResolver, @Nonnull InputStream stream)
+    @Nullable
+    protected abstract DistributionPackage readPackageInternal(@NotNull ResourceResolver resourceResolver, @NotNull InputStream stream)
             throws DistributionException;
 
 
-    protected abstract boolean installPackageInternal(@Nonnull ResourceResolver resourceResolver, @Nonnull InputStream stream)
+    protected abstract boolean installPackageInternal(@NotNull ResourceResolver resourceResolver, @NotNull InputStream stream)
             throws DistributionException;
 
-    @CheckForNull
-    protected abstract DistributionPackage getPackageInternal(@Nonnull ResourceResolver resourceResolver, @Nonnull String id);
+    @Nullable
+    protected abstract DistributionPackage getPackageInternal(@NotNull ResourceResolver resourceResolver, @NotNull String id);
 
 }
diff --git a/src/main/java/org/apache/sling/distribution/packaging/impl/DistributionPackageBuilderProvider.java b/src/main/java/org/apache/sling/distribution/packaging/impl/DistributionPackageBuilderProvider.java
index 6744392..0c7169d 100644
--- a/src/main/java/org/apache/sling/distribution/packaging/impl/DistributionPackageBuilderProvider.java
+++ b/src/main/java/org/apache/sling/distribution/packaging/impl/DistributionPackageBuilderProvider.java
@@ -18,10 +18,9 @@
  */
 package org.apache.sling.distribution.packaging.impl;
 
-import javax.annotation.CheckForNull;
-
 import aQute.bnd.annotation.ProviderType;
 import org.apache.sling.distribution.packaging.DistributionPackageBuilder;
+import org.jetbrains.annotations.Nullable;
 
 /**
  * A helper interface to allow finding registered {@link DistributionPackageBuilder}s
@@ -34,6 +33,6 @@
      * @param type the package type
      * @return a {@link DistributionPackageBuilder} if one is already registered for that type or null otherwise
      */
-    @CheckForNull
+    @Nullable
     DistributionPackageBuilder getPackageBuilder(String type);
 }
diff --git a/src/main/java/org/apache/sling/distribution/packaging/impl/DistributionPackageExporter.java b/src/main/java/org/apache/sling/distribution/packaging/impl/DistributionPackageExporter.java
index 74efdd9..975b986 100644
--- a/src/main/java/org/apache/sling/distribution/packaging/impl/DistributionPackageExporter.java
+++ b/src/main/java/org/apache/sling/distribution/packaging/impl/DistributionPackageExporter.java
@@ -18,15 +18,14 @@
  */
 package org.apache.sling.distribution.packaging.impl;
 
-import javax.annotation.CheckForNull;
-import javax.annotation.Nonnull;
-
 import aQute.bnd.annotation.ConsumerType;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.distribution.DistributionRequest;
 import org.apache.sling.distribution.common.DistributionException;
 import org.apache.sling.distribution.packaging.DistributionPackage;
 import org.apache.sling.distribution.queue.spi.DistributionQueue;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 
 /**
  * A {@link DistributionPackageExporter) is responsible of exporting {@link DistributionPackage }s from a local or remote
@@ -51,8 +50,8 @@
      * @param distributionRequest the request containing the needed information for content to be exported
      * @param packageProcessor    a callback to process the exported package
      */
-    void exportPackages(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionRequest distributionRequest,
-                        @Nonnull DistributionPackageProcessor packageProcessor) throws DistributionException;
+    void exportPackages(@NotNull ResourceResolver resourceResolver, @NotNull DistributionRequest distributionRequest,
+                        @NotNull DistributionPackageProcessor packageProcessor) throws DistributionException;
 
     /**
      * Retrieves a {@link DistributionPackage} given its identifier, if it already exists.
@@ -63,6 +62,6 @@
      * @param distributionPackageId - the {@link DistributionPackage#getId() id of the package} to be retrieved
      * @return a {@link DistributionPackage} if available, {@code null} otherwise
      */
-    @CheckForNull
-    DistributionPackage getPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull String distributionPackageId) throws DistributionException;
+    @Nullable
+    DistributionPackage getPackage(@NotNull ResourceResolver resourceResolver, @NotNull String distributionPackageId) throws DistributionException;
 }
diff --git a/src/main/java/org/apache/sling/distribution/packaging/impl/DistributionPackageImporter.java b/src/main/java/org/apache/sling/distribution/packaging/impl/DistributionPackageImporter.java
index c7c65b7..8122566 100644
--- a/src/main/java/org/apache/sling/distribution/packaging/impl/DistributionPackageImporter.java
+++ b/src/main/java/org/apache/sling/distribution/packaging/impl/DistributionPackageImporter.java
@@ -18,14 +18,13 @@
  */
 package org.apache.sling.distribution.packaging.impl;
 
-import javax.annotation.Nonnull;
 import java.io.InputStream;
-
 import aQute.bnd.annotation.ConsumerType;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.distribution.common.DistributionException;
 import org.apache.sling.distribution.packaging.DistributionPackage;
 import org.apache.sling.distribution.packaging.DistributionPackageInfo;
+import org.jetbrains.annotations.NotNull;
 
 /**
  * A {@link DistributionPackageImporter} is responsible for importing {@link DistributionPackage}s into either a local
@@ -42,7 +41,7 @@
      * @param distributionPackage - the package to be imported
      * @throws DistributionException if any error occurs during import
      */
-    void importPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionPackage distributionPackage) throws DistributionException;
+    void importPackage(@NotNull ResourceResolver resourceResolver, @NotNull DistributionPackage distributionPackage) throws DistributionException;
 
     /**
      * Tries to convert an {@link java.io.InputStream} to a {@link DistributionPackage} and then imports it into the underlying system
@@ -52,7 +51,7 @@
      * @return a {@link DistributionPackageInfo} if the stream has been successfully converted and imported
      * @throws DistributionException when the stream cannot be read as a {@link DistributionPackage} and imported
      */
-    @Nonnull
-    DistributionPackageInfo importStream(@Nonnull ResourceResolver resourceResolver, @Nonnull InputStream stream) throws DistributionException;
+    @NotNull
+    DistributionPackageInfo importStream(@NotNull ResourceResolver resourceResolver, @NotNull InputStream stream) throws DistributionException;
 
 }
diff --git a/src/main/java/org/apache/sling/distribution/packaging/impl/DistributionPackageUtils.java b/src/main/java/org/apache/sling/distribution/packaging/impl/DistributionPackageUtils.java
index c334d39..72100e8 100644
--- a/src/main/java/org/apache/sling/distribution/packaging/impl/DistributionPackageUtils.java
+++ b/src/main/java/org/apache/sling/distribution/packaging/impl/DistributionPackageUtils.java
@@ -31,10 +31,10 @@
 import org.apache.sling.distribution.packaging.DistributionPackage;
 import org.apache.sling.distribution.packaging.DistributionPackageInfo;
 import org.apache.sling.distribution.queue.DistributionQueueItem;
+import org.jetbrains.annotations.NotNull;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.annotation.Nonnull;
 import javax.jcr.Binary;
 import javax.jcr.Node;
 import javax.jcr.Property;
@@ -300,7 +300,7 @@
     }
 
 
-    public static void acquire(Resource resource, @Nonnull String[] holderNames) throws RepositoryException {
+    public static void acquire(Resource resource, @NotNull String[] holderNames) throws RepositoryException {
         if (holderNames.length == 0) {
             throw new IllegalArgumentException("holder name cannot be null or empty");
         }
@@ -316,7 +316,7 @@
         }
     }
 
-    public static boolean disposable(@Nonnull Resource resource) throws RepositoryException {
+    public static boolean disposable(@NotNull Resource resource) throws RepositoryException {
         Node parent = resource.adaptTo(Node.class);
         if (parent.hasNode("refs")) {
             Node refs = parent.getNode("refs");
@@ -330,7 +330,7 @@
 
     }
 
-    public static void release(Resource resource, @Nonnull String[] holderNames) throws RepositoryException {
+    public static void release(Resource resource, @NotNull String[] holderNames) throws RepositoryException {
         if (holderNames.length == 0) {
             throw new IllegalArgumentException("holder name cannot be null or empty");
         }
@@ -351,7 +351,7 @@
         }
     }
 
-    public static void acquire(File file, @Nonnull String[] holderNames) throws IOException {
+    public static void acquire(File file, @NotNull String[] holderNames) throws IOException {
 
         if (holderNames.length == 0) {
             throw new IllegalArgumentException("holder name cannot be null or empty");
@@ -388,7 +388,7 @@
 
     }
 
-    public static boolean release(File file, @Nonnull String[] holderNames) throws IOException {
+    public static boolean release(File file, @NotNull String[] holderNames) throws IOException {
         if (holderNames.length == 0) {
             throw new IllegalArgumentException("holder name cannot be null or empty");
         }
diff --git a/src/main/java/org/apache/sling/distribution/packaging/impl/DistributionPackageWrapper.java b/src/main/java/org/apache/sling/distribution/packaging/impl/DistributionPackageWrapper.java
index 0b49541..6f88add 100644
--- a/src/main/java/org/apache/sling/distribution/packaging/impl/DistributionPackageWrapper.java
+++ b/src/main/java/org/apache/sling/distribution/packaging/impl/DistributionPackageWrapper.java
@@ -20,12 +20,11 @@
 package org.apache.sling.distribution.packaging.impl;
 
 
-import javax.annotation.Nonnull;
 import java.io.IOException;
 import java.io.InputStream;
-
 import org.apache.sling.distribution.packaging.DistributionPackage;
 import org.apache.sling.distribution.packaging.DistributionPackageInfo;
+import org.jetbrains.annotations.NotNull;
 
 /**
  * Package wrapper meant to be extended and provide just simple overridden methods.
@@ -40,17 +39,17 @@
         this.wrappedPackage = wrappedPackage;
     }
 
-    @Nonnull
+    @NotNull
     public String getId() {
         return wrappedPackage.getId();
     }
 
-    @Nonnull
+    @NotNull
     public String getType() {
         return wrappedPackage.getType();
     }
 
-    @Nonnull
+    @NotNull
     public InputStream createInputStream() throws IOException {
         return wrappedPackage.createInputStream();
     }
@@ -68,7 +67,7 @@
         wrappedPackage.delete();
     }
 
-    @Nonnull
+    @NotNull
     public DistributionPackageInfo getInfo() {
         return wrappedPackage.getInfo();
     }
diff --git a/src/main/java/org/apache/sling/distribution/packaging/impl/FileDistributionPackage.java b/src/main/java/org/apache/sling/distribution/packaging/impl/FileDistributionPackage.java
index 2a2b174..bca2d1b 100644
--- a/src/main/java/org/apache/sling/distribution/packaging/impl/FileDistributionPackage.java
+++ b/src/main/java/org/apache/sling/distribution/packaging/impl/FileDistributionPackage.java
@@ -18,9 +18,6 @@
  */
 package org.apache.sling.distribution.packaging.impl;
 
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-
 import java.io.BufferedInputStream;
 import java.io.File;
 import java.io.IOException;
@@ -30,6 +27,8 @@
 import org.apache.sling.distribution.DistributionRequestType;
 import org.apache.sling.distribution.packaging.DistributionPackage;
 import org.apache.sling.distribution.packaging.DistributionPackageInfo;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -41,8 +40,8 @@
 
     private final File file;
 
-    public FileDistributionPackage(@Nonnull File file,
-                                   @Nonnull String type,
+    public FileDistributionPackage(@NotNull File file,
+                                   @NotNull String type,
                                    @Nullable String digestAlgorithm,
                                    @Nullable String digestMessage) {
         super(file.getName(), type, digestAlgorithm, digestMessage);
@@ -51,7 +50,7 @@
         this.getInfo().put(DistributionPackageInfo.PROPERTY_REQUEST_TYPE, DistributionRequestType.ADD);
     }
 
-    @Nonnull
+    @NotNull
     public InputStream createInputStream() throws IOException {
         return new PackageInputStream(file);
     }
@@ -75,7 +74,7 @@
     }
 
     @Override
-    public void acquire(@Nonnull String... holderNames) {
+    public void acquire(@NotNull String... holderNames) {
         try {
             DistributionPackageUtils.acquire(getStatusFile(), holderNames);
         } catch (IOException e) {
@@ -84,7 +83,7 @@
     }
 
     @Override
-    public void release(@Nonnull String... holderNames) {
+    public void release(@NotNull String... holderNames) {
         try {
             boolean doDelete = DistributionPackageUtils.release(getStatusFile(), holderNames);
 
diff --git a/src/main/java/org/apache/sling/distribution/packaging/impl/FileDistributionPackageBuilder.java b/src/main/java/org/apache/sling/distribution/packaging/impl/FileDistributionPackageBuilder.java
index 5175aa8..a79a7a2 100644
--- a/src/main/java/org/apache/sling/distribution/packaging/impl/FileDistributionPackageBuilder.java
+++ b/src/main/java/org/apache/sling/distribution/packaging/impl/FileDistributionPackageBuilder.java
@@ -21,7 +21,6 @@
 
 import static java.util.UUID.randomUUID;
 
-import javax.annotation.Nonnull;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
@@ -32,7 +31,6 @@
 import java.util.List;
 import java.util.Map;
 import java.util.NavigableMap;
-
 import org.apache.commons.io.IOUtils;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.distribution.DistributionRequest;
@@ -43,6 +41,7 @@
 import org.apache.sling.distribution.serialization.DistributionExportFilter;
 import org.apache.sling.distribution.serialization.DistributionExportOptions;
 import org.apache.sling.distribution.serialization.impl.vlt.VltUtils;
+import org.jetbrains.annotations.NotNull;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -82,7 +81,7 @@
     }
 
     @Override
-    protected DistributionPackage createPackageForAdd(@Nonnull ResourceResolver resourceResolver, @Nonnull final DistributionRequest request) throws DistributionException {
+    protected DistributionPackage createPackageForAdd(@NotNull ResourceResolver resourceResolver, @NotNull final DistributionRequest request) throws DistributionException {
         DistributionPackage distributionPackage;
         OutputStream outputStream = null;
         String digestMessage = null;
@@ -116,7 +115,7 @@
     }
 
     @Override
-    protected DistributionPackage readPackageInternal(@Nonnull ResourceResolver resourceResolver, @Nonnull InputStream stream)
+    protected DistributionPackage readPackageInternal(@NotNull ResourceResolver resourceResolver, @NotNull InputStream stream)
             throws DistributionException {
         DistributionPackage distributionPackage;
         final File file;
@@ -152,7 +151,7 @@
     }
 
     @Override
-    protected boolean installPackageInternal(@Nonnull ResourceResolver resourceResolver, @Nonnull InputStream inputStream)
+    protected boolean installPackageInternal(@NotNull ResourceResolver resourceResolver, @NotNull InputStream inputStream)
             throws DistributionException {
         try {
             distributionContentSerializer.importFromStream(resourceResolver, inputStream);
@@ -163,7 +162,7 @@
     }
 
     @Override
-    protected DistributionPackage getPackageInternal(@Nonnull ResourceResolver resourceResolver, @Nonnull String id) {
+    protected DistributionPackage getPackageInternal(@NotNull ResourceResolver resourceResolver, @NotNull String id) {
         File file = new File(tempDirectory, id);
         if (!file.exists()) {
             log.warn("file package does not exist", file.getAbsolutePath());
diff --git a/src/main/java/org/apache/sling/distribution/packaging/impl/InMemoryDistributionPackage.java b/src/main/java/org/apache/sling/distribution/packaging/impl/InMemoryDistributionPackage.java
index 4f2920e..e3a7aed 100644
--- a/src/main/java/org/apache/sling/distribution/packaging/impl/InMemoryDistributionPackage.java
+++ b/src/main/java/org/apache/sling/distribution/packaging/impl/InMemoryDistributionPackage.java
@@ -22,10 +22,9 @@
 import java.io.IOException;
 import java.io.InputStream;
 
-import javax.annotation.Nonnull;
-
 import org.apache.sling.distribution.packaging.DistributionPackage;
 import org.apache.sling.distribution.packaging.DistributionPackageInfo;
+import org.jetbrains.annotations.NotNull;
 
 public class InMemoryDistributionPackage implements DistributionPackage {
 
@@ -47,19 +46,19 @@
         this.info = new DistributionPackageInfo(type);
     }
 
-    @Nonnull
+    @NotNull
     @Override
     public String getId() {
         return id;
     }
 
-    @Nonnull
+    @NotNull
     @Override
     public String getType() {
         return type;
     }
 
-    @Nonnull
+    @NotNull
     @Override
     public InputStream createInputStream() throws IOException {
         return new ByteArrayInputStream(data);
@@ -79,9 +78,9 @@
         // nothing to do
     }
 
-    @Nonnull
+    @NotNull
     @Override
     public DistributionPackageInfo getInfo() {
         return info;
     }
-}
\ No newline at end of file
+}
diff --git a/src/main/java/org/apache/sling/distribution/packaging/impl/InMemoryDistributionPackageBuilder.java b/src/main/java/org/apache/sling/distribution/packaging/impl/InMemoryDistributionPackageBuilder.java
index 3870c2a..d55b77e 100644
--- a/src/main/java/org/apache/sling/distribution/packaging/impl/InMemoryDistributionPackageBuilder.java
+++ b/src/main/java/org/apache/sling/distribution/packaging/impl/InMemoryDistributionPackageBuilder.java
@@ -28,9 +28,6 @@
 import java.util.NavigableMap;
 import java.util.UUID;
 
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-
 import org.apache.commons.io.IOUtils;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.distribution.DistributionRequest;
@@ -40,6 +37,8 @@
 import org.apache.sling.distribution.serialization.DistributionExportFilter;
 import org.apache.sling.distribution.serialization.DistributionExportOptions;
 import org.apache.sling.distribution.serialization.impl.vlt.VltUtils;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -56,8 +55,8 @@
 
     private final NavigableMap<String, List<String>> propertyFilters;
 
-    public InMemoryDistributionPackageBuilder(@Nonnull String type,
-                                              @Nonnull DistributionContentSerializer serializer,
+    public InMemoryDistributionPackageBuilder(@NotNull String type,
+                                              @NotNull DistributionContentSerializer serializer,
                                               @Nullable String[] nodeFilters,
                                               @Nullable String[] propertyFilters) {
         super(type);
@@ -67,8 +66,8 @@
     }
 
     @Override
-    protected DistributionPackage createPackageForAdd(@Nonnull ResourceResolver resourceResolver,
-                                                      @Nonnull DistributionRequest request)
+    protected DistributionPackage createPackageForAdd(@NotNull ResourceResolver resourceResolver,
+                                                      @NotNull DistributionRequest request)
             throws DistributionException {
 
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
@@ -80,8 +79,8 @@
     }
 
     @Override
-    protected DistributionPackage readPackageInternal(@Nonnull ResourceResolver resourceResolver,
-                                                      @Nonnull InputStream stream)
+    protected DistributionPackage readPackageInternal(@NotNull ResourceResolver resourceResolver,
+                                                      @NotNull InputStream stream)
             throws DistributionException {
 
         Map<String, Object> info = new HashMap<String, Object>();
@@ -110,8 +109,8 @@
     }
 
     @Override
-    protected boolean installPackageInternal(@Nonnull ResourceResolver resourceResolver,
-                                             @Nonnull InputStream inputStream)
+    protected boolean installPackageInternal(@NotNull ResourceResolver resourceResolver,
+                                             @NotNull InputStream inputStream)
             throws DistributionException {
         try {
             serializer.importFromStream(resourceResolver, inputStream);
@@ -122,17 +121,17 @@
     }
 
     @Override
-    protected DistributionPackage getPackageInternal(@Nonnull ResourceResolver resourceResolver,
-                                                     @Nonnull String id) {
+    protected DistributionPackage getPackageInternal(@NotNull ResourceResolver resourceResolver,
+                                                     @NotNull String id) {
         return null;
     }
 
-    private void export(@Nonnull ResourceResolver resourceResolver,
-                        @Nonnull final DistributionRequest request,
-                        @Nonnull OutputStream outputStream)
+    private void export(@NotNull ResourceResolver resourceResolver,
+                        @NotNull final DistributionRequest request,
+                        @NotNull OutputStream outputStream)
             throws DistributionException {
         final DistributionExportFilter filter = serializer.isRequestFiltering() ? null : DistributionExportFilter.createFilter(request, nodeFilters, propertyFilters);
         DistributionExportOptions distributionExportOptions = new DistributionExportOptions(request, filter);
         serializer.exportToStream(resourceResolver, distributionExportOptions, outputStream);
     }
-}
\ No newline at end of file
+}
diff --git a/src/main/java/org/apache/sling/distribution/packaging/impl/ReferencePackage.java b/src/main/java/org/apache/sling/distribution/packaging/impl/ReferencePackage.java
index 8edb336..e15bf83 100644
--- a/src/main/java/org/apache/sling/distribution/packaging/impl/ReferencePackage.java
+++ b/src/main/java/org/apache/sling/distribution/packaging/impl/ReferencePackage.java
@@ -18,15 +18,13 @@
  */
 package org.apache.sling.distribution.packaging.impl;
 
-import javax.annotation.CheckForNull;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 
 import org.apache.sling.distribution.packaging.DistributionPackage;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 
 /**
  * A reference package wraps an actual {@link DistributionPackage} providing a reference to it
@@ -46,20 +44,20 @@
     }
 
     @Override
-    public void acquire(@Nonnull String... holderNames) {
+    public void acquire(@NotNull String... holderNames) {
         if (distributionPackage instanceof AbstractDistributionPackage) {
             ((AbstractDistributionPackage) distributionPackage).acquire(holderNames);
         }
     }
 
     @Override
-    public void release(@Nonnull String... holderNames) {
+    public void release(@NotNull String... holderNames) {
         if (distributionPackage instanceof AbstractDistributionPackage) {
             ((AbstractDistributionPackage) distributionPackage).release(holderNames);
         }
     }
 
-    @Nonnull
+    @NotNull
     @Override
     public InputStream createInputStream() throws IOException {
         return new ByteArrayInputStream(reference.getBytes());
@@ -80,13 +78,13 @@
         distributionPackage.delete();
     }
 
-    @Nonnull
+    @NotNull
     @Override
     public String getType() {
         return getInfo().getType();
     }
 
-    @Nonnull
+    @NotNull
     @Override
     public String getId() {
         return reference;
@@ -113,7 +111,7 @@
         return string.startsWith(REFERENCE_PREFIX);
     }
 
-    @CheckForNull
+    @Nullable
     public static String idFromReference(String reference) {
         return isReference(reference) ? reference.substring(REFERENCE_PREFIX.length()) : null;
     }
diff --git a/src/main/java/org/apache/sling/distribution/packaging/impl/ResourceDistributionPackage.java b/src/main/java/org/apache/sling/distribution/packaging/impl/ResourceDistributionPackage.java
index 250a863..d94ec7b 100644
--- a/src/main/java/org/apache/sling/distribution/packaging/impl/ResourceDistributionPackage.java
+++ b/src/main/java/org/apache/sling/distribution/packaging/impl/ResourceDistributionPackage.java
@@ -18,8 +18,6 @@
  */
 package org.apache.sling.distribution.packaging.impl;
 
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
 import javax.jcr.RepositoryException;
 import java.io.BufferedInputStream;
 import java.io.IOException;
@@ -32,6 +30,8 @@
 import org.apache.sling.distribution.DistributionRequestType;
 import org.apache.sling.distribution.packaging.DistributionPackage;
 import org.apache.sling.distribution.packaging.DistributionPackageInfo;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -62,7 +62,7 @@
         this.getInfo().put(DistributionPackageInfo.PROPERTY_REQUEST_TYPE, DistributionRequestType.ADD);
     }
 
-    @Nonnull
+    @NotNull
     @Override
     public InputStream createInputStream() throws IOException {
         try {
@@ -88,7 +88,7 @@
     }
 
     @Override
-    public void acquire(@Nonnull String... holderNames) {
+    public void acquire(@NotNull String... holderNames) {
         try {
             DistributionPackageUtils.acquire(resource, holderNames);
             if (resourceResolver.hasChanges()) {
@@ -103,7 +103,7 @@
     }
 
     @Override
-    public void release(@Nonnull String... holderNames) {
+    public void release(@NotNull String... holderNames) {
         try {
             DistributionPackageUtils.release(resource, holderNames);
             if (resourceResolver.hasChanges()) {
@@ -135,4 +135,4 @@
             throw new RuntimeException(e);
         }
     }
-}
\ No newline at end of file
+}
diff --git a/src/main/java/org/apache/sling/distribution/packaging/impl/ResourceDistributionPackageBuilder.java b/src/main/java/org/apache/sling/distribution/packaging/impl/ResourceDistributionPackageBuilder.java
index 70a5186..919d3d9 100644
--- a/src/main/java/org/apache/sling/distribution/packaging/impl/ResourceDistributionPackageBuilder.java
+++ b/src/main/java/org/apache/sling/distribution/packaging/impl/ResourceDistributionPackageBuilder.java
@@ -34,7 +34,6 @@
 import java.util.NavigableMap;
 import java.util.UUID;
 
-import javax.annotation.Nonnull;
 import javax.jcr.RepositoryException;
 
 import org.apache.commons.io.IOUtils;
@@ -51,6 +50,7 @@
 import org.apache.sling.distribution.serialization.impl.vlt.VltUtils;
 import org.apache.sling.distribution.util.impl.FileBackedMemoryOutputStream;
 import org.apache.sling.distribution.util.impl.FileBackedMemoryOutputStream.MemoryUnit;
+import org.jetbrains.annotations.NotNull;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -90,7 +90,7 @@
     }
 
     @Override
-    protected DistributionPackage createPackageForAdd(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionRequest request) throws DistributionException {
+    protected DistributionPackage createPackageForAdd(@NotNull ResourceResolver resourceResolver, @NotNull DistributionRequest request) throws DistributionException {
         DistributionPackage distributionPackage;
 
         try {
@@ -138,14 +138,14 @@
         return distributionPackage;
     }
 
-    private void export(@Nonnull ResourceResolver resourceResolver, @Nonnull final DistributionRequest request, OutputStream outputStream) throws DistributionException {
+    private void export(@NotNull ResourceResolver resourceResolver, @NotNull final DistributionRequest request, OutputStream outputStream) throws DistributionException {
         final DistributionExportFilter filter = distributionContentSerializer.isRequestFiltering() ? null : DistributionExportFilter.createFilter(request, nodeFilters, propertyFilters);
         DistributionExportOptions distributionExportOptions = new DistributionExportOptions(request, filter);
         distributionContentSerializer.exportToStream(resourceResolver, distributionExportOptions, outputStream);
     }
 
     @Override
-    protected DistributionPackage readPackageInternal(@Nonnull ResourceResolver resourceResolver, @Nonnull InputStream inputStream)
+    protected DistributionPackage readPackageInternal(@NotNull ResourceResolver resourceResolver, @NotNull InputStream inputStream)
             throws DistributionException {
         try {
             Resource packagesRoot = DistributionPackageUtils.getPackagesRoot(resourceResolver, packagesPath);
@@ -158,7 +158,7 @@
     }
 
     @Override
-    protected boolean installPackageInternal(@Nonnull ResourceResolver resourceResolver, @Nonnull InputStream inputStream)
+    protected boolean installPackageInternal(@NotNull ResourceResolver resourceResolver, @NotNull InputStream inputStream)
             throws DistributionException {
         try {
             distributionContentSerializer.importFromStream(resourceResolver, inputStream);
@@ -169,7 +169,7 @@
     }
 
     @Override
-    protected DistributionPackage getPackageInternal(@Nonnull ResourceResolver resourceResolver, @Nonnull String id) {
+    protected DistributionPackage getPackageInternal(@NotNull ResourceResolver resourceResolver, @NotNull String id) {
         try {
             Resource packagesRoot = DistributionPackageUtils.getPackagesRoot(resourceResolver, packagesPath);
             Resource packageResource = packagesRoot.getChild(id);
@@ -238,8 +238,8 @@
         return resource;
     }
 
-    @Nonnull
-    public Iterator<ResourceDistributionPackage> getPackages(@Nonnull ResourceResolver resourceResolver)
+    @NotNull
+    public Iterator<ResourceDistributionPackage> getPackages(@NotNull ResourceResolver resourceResolver)
             throws DistributionException {
         try {
             Resource packagesRoot = DistributionPackageUtils.getPackagesRoot(resourceResolver, packagesPath);
@@ -257,8 +257,8 @@
 
         final String type;
 
-        private ResourceDistributionPackageIterator(@Nonnull Resource packagesRoot, @Nonnull ResourceResolver resourceResolver,
-                                            @Nonnull String type) {
+        private ResourceDistributionPackageIterator(@NotNull Resource packagesRoot, @NotNull ResourceResolver resourceResolver,
+                                            @NotNull String type) {
             this.packages = packagesRoot.listChildren();
             this.resourceResolver = resourceResolver;
             this.type = type;
diff --git a/src/main/java/org/apache/sling/distribution/packaging/impl/ResourceDistributionPackageCleanup.java b/src/main/java/org/apache/sling/distribution/packaging/impl/ResourceDistributionPackageCleanup.java
index dd592de..1a0e65f 100644
--- a/src/main/java/org/apache/sling/distribution/packaging/impl/ResourceDistributionPackageCleanup.java
+++ b/src/main/java/org/apache/sling/distribution/packaging/impl/ResourceDistributionPackageCleanup.java
@@ -21,13 +21,12 @@
 
 import java.util.Iterator;
 
-import javax.annotation.Nonnull;
-
 import org.apache.sling.api.resource.LoginException;
 import org.apache.sling.api.resource.PersistenceException;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.resource.ResourceResolverFactory;
 import org.apache.sling.distribution.common.DistributionException;
+import org.jetbrains.annotations.NotNull;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -46,8 +45,8 @@
 
     private final ResourceResolverFactory resolverFactory;
 
-    public ResourceDistributionPackageCleanup(@Nonnull ResourceResolverFactory resolverFactory,
-                                              @Nonnull ResourceDistributionPackageBuilder packageBuilder) {
+    public ResourceDistributionPackageCleanup(@NotNull ResourceResolverFactory resolverFactory,
+                                              @NotNull ResourceDistributionPackageBuilder packageBuilder) {
         this.resolverFactory = resolverFactory;
         this.packageBuilder = packageBuilder;
     }
diff --git a/src/main/java/org/apache/sling/distribution/packaging/impl/SharedDistributionPackage.java b/src/main/java/org/apache/sling/distribution/packaging/impl/SharedDistributionPackage.java
index 020307d..a48b11b 100644
--- a/src/main/java/org/apache/sling/distribution/packaging/impl/SharedDistributionPackage.java
+++ b/src/main/java/org/apache/sling/distribution/packaging/impl/SharedDistributionPackage.java
@@ -18,10 +18,9 @@
  */
 package org.apache.sling.distribution.packaging.impl;
 
-import javax.annotation.Nonnull;
-
 import aQute.bnd.annotation.ProviderType;
 import org.apache.sling.distribution.packaging.DistributionPackage;
+import org.jetbrains.annotations.NotNull;
 
 /**
  * A {@link DistributionPackage} that offers basic reference counting.
@@ -33,12 +32,12 @@
     /**
      * acquire a reference to this package and increase the reference count.
      */
-    void acquire(@Nonnull String... holderNames);
+    void acquire(@NotNull String... holderNames);
 
     /**
      * release a reference to this package and decrease the reference count.
      * when no more references are hold the package {@code DistributionPackage#delete} method will be invoked.
      */
-    void release(@Nonnull String... holderNames);
+    void release(@NotNull String... holderNames);
 
 }
diff --git a/src/main/java/org/apache/sling/distribution/packaging/impl/SimpleDistributionPackage.java b/src/main/java/org/apache/sling/distribution/packaging/impl/SimpleDistributionPackage.java
index 88b686f..690140c 100644
--- a/src/main/java/org/apache/sling/distribution/packaging/impl/SimpleDistributionPackage.java
+++ b/src/main/java/org/apache/sling/distribution/packaging/impl/SimpleDistributionPackage.java
@@ -18,17 +18,16 @@
  */
 package org.apache.sling.distribution.packaging.impl;
 
-import javax.annotation.Nonnull;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.regex.Pattern;
-
 import org.apache.commons.io.IOUtils;
 import org.apache.sling.distribution.DistributionRequest;
 import org.apache.sling.distribution.DistributionRequestType;
 import org.apache.sling.distribution.SimpleDistributionRequest;
 import org.apache.sling.distribution.packaging.DistributionPackage;
 import org.apache.sling.distribution.packaging.DistributionPackageInfo;
+import org.jetbrains.annotations.NotNull;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -109,7 +108,7 @@
     }
 
 
-    @Nonnull
+    @NotNull
     public InputStream createInputStream() throws IOException {
         return IOUtils.toInputStream(getId(), "UTF-8");
     }
@@ -156,12 +155,12 @@
     }
 
     @Override
-    public void acquire(@Nonnull String... holderNames) {
+    public void acquire(@NotNull String... holderNames) {
 
     }
 
     @Override
-    public void release(@Nonnull String... holderNames) {
+    public void release(@NotNull String... holderNames) {
 
     }
 }
diff --git a/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporter.java b/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporter.java
index 272227e..17bb7ed 100644
--- a/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporter.java
+++ b/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporter.java
@@ -18,8 +18,6 @@
  */
 package org.apache.sling.distribution.packaging.impl.exporter;
 
-import javax.annotation.Nonnull;
-
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.distribution.DistributionRequest;
 import org.apache.sling.distribution.DistributionRequestType;
@@ -39,6 +37,7 @@
 import org.apache.sling.distribution.packaging.impl.DistributionPackageBuilderProvider;
 import org.apache.sling.distribution.packaging.impl.DistributionPackageWrapper;
 import org.apache.sling.distribution.packaging.impl.SimpleDistributionPackage;
+import org.jetbrains.annotations.NotNull;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -69,7 +68,7 @@
         this.agent = agent;
     }
 
-    public void exportPackages(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionRequest distributionRequest, @Nonnull DistributionPackageProcessor packageProcessor) throws DistributionException {
+    public void exportPackages(@NotNull ResourceResolver resourceResolver, @NotNull DistributionRequest distributionRequest, @NotNull DistributionPackageProcessor packageProcessor) throws DistributionException {
 
         if (DistributionRequestType.TEST.equals(distributionRequest.getRequestType())) {
             packageProcessor.process(new SimpleDistributionPackage(distributionRequest, PACKAGE_TYPE));
@@ -118,7 +117,7 @@
         }
     }
 
-    public DistributionPackage getPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull String distributionPackageId) {
+    public DistributionPackage getPackage(@NotNull ResourceResolver resourceResolver, @NotNull String distributionPackageId) {
 
         try {
             log.debug("getting package from queue {}", queueName);
@@ -174,7 +173,7 @@
             agentLog("exported package {} with info {} from queue {} by exporter {}", new Object[] {itemId, distributionPackage.getInfo(), queue.getName(), name});
         }
 
-        @Nonnull
+        @NotNull
         @Override
         public String getId() {
             return itemId;
@@ -189,8 +188,8 @@
         }
     }
 
-    @Nonnull
-    private DistributionQueue getQueueOrThrow(@Nonnull String queueName)
+    @NotNull
+    private DistributionQueue getQueueOrThrow(@NotNull String queueName)
             throws DistributionException {
         DistributionQueue queue = agent.getQueue(queueName);
         if (queue == null) {
diff --git a/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporterFactory.java b/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporterFactory.java
index 8671c0d..e4490f6 100644
--- a/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporterFactory.java
+++ b/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporterFactory.java
@@ -20,8 +20,6 @@
 
 import java.util.Map;
 
-import javax.annotation.Nonnull;
-
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.ConfigurationPolicy;
@@ -40,6 +38,7 @@
 import org.apache.sling.distribution.packaging.impl.DistributionPackageExporter;
 import org.apache.sling.distribution.packaging.impl.DistributionPackageProcessor;
 import org.apache.sling.distribution.queue.impl.DistributionQueueDispatchingStrategy;
+import org.jetbrains.annotations.NotNull;
 
 /**
  * OSGi configuration factory for {@link AgentDistributionPackageExporter}s
@@ -90,11 +89,11 @@
         packageExporter = new AgentDistributionPackageExporter(queueName, agent, packageBuilderProvider, name, dropInvalidItems);
     }
 
-    public void exportPackages(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionRequest distributionRequest, @Nonnull DistributionPackageProcessor packageProcessor) throws DistributionException {
+    public void exportPackages(@NotNull ResourceResolver resourceResolver, @NotNull DistributionRequest distributionRequest, @NotNull DistributionPackageProcessor packageProcessor) throws DistributionException {
         packageExporter.exportPackages(resourceResolver, distributionRequest, packageProcessor);
     }
 
-    public DistributionPackage getPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull String distributionPackageId) throws DistributionException {
+    public DistributionPackage getPackage(@NotNull ResourceResolver resourceResolver, @NotNull String distributionPackageId) throws DistributionException {
         return packageExporter.getPackage(resourceResolver, distributionPackageId);
     }
 
diff --git a/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/LocalDistributionPackageExporter.java b/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/LocalDistributionPackageExporter.java
index 03a6243..996b47b 100644
--- a/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/LocalDistributionPackageExporter.java
+++ b/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/LocalDistributionPackageExporter.java
@@ -18,8 +18,6 @@
  */
 package org.apache.sling.distribution.packaging.impl.exporter;
 
-import javax.annotation.Nonnull;
-
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.distribution.DistributionRequest;
 import org.apache.sling.distribution.common.DistributionException;
@@ -28,6 +26,7 @@
 import org.apache.sling.distribution.packaging.DistributionPackage;
 import org.apache.sling.distribution.packaging.impl.DistributionPackageExporter;
 import org.apache.sling.distribution.packaging.DistributionPackageBuilder;
+import org.jetbrains.annotations.NotNull;
 
 /**
  * {@link DistributionPackageExporter} implementation which creates a
@@ -41,7 +40,7 @@
         this.packageBuilder = packageBuilder;
     }
 
-    public void exportPackages(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionRequest distributionRequest, @Nonnull DistributionPackageProcessor packageProcessor) throws DistributionException {
+    public void exportPackages(@NotNull ResourceResolver resourceResolver, @NotNull DistributionRequest distributionRequest, @NotNull DistributionPackageProcessor packageProcessor) throws DistributionException {
         DistributionPackage createdPackage = packageBuilder.createPackage(resourceResolver, distributionRequest);
 
         try {
@@ -51,7 +50,7 @@
         }
     }
 
-    public DistributionPackage getPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull String distributionPackageId) throws DistributionException {
+    public DistributionPackage getPackage(@NotNull ResourceResolver resourceResolver, @NotNull String distributionPackageId) throws DistributionException {
         return packageBuilder.getPackage(resourceResolver, distributionPackageId);
     }
 }
diff --git a/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/LocalDistributionPackageExporterFactory.java b/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/LocalDistributionPackageExporterFactory.java
index 6b16f84..ca6663d 100644
--- a/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/LocalDistributionPackageExporterFactory.java
+++ b/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/LocalDistributionPackageExporterFactory.java
@@ -20,8 +20,6 @@
 
 import java.util.Map;
 
-import javax.annotation.Nonnull;
-
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.ConfigurationPolicy;
@@ -36,6 +34,7 @@
 import org.apache.sling.distribution.packaging.DistributionPackageBuilder;
 import org.apache.sling.distribution.packaging.impl.DistributionPackageExporter;
 import org.apache.sling.distribution.packaging.impl.DistributionPackageProcessor;
+import org.jetbrains.annotations.NotNull;
 
 /**
  * OSGi configuration factory for {@link LocalDistributionPackageExporter}s.
@@ -67,11 +66,11 @@
         exporter = new LocalDistributionPackageExporter(packageBuilder);
     }
 
-    public void exportPackages(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionRequest distributionRequest, @Nonnull DistributionPackageProcessor packageProcessor) throws DistributionException {
+    public void exportPackages(@NotNull ResourceResolver resourceResolver, @NotNull DistributionRequest distributionRequest, @NotNull DistributionPackageProcessor packageProcessor) throws DistributionException {
         exporter.exportPackages(resourceResolver, distributionRequest, packageProcessor);
     }
 
-    public DistributionPackage getPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull String distributionPackageId) throws DistributionException {
+    public DistributionPackage getPackage(@NotNull ResourceResolver resourceResolver, @NotNull String distributionPackageId) throws DistributionException {
         return exporter.getPackage(resourceResolver, distributionPackageId);
     }
 }
diff --git a/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/RemoteDistributionPackageExporter.java b/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/RemoteDistributionPackageExporter.java
index 2eea5fd..6dc60f0 100644
--- a/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/RemoteDistributionPackageExporter.java
+++ b/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/RemoteDistributionPackageExporter.java
@@ -18,10 +18,8 @@
  */
 package org.apache.sling.distribution.packaging.impl.exporter;
 
-import javax.annotation.Nonnull;
 import java.util.ArrayList;
 import java.util.List;
-
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.distribution.DistributionRequest;
 import org.apache.sling.distribution.DistributionRequestType;
@@ -34,6 +32,7 @@
 import org.apache.sling.distribution.packaging.DistributionPackageBuilder;
 import org.apache.sling.distribution.transport.DistributionTransportSecretProvider;
 import org.apache.sling.distribution.transport.impl.*;
+import org.jetbrains.annotations.NotNull;
 
 /**
  * Remote implementation of {@link DistributionPackageExporter}
@@ -69,7 +68,7 @@
         }
     }
 
-    public void exportPackages(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionRequest distributionRequest, @Nonnull DistributionPackageProcessor packageProcessor) throws DistributionException {
+    public void exportPackages(@NotNull ResourceResolver resourceResolver, @NotNull DistributionRequest distributionRequest, @NotNull DistributionPackageProcessor packageProcessor) throws DistributionException {
         int maxNumberOfPackages = DistributionRequestType.PULL.equals(distributionRequest.getRequestType()) ? maxPullItems : 1;
         for (DistributionTransport distributionTransport : transportHandlers) {
             int noPackages = 0;
@@ -93,7 +92,7 @@
         }
     }
 
-    public DistributionPackage getPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull String distributionPackageId) throws DistributionException {
+    public DistributionPackage getPackage(@NotNull ResourceResolver resourceResolver, @NotNull String distributionPackageId) throws DistributionException {
         return packageBuilder.getPackage(resourceResolver, distributionPackageId);
     }
 }
diff --git a/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/RemoteDistributionPackageExporterFactory.java b/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/RemoteDistributionPackageExporterFactory.java
index dd78351..9cc995d 100644
--- a/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/RemoteDistributionPackageExporterFactory.java
+++ b/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/RemoteDistributionPackageExporterFactory.java
@@ -18,9 +18,7 @@
  */
 package org.apache.sling.distribution.packaging.impl.exporter;
 
-import javax.annotation.Nonnull;
 import java.util.Map;
-
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.ConfigurationPolicy;
@@ -42,6 +40,7 @@
 import org.apache.sling.distribution.packaging.DistributionPackageBuilder;
 import org.apache.sling.distribution.transport.DistributionTransportSecretProvider;
 import org.apache.sling.distribution.transport.impl.HttpConfiguration;
+import org.jetbrains.annotations.NotNull;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -120,11 +119,11 @@
         exporter = null;
     }
 
-    public void exportPackages(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionRequest distributionRequest, @Nonnull DistributionPackageProcessor packageProcessor) throws DistributionException {
+    public void exportPackages(@NotNull ResourceResolver resourceResolver, @NotNull DistributionRequest distributionRequest, @NotNull DistributionPackageProcessor packageProcessor) throws DistributionException {
         exporter.exportPackages(resourceResolver, distributionRequest, packageProcessor);
     }
 
-    public DistributionPackage getPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull String distributionPackageId) throws DistributionException {
+    public DistributionPackage getPackage(@NotNull ResourceResolver resourceResolver, @NotNull String distributionPackageId) throws DistributionException {
         return exporter.getPackage(resourceResolver, distributionPackageId);
     }
 
diff --git a/src/main/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporter.java b/src/main/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporter.java
index 9ac3c48..3375ad4 100644
--- a/src/main/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporter.java
+++ b/src/main/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporter.java
@@ -18,13 +18,11 @@
  */
 package org.apache.sling.distribution.packaging.impl.importer;
 
-import javax.annotation.Nonnull;
 import java.io.BufferedInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.HashMap;
 import java.util.Map;
-
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.distribution.common.DistributionException;
 import org.apache.sling.distribution.component.impl.DistributionComponentKind;
@@ -36,6 +34,7 @@
 import org.apache.sling.distribution.packaging.DistributionPackageInfo;
 import org.apache.sling.distribution.packaging.impl.DistributionPackageUtils;
 import org.apache.sling.distribution.packaging.impl.ReferencePackage;
+import org.jetbrains.annotations.NotNull;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -73,7 +72,7 @@
     }
 
     @Override
-    public void importPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionPackage distributionPackage) throws DistributionException {
+    public void importPackage(@NotNull ResourceResolver resourceResolver, @NotNull DistributionPackage distributionPackage) throws DistributionException {
         boolean success = packageBuilder.installPackage(resourceResolver, distributionPackage);
 
         if (!success) {
@@ -84,8 +83,8 @@
     }
 
     @Override
-    @Nonnull
-    public DistributionPackageInfo importStream(@Nonnull ResourceResolver resourceResolver, @Nonnull InputStream stream) throws DistributionException {
+    @NotNull
+    public DistributionPackageInfo importStream(@NotNull ResourceResolver resourceResolver, @NotNull InputStream stream) throws DistributionException {
         if (!stream.markSupported()) {
             stream = new BufferedInputStream(stream);
         }
diff --git a/src/main/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporterFactory.java b/src/main/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporterFactory.java
index fe23775..381d69c 100644
--- a/src/main/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporterFactory.java
+++ b/src/main/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporterFactory.java
@@ -18,10 +18,8 @@
  */
 package org.apache.sling.distribution.packaging.impl.importer;
 
-import javax.annotation.Nonnull;
 import java.io.InputStream;
 import java.util.Map;
-
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.ConfigurationPolicy;
@@ -38,6 +36,7 @@
 import org.apache.sling.distribution.packaging.impl.DistributionPackageImporter;
 import org.apache.sling.distribution.packaging.DistributionPackageInfo;
 import org.apache.sling.distribution.packaging.DistributionPackageBuilder;
+import org.jetbrains.annotations.NotNull;
 
 /**
  * OSGi configuration factory for {@link LocalDistributionPackageImporter}s.
@@ -73,12 +72,12 @@
     }
 
 
-    public void importPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionPackage distributionPackage) throws DistributionException {
+    public void importPackage(@NotNull ResourceResolver resourceResolver, @NotNull DistributionPackage distributionPackage) throws DistributionException {
         importer.importPackage(resourceResolver, distributionPackage);
     }
 
-    @Nonnull
-    public DistributionPackageInfo importStream(@Nonnull ResourceResolver resourceResolver, @Nonnull InputStream stream) throws DistributionException {
+    @NotNull
+    public DistributionPackageInfo importStream(@NotNull ResourceResolver resourceResolver, @NotNull InputStream stream) throws DistributionException {
         return importer.importStream(resourceResolver, stream);
     }
 
diff --git a/src/main/java/org/apache/sling/distribution/packaging/impl/importer/RemoteDistributionPackageImporter.java b/src/main/java/org/apache/sling/distribution/packaging/impl/importer/RemoteDistributionPackageImporter.java
index 6fed1eb..17e102c 100644
--- a/src/main/java/org/apache/sling/distribution/packaging/impl/importer/RemoteDistributionPackageImporter.java
+++ b/src/main/java/org/apache/sling/distribution/packaging/impl/importer/RemoteDistributionPackageImporter.java
@@ -18,11 +18,9 @@
  */
 package org.apache.sling.distribution.packaging.impl.importer;
 
-import javax.annotation.Nonnull;
 import java.io.InputStream;
 import java.util.HashMap;
 import java.util.Map;
-
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.distribution.common.DistributionException;
 import org.apache.sling.distribution.log.impl.DefaultDistributionLog;
@@ -32,6 +30,7 @@
 import org.apache.sling.distribution.packaging.DistributionPackageInfo;
 import org.apache.sling.distribution.transport.DistributionTransportSecretProvider;
 import org.apache.sling.distribution.transport.impl.*;
+import org.jetbrains.annotations.NotNull;
 
 /**
  * Remote implementation of {@link DistributionPackageImporter}
@@ -57,7 +56,7 @@
         }
     }
 
-    public void importPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionPackage distributionPackage) throws DistributionException {
+    public void importPackage(@NotNull ResourceResolver resourceResolver, @NotNull DistributionPackage distributionPackage) throws DistributionException {
         DistributionPackageInfo info = distributionPackage.getInfo();
         String queueName = DistributionPackageUtils.getQueueName(info);
 
@@ -72,8 +71,8 @@
         }
     }
 
-    @Nonnull
-    public DistributionPackageInfo importStream(@Nonnull ResourceResolver resourceResolver, @Nonnull InputStream stream) throws DistributionException {
+    @NotNull
+    public DistributionPackageInfo importStream(@NotNull ResourceResolver resourceResolver, @NotNull InputStream stream) throws DistributionException {
         throw new DistributionException("not supported");
     }
 
diff --git a/src/main/java/org/apache/sling/distribution/packaging/impl/importer/RemoteDistributionPackageImporterFactory.java b/src/main/java/org/apache/sling/distribution/packaging/impl/importer/RemoteDistributionPackageImporterFactory.java
index 822fb44..21e3db7 100644
--- a/src/main/java/org/apache/sling/distribution/packaging/impl/importer/RemoteDistributionPackageImporterFactory.java
+++ b/src/main/java/org/apache/sling/distribution/packaging/impl/importer/RemoteDistributionPackageImporterFactory.java
@@ -21,8 +21,6 @@
 import java.io.InputStream;
 import java.util.Map;
 
-import javax.annotation.Nonnull;
-
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.ConfigurationPolicy;
@@ -41,6 +39,7 @@
 import org.apache.sling.distribution.packaging.DistributionPackageInfo;
 import org.apache.sling.distribution.transport.DistributionTransportSecretProvider;
 import org.apache.sling.distribution.transport.impl.HttpConfiguration;
+import org.jetbrains.annotations.NotNull;
 
 /**
  * OSGi configuration factory for {@link RemoteDistributionPackageImporter}s.
@@ -91,12 +90,12 @@
 
     }
 
-    public void importPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionPackage distributionPackage) throws DistributionException {
+    public void importPackage(@NotNull ResourceResolver resourceResolver, @NotNull DistributionPackage distributionPackage) throws DistributionException {
         importer.importPackage(resourceResolver, distributionPackage);
     }
 
-    @Nonnull
-    public DistributionPackageInfo importStream(@Nonnull ResourceResolver resourceResolver, @Nonnull InputStream stream) throws DistributionException {
+    @NotNull
+    public DistributionPackageInfo importStream(@NotNull ResourceResolver resourceResolver, @NotNull InputStream stream) throws DistributionException {
         return importer.importStream(resourceResolver, stream);
     }
 }
diff --git a/src/main/java/org/apache/sling/distribution/packaging/impl/importer/RepositoryDistributionPackageImporter.java b/src/main/java/org/apache/sling/distribution/packaging/impl/importer/RepositoryDistributionPackageImporter.java
index 246a6d6..15e767d 100644
--- a/src/main/java/org/apache/sling/distribution/packaging/impl/importer/RepositoryDistributionPackageImporter.java
+++ b/src/main/java/org/apache/sling/distribution/packaging/impl/importer/RepositoryDistributionPackageImporter.java
@@ -18,7 +18,6 @@
  */
 package org.apache.sling.distribution.packaging.impl.importer;
 
-import javax.annotation.Nonnull;
 import javax.jcr.Node;
 import javax.jcr.Session;
 import javax.jcr.nodetype.NodeType;
@@ -35,6 +34,7 @@
 import org.apache.sling.distribution.packaging.impl.DistributionPackageImporter;
 import org.apache.sling.distribution.packaging.DistributionPackageInfo;
 import org.apache.sling.jcr.api.SlingRepository;
+import org.jetbrains.annotations.NotNull;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -60,7 +60,7 @@
         this.privilegeName = privilegeName;
     }
 
-    public void importPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionPackage distributionPackage) throws DistributionException {
+    public void importPackage(@NotNull ResourceResolver resourceResolver, @NotNull DistributionPackage distributionPackage) throws DistributionException {
 
         Session session = null;
         try {
@@ -99,8 +99,8 @@
         }
     }
 
-    @Nonnull
-    public DistributionPackageInfo importStream(@Nonnull ResourceResolver resourceResolver, @Nonnull InputStream stream) throws DistributionException {
+    @NotNull
+    public DistributionPackageInfo importStream(@NotNull ResourceResolver resourceResolver, @NotNull InputStream stream) throws DistributionException {
         throw new DistributionException("not supported");
     }
 
diff --git a/src/main/java/org/apache/sling/distribution/packaging/impl/importer/RepositoryDistributionPackageImporterFactory.java b/src/main/java/org/apache/sling/distribution/packaging/impl/importer/RepositoryDistributionPackageImporterFactory.java
index 956b144..cc4f15e 100644
--- a/src/main/java/org/apache/sling/distribution/packaging/impl/importer/RepositoryDistributionPackageImporterFactory.java
+++ b/src/main/java/org/apache/sling/distribution/packaging/impl/importer/RepositoryDistributionPackageImporterFactory.java
@@ -21,8 +21,6 @@
 import java.io.InputStream;
 import java.util.Map;
 
-import javax.annotation.Nonnull;
-
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.ConfigurationPolicy;
@@ -37,6 +35,7 @@
 import org.apache.sling.distribution.packaging.impl.DistributionPackageImporter;
 import org.apache.sling.distribution.packaging.DistributionPackageInfo;
 import org.apache.sling.jcr.api.SlingRepository;
+import org.jetbrains.annotations.NotNull;
 
 /**
  * OSGi configuration factory for {@link RepositoryDistributionPackageImporter}s.
@@ -79,13 +78,13 @@
                 PropertiesUtil.toString(config.get(PRIVILEGE_NAME), "jcr:read"));
     }
 
-    public void importPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionPackage distributionPackage) throws DistributionException {
+    public void importPackage(@NotNull ResourceResolver resourceResolver, @NotNull DistributionPackage distributionPackage) throws DistributionException {
         importer.importPackage(resourceResolver, distributionPackage);
 
     }
 
-    @Nonnull
-    public DistributionPackageInfo importStream(@Nonnull ResourceResolver resourceResolver, @Nonnull InputStream stream) throws DistributionException {
+    @NotNull
+    public DistributionPackageInfo importStream(@NotNull ResourceResolver resourceResolver, @NotNull InputStream stream) throws DistributionException {
         return importer.importStream(resourceResolver, stream);
     }
 }
diff --git a/src/main/java/org/apache/sling/distribution/packaging/package-info.java b/src/main/java/org/apache/sling/distribution/packaging/package-info.java
index 44371f0..8f378be 100644
--- a/src/main/java/org/apache/sling/distribution/packaging/package-info.java
+++ b/src/main/java/org/apache/sling/distribution/packaging/package-info.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-@Version("0.0.0")
+@Version("0.0.1")
 package org.apache.sling.distribution.packaging;
 
 import aQute.bnd.annotation.Version;
diff --git a/src/main/java/org/apache/sling/distribution/queue/DistributionQueueEntry.java b/src/main/java/org/apache/sling/distribution/queue/DistributionQueueEntry.java
index 806d5ea..11e8bf2 100644
--- a/src/main/java/org/apache/sling/distribution/queue/DistributionQueueEntry.java
+++ b/src/main/java/org/apache/sling/distribution/queue/DistributionQueueEntry.java
@@ -18,9 +18,8 @@
  */
 package org.apache.sling.distribution.queue;
 
-import javax.annotation.Nonnull;
-
 import org.apache.sling.distribution.queue.spi.DistributionQueue;
+import org.jetbrains.annotations.NotNull;
 
 /**
  * an entry in a {@link DistributionQueue}
@@ -31,7 +30,7 @@
     private final DistributionQueueItem item;
     private final DistributionQueueItemStatus status;
 
-    public DistributionQueueEntry(String id, @Nonnull DistributionQueueItem item, @Nonnull DistributionQueueItemStatus status) {
+    public DistributionQueueEntry(String id, @NotNull DistributionQueueItem item, @NotNull DistributionQueueItemStatus status) {
         this.id = id;
         this.item = item;
         this.status = status;
@@ -42,7 +41,7 @@
      *
      * @return a {@link DistributionQueueStatus}
      */
-    @Nonnull
+    @NotNull
     public DistributionQueueItemStatus getStatus() {
         return status;
     }
@@ -52,7 +51,7 @@
      *
      * @return a {@link DistributionQueueItem}
      */
-    @Nonnull
+    @NotNull
     public DistributionQueueItem getItem() {
         return item;
     }
diff --git a/src/main/java/org/apache/sling/distribution/queue/DistributionQueueItem.java b/src/main/java/org/apache/sling/distribution/queue/DistributionQueueItem.java
index 17bba45..2a29557 100644
--- a/src/main/java/org/apache/sling/distribution/queue/DistributionQueueItem.java
+++ b/src/main/java/org/apache/sling/distribution/queue/DistributionQueueItem.java
@@ -18,13 +18,12 @@
  */
 package org.apache.sling.distribution.queue;
 
-import javax.annotation.Nonnull;
 import java.util.Map;
-
 import org.apache.sling.api.resource.ValueMap;
 import org.apache.sling.api.wrappers.ValueMapDecorator;
 import org.apache.sling.distribution.packaging.DistributionPackage;
 import org.apache.sling.distribution.queue.spi.DistributionQueue;
+import org.jetbrains.annotations.NotNull;
 
 /**
  * An item in a {@link DistributionQueue}
@@ -37,7 +36,7 @@
     private final String packageId;
     private final long size;
 
-    public DistributionQueueItem(@Nonnull String packageId, Map<String, Object> base) {
+    public DistributionQueueItem(@NotNull String packageId, Map<String, Object> base) {
         this(packageId, -1, base);
     }
 
@@ -48,7 +47,7 @@
 
     }
 
-    @Nonnull
+    @NotNull
     public String getPackageId() {
         return packageId;
     }
diff --git a/src/main/java/org/apache/sling/distribution/queue/DistributionQueueStatus.java b/src/main/java/org/apache/sling/distribution/queue/DistributionQueueStatus.java
index 32fe293..0dcc245 100644
--- a/src/main/java/org/apache/sling/distribution/queue/DistributionQueueStatus.java
+++ b/src/main/java/org/apache/sling/distribution/queue/DistributionQueueStatus.java
@@ -19,9 +19,8 @@
 
 package org.apache.sling.distribution.queue;
 
-import javax.annotation.Nonnull;
-
 import org.apache.sling.distribution.queue.spi.DistributionQueue;
+import org.jetbrains.annotations.NotNull;
 
 /**
  * The status of a certain {@link DistributionQueue}
@@ -31,7 +30,7 @@
 
     private final DistributionQueueState queueState;
 
-    public DistributionQueueStatus(int itemsCount, @Nonnull DistributionQueueState queueState) {
+    public DistributionQueueStatus(int itemsCount, @NotNull DistributionQueueState queueState) {
         this.itemsCount = itemsCount;
         this.queueState = queueState;
     }
diff --git a/src/main/java/org/apache/sling/distribution/queue/impl/AsyncDeliveryDispatchingStrategy.java b/src/main/java/org/apache/sling/distribution/queue/impl/AsyncDeliveryDispatchingStrategy.java
index 2903925..8401299 100644
--- a/src/main/java/org/apache/sling/distribution/queue/impl/AsyncDeliveryDispatchingStrategy.java
+++ b/src/main/java/org/apache/sling/distribution/queue/impl/AsyncDeliveryDispatchingStrategy.java
@@ -18,11 +18,9 @@
  */
 package org.apache.sling.distribution.queue.impl;
 
-import javax.annotation.Nonnull;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
-
 import org.apache.sling.distribution.common.DistributionException;
 import org.apache.sling.distribution.packaging.DistributionPackage;
 import org.apache.sling.distribution.packaging.impl.DistributionPackageUtils;
@@ -30,6 +28,7 @@
 import org.apache.sling.distribution.packaging.impl.SharedDistributionPackage;
 import org.apache.sling.distribution.queue.*;
 import org.apache.sling.distribution.queue.spi.DistributionQueue;
+import org.jetbrains.annotations.NotNull;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -58,8 +57,8 @@
     }
 
     @Override
-    public Iterable<DistributionQueueItemStatus> add(@Nonnull DistributionPackage distributionPackage,
-                                                     @Nonnull DistributionQueueProvider queueProvider) throws DistributionException {
+    public Iterable<DistributionQueueItemStatus> add(@NotNull DistributionPackage distributionPackage,
+                                                     @NotNull DistributionQueueProvider queueProvider) throws DistributionException {
 
         if (!(distributionPackage instanceof SharedDistributionPackage) && deliveryMappings.size() > 1) {
             throw new DistributionException("distribution package must be a shared package to be added in multiple queues");
@@ -139,7 +138,7 @@
 
     }
 
-    @Nonnull
+    @NotNull
     public List<String> getQueueNames() {
         return queues;
     }
diff --git a/src/main/java/org/apache/sling/distribution/queue/impl/CachingDistributionQueue.java b/src/main/java/org/apache/sling/distribution/queue/impl/CachingDistributionQueue.java
index 300a65c..47ae169 100644
--- a/src/main/java/org/apache/sling/distribution/queue/impl/CachingDistributionQueue.java
+++ b/src/main/java/org/apache/sling/distribution/queue/impl/CachingDistributionQueue.java
@@ -23,11 +23,10 @@
 import org.apache.sling.distribution.queue.DistributionQueueItem;
 import org.apache.sling.distribution.queue.DistributionQueueStatus;
 import org.apache.sling.distribution.queue.DistributionQueueType;
+import org.jetbrains.annotations.NotNull;
 
-import javax.annotation.Nonnull;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
-
 /**
  * {@link DistributionQueueWrapper} that caches entries for 30s.
  */
@@ -44,7 +43,7 @@
         this.cacheKey = cacheKey;
     }
 
-    @Nonnull
+    @NotNull
     @Override
     public DistributionQueueStatus getStatus() {
 
@@ -77,14 +76,14 @@
     }
 
     @Override
-    public DistributionQueueEntry add(@Nonnull DistributionQueueItem item) {
+    public DistributionQueueEntry add(@NotNull DistributionQueueItem item) {
         queueCache.remove(cacheKey);
         queueCacheExpiry.remove(cacheKey);
         return super.add(item);
     }
 
     @Override
-    public DistributionQueueEntry remove(@Nonnull String itemId) {
+    public DistributionQueueEntry remove(@NotNull String itemId) {
         queueCache.remove(cacheKey);
         queueCacheExpiry.remove(cacheKey);
         return super.remove(itemId);
diff --git a/src/main/java/org/apache/sling/distribution/queue/impl/DistributionQueueDispatchingStrategy.java b/src/main/java/org/apache/sling/distribution/queue/impl/DistributionQueueDispatchingStrategy.java
index de907f9..dae4877 100644
--- a/src/main/java/org/apache/sling/distribution/queue/impl/DistributionQueueDispatchingStrategy.java
+++ b/src/main/java/org/apache/sling/distribution/queue/impl/DistributionQueueDispatchingStrategy.java
@@ -18,14 +18,13 @@
  */
 package org.apache.sling.distribution.queue.impl;
 
-import javax.annotation.Nonnull;
 import java.util.List;
-
 import aQute.bnd.annotation.ConsumerType;
 import org.apache.sling.distribution.common.DistributionException;
 import org.apache.sling.distribution.packaging.DistributionPackage;
 import org.apache.sling.distribution.queue.DistributionQueueItemStatus;
 import org.apache.sling.distribution.queue.spi.DistributionQueue;
+import org.jetbrains.annotations.NotNull;
 
 /**
  * a {@link DistributionQueueDispatchingStrategy} implements an algorithm for dispatching
@@ -49,14 +48,14 @@
      * the states of the {@link org.apache.sling.distribution.queue.DistributionQueueItem}s added to one or more {@link DistributionQueue}s
      * @throws DistributionException if any internal error happens during distribution
      */
-    Iterable<DistributionQueueItemStatus> add(@Nonnull DistributionPackage distributionPackage, @Nonnull DistributionQueueProvider queueProvider) throws DistributionException;
+    Iterable<DistributionQueueItemStatus> add(@NotNull DistributionPackage distributionPackage, @NotNull DistributionQueueProvider queueProvider) throws DistributionException;
 
     /**
      * Returns the queue names available for this strategy.
      *
      * @return a list of queue names
      */
-    @Nonnull
+    @NotNull
     List<String> getQueueNames();
 
 }
diff --git a/src/main/java/org/apache/sling/distribution/queue/impl/DistributionQueueProcessor.java b/src/main/java/org/apache/sling/distribution/queue/impl/DistributionQueueProcessor.java
index 5733c07..7597bcc 100644
--- a/src/main/java/org/apache/sling/distribution/queue/impl/DistributionQueueProcessor.java
+++ b/src/main/java/org/apache/sling/distribution/queue/impl/DistributionQueueProcessor.java
@@ -18,12 +18,11 @@
  */
 package org.apache.sling.distribution.queue.impl;
 
-import javax.annotation.Nonnull;
-
 import aQute.bnd.annotation.ProviderType;
 import org.apache.sling.distribution.queue.DistributionQueueEntry;
 import org.apache.sling.distribution.queue.DistributionQueueItem;
 import org.apache.sling.distribution.queue.spi.DistributionQueue;
+import org.jetbrains.annotations.NotNull;
 
 /**
  * Processor of {@link DistributionQueueItem}s
@@ -38,5 +37,5 @@
      * @param queueEntry the {@link org.apache.sling.distribution.queue.DistributionQueueEntry} to be processed
      * @return {@code true} if the item was successfully processed, {@code false} otherwise
      */
-    boolean process(@Nonnull String queueName, @Nonnull DistributionQueueEntry queueEntry);
+    boolean process(@NotNull String queueName, @NotNull DistributionQueueEntry queueEntry);
 }
diff --git a/src/main/java/org/apache/sling/distribution/queue/impl/DistributionQueueProvider.java b/src/main/java/org/apache/sling/distribution/queue/impl/DistributionQueueProvider.java
index 73b2fdf..14e3ef7 100644
--- a/src/main/java/org/apache/sling/distribution/queue/impl/DistributionQueueProvider.java
+++ b/src/main/java/org/apache/sling/distribution/queue/impl/DistributionQueueProvider.java
@@ -18,12 +18,11 @@
  */
 package org.apache.sling.distribution.queue.impl;
 
-import javax.annotation.Nonnull;
-
 import aQute.bnd.annotation.ProviderType;
 import org.apache.sling.distribution.common.DistributionException;
 import org.apache.sling.distribution.queue.DistributionQueueType;
 import org.apache.sling.distribution.queue.spi.DistributionQueue;
+import org.jetbrains.annotations.NotNull;
 
 /**
  * A provider for {@link DistributionQueue}s
@@ -37,8 +36,8 @@
      * @param queueName the name of the queue to retrieve
      * @return a {@link DistributionQueue}
      */
-    @Nonnull
-    DistributionQueue getQueue(@Nonnull String queueName) throws DistributionException;
+    @NotNull
+    DistributionQueue getQueue(@NotNull String queueName) throws DistributionException;
 
     /**
      * provde a queue of the given type with the given name
@@ -46,15 +45,15 @@
      * @param type the type of the queue
      * @return a {@link DistributionQueue}
      */
-    @Nonnull
-    DistributionQueue getQueue(@Nonnull String queueName, @Nonnull DistributionQueueType type);
+    @NotNull
+    DistributionQueue getQueue(@NotNull String queueName, @NotNull DistributionQueueType type);
 
     /**
      * enables queue processing
      *
      * @param queueProcessor the queue processor to be used
      */
-    void enableQueueProcessing(@Nonnull DistributionQueueProcessor queueProcessor, String... queueNames) throws DistributionException;
+    void enableQueueProcessing(@NotNull DistributionQueueProcessor queueProcessor, String... queueNames) throws DistributionException;
 
     /**
      * disables queue processing
diff --git a/src/main/java/org/apache/sling/distribution/queue/impl/DistributionQueueWrapper.java b/src/main/java/org/apache/sling/distribution/queue/impl/DistributionQueueWrapper.java
index d5551b2..dc179d3 100644
--- a/src/main/java/org/apache/sling/distribution/queue/impl/DistributionQueueWrapper.java
+++ b/src/main/java/org/apache/sling/distribution/queue/impl/DistributionQueueWrapper.java
@@ -22,8 +22,7 @@
 import org.apache.sling.distribution.queue.DistributionQueueEntry;
 import org.apache.sling.distribution.queue.DistributionQueueItem;
 import org.apache.sling.distribution.queue.DistributionQueueStatus;
-
-import javax.annotation.Nonnull;
+import org.jetbrains.annotations.NotNull;
 
 public abstract class DistributionQueueWrapper implements DistributionQueue {
     final DistributionQueue wrappedQueue;
@@ -33,14 +32,14 @@
         this.wrappedQueue = wrappedQueue;
     }
 
-    @Nonnull
+    @NotNull
     @Override
     public String getName() {
         return wrappedQueue.getName();
     }
 
     @Override
-    public DistributionQueueEntry add(@Nonnull DistributionQueueItem item) {
+    public DistributionQueueEntry add(@NotNull DistributionQueueItem item) {
         return wrappedQueue.add(item);
     }
 
@@ -49,23 +48,23 @@
         return wrappedQueue.getHead();
     }
 
-    @Nonnull
+    @NotNull
     @Override
     public Iterable<DistributionQueueEntry> getItems(int skip, int limit) {
         return wrappedQueue.getItems(skip, limit);
     }
 
     @Override
-    public DistributionQueueEntry getItem(@Nonnull String itemId) {
+    public DistributionQueueEntry getItem(@NotNull String itemId) {
         return wrappedQueue.getItem(itemId);
     }
 
     @Override
-    public DistributionQueueEntry remove(@Nonnull String itemId) {
+    public DistributionQueueEntry remove(@NotNull String itemId) {
         return wrappedQueue.remove(itemId);
     }
 
-    @Nonnull
+    @NotNull
     @Override
     public DistributionQueueStatus getStatus() {
         return wrappedQueue.getStatus();
diff --git a/src/main/java/org/apache/sling/distribution/queue/impl/ErrorQueueDispatchingStrategy.java b/src/main/java/org/apache/sling/distribution/queue/impl/ErrorQueueDispatchingStrategy.java
index 0d7102a..f9fcddc 100644
--- a/src/main/java/org/apache/sling/distribution/queue/impl/ErrorQueueDispatchingStrategy.java
+++ b/src/main/java/org/apache/sling/distribution/queue/impl/ErrorQueueDispatchingStrategy.java
@@ -19,13 +19,11 @@
 
 package org.apache.sling.distribution.queue.impl;
 
-import javax.annotation.Nonnull;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Set;
 import java.util.TreeSet;
-
 import org.apache.sling.distribution.common.DistributionException;
 import org.apache.sling.distribution.packaging.DistributionPackage;
 import org.apache.sling.distribution.packaging.impl.DistributionPackageUtils;
@@ -34,6 +32,7 @@
 import org.apache.sling.distribution.queue.DistributionQueueItem;
 import org.apache.sling.distribution.queue.DistributionQueueItemState;
 import org.apache.sling.distribution.queue.DistributionQueueItemStatus;
+import org.jetbrains.annotations.NotNull;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -54,7 +53,7 @@
     }
 
     @Override
-    public Iterable<DistributionQueueItemStatus> add(@Nonnull DistributionPackage distributionPackage, @Nonnull DistributionQueueProvider queueProvider) throws DistributionException {
+    public Iterable<DistributionQueueItemStatus> add(@NotNull DistributionPackage distributionPackage, @NotNull DistributionQueueProvider queueProvider) throws DistributionException {
 
         List<DistributionQueueItemStatus> result = new ArrayList<DistributionQueueItemStatus>();
         String originQueue = DistributionPackageUtils.getQueueName(distributionPackage.getInfo());
@@ -85,7 +84,7 @@
         return result;
     }
 
-    @Nonnull
+    @NotNull
     @Override
     public List<String> getQueueNames() {
         List<String> errorQueueNames = new ArrayList<String>();
diff --git a/src/main/java/org/apache/sling/distribution/queue/impl/MultipleQueueDispatchingStrategy.java b/src/main/java/org/apache/sling/distribution/queue/impl/MultipleQueueDispatchingStrategy.java
index a7a3931..7ed9eec 100644
--- a/src/main/java/org/apache/sling/distribution/queue/impl/MultipleQueueDispatchingStrategy.java
+++ b/src/main/java/org/apache/sling/distribution/queue/impl/MultipleQueueDispatchingStrategy.java
@@ -18,11 +18,9 @@
  */
 package org.apache.sling.distribution.queue.impl;
 
-import javax.annotation.Nonnull;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
-
 import org.apache.sling.distribution.common.DistributionException;
 import org.apache.sling.distribution.queue.DistributionQueueEntry;
 import org.apache.sling.distribution.packaging.DistributionPackage;
@@ -32,6 +30,7 @@
 import org.apache.sling.distribution.queue.DistributionQueueItem;
 import org.apache.sling.distribution.queue.DistributionQueueItemState;
 import org.apache.sling.distribution.queue.DistributionQueueItemStatus;
+import org.jetbrains.annotations.NotNull;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -48,8 +47,8 @@
         this.queueNames = Arrays.copyOf(queueNames, queueNames.length);
     }
 
-    public Iterable<DistributionQueueItemStatus> add(@Nonnull DistributionPackage distributionPackage,
-                                                     @Nonnull DistributionQueueProvider queueProvider) throws DistributionException {
+    public Iterable<DistributionQueueItemStatus> add(@NotNull DistributionPackage distributionPackage,
+                                                     @NotNull DistributionQueueProvider queueProvider) throws DistributionException {
 
         if (!(distributionPackage instanceof SharedDistributionPackage) && queueNames.length > 1) {
             throw new DistributionException("distribution package must be a shared package to be added in multiple queues");
@@ -82,7 +81,7 @@
 
     }
 
-    @Nonnull
+    @NotNull
     public List<String> getQueueNames() {
         return Arrays.asList(queueNames);
     }
diff --git a/src/main/java/org/apache/sling/distribution/queue/impl/PriorityQueueDispatchingStrategy.java b/src/main/java/org/apache/sling/distribution/queue/impl/PriorityQueueDispatchingStrategy.java
index 964ac01..015f3d4 100644
--- a/src/main/java/org/apache/sling/distribution/queue/impl/PriorityQueueDispatchingStrategy.java
+++ b/src/main/java/org/apache/sling/distribution/queue/impl/PriorityQueueDispatchingStrategy.java
@@ -21,8 +21,8 @@
 import org.apache.sling.distribution.common.DistributionException;
 import org.apache.sling.distribution.packaging.DistributionPackage;
 import org.apache.sling.distribution.queue.DistributionQueueItemStatus;
+import org.jetbrains.annotations.NotNull;
 
-import javax.annotation.Nonnull;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
@@ -30,7 +30,6 @@
 import java.util.Map;
 import java.util.TreeMap;
 
-
 public class PriorityQueueDispatchingStrategy implements DistributionQueueDispatchingStrategy {
 
     private final Map<String, String> selectors;
@@ -47,7 +46,7 @@
     }
 
     @Override
-    public Iterable<DistributionQueueItemStatus> add(@Nonnull DistributionPackage distributionPackage, @Nonnull DistributionQueueProvider queueProvider) throws DistributionException {
+    public Iterable<DistributionQueueItemStatus> add(@NotNull DistributionPackage distributionPackage, @NotNull DistributionQueueProvider queueProvider) throws DistributionException {
         String[] paths = distributionPackage.getInfo().getPaths();
         Map<String, String> matchingQueues = paths != null ?  getMatchingQueues(paths) : new HashMap<String, String>();
 
@@ -62,7 +61,7 @@
         return dispatchingStrategy.add(distributionPackage, queueProvider);
     }
 
-    @Nonnull
+    @NotNull
     @Override
     public List<String> getQueueNames() {
         return allQueues;
diff --git a/src/main/java/org/apache/sling/distribution/queue/impl/SimpleAgentDistributionQueue.java b/src/main/java/org/apache/sling/distribution/queue/impl/SimpleAgentDistributionQueue.java
index f550ccb..564ea5c 100644
--- a/src/main/java/org/apache/sling/distribution/queue/impl/SimpleAgentDistributionQueue.java
+++ b/src/main/java/org/apache/sling/distribution/queue/impl/SimpleAgentDistributionQueue.java
@@ -23,8 +23,7 @@
 import org.apache.sling.distribution.queue.DistributionQueueState;
 import org.apache.sling.distribution.queue.DistributionQueueStatus;
 import org.apache.sling.distribution.queue.DistributionQueueType;
-
-import javax.annotation.Nonnull;
+import org.jetbrains.annotations.NotNull;
 
 public class SimpleAgentDistributionQueue extends DistributionQueueWrapper {
 
@@ -37,7 +36,7 @@
         this.agentName = agentName;
     }
 
-    @Nonnull
+    @NotNull
     @Override
     public DistributionQueueStatus getStatus() {
         return calculateStatus();
diff --git a/src/main/java/org/apache/sling/distribution/queue/impl/jobhandling/JobHandlingDistributionQueue.java b/src/main/java/org/apache/sling/distribution/queue/impl/jobhandling/JobHandlingDistributionQueue.java
index e2b383e..d19424f 100644
--- a/src/main/java/org/apache/sling/distribution/queue/impl/jobhandling/JobHandlingDistributionQueue.java
+++ b/src/main/java/org/apache/sling/distribution/queue/impl/jobhandling/JobHandlingDistributionQueue.java
@@ -18,12 +18,10 @@
  */
 package org.apache.sling.distribution.queue.impl.jobhandling;
 
-import javax.annotation.Nonnull;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
-
 import org.apache.sling.distribution.queue.spi.DistributionQueue;
 import org.apache.sling.distribution.queue.DistributionQueueEntry;
 import org.apache.sling.distribution.queue.DistributionQueueItem;
@@ -35,6 +33,7 @@
 import org.apache.sling.event.jobs.Job;
 import org.apache.sling.event.jobs.JobManager;
 import org.apache.sling.event.jobs.JobManager.QueryType;
+import org.jetbrains.annotations.NotNull;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -64,12 +63,12 @@
         this.type = type;
     }
 
-    @Nonnull
+    @NotNull
     public String getName() {
         return name;
     }
 
-    public DistributionQueueEntry add(@Nonnull DistributionQueueItem item) {
+    public DistributionQueueEntry add(@NotNull DistributionQueueItem item) {
         try {
             Map<String, Object> properties = JobHandlingUtils.createFullProperties(item);
 
@@ -141,7 +140,7 @@
     }
 
 
-    @Nonnull
+    @NotNull
     public List<DistributionQueueEntry> getItems(int skip, int limit) {
 
         List<DistributionQueueEntry> items = new ArrayList<DistributionQueueEntry>();
@@ -153,7 +152,7 @@
         return items;
     }
 
-    public DistributionQueueEntry getItem(@Nonnull String id) {
+    public DistributionQueueEntry getItem(@NotNull String id) {
         Job job = getJob(id);
 
         if (job != null) {
@@ -163,7 +162,7 @@
         return null;
     }
 
-    public DistributionQueueEntry remove(@Nonnull String id) {
+    public DistributionQueueEntry remove(@NotNull String id) {
         boolean removed = false;
         Job job = getJob(id);
 
@@ -180,7 +179,7 @@
 
 
     @Override
-    @Nonnull
+    @NotNull
     public DistributionQueueStatus getStatus() {
         List<Job> jobs = getJobs(0, -1);
         Job firstJob = jobs.size() > 0 ? jobs.get(0) : null;
diff --git a/src/main/java/org/apache/sling/distribution/queue/impl/jobhandling/JobHandlingDistributionQueueProvider.java b/src/main/java/org/apache/sling/distribution/queue/impl/jobhandling/JobHandlingDistributionQueueProvider.java
index 347db72..b719e87 100644
--- a/src/main/java/org/apache/sling/distribution/queue/impl/jobhandling/JobHandlingDistributionQueueProvider.java
+++ b/src/main/java/org/apache/sling/distribution/queue/impl/jobhandling/JobHandlingDistributionQueueProvider.java
@@ -18,7 +18,6 @@
  */
 package org.apache.sling.distribution.queue.impl.jobhandling;
 
-import javax.annotation.Nonnull;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -27,7 +26,6 @@
 import java.util.Hashtable;
 import java.util.List;
 import java.util.Set;
-
 import org.apache.sling.distribution.common.DistributionException;
 import org.apache.sling.distribution.queue.spi.DistributionQueue;
 import org.apache.sling.distribution.queue.impl.DistributionQueueProcessor;
@@ -38,6 +36,7 @@
 import org.apache.sling.event.jobs.JobManager;
 import org.apache.sling.event.jobs.QueueConfiguration;
 import org.apache.sling.event.jobs.consumer.JobConsumer;
+import org.jetbrains.annotations.NotNull;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.cm.Configuration;
@@ -80,8 +79,8 @@
         this.context = context;
     }
 
-    @Nonnull
-    public DistributionQueue getQueue(@Nonnull String queueName) {
+    @NotNull
+    public DistributionQueue getQueue(@NotNull String queueName) {
         String topic = JobHandlingDistributionQueue.DISTRIBUTION_QUEUE_TOPIC + '/' + prefix + "/" + queueName;
         boolean isActive = jobConsumer != null && (processingQueueNames == null || processingQueueNames.contains(queueName));
 
@@ -91,7 +90,7 @@
     }
 
     @Override
-    public DistributionQueue getQueue(@Nonnull String queueName, @Nonnull DistributionQueueType type) {
+    public DistributionQueue getQueue(@NotNull String queueName, @NotNull DistributionQueueType type) {
         String topic = JobHandlingDistributionQueue.DISTRIBUTION_QUEUE_TOPIC + '/' + type.name().toLowerCase() + '/' + prefix + "/" + queueName;
         boolean isActive = jobConsumer != null && (processingQueueNames == null || processingQueueNames.contains(queueName));
 
@@ -121,7 +120,7 @@
     }
 
 
-    public void enableQueueProcessing(@Nonnull DistributionQueueProcessor queueProcessor, String... queueNames) throws DistributionException {
+    public void enableQueueProcessing(@NotNull DistributionQueueProcessor queueProcessor, String... queueNames) throws DistributionException {
         if (jobConsumer != null) {
             throw new DistributionException("job already registered");
         }
diff --git a/src/main/java/org/apache/sling/distribution/queue/impl/jobhandling/JobHandlingUtils.java b/src/main/java/org/apache/sling/distribution/queue/impl/jobhandling/JobHandlingUtils.java
index aae13b0..a00215b 100644
--- a/src/main/java/org/apache/sling/distribution/queue/impl/jobhandling/JobHandlingUtils.java
+++ b/src/main/java/org/apache/sling/distribution/queue/impl/jobhandling/JobHandlingUtils.java
@@ -18,16 +18,15 @@
  */
 package org.apache.sling.distribution.queue.impl.jobhandling;
 
-import javax.annotation.CheckForNull;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
-
 import org.apache.sling.distribution.queue.DistributionQueueEntry;
 import org.apache.sling.distribution.queue.DistributionQueueItem;
 import org.apache.sling.distribution.queue.DistributionQueueItemState;
 import org.apache.sling.distribution.queue.DistributionQueueItemStatus;
 import org.apache.sling.event.jobs.Job;
+import org.jetbrains.annotations.Nullable;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -84,7 +83,7 @@
         return properties;
     }
 
-    @CheckForNull
+    @Nullable
     private static String getQueueName(Job job) {
 
         String topic = job.getTopic();
@@ -109,7 +108,7 @@
                 attempts, queueName);
     }
 
-    @CheckForNull
+    @Nullable
     public static DistributionQueueEntry getEntry(final Job job) {
         DistributionQueueItem item = getItem(job);
         DistributionQueueItemStatus itemStatus = getStatus(job);
diff --git a/src/main/java/org/apache/sling/distribution/queue/impl/simple/SimpleDistributionQueue.java b/src/main/java/org/apache/sling/distribution/queue/impl/simple/SimpleDistributionQueue.java
index 3fc7352..26e05d4 100644
--- a/src/main/java/org/apache/sling/distribution/queue/impl/simple/SimpleDistributionQueue.java
+++ b/src/main/java/org/apache/sling/distribution/queue/impl/simple/SimpleDistributionQueue.java
@@ -18,8 +18,6 @@
  */
 package org.apache.sling.distribution.queue.impl.simple;
 
-import javax.annotation.CheckForNull;
-import javax.annotation.Nonnull;
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.List;
@@ -27,7 +25,6 @@
 import java.util.Queue;
 import java.util.WeakHashMap;
 import java.util.concurrent.LinkedBlockingQueue;
-
 import org.apache.sling.distribution.queue.spi.DistributionQueue;
 import org.apache.sling.distribution.queue.DistributionQueueEntry;
 import org.apache.sling.distribution.queue.DistributionQueueItem;
@@ -37,6 +34,8 @@
 import org.apache.sling.distribution.queue.DistributionQueueStatus;
 import org.apache.sling.distribution.queue.DistributionQueueType;
 import org.apache.sling.distribution.queue.impl.DistributionQueueUtils;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -66,12 +65,12 @@
         this.statusMap = new WeakHashMap<DistributionQueueItem, DistributionQueueItemStatus>(10);
     }
 
-    @Nonnull
+    @NotNull
     public String getName() {
         return name;
     }
 
-    public DistributionQueueEntry add(@Nonnull DistributionQueueItem item) {
+    public DistributionQueueEntry add(@NotNull DistributionQueueItem item) {
         DistributionQueueItemState itemState = DistributionQueueItemState.ERROR;
         boolean result = false;
         try {
@@ -91,7 +90,7 @@
     }
 
 
-    @CheckForNull
+    @Nullable
     public DistributionQueueEntry getHead() {
         DistributionQueueItem element = queue.peek();
         if (element != null) {
@@ -105,14 +104,14 @@
         return null;
     }
 
-    @Nonnull
+    @NotNull
     private DistributionQueueState getState() {
         DistributionQueueItem firstItem = queue.peek();
         DistributionQueueItemStatus firstItemStatus = firstItem != null ? statusMap.get(firstItem) : null;
         return DistributionQueueUtils.calculateState(firstItem, firstItemStatus);
     }
 
-    @Nonnull
+    @NotNull
     @Override
     public DistributionQueueStatus getStatus() {
         return new DistributionQueueStatus(queue.size(), getState());
@@ -124,7 +123,7 @@
     }
 
 
-    @Nonnull
+    @NotNull
     public Iterable<DistributionQueueEntry> getItems(int skip, int limit) {
         List<DistributionQueueEntry> result = new ArrayList<DistributionQueueEntry>();
 
@@ -134,8 +133,8 @@
         return result;
     }
 
-    @CheckForNull
-    public DistributionQueueEntry getItem(@Nonnull String id) {
+    @Nullable
+    public DistributionQueueEntry getItem(@NotNull String id) {
         for (DistributionQueueItem item : queue) {
             if (id.equals(item.getPackageId())) {
                 return new DistributionQueueEntry(id, item, statusMap.get(item));
@@ -146,8 +145,8 @@
     }
 
 
-    @CheckForNull
-    public DistributionQueueEntry remove(@Nonnull String id) {
+    @Nullable
+    public DistributionQueueEntry remove(@NotNull String id) {
         DistributionQueueEntry toRemove = getItem(id);
 
         boolean removed = false;
diff --git a/src/main/java/org/apache/sling/distribution/queue/impl/simple/SimpleDistributionQueueProvider.java b/src/main/java/org/apache/sling/distribution/queue/impl/simple/SimpleDistributionQueueProvider.java
index 4835bed..8622fdc 100644
--- a/src/main/java/org/apache/sling/distribution/queue/impl/simple/SimpleDistributionQueueProvider.java
+++ b/src/main/java/org/apache/sling/distribution/queue/impl/simple/SimpleDistributionQueueProvider.java
@@ -18,7 +18,6 @@
  */
 package org.apache.sling.distribution.queue.impl.simple;
 
-import javax.annotation.Nonnull;
 import javax.json.JsonException;
 
 import java.io.File;
@@ -38,6 +37,7 @@
 import org.apache.sling.distribution.queue.impl.DistributionQueueProcessor;
 import org.apache.sling.distribution.queue.impl.DistributionQueueProvider;
 import org.apache.sling.distribution.queue.DistributionQueueType;
+import org.jetbrains.annotations.NotNull;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -82,8 +82,8 @@
         this.name = name;
     }
 
-    @Nonnull
-    public DistributionQueue getQueue(@Nonnull String queueName) {
+    @NotNull
+    public DistributionQueue getQueue(@NotNull String queueName) {
         String key = name + queueName;
 
         SimpleDistributionQueue queue = queueMap.get(key);
@@ -97,7 +97,7 @@
     }
 
     @Override
-    public DistributionQueue getQueue(@Nonnull String queueName, @Nonnull DistributionQueueType type) {
+    public DistributionQueue getQueue(@NotNull String queueName, @NotNull DistributionQueueType type) {
         return getQueue(queueName);
     }
 
@@ -105,7 +105,7 @@
         return queueMap.values();
     }
 
-    public void enableQueueProcessing(@Nonnull DistributionQueueProcessor queueProcessor, String... queueNames) {
+    public void enableQueueProcessing(@NotNull DistributionQueueProcessor queueProcessor, String... queueNames) {
 
         if (checkpoint) {
             // recover from checkpoints
diff --git a/src/main/java/org/apache/sling/distribution/queue/package-info.java b/src/main/java/org/apache/sling/distribution/queue/package-info.java
index 54a3ee1..c81b5db 100644
--- a/src/main/java/org/apache/sling/distribution/queue/package-info.java
+++ b/src/main/java/org/apache/sling/distribution/queue/package-info.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-@Version("0.0.0")
+@Version("0.0.1")
 package org.apache.sling.distribution.queue;
 
 import aQute.bnd.annotation.Version;
diff --git a/src/main/java/org/apache/sling/distribution/queue/spi/DistributionQueue.java b/src/main/java/org/apache/sling/distribution/queue/spi/DistributionQueue.java
index f520d79..7cff77e 100644
--- a/src/main/java/org/apache/sling/distribution/queue/spi/DistributionQueue.java
+++ b/src/main/java/org/apache/sling/distribution/queue/spi/DistributionQueue.java
@@ -18,9 +18,6 @@
  */
 package org.apache.sling.distribution.queue.spi;
 
-import javax.annotation.CheckForNull;
-import javax.annotation.Nonnull;
-
 import aQute.bnd.annotation.ConsumerType;
 import org.apache.sling.distribution.agent.spi.DistributionAgent;
 import org.apache.sling.distribution.packaging.DistributionPackage;
@@ -29,6 +26,8 @@
 import org.apache.sling.distribution.queue.DistributionQueueStatus;
 import org.apache.sling.distribution.queue.DistributionQueueType;
 import org.apache.sling.distribution.queue.impl.DistributionQueueProcessor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 
 /**
  * A queue is responsible for collecting the {@link DistributionPackage}s
@@ -48,7 +47,7 @@
      *
      * @return the queue name
      */
-    @Nonnull
+    @NotNull
     String getName();
 
     /**
@@ -58,15 +57,15 @@
      *             to distribute
      * @return the queue entry created for this item or {@code noll} if none is created
      */
-    @CheckForNull
-    DistributionQueueEntry add(@Nonnull DistributionQueueItem item);
+    @Nullable
+    DistributionQueueEntry add(@NotNull DistributionQueueItem item);
 
     /**
      * get the first item (in a FIFO strategy, the next to be processed) from the queue
      *
      * @return the first item into the queue or {@code null} if the queue is empty
      */
-    @CheckForNull
+    @Nullable
     DistributionQueueEntry getHead();
 
     /**
@@ -76,7 +75,7 @@
      * @param limit the maximum number of items to return. use -1 to return all items.
      * @return a {@link java.lang.Iterable} of {@link DistributionQueueItem}s
      */
-    @Nonnull
+    @NotNull
     Iterable<DistributionQueueEntry> getItems(int skip, int limit);
 
     /**
@@ -86,8 +85,8 @@
      * @return the item, or {@code null} if the item with the given id
      * doesn't exist
      */
-    @CheckForNull
-    DistributionQueueEntry getItem(@Nonnull String itemId);
+    @Nullable
+    DistributionQueueEntry getItem(@NotNull String itemId);
 
     /**
      * remove an item from the queue by specifying its id
@@ -96,20 +95,20 @@
      * @return the removed item, or {@code null} if the item with the given id
      * doesn't exist
      */
-    @CheckForNull
-    DistributionQueueEntry remove(@Nonnull String itemId);
+    @Nullable
+    DistributionQueueEntry remove(@NotNull String itemId);
 
     /**
      * get the status of the queue
      * @return the queue status
      */
-    @Nonnull
+    @NotNull
     DistributionQueueStatus getStatus();
 
     /**
      * get the type of this queue
      * @return the type
      */
-    @Nonnull
+    @NotNull
     DistributionQueueType getType();
 }
diff --git a/src/main/java/org/apache/sling/distribution/queue/spi/package-info.java b/src/main/java/org/apache/sling/distribution/queue/spi/package-info.java
index 8ccaeac..96aa8bd 100644
--- a/src/main/java/org/apache/sling/distribution/queue/spi/package-info.java
+++ b/src/main/java/org/apache/sling/distribution/queue/spi/package-info.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-@Version("0.0.0")
+@Version("0.0.1")
 package org.apache.sling.distribution.queue.spi;
 
 import aQute.bnd.annotation.Version;
diff --git a/src/main/java/org/apache/sling/distribution/resources/impl/common/SimpleModifiableValueMap.java b/src/main/java/org/apache/sling/distribution/resources/impl/common/SimpleModifiableValueMap.java
index 89b64dc..eb747bb 100644
--- a/src/main/java/org/apache/sling/distribution/resources/impl/common/SimpleModifiableValueMap.java
+++ b/src/main/java/org/apache/sling/distribution/resources/impl/common/SimpleModifiableValueMap.java
@@ -18,13 +18,12 @@
  */
 package org.apache.sling.distribution.resources.impl.common;
 
-import javax.annotation.Nonnull;
 import java.util.HashMap;
 import java.util.Map;
-
 import org.apache.sling.api.resource.ModifiableValueMap;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.wrappers.ModifiableValueMapDecorator;
+import org.jetbrains.annotations.NotNull;
 
 /**
  * ValueMap that signals to the underlying resource provider the its values are changed.
@@ -60,7 +59,7 @@
     }
 
     @Override
-    public void putAll(@Nonnull Map<? extends String, ?> t) {
+    public void putAll(@NotNull Map<? extends String, ?> t) {
         super.putAll(t);
         changed();
     }
diff --git a/src/main/java/org/apache/sling/distribution/serialization/DistributionExportFilter.java b/src/main/java/org/apache/sling/distribution/serialization/DistributionExportFilter.java
index b9fab15..6758fcd 100644
--- a/src/main/java/org/apache/sling/distribution/serialization/DistributionExportFilter.java
+++ b/src/main/java/org/apache/sling/distribution/serialization/DistributionExportFilter.java
@@ -18,7 +18,6 @@
  */
 package org.apache.sling.distribution.serialization;
 
-import javax.annotation.Nonnull;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -28,8 +27,8 @@
 import java.util.NavigableMap;
 import java.util.Set;
 import java.util.TreeSet;
-
 import org.apache.sling.distribution.DistributionRequest;
+import org.jetbrains.annotations.NotNull;
 
 /**
  * A filter is responsible for storing information about which resources / attributes should be serialized.
@@ -43,12 +42,12 @@
         // can only be constructed by #createFilter
     }
 
-    @Nonnull
+    @NotNull
     public Set<TreeFilter> getNodeFilters() {
         return nodeFilters;
     }
 
-    @Nonnull
+    @NotNull
     public TreeFilter getPropertyFilter() {
         return propertyFilter;
     }
@@ -160,7 +159,7 @@
             excludes.add(path);
         }
 
-        @Nonnull
+        @NotNull
         public String getPath() {
             return path;
         }
diff --git a/src/main/java/org/apache/sling/distribution/serialization/DistributionExportOptions.java b/src/main/java/org/apache/sling/distribution/serialization/DistributionExportOptions.java
index 6f06ae2..8845957 100644
--- a/src/main/java/org/apache/sling/distribution/serialization/DistributionExportOptions.java
+++ b/src/main/java/org/apache/sling/distribution/serialization/DistributionExportOptions.java
@@ -18,12 +18,10 @@
  */
 package org.apache.sling.distribution.serialization;
 
-import javax.annotation.CheckForNull;
-import javax.annotation.Nullable;
 import java.io.OutputStream;
-
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.distribution.DistributionRequest;
+import org.jetbrains.annotations.Nullable;
 
 /**
  * Export options used to identify and process the resources to be extracted by {@link
@@ -43,7 +41,7 @@
      * get the distribution request
      * @return the distribution request
      */
-    @CheckForNull
+    @Nullable
     public DistributionRequest getRequest() {
         return request;
     }
@@ -52,7 +50,7 @@
      * get the export filter
      * @return the export filter
      */
-    @CheckForNull
+    @Nullable
     public DistributionExportFilter getFilter() {
         return filter;
     }
diff --git a/src/main/java/org/apache/sling/distribution/serialization/impl/DistributionPackageBuilderFactory.java b/src/main/java/org/apache/sling/distribution/serialization/impl/DistributionPackageBuilderFactory.java
index 0666de9..09b8c9b 100644
--- a/src/main/java/org/apache/sling/distribution/serialization/impl/DistributionPackageBuilderFactory.java
+++ b/src/main/java/org/apache/sling/distribution/serialization/impl/DistributionPackageBuilderFactory.java
@@ -23,9 +23,6 @@
 import java.util.Hashtable;
 import java.util.Map;
 
-import javax.annotation.CheckForNull;
-import javax.annotation.Nonnull;
-
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.ConfigurationPolicy;
@@ -53,6 +50,8 @@
 import org.apache.sling.distribution.packaging.impl.ResourceDistributionPackageCleanup;
 import org.apache.sling.distribution.serialization.DistributionContentSerializer;
 import org.apache.sling.distribution.util.impl.FileBackedMemoryOutputStream.MemoryUnit;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceRegistration;
 
@@ -243,28 +242,28 @@
         return packageBuilder.getType();
     }
 
-    @Nonnull
-    public DistributionPackage createPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionRequest request) throws DistributionException {
+    @NotNull
+    public DistributionPackage createPackage(@NotNull ResourceResolver resourceResolver, @NotNull DistributionRequest request) throws DistributionException {
         return packageBuilder.createPackage(resourceResolver, request);
     }
 
-    @Nonnull
-    public DistributionPackage readPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull InputStream stream) throws DistributionException {
+    @NotNull
+    public DistributionPackage readPackage(@NotNull ResourceResolver resourceResolver, @NotNull InputStream stream) throws DistributionException {
         return packageBuilder.readPackage(resourceResolver, stream);
     }
 
-    @CheckForNull
-    public DistributionPackage getPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull String id) throws DistributionException {
+    @Nullable
+    public DistributionPackage getPackage(@NotNull ResourceResolver resourceResolver, @NotNull String id) throws DistributionException {
         return packageBuilder.getPackage(resourceResolver, id);
     }
 
-    public boolean installPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionPackage distributionPackage) throws DistributionException {
+    public boolean installPackage(@NotNull ResourceResolver resourceResolver, @NotNull DistributionPackage distributionPackage) throws DistributionException {
         return packageBuilder.installPackage(resourceResolver, distributionPackage);
     }
 
-    @Nonnull
+    @NotNull
     @Override
-    public DistributionPackageInfo installPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull InputStream stream) throws DistributionException {
+    public DistributionPackageInfo installPackage(@NotNull ResourceResolver resourceResolver, @NotNull InputStream stream) throws DistributionException {
         return packageBuilder.installPackage(resourceResolver, stream);
     }
 }
diff --git a/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java b/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java
index f832883..cffed94 100644
--- a/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java
+++ b/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java
@@ -40,16 +40,15 @@
 import org.apache.sling.distribution.packaging.impl.ResourceDistributionPackageCleanup;
 import org.apache.sling.distribution.serialization.DistributionContentSerializer;
 import org.apache.sling.distribution.util.impl.FileBackedMemoryOutputStream.MemoryUnit;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceRegistration;
 
-import javax.annotation.CheckForNull;
-import javax.annotation.Nonnull;
 import java.io.InputStream;
 import java.util.Dictionary;
 import java.util.Hashtable;
 import java.util.Map;
-
 /**
  * A package builder for Apache Jackrabbit FileVault based implementations.
  */
@@ -305,28 +304,28 @@
         return packageBuilder.getType();
     }
 
-    @Nonnull
-    public DistributionPackage createPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionRequest request) throws DistributionException {
+    @NotNull
+    public DistributionPackage createPackage(@NotNull ResourceResolver resourceResolver, @NotNull DistributionRequest request) throws DistributionException {
         return packageBuilder.createPackage(resourceResolver, request);
     }
 
-    @Nonnull
-    public DistributionPackage readPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull InputStream stream) throws DistributionException {
+    @NotNull
+    public DistributionPackage readPackage(@NotNull ResourceResolver resourceResolver, @NotNull InputStream stream) throws DistributionException {
         return packageBuilder.readPackage(resourceResolver, stream);
     }
 
-    @CheckForNull
-    public DistributionPackage getPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull String id) throws DistributionException {
+    @Nullable
+    public DistributionPackage getPackage(@NotNull ResourceResolver resourceResolver, @NotNull String id) throws DistributionException {
         return packageBuilder.getPackage(resourceResolver, id);
     }
 
-    public boolean installPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionPackage distributionPackage) throws DistributionException {
+    public boolean installPackage(@NotNull ResourceResolver resourceResolver, @NotNull DistributionPackage distributionPackage) throws DistributionException {
         return packageBuilder.installPackage(resourceResolver, distributionPackage);
     }
 
-    @Nonnull
+    @NotNull
     @Override
-    public DistributionPackageInfo installPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull InputStream stream) throws DistributionException {
+    public DistributionPackageInfo installPackage(@NotNull ResourceResolver resourceResolver, @NotNull InputStream stream) throws DistributionException {
         return packageBuilder.installPackage(resourceResolver, stream);
     }
 }
diff --git a/src/main/java/org/apache/sling/distribution/serialization/package-info.java b/src/main/java/org/apache/sling/distribution/serialization/package-info.java
index 8759b0e..6832ef7 100644
--- a/src/main/java/org/apache/sling/distribution/serialization/package-info.java
+++ b/src/main/java/org/apache/sling/distribution/serialization/package-info.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-@Version("0.1.0")
+@Version("0.1.1")
 package org.apache.sling.distribution.serialization;
 
 import aQute.bnd.annotation.Version;
diff --git a/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentQueueServlet.java b/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentQueueServlet.java
index d13e884..dffc64c 100644
--- a/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentQueueServlet.java
+++ b/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentQueueServlet.java
@@ -18,7 +18,6 @@
  */
 package org.apache.sling.distribution.servlet;
 
-import javax.annotation.Nonnull;
 import javax.servlet.ServletException;
 import java.io.IOException;
 
@@ -39,6 +38,7 @@
 import org.apache.sling.distribution.resources.DistributionResourceTypes;
 import org.apache.sling.distribution.packaging.DistributionPackageBuilder;
 import org.apache.sling.distribution.packaging.impl.DistributionPackageBuilderProvider;
+import org.jetbrains.annotations.NotNull;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -156,8 +156,8 @@
         return null;
     }
 
-    @Nonnull
-    private static DistributionQueue getQueueOrThrow(@Nonnull DistributionAgent agent, @Nonnull String queueName) {
+    @NotNull
+    private static DistributionQueue getQueueOrThrow(@NotNull DistributionAgent agent, @NotNull String queueName) {
         DistributionQueue queue = agent.getQueue(queueName);
         if (queue == null) {
             throw new IllegalArgumentException(String.format("Could not find queue %s", queueName));
diff --git a/src/main/java/org/apache/sling/distribution/servlet/DistributionTriggerServlet.java b/src/main/java/org/apache/sling/distribution/servlet/DistributionTriggerServlet.java
index fc3f771..ef19650 100644
--- a/src/main/java/org/apache/sling/distribution/servlet/DistributionTriggerServlet.java
+++ b/src/main/java/org/apache/sling/distribution/servlet/DistributionTriggerServlet.java
@@ -18,8 +18,6 @@
  */
 package org.apache.sling.distribution.servlet;
 
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
 import javax.servlet.ServletException;
 import java.io.IOException;
 import java.io.PrintWriter;
@@ -36,6 +34,8 @@
 import org.apache.sling.distribution.resources.DistributionResourceTypes;
 import org.apache.sling.distribution.trigger.DistributionRequestHandler;
 import org.apache.sling.distribution.trigger.DistributionTrigger;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -89,7 +89,7 @@
                 return null; // unknown
             }
 
-            public void handle(@Nullable ResourceResolver resourceResolver, @Nonnull DistributionRequest request) {
+            public void handle(@Nullable ResourceResolver resourceResolver, @NotNull DistributionRequest request) {
                 writeEvent(writer, request);
             }
         };
diff --git a/src/main/java/org/apache/sling/distribution/servlet/ServletJsonUtils.java b/src/main/java/org/apache/sling/distribution/servlet/ServletJsonUtils.java
index 4c4b925..8d7d9cf 100644
--- a/src/main/java/org/apache/sling/distribution/servlet/ServletJsonUtils.java
+++ b/src/main/java/org/apache/sling/distribution/servlet/ServletJsonUtils.java
@@ -19,7 +19,6 @@
 
 package org.apache.sling.distribution.servlet;
 
-import javax.annotation.Nullable;
 import javax.json.Json;
 import javax.json.JsonException;
 import javax.json.JsonObject;
@@ -32,6 +31,7 @@
 
 import org.apache.sling.api.SlingHttpServletResponse;
 import org.apache.sling.distribution.DistributionResponse;
+import org.jetbrains.annotations.Nullable;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/src/main/java/org/apache/sling/distribution/transport/impl/DistributionTransport.java b/src/main/java/org/apache/sling/distribution/transport/impl/DistributionTransport.java
index 1f13286..4257567 100644
--- a/src/main/java/org/apache/sling/distribution/transport/impl/DistributionTransport.java
+++ b/src/main/java/org/apache/sling/distribution/transport/impl/DistributionTransport.java
@@ -18,13 +18,12 @@
  */
 package org.apache.sling.distribution.transport.impl;
 
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.distribution.DistributionRequest;
 import org.apache.sling.distribution.common.DistributionException;
 import org.apache.sling.distribution.packaging.DistributionPackage;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 
 /**
  * A transport layer implementation to transport data between two (or eventually more) Sling instances.
@@ -43,8 +42,8 @@
      * @throws DistributionException if the {@link DistributionPackage}
      *                                        fails to be delivered to the target instance (e.g. because of network, I/O issues)
      */
-    void deliverPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionPackage distributionPackage,
-                        @Nonnull DistributionTransportContext context) throws DistributionException;
+    void deliverPackage(@NotNull ResourceResolver resourceResolver, @NotNull DistributionPackage distributionPackage,
+                        @NotNull DistributionTransportContext context) throws DistributionException;
 
     /**
      * Retrieve {@link DistributionPackage}s from a target Sling instance, which
@@ -59,7 +58,7 @@
      *                                        fail to be retrieved from the target instance
      */
     @Nullable
-    RemoteDistributionPackage retrievePackage(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionRequest request,
-                                              @Nonnull DistributionTransportContext context) throws DistributionException;
+    RemoteDistributionPackage retrievePackage(@NotNull ResourceResolver resourceResolver, @NotNull DistributionRequest request,
+                                              @NotNull DistributionTransportContext context) throws DistributionException;
 
 }
diff --git a/src/main/java/org/apache/sling/distribution/transport/impl/SimpleHttpDistributionTransport.java b/src/main/java/org/apache/sling/distribution/transport/impl/SimpleHttpDistributionTransport.java
index 86e33e2..3f7bd51 100644
--- a/src/main/java/org/apache/sling/distribution/transport/impl/SimpleHttpDistributionTransport.java
+++ b/src/main/java/org/apache/sling/distribution/transport/impl/SimpleHttpDistributionTransport.java
@@ -18,14 +18,11 @@
  */
 package org.apache.sling.distribution.transport.impl;
 
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
 import java.io.InputStream;
 import java.net.URI;
 import java.util.Collections;
 import java.util.Map;
 import java.util.UUID;
-
 import org.apache.commons.io.IOUtils;
 import org.apache.http.HttpHeaders;
 import org.apache.http.HttpHost;
@@ -52,6 +49,8 @@
 import org.apache.sling.distribution.transport.DistributionTransportSecret;
 import org.apache.sling.distribution.transport.DistributionTransportSecretProvider;
 import org.apache.sling.distribution.util.RequestUtils;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 
 /**
  * default HTTP implementation of {@link DistributionTransport}
@@ -109,8 +108,8 @@
         this.contextKeyExecutor = EXECUTOR_CONTEXT_KEY_PREFIX + "_" + getHostAndPort(distributionEndpoint.getUri()) + "_" + UUID.randomUUID();
     }
 
-    public void deliverPackage(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionPackage distributionPackage,
-                               @Nonnull DistributionTransportContext distributionContext) throws DistributionException {
+    public void deliverPackage(@NotNull ResourceResolver resourceResolver, @NotNull DistributionPackage distributionPackage,
+                               @NotNull DistributionTransportContext distributionContext) throws DistributionException {
         String hostAndPort = getHostAndPort(distributionEndpoint.getUri());
 
         DistributionPackageInfo info = distributionPackage.getInfo();
@@ -167,7 +166,7 @@
     }
 
     @Nullable
-    public RemoteDistributionPackage retrievePackage(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionRequest distributionRequest, @Nonnull DistributionTransportContext distributionContext) throws DistributionException {
+    public RemoteDistributionPackage retrievePackage(@NotNull ResourceResolver resourceResolver, @NotNull DistributionRequest distributionRequest, @NotNull DistributionTransportContext distributionContext) throws DistributionException {
         log.debug("pulling from {}", distributionEndpoint.getUri());
 
         try {
@@ -231,7 +230,7 @@
         return executor;
     }
 
-    private Executor buildAuthExecutor(@Nonnull Map<String, String> credentialsMap) {
+    private Executor buildAuthExecutor(@NotNull Map<String, String> credentialsMap) {
         return (credentialsMap.containsKey(AUTHORIZATION))
                 ? buildAuthExecutor(credentialsMap.get(AUTHORIZATION))
                 : buildAuthExecutor(credentialsMap.get(USERNAME), credentialsMap.get(PASSWORD));
diff --git a/src/main/java/org/apache/sling/distribution/trigger/DistributionRequestHandler.java b/src/main/java/org/apache/sling/distribution/trigger/DistributionRequestHandler.java
index d690ff0..a84b579 100644
--- a/src/main/java/org/apache/sling/distribution/trigger/DistributionRequestHandler.java
+++ b/src/main/java/org/apache/sling/distribution/trigger/DistributionRequestHandler.java
@@ -18,14 +18,12 @@
  */
 package org.apache.sling.distribution.trigger;
 
-import javax.annotation.CheckForNull;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-
 import aQute.bnd.annotation.ConsumerType;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.distribution.DistributionRequest;
 import org.apache.sling.distribution.component.impl.DistributionComponentKind;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 
 /**
  * An handler for {@link org.apache.sling.distribution.DistributionRequest}s passed to a
@@ -38,14 +36,14 @@
      * returns the name of the owner of this request handler.
      * @return
      */
-    @Nonnull
+    @NotNull
     String getName();
 
     /**
      * returns the kind of component that owns this request handler. Might be null, for unknown kinds of components.
      * @return
      */
-    @CheckForNull
+    @Nullable
     DistributionComponentKind getComponentKind();
 
     /**
@@ -53,6 +51,6 @@
      *
      * @param request a distribution request
      */
-    void handle(@Nullable ResourceResolver resourceResolver, @Nonnull DistributionRequest request);
+    void handle(@Nullable ResourceResolver resourceResolver, @NotNull DistributionRequest request);
 
 }
diff --git a/src/main/java/org/apache/sling/distribution/trigger/DistributionTrigger.java b/src/main/java/org/apache/sling/distribution/trigger/DistributionTrigger.java
index 820aa30..fa4a7ed 100644
--- a/src/main/java/org/apache/sling/distribution/trigger/DistributionTrigger.java
+++ b/src/main/java/org/apache/sling/distribution/trigger/DistributionTrigger.java
@@ -18,10 +18,9 @@
  */
 package org.apache.sling.distribution.trigger;
 
-import javax.annotation.Nonnull;
-
 import aQute.bnd.annotation.ConsumerType;
 import org.apache.sling.distribution.common.DistributionException;
+import org.jetbrains.annotations.NotNull;
 
 /**
  * A {@link DistributionTrigger} is responsible to trigger
@@ -39,7 +38,7 @@
      * @param requestHandler handler
      * @throws DistributionException if registration fails
      */
-    void register(@Nonnull DistributionRequestHandler requestHandler) throws DistributionException;
+    void register(@NotNull DistributionRequestHandler requestHandler) throws DistributionException;
 
     /**
      * unregister the given handler, if existing
@@ -47,5 +46,5 @@
      * @param requestHandler handler to unregister
      * @throws DistributionException if any error happen
      */
-    void unregister(@Nonnull DistributionRequestHandler requestHandler) throws DistributionException;
+    void unregister(@NotNull DistributionRequestHandler requestHandler) throws DistributionException;
 }
diff --git a/src/main/java/org/apache/sling/distribution/trigger/impl/AbstractJcrEventTrigger.java b/src/main/java/org/apache/sling/distribution/trigger/impl/AbstractJcrEventTrigger.java
index b89c2ae..60363b2 100644
--- a/src/main/java/org/apache/sling/distribution/trigger/impl/AbstractJcrEventTrigger.java
+++ b/src/main/java/org/apache/sling/distribution/trigger/impl/AbstractJcrEventTrigger.java
@@ -18,7 +18,6 @@
  */
 package org.apache.sling.distribution.trigger.impl;
 
-import javax.annotation.Nonnull;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 import javax.jcr.observation.Event;
@@ -47,6 +46,7 @@
 import org.apache.sling.distribution.util.DistributionJcrUtils;
 import org.apache.sling.distribution.util.impl.DistributionUtils;
 import org.apache.sling.jcr.api.SlingRepository;
+import org.jetbrains.annotations.NotNull;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -83,7 +83,7 @@
         this.scheduler = scheduler;
     }
 
-    public void register(@Nonnull DistributionRequestHandler requestHandler) throws DistributionException {
+    public void register(@NotNull DistributionRequestHandler requestHandler) throws DistributionException {
         Session session;
         try {
             session = getSession();
@@ -96,7 +96,7 @@
         }
     }
 
-    public void unregister(@Nonnull DistributionRequestHandler requestHandler) throws DistributionException {
+    public void unregister(@NotNull DistributionRequestHandler requestHandler) throws DistributionException {
         JcrEventDistributionTriggerListener listener = registeredListeners.get(requestHandler.toString());
         if (listener != null) {
             Session session;
diff --git a/src/main/java/org/apache/sling/distribution/trigger/impl/DistributionEventDistributeDistributionTrigger.java b/src/main/java/org/apache/sling/distribution/trigger/impl/DistributionEventDistributeDistributionTrigger.java
index 2e037a0..8d7539d 100644
--- a/src/main/java/org/apache/sling/distribution/trigger/impl/DistributionEventDistributeDistributionTrigger.java
+++ b/src/main/java/org/apache/sling/distribution/trigger/impl/DistributionEventDistributeDistributionTrigger.java
@@ -18,12 +18,10 @@
  */
 package org.apache.sling.distribution.trigger.impl;
 
-import javax.annotation.Nonnull;
 import java.util.Dictionary;
 import java.util.Hashtable;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
-
 import org.apache.sling.distribution.DistributionRequestType;
 import org.apache.sling.distribution.SimpleDistributionRequest;
 import org.apache.sling.distribution.component.impl.DistributionComponentKind;
@@ -32,6 +30,7 @@
 import org.apache.sling.distribution.common.DistributionException;
 import org.apache.sling.distribution.trigger.DistributionRequestHandler;
 import org.apache.sling.distribution.trigger.DistributionTrigger;
+import org.jetbrains.annotations.NotNull;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.event.Event;
@@ -60,7 +59,7 @@
         this.pathPrefix = pathPrefix;
     }
 
-    public void register(@Nonnull DistributionRequestHandler requestHandler) throws DistributionException {
+    public void register(@NotNull DistributionRequestHandler requestHandler) throws DistributionException {
         // register an event handler on distribution package install (on a certain path) which triggers the chain distribution of that same package
         Dictionary<String, Object> properties = new Hashtable<String, Object>();
 
@@ -79,7 +78,7 @@
         }
     }
 
-    public void unregister(@Nonnull DistributionRequestHandler requestHandler) throws DistributionException {
+    public void unregister(@NotNull DistributionRequestHandler requestHandler) throws DistributionException {
         ServiceRegistration serviceRegistration = registrations.get(requestHandler.toString());
         if (serviceRegistration != null) {
             serviceRegistration.unregister();
diff --git a/src/main/java/org/apache/sling/distribution/trigger/impl/DistributionEventDistributeDistributionTriggerFactory.java b/src/main/java/org/apache/sling/distribution/trigger/impl/DistributionEventDistributeDistributionTriggerFactory.java
index 83663be..b90b715 100644
--- a/src/main/java/org/apache/sling/distribution/trigger/impl/DistributionEventDistributeDistributionTriggerFactory.java
+++ b/src/main/java/org/apache/sling/distribution/trigger/impl/DistributionEventDistributeDistributionTriggerFactory.java
@@ -18,9 +18,7 @@
  */
 package org.apache.sling.distribution.trigger.impl;
 
-import javax.annotation.Nonnull;
 import java.util.Map;
-
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.ConfigurationPolicy;
@@ -32,6 +30,7 @@
 import org.apache.sling.distribution.common.DistributionException;
 import org.apache.sling.distribution.trigger.DistributionRequestHandler;
 import org.apache.sling.distribution.trigger.DistributionTrigger;
+import org.jetbrains.annotations.NotNull;
 import org.osgi.framework.BundleContext;
 
 @Component(metatype = true,
@@ -69,11 +68,11 @@
         trigger.disable();
     }
 
-    public void register(@Nonnull DistributionRequestHandler requestHandler) throws DistributionException {
+    public void register(@NotNull DistributionRequestHandler requestHandler) throws DistributionException {
         trigger.register(requestHandler);
     }
 
-    public void unregister(@Nonnull DistributionRequestHandler requestHandler) throws DistributionException {
+    public void unregister(@NotNull DistributionRequestHandler requestHandler) throws DistributionException {
         trigger.unregister(requestHandler);
     }
 }
diff --git a/src/main/java/org/apache/sling/distribution/trigger/impl/JcrEventDistributionTriggerFactory.java b/src/main/java/org/apache/sling/distribution/trigger/impl/JcrEventDistributionTriggerFactory.java
index 7a631b4..fa0914d 100644
--- a/src/main/java/org/apache/sling/distribution/trigger/impl/JcrEventDistributionTriggerFactory.java
+++ b/src/main/java/org/apache/sling/distribution/trigger/impl/JcrEventDistributionTriggerFactory.java
@@ -20,8 +20,6 @@
 
 import java.util.Map;
 
-import javax.annotation.Nonnull;
-
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.ConfigurationPolicy;
@@ -38,6 +36,7 @@
 import org.apache.sling.distribution.trigger.DistributionRequestHandler;
 import org.apache.sling.distribution.trigger.DistributionTrigger;
 import org.apache.sling.jcr.api.SlingRepository;
+import org.jetbrains.annotations.NotNull;
 
 @Component(metatype = true,
         label = "Apache Sling Distribution Trigger - Jcr Event Triggers Factory",
@@ -109,11 +108,11 @@
         trigger.disable();
     }
 
-    public void register(@Nonnull DistributionRequestHandler requestHandler) throws DistributionException {
+    public void register(@NotNull DistributionRequestHandler requestHandler) throws DistributionException {
         trigger.register(requestHandler);
     }
 
-    public void unregister(@Nonnull DistributionRequestHandler requestHandler) throws DistributionException {
+    public void unregister(@NotNull DistributionRequestHandler requestHandler) throws DistributionException {
         trigger.unregister(requestHandler);
     }
 }
diff --git a/src/main/java/org/apache/sling/distribution/trigger/impl/PersistedJcrEventDistributionTriggerFactory.java b/src/main/java/org/apache/sling/distribution/trigger/impl/PersistedJcrEventDistributionTriggerFactory.java
index 5128912..5d71e5b 100644
--- a/src/main/java/org/apache/sling/distribution/trigger/impl/PersistedJcrEventDistributionTriggerFactory.java
+++ b/src/main/java/org/apache/sling/distribution/trigger/impl/PersistedJcrEventDistributionTriggerFactory.java
@@ -18,9 +18,7 @@
  */
 package org.apache.sling.distribution.trigger.impl;
 
-import javax.annotation.Nonnull;
 import java.util.Map;
-
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.ConfigurationPolicy;
@@ -37,6 +35,7 @@
 import org.apache.sling.distribution.trigger.DistributionRequestHandler;
 import org.apache.sling.distribution.trigger.DistributionTrigger;
 import org.apache.sling.jcr.api.SlingRepository;
+import org.jetbrains.annotations.NotNull;
 import org.osgi.framework.BundleContext;
 
 @Component(metatype = true,
@@ -101,11 +100,11 @@
         trigger.disable();
     }
 
-    public void register(@Nonnull DistributionRequestHandler requestHandler) throws DistributionException {
+    public void register(@NotNull DistributionRequestHandler requestHandler) throws DistributionException {
         trigger.register(requestHandler);
     }
 
-    public void unregister(@Nonnull DistributionRequestHandler requestHandler) throws DistributionException {
+    public void unregister(@NotNull DistributionRequestHandler requestHandler) throws DistributionException {
         trigger.unregister(requestHandler);
     }
 }
diff --git a/src/main/java/org/apache/sling/distribution/trigger/impl/RemoteEventDistributionTrigger.java b/src/main/java/org/apache/sling/distribution/trigger/impl/RemoteEventDistributionTrigger.java
index 25f4047..ead81eb 100644
--- a/src/main/java/org/apache/sling/distribution/trigger/impl/RemoteEventDistributionTrigger.java
+++ b/src/main/java/org/apache/sling/distribution/trigger/impl/RemoteEventDistributionTrigger.java
@@ -18,13 +18,11 @@
  */
 package org.apache.sling.distribution.trigger.impl;
 
-import javax.annotation.Nonnull;
 import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.Future;
-
 import org.apache.http.HttpHost;
 import org.apache.http.HttpResponse;
 import org.apache.http.auth.AuthScope;
@@ -50,6 +48,7 @@
 import org.apache.sling.distribution.transport.impl.DistributionEndpoint;
 import org.apache.sling.distribution.trigger.DistributionRequestHandler;
 import org.apache.sling.distribution.trigger.DistributionTrigger;
+import org.jetbrains.annotations.NotNull;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -83,7 +82,7 @@
         this.scheduler = scheduler;
     }
 
-    public void register(@Nonnull DistributionRequestHandler requestHandler) throws DistributionException {
+    public void register(@NotNull DistributionRequestHandler requestHandler) throws DistributionException {
         try {
             log.info("applying remote event distribution trigger");
 
@@ -97,7 +96,7 @@
         }
     }
 
-    public void unregister(@Nonnull DistributionRequestHandler requestHandler) throws DistributionException {
+    public void unregister(@NotNull DistributionRequestHandler requestHandler) throws DistributionException {
         Future<HttpResponse> httpResponseFuture = requests.remove(requestHandler);
         if (httpResponseFuture != null) {
             httpResponseFuture.cancel(true);
diff --git a/src/main/java/org/apache/sling/distribution/trigger/impl/RemoteEventDistributionTriggerFactory.java b/src/main/java/org/apache/sling/distribution/trigger/impl/RemoteEventDistributionTriggerFactory.java
index 226ba4f..05d591a 100644
--- a/src/main/java/org/apache/sling/distribution/trigger/impl/RemoteEventDistributionTriggerFactory.java
+++ b/src/main/java/org/apache/sling/distribution/trigger/impl/RemoteEventDistributionTriggerFactory.java
@@ -18,9 +18,7 @@
  */
 package org.apache.sling.distribution.trigger.impl;
 
-import javax.annotation.Nonnull;
 import java.util.Map;
-
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.ConfigurationPolicy;
@@ -35,6 +33,7 @@
 import org.apache.sling.distribution.transport.DistributionTransportSecretProvider;
 import org.apache.sling.distribution.trigger.DistributionRequestHandler;
 import org.apache.sling.distribution.trigger.DistributionTrigger;
+import org.jetbrains.annotations.NotNull;
 import org.osgi.framework.BundleContext;
 
 @Component(metatype = true,
@@ -82,11 +81,11 @@
 
     }
 
-    public void register(@Nonnull DistributionRequestHandler requestHandler) throws DistributionException {
+    public void register(@NotNull DistributionRequestHandler requestHandler) throws DistributionException {
         trigger.register(requestHandler);
     }
 
-    public void unregister(@Nonnull DistributionRequestHandler requestHandler) throws DistributionException {
+    public void unregister(@NotNull DistributionRequestHandler requestHandler) throws DistributionException {
         trigger.unregister(requestHandler);
     }
 }
diff --git a/src/main/java/org/apache/sling/distribution/trigger/impl/ResourceEventDistributionTrigger.java b/src/main/java/org/apache/sling/distribution/trigger/impl/ResourceEventDistributionTrigger.java
index 29eb8e7..73f693b 100644
--- a/src/main/java/org/apache/sling/distribution/trigger/impl/ResourceEventDistributionTrigger.java
+++ b/src/main/java/org/apache/sling/distribution/trigger/impl/ResourceEventDistributionTrigger.java
@@ -18,12 +18,10 @@
  */
 package org.apache.sling.distribution.trigger.impl;
 
-import javax.annotation.Nonnull;
 import java.util.Dictionary;
 import java.util.Hashtable;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
-
 import org.apache.sling.api.SlingConstants;
 import org.apache.sling.distribution.DistributionRequestType;
 import org.apache.sling.distribution.SimpleDistributionRequest;
@@ -31,6 +29,7 @@
 import org.apache.sling.distribution.trigger.DistributionRequestHandler;
 import org.apache.sling.distribution.trigger.DistributionTrigger;
 import org.apache.sling.event.dea.DEAConstants;
+import org.jetbrains.annotations.NotNull;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.event.Event;
@@ -78,7 +77,7 @@
         registrations.clear();
     }
 
-    public void register(@Nonnull DistributionRequestHandler requestHandler) throws DistributionException {
+    public void register(@NotNull DistributionRequestHandler requestHandler) throws DistributionException {
         // register an event handler on path which triggers the agent on node / property changes / addition / removals
         Dictionary<String, Object> properties = new Hashtable<String, Object>();
         properties.put(EventConstants.EVENT_TOPIC, new String[]{SlingConstants.TOPIC_RESOURCE_ADDED,
@@ -96,7 +95,7 @@
         }
     }
 
-    public void unregister(@Nonnull DistributionRequestHandler requestHandler) throws DistributionException {
+    public void unregister(@NotNull DistributionRequestHandler requestHandler) throws DistributionException {
         ServiceRegistration serviceRegistration = registrations.get(requestHandler.toString());
         if (serviceRegistration != null) {
             serviceRegistration.unregister();
diff --git a/src/main/java/org/apache/sling/distribution/trigger/impl/ResourceEventDistributionTriggerFactory.java b/src/main/java/org/apache/sling/distribution/trigger/impl/ResourceEventDistributionTriggerFactory.java
index a816242..7a4c951 100644
--- a/src/main/java/org/apache/sling/distribution/trigger/impl/ResourceEventDistributionTriggerFactory.java
+++ b/src/main/java/org/apache/sling/distribution/trigger/impl/ResourceEventDistributionTriggerFactory.java
@@ -18,9 +18,7 @@
  */
 package org.apache.sling.distribution.trigger.impl;
 
-import javax.annotation.Nonnull;
 import java.util.Map;
-
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.ConfigurationPolicy;
@@ -34,6 +32,7 @@
 import org.apache.sling.distribution.trigger.DistributionRequestHandler;
 import org.apache.sling.distribution.trigger.DistributionTrigger;
 import org.apache.sling.jcr.api.SlingRepository;
+import org.jetbrains.annotations.NotNull;
 import org.osgi.framework.BundleContext;
 
 @Component(metatype = true,
@@ -75,11 +74,11 @@
         trigger.disable();
     }
 
-    public void register(@Nonnull DistributionRequestHandler requestHandler) throws DistributionException {
+    public void register(@NotNull DistributionRequestHandler requestHandler) throws DistributionException {
         trigger.register(requestHandler);
     }
 
-    public void unregister(@Nonnull DistributionRequestHandler requestHandler) throws DistributionException {
+    public void unregister(@NotNull DistributionRequestHandler requestHandler) throws DistributionException {
         trigger.unregister(requestHandler);
     }
 }
diff --git a/src/main/java/org/apache/sling/distribution/trigger/impl/ScheduledDistributionTrigger.java b/src/main/java/org/apache/sling/distribution/trigger/impl/ScheduledDistributionTrigger.java
index ad0464b..43f0ee3 100644
--- a/src/main/java/org/apache/sling/distribution/trigger/impl/ScheduledDistributionTrigger.java
+++ b/src/main/java/org/apache/sling/distribution/trigger/impl/ScheduledDistributionTrigger.java
@@ -18,11 +18,9 @@
  */
 package org.apache.sling.distribution.trigger.impl;
 
-import javax.annotation.Nonnull;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
-
 import org.apache.sling.api.resource.LoginException;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.resource.ResourceResolverFactory;
@@ -35,6 +33,7 @@
 import org.apache.sling.distribution.trigger.DistributionRequestHandler;
 import org.apache.sling.distribution.trigger.DistributionTrigger;
 import org.apache.sling.distribution.util.impl.DistributionUtils;
+import org.jetbrains.annotations.NotNull;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -79,7 +78,7 @@
         }
     }
 
-    public void register(@Nonnull DistributionRequestHandler requestHandler) throws DistributionException {
+    public void register(@NotNull DistributionRequestHandler requestHandler) throws DistributionException {
         try {
             ScheduleOptions options = scheduler.NOW(-1, secondsInterval);
             String jobName = getJobName(requestHandler);
@@ -100,7 +99,7 @@
         }
     }
 
-    public void unregister(@Nonnull DistributionRequestHandler requestHandler) throws DistributionException {
+    public void unregister(@NotNull DistributionRequestHandler requestHandler) throws DistributionException {
         String jobName = getJobName(requestHandler);
 
         boolean success = scheduler.unschedule(jobName);
diff --git a/src/main/java/org/apache/sling/distribution/trigger/impl/ScheduledDistributionTriggerFactory.java b/src/main/java/org/apache/sling/distribution/trigger/impl/ScheduledDistributionTriggerFactory.java
index 3248e56..a0109d3 100644
--- a/src/main/java/org/apache/sling/distribution/trigger/impl/ScheduledDistributionTriggerFactory.java
+++ b/src/main/java/org/apache/sling/distribution/trigger/impl/ScheduledDistributionTriggerFactory.java
@@ -18,9 +18,7 @@
  */
 package org.apache.sling.distribution.trigger.impl;
 
-import javax.annotation.Nonnull;
 import java.util.Map;
-
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.ConfigurationPolicy;
@@ -37,6 +35,7 @@
 import org.apache.sling.distribution.component.impl.SettingsUtils;
 import org.apache.sling.distribution.trigger.DistributionRequestHandler;
 import org.apache.sling.distribution.trigger.DistributionTrigger;
+import org.jetbrains.annotations.NotNull;
 import org.osgi.framework.BundleContext;
 
 @Component(metatype = true,
@@ -100,11 +99,11 @@
         trigger.disable();
     }
 
-    public void register(@Nonnull DistributionRequestHandler requestHandler) throws DistributionException {
+    public void register(@NotNull DistributionRequestHandler requestHandler) throws DistributionException {
         trigger.register(requestHandler);
     }
 
-    public void unregister(@Nonnull DistributionRequestHandler requestHandler) throws DistributionException {
+    public void unregister(@NotNull DistributionRequestHandler requestHandler) throws DistributionException {
         trigger.unregister(requestHandler);
     }
 }
diff --git a/src/main/java/org/apache/sling/distribution/util/DistributionJcrUtils.java b/src/main/java/org/apache/sling/distribution/util/DistributionJcrUtils.java
index 31c5ea3..a83321b 100644
--- a/src/main/java/org/apache/sling/distribution/util/DistributionJcrUtils.java
+++ b/src/main/java/org/apache/sling/distribution/util/DistributionJcrUtils.java
@@ -18,12 +18,12 @@
  */
 package org.apache.sling.distribution.util;
 
-import javax.annotation.Nonnull;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 import javax.jcr.observation.Event;
 
 import org.apache.jackrabbit.api.observation.JackrabbitEvent;
+import org.jetbrains.annotations.NotNull;
 
 /**
  * Utility class for JCR related distribution operations.
@@ -40,7 +40,7 @@
      * {@link javax.jcr.observation.ObservationManager#setUserData(String)} set to {@link #DO_NOT_DISTRIBUTE}
      * @throws javax.jcr.RepositoryException if retrieving 'userData' fails
      */
-    public static boolean isSafe(@Nonnull Event jcrEvent) throws RepositoryException {
+    public static boolean isSafe(@NotNull Event jcrEvent) throws RepositoryException {
         boolean safe = false;
         if (jcrEvent instanceof JackrabbitEvent && !((JackrabbitEvent) jcrEvent).isExternal()) {
             String userData = jcrEvent.getUserData();
@@ -58,7 +58,7 @@
      * @param session a {@link javax.jcr.Session}
      * @throws RepositoryException if retrieving the {@link javax.jcr.observation.ObservationManager} fails
      */
-    public static void setDoNotDistribute(@Nonnull Session session) throws RepositoryException {
+    public static void setDoNotDistribute(@NotNull Session session) throws RepositoryException {
         session.getWorkspace().getObservationManager().setUserData(DistributionJcrUtils.DO_NOT_DISTRIBUTE);
     }
 }
diff --git a/src/main/java/org/apache/sling/distribution/util/impl/ByteBufferBackedInputStream.java b/src/main/java/org/apache/sling/distribution/util/impl/ByteBufferBackedInputStream.java
index 68ff2bc..35e8bd0 100644
--- a/src/main/java/org/apache/sling/distribution/util/impl/ByteBufferBackedInputStream.java
+++ b/src/main/java/org/apache/sling/distribution/util/impl/ByteBufferBackedInputStream.java
@@ -18,8 +18,6 @@
  */
 package org.apache.sling.distribution.util.impl;
 
-import javax.annotation.Nonnull;
-
 import static java.lang.Math.min;
 
 import java.io.File;
@@ -28,6 +26,8 @@
 import java.io.InputStream;
 import java.nio.ByteBuffer;
 
+import org.jetbrains.annotations.NotNull;
+
 final class ByteBufferBackedInputStream extends InputStream {
 
     private final ByteBuffer memory;
@@ -54,7 +54,7 @@
         return memory.get() & 0xFF;
     }
 
-    public int read(@Nonnull byte[] bytes, int off, int len) throws IOException {
+    public int read(@NotNull byte[] bytes, int off, int len) throws IOException {
         if (!memory.hasRemaining()) {
             if (fileInputStream != null) {
                 return fileInputStream.read(bytes, off, len);
diff --git a/src/main/java/org/apache/sling/distribution/util/package-info.java b/src/main/java/org/apache/sling/distribution/util/package-info.java
index 8afe5e2..01f959e 100644
--- a/src/main/java/org/apache/sling/distribution/util/package-info.java
+++ b/src/main/java/org/apache/sling/distribution/util/package-info.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-@Version("0.1.0") package org.apache.sling.distribution.util;
+@Version("0.1.1") package org.apache.sling.distribution.util;
 
 import aQute.bnd.annotation.Version;
 
diff --git a/src/test/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgentTest.java b/src/test/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgentTest.java
index cb2b5e6..e729c7c 100644
--- a/src/test/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgentTest.java
+++ b/src/test/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgentTest.java
@@ -22,8 +22,6 @@
 import java.util.Arrays;
 import java.util.Collections;
 
-import javax.annotation.Nonnull;
-
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.resource.ResourceResolverFactory;
 import org.apache.sling.distribution.DistributionRequest;
@@ -48,6 +46,7 @@
 import org.apache.sling.distribution.trigger.DistributionRequestHandler;
 import org.apache.sling.distribution.trigger.DistributionTrigger;
 import org.apache.sling.jcr.api.SlingRepository;
+import org.jetbrains.annotations.NotNull;
 import org.junit.Test;
 import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
@@ -357,13 +356,13 @@
         volatile boolean registered;
 
         @Override
-        public void register(@Nonnull DistributionRequestHandler requestHandler)
+        public void register(@NotNull DistributionRequestHandler requestHandler)
                 throws DistributionException {
             registered = true;
         }
 
         @Override
-        public void unregister(@Nonnull DistributionRequestHandler requestHandler)
+        public void unregister(@NotNull DistributionRequestHandler requestHandler)
                 throws DistributionException {
             registered = false;
         }
