diff --git a/src/main/java/org/apache/sling/feature/cpconverter/handlers/AbstractConfigurationEntryHandler.java b/src/main/java/org/apache/sling/feature/cpconverter/handlers/AbstractConfigurationEntryHandler.java
index bb84b81..fa0b514 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/handlers/AbstractConfigurationEntryHandler.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/handlers/AbstractConfigurationEntryHandler.java
@@ -48,10 +48,6 @@
         String runMode;
         // we are pretty sure it matches, here
         if (matcher.matches()) {
-            if (enforceConfigurationBelowConfigFolder && !"config".equals(matcher.group("foldername"))) {
-                throw new IllegalStateException("OSGi configuration are only considered if placed below a folder called 'config', but the configuration at '"+ path + "' is placed outside!");
-            }
-            
             String pid = matcher.group("pid");
 
             int idx = pid.lastIndexOf('/');
@@ -83,6 +79,11 @@
                 Objects.requireNonNull(converter.getMainPackageAssembler()).addEntry(path, archive, entry);
                 return;
             }
+
+            if (enforceConfigurationBelowConfigFolder && !"config".equals(matcher.group("foldername"))) {
+                throw new IllegalStateException("OSGi configuration are only considered if placed below a folder called 'config', but the configuration at '"+ path + "' is placed outside!");
+            }
+
             // there is a specified RunMode
             runMode = matcher.group("runmode");
 
diff --git a/src/test/java/org/apache/sling/feature/cpconverter/handlers/ConfigEntryHandlerTest.java b/src/test/java/org/apache/sling/feature/cpconverter/handlers/ConfigEntryHandlerTest.java
index bc817a1..f323adf 100644
--- a/src/test/java/org/apache/sling/feature/cpconverter/handlers/ConfigEntryHandlerTest.java
+++ b/src/test/java/org/apache/sling/feature/cpconverter/handlers/ConfigEntryHandlerTest.java
@@ -44,6 +44,7 @@
 import org.apache.sling.feature.cpconverter.ContentPackage2FeatureModelConverter;
 import org.apache.sling.feature.cpconverter.features.DefaultFeaturesManager;
 import org.apache.sling.feature.cpconverter.features.FeaturesManager;
+import org.apache.sling.feature.cpconverter.vltpkg.VaultPackageAssembler;
 import org.apache.sling.feature.io.json.FeatureJSONReader;
 import org.apache.sling.feature.io.json.FeatureJSONWriter;
 import org.jetbrains.annotations.NotNull;
@@ -122,9 +123,27 @@
     }
 
     @Test
-    public void testConfigPathBelowInstallFolder() {
+    public void testConfigPathBelowInstallFolder() throws Exception {
         ConfigurationEntryHandler handler = new ConfigurationEntryHandler();
         handler.setEnforceConfgurationBelowConfigFolder(true);
-        assertThrows(IllegalStateException.class, () -> { handler.handle("/jcr_root/apps/myapp/install/myconfig.config", null, null, null); });
+        Archive archive = Mockito.mock(Archive.class);
+        Entry entry = Mockito.mock(Entry.class);
+        Mockito.when(archive.openInputStream(entry)).thenReturn(new ByteArrayInputStream(new byte[0]));
+        assertThrows(IllegalStateException.class, () -> {
+            handler.handle("/jcr_root/apps/myapp/install/myconfig.config", archive, entry, Mockito.mock(ContentPackage2FeatureModelConverter.class));
+        });
+    }
+
+    @Test
+    public void testConfigPathNoneConfigBelowInstallFolder() throws Exception {
+        XmlConfigurationEntryHandler handler = new XmlConfigurationEntryHandler();
+        handler.setEnforceConfgurationBelowConfigFolder(true);
+        Archive archive = Mockito.mock(Archive.class);
+        Entry entry = Mockito.mock(Entry.class);
+        Mockito.when(archive.openInputStream(entry)).thenReturn(new ByteArrayInputStream(new byte[0]));
+        ContentPackage2FeatureModelConverter converter = Mockito.mock(ContentPackage2FeatureModelConverter.class);
+        Mockito.when(converter.getMainPackageAssembler()).thenReturn(Mockito.mock(VaultPackageAssembler.class));
+
+        handler.handle("/jcr_root/apps/asd/config/.empty.xml", archive, entry, converter);
     }
 }
