diff --git a/src/main/java/org/apache/sling/feature/analyser/task/impl/CheckContentPackageForInstallables.java b/src/main/java/org/apache/sling/feature/analyser/task/impl/CheckContentPackageForInstallables.java
index 167b584..b319eba 100644
--- a/src/main/java/org/apache/sling/feature/analyser/task/impl/CheckContentPackageForInstallables.java
+++ b/src/main/java/org/apache/sling/feature/analyser/task/impl/CheckContentPackageForInstallables.java
@@ -29,6 +29,8 @@
  */
 public class CheckContentPackageForInstallables implements AnalyserTask {
 
+    static final String CFG_CHECK_PACKAGES = "embedded-packages";
+
     @Override
     public String getName() {
         return "Content Packages Installable Check";
@@ -42,21 +44,24 @@
     @Override
     public void execute(final AnalyserTaskContext ctx)
             throws Exception {
+        final boolean checkPcks = Boolean.parseBoolean(ctx.getConfiguration().getOrDefault(CFG_CHECK_PACKAGES, "false"));
+
         final List<ContentPackageDescriptor> contentPackages = new ArrayList<>();
         for (final ArtifactDescriptor d : ctx.getFeatureDescriptor().getArtifactDescriptors()) {
             if (d instanceof ContentPackageDescriptor) {
                 contentPackages.add((ContentPackageDescriptor) d);
             }
         }
-        if (contentPackages.isEmpty()) {
-            return;
-        }
 
         for (final ContentPackageDescriptor cp : contentPackages) {
             if (cp.getArtifactFile() ==  null) {
                 ctx.reportArtifactError(cp.getArtifact().getId(), "Content package " + cp.getName() + " is not resolved and can not be checked.");
                 continue;
             }
+            if ( checkPcks && cp.isEmbeddedInContentPackage() ) {
+                ctx.reportArtifactError(cp.getContentPackage().getId(), "Content package " + cp.getContentPackage().getId() +
+                        " embedds content package " + cp.getName());
+            }
             if (!cp.hasEmbeddedArtifacts() || cp.isEmbeddedInContentPackage()) {
                 continue;
             }
diff --git a/src/main/java/org/apache/sling/feature/scanner/impl/ArtifactDescriptorImpl.java b/src/main/java/org/apache/sling/feature/scanner/impl/ArtifactDescriptorImpl.java
index 7ed745f..cbfbdf7 100644
--- a/src/main/java/org/apache/sling/feature/scanner/impl/ArtifactDescriptorImpl.java
+++ b/src/main/java/org/apache/sling/feature/scanner/impl/ArtifactDescriptorImpl.java
@@ -61,7 +61,7 @@
         Manifest mf = null;
         if ( hasManifest ) {
             try {
-                final Manifest origMf = BundleDescriptorImpl.getManifest(url);
+                final Manifest origMf = url == null ? null : BundleDescriptorImpl.getManifest(url);
                 if ( origMf != null ) {
                     mf = new Manifest(origMf);
                 } else if ( !isManifestOptional ) {
diff --git a/src/test/java/org/apache/sling/feature/analyser/task/impl/AnalyserTaskContextImpl.java b/src/test/java/org/apache/sling/feature/analyser/task/impl/AnalyserTaskContextImpl.java
index 8dff562..3a5d343 100644
--- a/src/test/java/org/apache/sling/feature/analyser/task/impl/AnalyserTaskContextImpl.java
+++ b/src/test/java/org/apache/sling/feature/analyser/task/impl/AnalyserTaskContextImpl.java
@@ -38,10 +38,12 @@
 
     private final List<String> errors = new ArrayList<>();
 
+    private FeatureDescriptor featureDescriptor;
+
     public AnalyserTaskContextImpl() {
         this("g:a:1");
     }
-    
+
     public AnalyserTaskContextImpl(String artifactId) {
         f = new Feature(ArtifactId.parse(artifactId));
     }
@@ -53,7 +55,11 @@
 
     @Override
     public FeatureDescriptor getFeatureDescriptor() {
-        return null;
+        return featureDescriptor;
+    }
+
+    public void setFeatureDescriptor(final FeatureDescriptor fd) {
+        this.featureDescriptor = fd;
     }
 
     @Override
@@ -115,6 +121,6 @@
 
     @Override
     public void reportConfigurationWarning(Configuration cfg, String message) {
-        
+
     }
 }
\ No newline at end of file
diff --git a/src/test/java/org/apache/sling/feature/analyser/task/impl/CheckContentPackagesForInstallablesTest.java b/src/test/java/org/apache/sling/feature/analyser/task/impl/CheckContentPackagesForInstallablesTest.java
new file mode 100644
index 0000000..7e1fd99
--- /dev/null
+++ b/src/test/java/org/apache/sling/feature/analyser/task/impl/CheckContentPackagesForInstallablesTest.java
@@ -0,0 +1,83 @@
+/*
+ * 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.feature.analyser.task.impl;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.net.URL;
+
+import org.apache.sling.feature.Artifact;
+import org.apache.sling.feature.ArtifactId;
+import org.apache.sling.feature.scanner.FeatureDescriptor;
+import org.apache.sling.feature.scanner.impl.ContentPackageDescriptor;
+import org.apache.sling.feature.scanner.impl.FeatureDescriptorImpl;
+import org.junit.Test;
+
+public class CheckContentPackagesForInstallablesTest {
+
+    @Test public void testEmptyDescriptor() throws Exception {
+        final CheckContentPackageForInstallables analyser = new CheckContentPackageForInstallables();
+        final AnalyserTaskContextImpl ctx = new AnalyserTaskContextImpl();
+
+        final FeatureDescriptor fd = new FeatureDescriptorImpl(ctx.getFeature());
+        ctx.setFeatureDescriptor(fd);
+
+        analyser.execute(ctx);
+        assertTrue(ctx.getErrors().isEmpty());
+    }
+
+    @Test public void testEmptyContentPackage() throws Exception {
+        final CheckContentPackageForInstallables analyser = new CheckContentPackageForInstallables();
+        final AnalyserTaskContextImpl ctx = new AnalyserTaskContextImpl();
+
+        final FeatureDescriptor fd = new FeatureDescriptorImpl(ctx.getFeature());
+        ctx.setFeatureDescriptor(fd);
+
+        final ContentPackageDescriptor cpd = new ContentPackageDescriptor("content", new Artifact(ArtifactId.parse("g:c:1")), new URL("file:/foo"));
+        fd.getArtifactDescriptors().add(cpd);
+
+        analyser.execute(ctx);
+        assertTrue(ctx.getErrors().toString(), ctx.getErrors().isEmpty());
+
+        ctx.putConfigurationValue(CheckContentPackageForInstallables.CFG_CHECK_PACKAGES, "true");
+        analyser.execute(ctx);
+        assertTrue(ctx.getErrors().toString(), ctx.getErrors().isEmpty());
+    }
+
+    @Test public void testEmbeddedContentPackage() throws Exception {
+        final CheckContentPackageForInstallables analyser = new CheckContentPackageForInstallables();
+        final AnalyserTaskContextImpl ctx = new AnalyserTaskContextImpl();
+
+        final FeatureDescriptor fd = new FeatureDescriptorImpl(ctx.getFeature());
+        ctx.setFeatureDescriptor(fd);
+
+        final ContentPackageDescriptor cpd = new ContentPackageDescriptor("content", new Artifact(ArtifactId.parse("g:c:1")), new URL("file:/foo"));
+        fd.getArtifactDescriptors().add(cpd);
+
+        final ContentPackageDescriptor embedded = new ContentPackageDescriptor("embedded", new Artifact(ArtifactId.parse("g:e:1")), new URL("file:/foo"));
+        embedded.setContentPackageInfo(cpd.getArtifact(), "/path");
+        fd.getArtifactDescriptors().add(embedded);
+
+        analyser.execute(ctx);
+        assertTrue(ctx.getErrors().toString(), ctx.getErrors().isEmpty());
+
+        ctx.putConfigurationValue(CheckContentPackageForInstallables.CFG_CHECK_PACKAGES, "true");
+        analyser.execute(ctx);
+        assertFalse(ctx.getErrors().toString(), ctx.getErrors().isEmpty());
+    }
+}
