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 160d0ee..92e3fe1 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
@@ -50,15 +50,17 @@
     private final Logger log = LoggerFactory.getLogger(getClass());
     private final DistributionPackageBuilderProvider packageBuilderProvider;
     private final String name;
+    private boolean dropInvalidItems;
 
     private final static String PACKAGE_TYPE = "agentexporter";
 
     private DistributionAgent agent;
     private String queueName;
 
-    public AgentDistributionPackageExporter(String queueName, DistributionAgent agent, DistributionPackageBuilderProvider packageBuilderProvider, String name) {
+    public AgentDistributionPackageExporter(String queueName, DistributionAgent agent, DistributionPackageBuilderProvider packageBuilderProvider, String name, boolean dropInvalidItems) {
         this.packageBuilderProvider = packageBuilderProvider;
         this.name = name;
+        this.dropInvalidItems = dropInvalidItems;
 
         if (agent == null || packageBuilderProvider == null) {
             throw new IllegalArgumentException("Agent and package builder are required");
@@ -99,7 +101,12 @@
 
                         packageProcessor.process(new AgentDistributionPackage(distributionPackage, queue, entry.getId()));
                     } else {
-                        log.warn("cannot get package {}", info);
+                        if (dropInvalidItems) {
+                            queue.remove(entry.getId());
+                            log.warn("ghost package: cannot get package {} dropping from queue", info);
+                        } else {
+                            log.warn("ghost package: cannot get package {} keeping in queue", info);
+                        }
                     }
                 } else {
                     log.warn("cannot find package builder with type {}", info.getType());
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 73b9b1f..5368e92 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
@@ -34,6 +34,7 @@
 import org.apache.sling.distribution.agent.DistributionAgent;
 import org.apache.sling.distribution.common.DistributionException;
 import org.apache.sling.distribution.component.impl.DistributionComponentConstants;
+import org.apache.sling.distribution.component.impl.SettingsUtils;
 import org.apache.sling.distribution.packaging.DistributionPackage;
 import org.apache.sling.distribution.packaging.DistributionPackageBuilderProvider;
 import org.apache.sling.distribution.packaging.DistributionPackageExporter;
@@ -61,10 +62,14 @@
     @Property(label = "Queue", description = "The name of the queue from which the packages should be exported.")
     private static final String QUEUE_NAME = "queue";
 
+    @Property(label = "Drop invalid queue items", description = "Remove invalid items from the queue.", boolValue = false)
+    private static final String DROP_INVALID_QUEUE_ITEMS = "drop.invalid.items";
+
     @Property(name = "agent.target", label = "The target reference for the DistributionAgent that will be used to export packages.")
     @Reference(name = "agent")
     private DistributionAgent agent;
 
+
     @Reference
     private DistributionPackageBuilderProvider packageBuilderProvider;
 
@@ -75,10 +80,14 @@
     public void activate(Map<String, Object> config) throws Exception {
 
         String queueName = PropertiesUtil.toString(config.get(QUEUE_NAME), DistributionQueueDispatchingStrategy.DEFAULT_QUEUE_NAME);
+        queueName = SettingsUtils.removeEmptyEntry(queueName);
+        queueName = queueName == null ? DistributionQueueDispatchingStrategy.DEFAULT_QUEUE_NAME : queueName;
+
         String name = PropertiesUtil.toString(config.get(NAME), "");
+        boolean dropInvalidItems = PropertiesUtil.toBoolean(config.get(DROP_INVALID_QUEUE_ITEMS), false);
 
 
-        packageExporter = new AgentDistributionPackageExporter(queueName, agent, packageBuilderProvider, name);
+        packageExporter = new AgentDistributionPackageExporter(queueName, agent, packageBuilderProvider, name, dropInvalidItems);
     }
 
     public void exportPackages(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionRequest distributionRequest, @Nonnull DistributionPackageProcessor packageProcessor) throws DistributionException {
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 1c62e57..24a740a 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
@@ -98,8 +98,8 @@
         List<Job> jobs = getJobs(0, 1);
         if (jobs.size() > 0) {
             Job firstItem = jobs.get(0);
-            log.debug("first item in the queue is {}, retried {} times", firstItem.getId(), firstItem.getRetryCount());
-            return firstItem;
+            log.debug("first item in the queue is {}, retried {} times, state {}",
+                    new Object[]{ firstItem.getId(), firstItem.getRetryCount(), firstItem.getJobState() });            return firstItem;
         }
         return null;
     }
@@ -110,6 +110,9 @@
 
         if (job == null) {
             log.warn("item with id {} cannot be found", itemId);
+        } else {
+            log.debug("retrieved item with id {}, retried {} times, state {}",
+                    new Object[]{ job.getId(), job.getRetryCount(), job.getJobState() });
         }
 
         return job;
diff --git a/src/test/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporterTest.java b/src/test/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporterTest.java
index e6351c8..638816f 100644
--- a/src/test/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporterTest.java
+++ b/src/test/java/org/apache/sling/distribution/packaging/impl/exporter/AgentDistributionPackageExporterTest.java
@@ -42,7 +42,7 @@
     @Test
     public void testTestExport() throws Exception {
         AgentDistributionPackageExporter distributionPackageExporter = new AgentDistributionPackageExporter(null,
-                mock(DistributionAgent.class), mock(DistributionPackageBuilderProvider.class), null);
+                mock(DistributionAgent.class), mock(DistributionPackageBuilderProvider.class), null, true);
         ResourceResolver resourceResolver = mock(ResourceResolver.class);
         String[] args = new String[0]; // vargarg doesn't match and causes compiler warning
         DistributionRequest distributionRequest = new SimpleDistributionRequest(DistributionRequestType.TEST, args);
