diff --git a/src/test/java/org/apache/sling/distribution/DistributionBaseIT.java b/src/test/java/org/apache/sling/distribution/DistributionBaseIT.java
index 98ba6c6..75a1603 100644
--- a/src/test/java/org/apache/sling/distribution/DistributionBaseIT.java
+++ b/src/test/java/org/apache/sling/distribution/DistributionBaseIT.java
@@ -27,7 +27,6 @@
 import org.apache.sling.testing.paxexam.SlingOptions;
 import org.apache.sling.testing.paxexam.TestSupport;
 import org.ops4j.pax.exam.Configuration;
-import org.ops4j.pax.exam.CoreOptions;
 import org.ops4j.pax.exam.Option;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Filter;
@@ -36,8 +35,6 @@
 
 import javax.inject.Inject;
 
-import java.io.File;
-
 import static org.apache.sling.testing.paxexam.SlingOptions.logback;
 import static org.apache.sling.testing.paxexam.SlingOptions.slingDistribution;
 import static org.apache.sling.testing.paxexam.SlingOptions.slingQuickstartOakTar;
diff --git a/src/test/java/org/apache/sling/distribution/packaging/DistributionPackageInfoTest.java b/src/test/java/org/apache/sling/distribution/packaging/DistributionPackageInfoTest.java
new file mode 100644
index 0000000..7be009a
--- /dev/null
+++ b/src/test/java/org/apache/sling/distribution/packaging/DistributionPackageInfoTest.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.sling.distribution.packaging;
+
+import org.junit.Test;
+
+public class DistributionPackageInfoTest {
+
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testInvalid(){
+        new DistributionPackageInfo(null);
+    }
+}
diff --git a/src/test/java/org/apache/sling/distribution/packaging/impl/InMemoryDistributionPackageBuilderTest.java b/src/test/java/org/apache/sling/distribution/packaging/impl/InMemoryDistributionPackageBuilderTest.java
index 5ed48ad..b660feb 100644
--- a/src/test/java/org/apache/sling/distribution/packaging/impl/InMemoryDistributionPackageBuilderTest.java
+++ b/src/test/java/org/apache/sling/distribution/packaging/impl/InMemoryDistributionPackageBuilderTest.java
@@ -18,32 +18,97 @@
  */
 package org.apache.sling.distribution.packaging.impl;
 
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.verify;
+
+import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.util.HashMap;
+import java.util.Map;
 
 import org.apache.commons.io.IOUtils;
+import org.apache.commons.io.output.ByteArrayOutputStream;
+import org.apache.sling.api.resource.LoginException;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.distribution.DistributionRequestType;
 import org.apache.sling.distribution.SimpleDistributionRequest;
 import org.apache.sling.distribution.common.DistributionException;
 import org.apache.sling.distribution.packaging.DistributionPackage;
+import org.apache.sling.distribution.packaging.DistributionPackageInfo;
 import org.apache.sling.distribution.packaging.PackageInstallHook;
 import org.apache.sling.distribution.serialization.DistributionContentSerializer;
 import org.apache.sling.distribution.serialization.DistributionExportOptions;
+import org.apache.sling.testing.mock.sling.MockSling;
+import org.apache.sling.testing.mock.sling.ResourceResolverType;
+import org.junit.Before;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.runners.MockitoJUnitRunner;
 
-import static org.junit.Assert.assertNotNull;
-import static org.mockito.Mockito.mock;
-
+@RunWith(MockitoJUnitRunner.class)
 public class InMemoryDistributionPackageBuilderTest {
 
+    @Mock
+    private PackageInstallHook installHook;
+    
+    private ResourceResolver resolver;
+    private InMemoryDistributionPackageBuilder builder;
+    
+
+    @SuppressWarnings("deprecation")
+    @Before
+    public void before() throws LoginException {
+        resolver = MockSling.newResourceResolver(ResourceResolverType.JCR_OAK);
+        builder = new InMemoryDistributionPackageBuilder("name", new InMemDistributionContentSerializer(), new String[0], new String[0], installHook);
+    }
+
     @Test
-    public void testCreatePackage() throws Exception {
-        PackageInstallHook postInstallHook = new NoopPackageInstallHook();
-        InMemoryDistributionPackageBuilder builder = new InMemoryDistributionPackageBuilder("name", new InMemDistributionContentSerializer(), new String[0], new String[0], postInstallHook);
-        DistributionPackage pkg = builder.createPackageForAdd(mock(ResourceResolver.class), new SimpleDistributionRequest(DistributionRequestType.ADD, false, "/test"));
+    public void testReadPackage() throws Exception {
+        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+        Map<String, Object> info = new HashMap<String, Object>();
+        info.put("test1", "value1");
+        DistributionPackageUtils.writeInfo(outputStream, info);
+        InputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray());
+
+        DistributionPackage distPackage = builder.readPackage(resolver, inputStream);
+        DistributionPackageInfo outInfo = distPackage.getInfo();
+        assertThat(outInfo.get("test1", String.class), equalTo("value1"));
+    }
+    
+    @Test
+    public void testGetPackageInvalid() throws Exception {
+        
+    }
+    
+    @Test
+    public void testGetPackageSimple() throws Exception {
+        String id = "invalid";
+        DistributionPackage distPackage = builder.getPackage(resolver, id);
+        assertThat(distPackage, nullValue());
+    }
+    
+    @Test
+    public void testInstallPackage() throws Exception {
+        SimpleDistributionRequest distributionRequest = new SimpleDistributionRequest(DistributionRequestType.ADD, false, "/test");
+        DistributionPackage pkg = builder.createPackage(resolver, distributionRequest);
         assertNotNull(pkg.createInputStream());
+        builder.installPackage(resolver, pkg);
+        verify(installHook).onPostAdd(Mockito.eq(resolver), Mockito.eq(pkg));
+    }
+    
+    @Test
+    public void testDeletePackage() throws Exception {
+        SimpleDistributionRequest distributionRequest = new SimpleDistributionRequest(DistributionRequestType.DELETE, false, "/test");
+        DistributionPackage pkg = builder.createPackage(resolver, distributionRequest);
+        builder.installPackage(resolver, pkg);
+        verify(installHook).onPreRemove(Mockito.eq(resolver), Mockito.eq(pkg));
     }
 
     private final class InMemDistributionContentSerializer implements DistributionContentSerializer {
diff --git a/src/test/java/org/apache/sling/distribution/packaging/impl/SimpleDistributionPackageTest.java b/src/test/java/org/apache/sling/distribution/packaging/impl/SimpleDistributionPackageTest.java
index 1730475..9e419bb 100644
--- a/src/test/java/org/apache/sling/distribution/packaging/impl/SimpleDistributionPackageTest.java
+++ b/src/test/java/org/apache/sling/distribution/packaging/impl/SimpleDistributionPackageTest.java
@@ -19,6 +19,8 @@
 package org.apache.sling.distribution.packaging.impl;
 
 import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
 import java.util.Arrays;
 
 import org.apache.commons.io.IOUtils;
@@ -27,27 +29,73 @@
 import org.apache.sling.distribution.SimpleDistributionRequest;
 import org.apache.sling.distribution.packaging.impl.SimpleDistributionPackage;
 import org.junit.Test;
+import org.mockito.Mockito;
 
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.nullValue;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 /**
  * Testcase for {@link SimpleDistributionPackage}
  */
 public class SimpleDistributionPackageTest {
 
+    private static final String DSTRPCK_DELETE = "DSTRPCK:DELETE|/abc,/c";
+
+    @Test
+    public void testInvalid() {
+        String id = "invalid";
+        SimpleDistributionPackage pkg = SimpleDistributionPackage.fromIdString(id, "");
+        assertThat(pkg, nullValue());
+    }
+    
+    @Test
+    public void testInvalid2() {
+        String id = "DSTRPCK:";
+        SimpleDistributionPackage pkg = SimpleDistributionPackage.fromIdString(id, "");
+        assertThat(pkg, nullValue());
+    }
+    
+    @Test
+    public void testInvalid3() {
+        String id = "DSTRPCK:a|b|c";
+        SimpleDistributionPackage pkg = SimpleDistributionPackage.fromIdString(id, "");
+        assertThat(pkg, nullValue());
+    }
+    
+    @Test
+    public void testFromStreamError() throws IOException {
+        InputStream stream = mock(InputStream.class);
+        when(stream.read(Mockito.any(byte[].class), Mockito.eq(0), Mockito.anyInt())).thenThrow(new IOException("Expected"));
+        SimpleDistributionPackage pkg = SimpleDistributionPackage.fromStream(stream, "ADD");
+        assertThat(pkg, nullValue());
+    }
+    
     @Test
     public void testCreatedAndReadPackagesEquality() throws Exception {
-        DistributionRequest request = new SimpleDistributionRequest(DistributionRequestType.DELETE, "/abc");
+        DistributionRequest request = new SimpleDistributionRequest(DistributionRequestType.DELETE, "/abc", "/c");
         SimpleDistributionPackage createdPackage = new SimpleDistributionPackage(request, "VOID");
-        SimpleDistributionPackage readPackage = SimpleDistributionPackage.fromStream(new ByteArrayInputStream(("DSTRPCK:DELETE|/abc").getBytes()), "VOID");
+        assertThat(createdPackage.toString(), equalTo(DSTRPCK_DELETE));
+        // Just to run the code
+        createdPackage.acquire();
+        createdPackage.release();
+        createdPackage.close();
+        createdPackage.delete();
+        
+        SimpleDistributionPackage readPackage = SimpleDistributionPackage.fromStream(new ByteArrayInputStream(DSTRPCK_DELETE.getBytes()), "VOID");
         assertNotNull(readPackage);
+        assertEquals(DSTRPCK_DELETE.length(), readPackage.getSize());
         assertEquals(createdPackage.getType(), readPackage.getType());
         assertEquals(createdPackage.getInfo().getRequestType(), readPackage.getInfo().getRequestType());
         assertEquals(Arrays.toString(createdPackage.getInfo().getPaths()), Arrays.toString(readPackage.getInfo().getPaths()));
         assertEquals(createdPackage.getId(), readPackage.getId());
         assertTrue(IOUtils.contentEquals(createdPackage.createInputStream(), readPackage.createInputStream()));
+        
     }
 
     @Test
diff --git a/src/test/java/org/apache/sling/distribution/queue/impl/resource/ResourceQueueIT.java b/src/test/java/org/apache/sling/distribution/queue/impl/resource/ResourceQueueIT.java
index dad0fe9..552bda6 100644
--- a/src/test/java/org/apache/sling/distribution/queue/impl/resource/ResourceQueueIT.java
+++ b/src/test/java/org/apache/sling/distribution/queue/impl/resource/ResourceQueueIT.java
@@ -31,6 +31,7 @@
 import org.apache.sling.distribution.queue.DistributionQueueItem;
 import org.apache.sling.distribution.DistributionBaseIT;
 import org.apache.sling.distribution.queue.spi.DistributionQueue;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.ops4j.pax.exam.junit.PaxExam;
@@ -48,6 +49,7 @@
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
+@Ignore
 @RunWith(PaxExam.class)
 public class ResourceQueueIT extends DistributionBaseIT {
 
diff --git a/src/test/resources/logback.xml b/src/test/resources/logback.xml
new file mode 100644
index 0000000..474e4ca
--- /dev/null
+++ b/src/test/resources/logback.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+<configuration>
+  <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
+    <encoder>
+      <pattern>%date %level [%thread] %logger{10} [%file : %line] %msg - %mdc %n</pattern>
+    </encoder>
+  </appender>
+
+  <root level="info">
+    <appender-ref ref="console"/>
+  </root>
+</configuration>
