diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/ConfigurationValidator.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/ConfigurationValidator.java
index ad47da4..540548b 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/ConfigurationValidator.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/ConfigurationValidator.java
@@ -173,7 +173,7 @@
                 } else if ( Constants.SERVICE_RANKING.equalsIgnoreCase(propName) ) {
                     final Object value = properties.get(propName);
                     if ( !(value instanceof Integer) ) {
-                        setResult(result, mode, "service.ranking must be of type Integer");
+                        PropertyValidator.setResult(result, 0, mode, "service.ranking must be of type Integer");
                     }    
                 } else if ( !isAllowedProperty(propName) && region != Region.INTERNAL && !desc.isAllowAdditionalProperties() ) {
                     result.getErrors().add("Property is not allowed");
@@ -182,7 +182,7 @@
         }
     }
 
-    void setResult(final ConfigurationValidationResult result, final Mode validationMode, final String msg) {
+    static void setResult(final ConfigurationValidationResult result, final Mode validationMode, final String msg) {
         if ( validationMode == Mode.STRICT ) {
             result.getErrors().add(msg);
         } else if ( validationMode == Mode.LENIENT || validationMode == Mode.DEFINITIVE ) {
@@ -193,17 +193,6 @@
         }
     }
 
-    void setResult(final PropertyValidationResult result, final Mode validationMode, final String msg) {
-        if ( validationMode == Mode.STRICT ) {
-            result.getErrors().add(msg);
-        } else if ( validationMode == Mode.LENIENT || validationMode == Mode.DEFINITIVE ) {
-            result.getWarnings().add(msg);
-        }
-        if ( validationMode == Mode.DEFINITIVE || validationMode == Mode.SILENT_DEFINITIVE ) {
-            result.setUseDefaultValue(true);
-        }
-    }
-    
     private boolean isAllowedProperty(final String name) {
         for(final String allowed : ALLOWED_PROPERTIES) {
             if ( allowed.equalsIgnoreCase(name) ) {
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/FeatureValidator.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/FeatureValidator.java
index 7b90df7..dcbb162 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/FeatureValidator.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/FeatureValidator.java
@@ -30,6 +30,7 @@
 import org.apache.sling.feature.extension.apiregions.api.config.ConfigurationDescription;
 import org.apache.sling.feature.extension.apiregions.api.config.FactoryConfigurationDescription;
 import org.apache.sling.feature.extension.apiregions.api.config.FrameworkPropertyDescription;
+import org.apache.sling.feature.extension.apiregions.api.config.Mode;
 import org.apache.sling.feature.extension.apiregions.api.config.Operation;
 import org.apache.sling.feature.extension.apiregions.api.config.Region;
 
@@ -124,22 +125,22 @@
                         result.getConfigurationResults().put(config.getPid(), r);
                         if ( regionInfo.region != Region.INTERNAL ) {
                             if ( desc.getOperations().isEmpty() ) {
-                                r.getErrors().add("No operations allowed for factory configuration");
+                                ConfigurationValidator.setResult(r, api.getMode(), "No operations allowed for factory configuration");
                             } else {
                                 if ( regionInfo.isUpdate && !desc.getOperations().contains(Operation.UPDATE)) {
-                                    r.getErrors().add("Updating of factory configuration is not allowed");
+                                    ConfigurationValidator.setResult(r, api.getMode(), "Updating of factory configuration is not allowed");
                                 } else if ( !regionInfo.isUpdate && !desc.getOperations().contains(Operation.CREATE)) {
-                                    r.getErrors().add("Creation of factory configuration is not allowed");
+                                    ConfigurationValidator.setResult(r, api.getMode(), "Creation of factory configuration is not allowed");
                                 }
                             }
                             if ( desc.getInternalNames().contains(config.getName())) {
-                                r.getErrors().add("Factory configuration with name is not allowed");
+                                ConfigurationValidator.setResult(r, api.getMode(), "Factory configuration with name is not allowed");
                             }
                         }                        
 
                     } else if ( regionInfo.region != Region.INTERNAL && api.getInternalFactoryConfigurations().contains(config.getFactoryPid())) {
                         final ConfigurationValidationResult cvr = new ConfigurationValidationResult();
-                        cvr.getErrors().add("Factory configuration is not allowed");
+                        ConfigurationValidator.setResult(cvr, api.getMode(), "Factory configuration is not allowed");
                         result.getConfigurationResults().put(config.getPid(), cvr);
                     }
                 } else {
@@ -149,7 +150,7 @@
                         result.getConfigurationResults().put(config.getPid(), r);
                     } else if ( regionInfo.region!= Region.INTERNAL && api.getInternalConfigurations().contains(config.getPid())) {
                         final ConfigurationValidationResult cvr = new ConfigurationValidationResult();
-                        cvr.getErrors().add("Configuration is not allowed");
+                        ConfigurationValidator.setResult(cvr, api.getMode(), "Configuration is not allowed");
                         result.getConfigurationResults().put(config.getPid(), cvr);
                     } 
                 }    
@@ -172,7 +173,7 @@
                     result.getFrameworkPropertyResults().put(frameworkProperty, pvr);
                 } else if ( regionInfo.region != Region.INTERNAL && api.getInternalFrameworkProperties().contains(frameworkProperty) ) {
                     final PropertyValidationResult pvr = new PropertyValidationResult();
-                    pvr.getErrors().add("Framework property is not allowed");
+                    PropertyValidator.setResult(pvr, null, api.getMode(), "Framework property is not allowed");
                     result.getFrameworkPropertyResults().put(frameworkProperty, pvr);
                 }
             } 
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/PropertyValidator.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/PropertyValidator.java
index 1039be4..2e31db9 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/PropertyValidator.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/PropertyValidator.java
@@ -120,17 +120,21 @@
 	}
 
     void setResult(final Context context, final String msg) {
-        if ( context.validationMode == Mode.STRICT ) {
-            context.result.getErrors().add(msg);
-        } else if ( context.validationMode == Mode.LENIENT || context.validationMode == Mode.DEFINITIVE ) {
-            context.result.getWarnings().add(msg);
-        }
-        if ( context.validationMode == Mode.DEFINITIVE || context.validationMode == Mode.SILENT_DEFINITIVE ) {
-            context.result.setUseDefaultValue(true);
-            context.result.setDefaultValue(context.description.getDefaultValue());
-        }
+        setResult(context.result, context.description.getDefaultValue(), context.validationMode, msg);
     }
 
+    static void setResult(final PropertyValidationResult result, final Object defaultValue, final Mode validationMode, final String msg) {
+        if ( validationMode == Mode.STRICT ) {
+            result.getErrors().add(msg);
+        } else if ( validationMode == Mode.LENIENT || validationMode == Mode.DEFINITIVE ) {
+            result.getWarnings().add(msg);
+        }
+        if ( validationMode == Mode.DEFINITIVE || validationMode == Mode.SILENT_DEFINITIVE ) {
+            result.setUseDefaultValue(true);
+            result.setDefaultValue(defaultValue);
+        }
+    }
+    
     /**
      * Validate a multi value
      * @param prop The property description
