diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/analyser/CheckConfigurationApi.java b/src/main/java/org/apache/sling/feature/extension/apiregions/analyser/CheckConfigurationApi.java
index 56d569c..f5b01ea 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/analyser/CheckConfigurationApi.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/analyser/CheckConfigurationApi.java
@@ -43,41 +43,39 @@
 	public void execute(final AnalyserTaskContext context) throws Exception {
         final FeatureValidator validator = new FeatureValidator();
         validator.setFeatureProvider(context.getFeatureProvider());
-        
+
         final ConfigurationApi api = ConfigurationApi.getConfigurationApi(context.getFeature());
         if ( api == null ) {
             context.reportExtensionWarning(ConfigurationApi.EXTENSION_NAME, "Configuration api is not specified, unable to validate feature");
         } else {
             final FeatureValidationResult result = validator.validate(context.getFeature(), api);
-            if ( !result.isValid() ) {
-                for(final Map.Entry<String, PropertyValidationResult> entry : result.getFrameworkPropertyResults().entrySet()) {
-                    for(final String warn : entry.getValue().getWarnings()) {
-                        context.reportWarning("Framework property " + entry.getKey() + " : " + warn);
-                    }
-                    if ( !entry.getValue().isValid() ) {
-                        for(final String err : entry.getValue().getErrors()) {
-                            context.reportError("Framework property " + entry.getKey() + " : " + err);
-                        }
+            for(final Map.Entry<String, PropertyValidationResult> entry : result.getFrameworkPropertyResults().entrySet()) {
+                for(final String warn : entry.getValue().getWarnings()) {
+                    context.reportWarning("Framework property " + entry.getKey() + " : " + warn);
+                }
+                if ( !entry.getValue().isValid() ) {
+                    for(final String err : entry.getValue().getErrors()) {
+                        context.reportError("Framework property " + entry.getKey() + " : " + err);
                     }
                 }
-                for(final Map.Entry<String, ConfigurationValidationResult> entry : result.getConfigurationResults().entrySet()) {
-                    for(final String warn : entry.getValue().getWarnings()) {
-                        context.reportWarning("Configuration " + entry.getKey() + " : " + warn);
+            }
+            for(final Map.Entry<String, ConfigurationValidationResult> entry : result.getConfigurationResults().entrySet()) {
+                for(final String warn : entry.getValue().getWarnings()) {
+                    context.reportWarning("Configuration " + entry.getKey() + " : " + warn);
+                }
+                for(final Map.Entry<String, PropertyValidationResult> propEntry : entry.getValue().getPropertyResults().entrySet()) {
+                    for(final String warn : propEntry.getValue().getWarnings()) {
+                        context.reportWarning("Configuration " + entry.getKey() + "." + propEntry.getKey() + " : " + warn);
+                    }
+                }
+                if ( !entry.getValue().isValid() ) {
+                    for(final String err : entry.getValue().getErrors()) {
+                        context.reportError("Configuration " + entry.getKey() + " : " + err);
                     }
                     for(final Map.Entry<String, PropertyValidationResult> propEntry : entry.getValue().getPropertyResults().entrySet()) {
-                        for(final String warn : propEntry.getValue().getWarnings()) {
-                            context.reportWarning("Configuration " + entry.getKey() + "." + propEntry.getKey() + " : " + warn);
-                        }             
-                    }
-                    if ( !entry.getValue().isValid() ) {
-                        for(final String err : entry.getValue().getErrors()) {
-                            context.reportError("Configuration " + entry.getKey() + " : " + err);
-                        }
-                        for(final Map.Entry<String, PropertyValidationResult> propEntry : entry.getValue().getPropertyResults().entrySet()) {
-                            if ( !propEntry.getValue().isValid() ) {
-                                for(final String err : propEntry.getValue().getErrors()) {
-                                    context.reportError("Configuration " + entry.getKey() + "." + propEntry.getKey() + " : " + err);
-                                }
+                        if ( !propEntry.getValue().isValid() ) {
+                            for(final String err : propEntry.getValue().getErrors()) {
+                                context.reportError("Configuration " + entry.getKey() + "." + propEntry.getKey() + " : " + err);
                             }
                         }
                     }
