diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurableEntity.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurableEntity.java
index 6f25d4d..fd30a5f 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurableEntity.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurableEntity.java
@@ -37,6 +37,7 @@
     /**
      * Clear the object and reset to defaults
      */
+    @Override
 	public void clear() {
         super.clear();
 		this.properties.clear();
@@ -49,6 +50,7 @@
 	 * @param jsonObj The JSON Object
 	 * @throws IOException If JSON parsing fails
 	 */
+    @Override
 	public void fromJSONObject(final JsonObject jsonObj) throws IOException {
         super.fromJSONObject(jsonObj);
         try {
@@ -79,6 +81,7 @@
      * @return The json object builder
      * @throws IOException If generating the JSON fails
      */
+    @Override
 	JsonObjectBuilder createJson() throws IOException {
 		final JsonObjectBuilder objBuilder = super.createJson();
 
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurationApi.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurationApi.java
index e29a629..6fc58c3 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurationApi.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurationApi.java
@@ -131,6 +131,7 @@
     /**
      * Clear the object and reset to defaults
      */
+    @Override
     public void clear() {
         super.clear();
         this.configurations.clear();
@@ -149,6 +150,7 @@
 	 * @param jsonObj The JSON Object
 	 * @throws IOException If JSON parsing fails
 	 */
+    @Override
     public void fromJSONObject(final JsonObject jsonObj) throws IOException {
         super.fromJSONObject(jsonObj);
         try {
@@ -281,6 +283,7 @@
      * @return The json object builder
      * @throws IOException If generating the JSON fails
      */
+    @Override
     JsonObjectBuilder createJson() throws IOException {
 		final JsonObjectBuilder objBuilder = super.createJson();
         if ( this.getRegion() != null ) {
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurationDescription.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurationDescription.java
index 0e2c7e9..d5b476d 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurationDescription.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurationDescription.java
@@ -21,4 +21,5 @@
  */
 public class ConfigurationDescription extends ConfigurableEntity {
 
+    // marker class to distinguish between different configurable entities
 }
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/DescribableEntity.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/DescribableEntity.java
index b2617d4..88d1c07 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/DescribableEntity.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/DescribableEntity.java
@@ -40,6 +40,7 @@
 	/**
      * Clear the object and reset to defaults
      */
+    @Override
 	public void clear() {
 		super.clear();
 		this.setTitle(null);
@@ -54,6 +55,7 @@
 	 * @param jsonObj The JSON Object
 	 * @throws IOException If JSON parsing fails
 	 */
+    @Override
 	public void fromJSONObject(final JsonObject jsonObj) throws IOException {
 		super.fromJSONObject(jsonObj);
         try {
@@ -119,6 +121,7 @@
      * @return The json object builder
      * @throws IOException If generating the JSON fails
      */
+    @Override
     JsonObjectBuilder createJson() throws IOException {
 		final JsonObjectBuilder objectBuilder = super.createJson();
 
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/FactoryConfigurationDescription.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/FactoryConfigurationDescription.java
index 9c8d7fa..da230cc 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/FactoryConfigurationDescription.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/FactoryConfigurationDescription.java
@@ -50,6 +50,7 @@
     /**
      * Clear the object and set the defaults
      */
+    @Override
     public void clear() {
         super.clear();
         this.setDefaults();
@@ -63,6 +64,7 @@
 	 * @param jsonObj The JSON Object
 	 * @throws IOException If JSON parsing fails
 	 */
+    @Override
     public void fromJSONObject(final JsonObject jsonObj) throws IOException {
         super.fromJSONObject(jsonObj);
         try {
@@ -113,6 +115,7 @@
      * @return The json object builder
      * @throws IOException If generating the JSON fails
      */
+    @Override
     JsonObjectBuilder createJson() throws IOException {
 		final JsonObjectBuilder objBuilder = super.createJson();
 		
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/FrameworkPropertyDescription.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/FrameworkPropertyDescription.java
index df9a3b0..0efc303 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/FrameworkPropertyDescription.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/FrameworkPropertyDescription.java
@@ -21,4 +21,6 @@
  */
 public class FrameworkPropertyDescription extends PropertyDescription {
     
+        // marker class to distinguish between different configurable entities
+
 }
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/Option.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/Option.java
index 41d2c23..4901c5e 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/Option.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/Option.java
@@ -33,6 +33,7 @@
     /**
      * Clear the object and reset to defaults
      */
+    @Override
     public void clear() {
         super.clear();
         this.setValue(null);
@@ -44,6 +45,7 @@
      * @param jsonObj The JSON Object
      * @throws IOException If JSON parsing fails
      */
+    @Override
     public void fromJSONObject(final JsonObject jsonObj) throws IOException {
         super.fromJSONObject(jsonObj);
         try {
@@ -75,6 +77,7 @@
      * @return The json object builder
      * @throws IOException If generating the JSON fails
      */
+    @Override
     JsonObjectBuilder createJson() throws IOException {
         final JsonObjectBuilder objectBuilder = super.createJson();
 
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/PropertyDescription.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/PropertyDescription.java
index 4323937..f07df67 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/PropertyDescription.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/PropertyDescription.java
@@ -76,6 +76,7 @@
     /**
      * Clear the object and reset to defaults
      */
+    @Override
 	public void clear() {
         super.clear();
         this.setDefaults();
@@ -93,6 +94,7 @@
 	 * @param jsonObj The JSON Object
 	 * @throws IOException If JSON parsing fails
 	 */
+    @Override
 	public void fromJSONObject(final JsonObject jsonObj) throws IOException {
         super.fromJSONObject(jsonObj);
         try {
@@ -148,6 +150,7 @@
      * @return The json object builder
      * @throws IOException If generating the JSON fails
      */
+    @Override
     JsonObjectBuilder createJson() throws IOException {
 		final JsonObjectBuilder objectBuilder = super.createJson();
 
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/Range.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/Range.java
index f5daf55..326efb8 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/Range.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/Range.java
@@ -38,6 +38,7 @@
     /**
      * Clear the object and reset to defaults
      */
+    @Override
 	public void clear() {
         super.clear();
         this.setMax(null);
@@ -50,6 +51,7 @@
 	 * @param jsonObj The JSON Object
 	 * @throws IOException If JSON parsing fails
 	 */
+    @Override
 	public void fromJSONObject(final JsonObject jsonObj) throws IOException {
         super.fromJSONObject(jsonObj);
         try {
@@ -98,6 +100,7 @@
      * @return The json object builder
      * @throws IOException If generating the JSON fails
      */
+    @Override
     JsonObjectBuilder createJson() throws IOException {
 		final JsonObjectBuilder objectBuilder = super.createJson();
 
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/Region.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/Region.java
index d4c14f4..65936e4 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/Region.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/Region.java
@@ -16,6 +16,9 @@
  */
 package org.apache.sling.feature.extension.apiregions.api.config;
 
+/**
+ * The configuration api region of the feature
+ */
 public enum Region {
     
     GLOBAL,
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/PropertyValidationResult.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/PropertyValidationResult.java
index 431ff59..1de03d4 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/PropertyValidationResult.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/PropertyValidationResult.java
@@ -28,6 +28,8 @@
 
     private final List<String> warnings = new ArrayList<>();
 
+    private boolean skipped = false;
+
     /**
      * Is the property value valid?
      * @return {@code true} if the value is valid
@@ -52,4 +54,19 @@
     public List<String> getWarnings() {
         return this.warnings;
     }
+
+    /**
+     * Has the validation for this property be skipped?
+     * @return {@code true} if it has been skipped
+     */
+    public boolean isSkipped() {
+        return this.skipped;
+    }
+
+    /**
+     * Mark the property to be skipped during validation 
+     */
+    public void markSkipped() {
+        this.skipped = true;
+    }
 }
\ No newline at end of file
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 370e247..a9d5554 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
@@ -20,6 +20,7 @@
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
 
@@ -61,13 +62,13 @@
 			} else {
 				// single value
 				values = null;
-				validateValue(desc, value, result.getErrors());
+				validateValue(desc, value, result);
 			}
 
 			if ( values != null ) {
                 // array or collection
                 for(final Object val : values) {
-                    validateValue(desc, val, result.getErrors());
+                    validateValue(desc, val, result);
                 }
                 validateList(desc, values, result.getErrors());
             }
@@ -119,40 +120,58 @@
         }
     }
 
-	void validateValue(final PropertyDescription prop, final Object value, final List<String> messages) {
+    private static final List<String> PLACEHOLDERS = Arrays.asList("$[env:", "$[secret:", "$[prop:");
+
+	void validateValue(final PropertyDescription prop, final Object value, final PropertyValidationResult result) {
+        final List<String> messages = result.getErrors();
 		if ( value != null ) {
-			switch ( prop.getType() ) {
-				case BOOLEAN : validateBoolean(prop, value, messages);
-							   break;
-				case BYTE : validateByte(prop, value, messages);
-							break;
-				case CHARACTER : validateCharacter(prop, value, messages);
-							break;
-				case DOUBLE : validateDouble(prop, value, messages); 
-							break;
-				case FLOAT : validateFloat(prop, value, messages); 
-							break;
-				case INTEGER : validateInteger(prop, value, messages);
-							break;
-				case LONG : validateLong(prop, value, messages);
-							break;
-				case SHORT : validateShort(prop, value, messages);
-							break;
-				case STRING : // no special validation for string
-							break;
-				case EMAIL : validateEmail(prop, value, messages); 
-							break;
-				case PASSWORD : validatePassword(prop, value, messages);
-							break;
-                case URL : validateURL(prop, value, messages);
-                           break;
-                case PATH : validatePath(prop, value, messages);
-							break;
-				default : messages.add("Unable to validate value - unknown property type : " + prop.getType());
+            // check for placeholder
+            boolean checkValue = true;
+            if ( value instanceof String ) {
+                final String strVal = (String)value;
+                for(final String p : PLACEHOLDERS) {
+                    if ( strVal.contains(p) ) {
+                        checkValue = false;
+                        break;
+                    }
+                }
             }
-            validateRegex(prop, value, messages);
-            validateOptions(prop, value, messages);
-		} else {
+            if ( checkValue ) {
+                switch ( prop.getType() ) {
+                    case BOOLEAN : validateBoolean(prop, value, messages);
+                                break;
+                    case BYTE : validateByte(prop, value, messages);
+                                break;
+                    case CHARACTER : validateCharacter(prop, value, messages);
+                                break;
+                    case DOUBLE : validateDouble(prop, value, messages); 
+                                break;
+                    case FLOAT : validateFloat(prop, value, messages); 
+                                break;
+                    case INTEGER : validateInteger(prop, value, messages);
+                                break;
+                    case LONG : validateLong(prop, value, messages);
+                                break;
+                    case SHORT : validateShort(prop, value, messages);
+                                break;
+                    case STRING : // no special validation for string
+                                break;
+                    case EMAIL : validateEmail(prop, value, messages); 
+                                break;
+                    case PASSWORD : validatePassword(prop, value, messages);
+                                break;
+                    case URL : validateURL(prop, value, messages);
+                            break;
+                    case PATH : validatePath(prop, value, messages);
+                                break;
+                    default : messages.add("Unable to validate value - unknown property type : " + prop.getType());
+                }
+                validateRegex(prop, value, messages);
+                validateOptions(prop, value, messages);                
+            } else {
+                result.markSkipped();
+            }
+        } else {
 			messages.add("Null value provided for validation");
 		}
 	}
diff --git a/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/validation/PropertyValidatorTest.java b/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/validation/PropertyValidatorTest.java
index ea45d0d..fd8d1c0 100644
--- a/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/validation/PropertyValidatorTest.java
+++ b/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/validation/PropertyValidatorTest.java
@@ -35,15 +35,20 @@
     
     @Test public void testValidateWithNull() {
         final PropertyDescription prop = new PropertyDescription();
+        PropertyValidationResult result;
 
         // prop not required - no error
-        assertTrue(validator.validate(null, prop).getErrors().isEmpty());
-        assertTrue(validator.validate(null, prop).isValid());
+        result = validator.validate(null, prop);
+        assertTrue(result.getErrors().isEmpty());
+        assertTrue(result.isValid());
+        assertFalse(result.isSkipped());
 
         // prop required - error
         prop.setRequired(true);
-        assertEquals(1, validator.validate(null, prop).getErrors().size());
-        assertFalse(validator.validate(null, prop).isValid());
+        result = validator.validate(null, prop);
+        assertEquals(1, result.getErrors().size());
+        assertFalse(result.isValid());
+        assertFalse(result.isSkipped());
     }
 
     @Test public void testValidateBoolean() {
@@ -53,21 +58,27 @@
         PropertyValidationResult result;
         result = validator.validate(Boolean.TRUE, prop);
         assertTrue(result.isValid());
+        assertFalse(result.isSkipped());
 
         result = validator.validate(Boolean.FALSE, prop);
         assertTrue(result.isValid());
+        assertFalse(result.isSkipped());
 
         result = validator.validate("TRUE", prop);
         assertTrue(result.isValid());
+        assertFalse(result.isSkipped());
 
         result = validator.validate("FALSE", prop);
         assertTrue(result.isValid());
+        assertFalse(result.isSkipped());
 
         result = validator.validate("yes", prop);
         assertEquals(1, result.getErrors().size());
+        assertFalse(result.isSkipped());
 
         result = validator.validate(1, prop);
         assertEquals(1, result.getErrors().size());
+        assertFalse(result.isSkipped());
     }
 
     @Test public void testValidateByte() {
@@ -78,15 +89,19 @@
 
         result = validator.validate((byte)1, prop);
         assertTrue(result.isValid());
+        assertFalse(result.isSkipped());
 
         result = validator.validate("1", prop);
         assertTrue(result.isValid());
+        assertFalse(result.isSkipped());
 
         result = validator.validate("yes", prop);
         assertEquals(1, result.getErrors().size());
+        assertFalse(result.isSkipped());
 
         result = validator.validate(1, prop);
         assertTrue(result.isValid());
+        assertFalse(result.isSkipped());
     }
 
     @Test public void testValidateShort() {
@@ -97,15 +112,19 @@
 
         result = validator.validate((short)1, prop);
         assertTrue(result.isValid());
+        assertFalse(result.isSkipped());
 
         result = validator.validate("1", prop);
         assertTrue(result.isValid());
+        assertFalse(result.isSkipped());
 
         result = validator.validate("yes", prop);
         assertEquals(1, result.getErrors().size());
+        assertFalse(result.isSkipped());
 
         result = validator.validate(1, prop);
         assertTrue(result.isValid());
+        assertFalse(result.isSkipped());
     }
 
     @Test public void testValidateInteger() {
@@ -116,15 +135,19 @@
 
         result = validator.validate(1, prop);
         assertTrue(result.isValid());
+        assertFalse(result.isSkipped());
 
         result = validator.validate("1", prop);
         assertTrue(result.isValid());
+        assertFalse(result.isSkipped());
 
         result = validator.validate("yes", prop);
         assertEquals(1, result.getErrors().size());
+        assertFalse(result.isSkipped());
 
         result = validator.validate(1, prop);
         assertTrue(result.isValid());
+        assertFalse(result.isSkipped());
     }
 
     @Test public void testValidateLong() {
@@ -135,15 +158,19 @@
 
         result = validator.validate(1L, prop);
         assertTrue(result.isValid());
+        assertFalse(result.isSkipped());
 
         result = validator.validate("1", prop);
         assertTrue(result.isValid());
+        assertFalse(result.isSkipped());
 
         result = validator.validate("yes", prop);
         assertEquals(1, result.getErrors().size());
+        assertFalse(result.isSkipped());
 
         result = validator.validate(1, prop);
         assertTrue(result.isValid());
+        assertFalse(result.isSkipped());
     }
 
     @Test public void testValidateFloat() {
@@ -154,15 +181,19 @@
 
         result = validator.validate(1.1, prop);
         assertTrue(result.isValid());
+        assertFalse(result.isSkipped());
 
         result = validator.validate("1.1", prop);
         assertTrue(result.isValid());
+        assertFalse(result.isSkipped());
 
         result = validator.validate("yes", prop);
         assertEquals(1, result.getErrors().size());
+        assertFalse(result.isSkipped());
 
         result = validator.validate(1, prop);
         assertTrue(result.isValid());
+        assertFalse(result.isSkipped());
     }
 
     @Test public void testValidateDouble() {
@@ -173,15 +204,19 @@
 
         result = validator.validate(1.1d, prop);
         assertTrue(result.isValid());
+        assertFalse(result.isSkipped());
 
         result = validator.validate("1.1", prop);
         assertTrue(result.isValid());
+        assertFalse(result.isSkipped());
 
         result = validator.validate("yes", prop);
         assertEquals(1, result.getErrors().size());
+        assertFalse(result.isSkipped());
 
         result = validator.validate(1, prop);
         assertTrue(result.isValid());
+        assertFalse(result.isSkipped());
     }
 
     @Test public void testValidateChar() {
@@ -192,12 +227,15 @@
 
         result = validator.validate('x', prop);
         assertTrue(result.isValid());
+        assertFalse(result.isSkipped());
 
         result = validator.validate("y", prop);
         assertTrue(result.isValid());
+        assertFalse(result.isSkipped());
 
         result = validator.validate("yes", prop);
         assertEquals(1, result.getErrors().size());
+        assertFalse(result.isSkipped());
     }
 
     @Test public void testValidateUrl() {
@@ -208,9 +246,11 @@
 
         result = validator.validate("https://sling.apache.org/documentation", prop);
         assertTrue(result.isValid());
+        assertFalse(result.isSkipped());
 
         result = validator.validate("hello world", prop);
         assertEquals(1, result.getErrors().size());
+        assertFalse(result.isSkipped());
     }
 
     @Test public void testValidateEmail() {
@@ -221,9 +261,11 @@
 
         result = validator.validate("a@b.com", prop);
         assertTrue(result.isValid());
+        assertFalse(result.isSkipped());
 
         result = validator.validate("hello world", prop);
         assertEquals(1, result.getErrors().size());
+        assertFalse(result.isSkipped());
     }
 
     @Test public void testValidatePassword() {
@@ -234,10 +276,12 @@
 
         result = validator.validate(null, prop);
         assertTrue(result.isValid());
+        assertFalse(result.isSkipped());
 
         prop.setVariable("secret");
         result = validator.validate(null, prop);
         assertTrue(result.isValid());
+        assertFalse(result.isSkipped());
     }
 
     @Test public void testValidatePath() {
@@ -248,9 +292,11 @@
 
         result = validator.validate("/a/b/c", prop);
         assertTrue(result.isValid());
+        assertFalse(result.isSkipped());
 
         result = validator.validate("hello world", prop);
         assertEquals(1, result.getErrors().size());
+        assertFalse(result.isSkipped());
     }
     
     @Test public void testValidateRange() {
@@ -360,37 +406,45 @@
         PropertyValidationResult result;
         result = validator.validate(values, prop);
         assertEquals(1, result.getErrors().size());
+        assertFalse(result.isSkipped());
 
         // cardinality 3 - no excludes/includes
         prop.setCardinality(3);
         result = validator.validate(values, prop);
+        assertFalse(result.isSkipped());
         assertTrue(result.getErrors().isEmpty());
 
         values.add("d");
         result = validator.validate(values, prop);
+        assertFalse(result.isSkipped());
         assertEquals(1, result.getErrors().size());
 
         // excludes
         prop.setExcludes(new String[] {"d", "e"});
         result = validator.validate(values, prop);
+        assertFalse(result.isSkipped());
         assertEquals(2, result.getErrors().size()); // cardinality and exclude
 
         values.remove("d");
         result = validator.validate(values, prop);
+        assertFalse(result.isSkipped());
         assertTrue(result.getErrors().isEmpty());
 
         // includes
         prop.setIncludes(new String[] {"b"});
         result = validator.validate(values, prop);
+        assertFalse(result.isSkipped());
         assertTrue(result.getErrors().isEmpty());
 
         prop.setIncludes(new String[] {"x"});
         result = validator.validate(values, prop);
+        assertFalse(result.isSkipped());
         assertEquals(1, result.getErrors().size());
 
         values.add("x");
         values.remove("a");
         result = validator.validate(values, prop);
+        assertFalse(result.isSkipped());
         assertTrue(result.getErrors().isEmpty());
     }
 
@@ -402,37 +456,45 @@
         // default cardinality - no excludes/includes
         PropertyValidationResult result;
         result = validator.validate(values, prop);
+        assertFalse(result.isSkipped());
         assertEquals(1, result.getErrors().size());
 
         // cardinality 3 - no excludes/includes
         prop.setCardinality(3);
         result = validator.validate(values, prop);
+        assertFalse(result.isSkipped());
         assertTrue(result.getErrors().isEmpty());
 
         values = new String[] {"a", "b", "c", "d"};
         result = validator.validate(values, prop);
+        assertFalse(result.isSkipped());
         assertEquals(1, result.getErrors().size());
 
         // excludes
         prop.setExcludes(new String[] {"d", "e"});
         result = validator.validate(values, prop);
+        assertFalse(result.isSkipped());
         assertEquals(2, result.getErrors().size()); // cardinality and exclude
 
         values = new String[] {"a", "b", "c"};
         result = validator.validate(values, prop);
+        assertFalse(result.isSkipped());
         assertTrue(result.getErrors().isEmpty());
 
         // includes
         prop.setIncludes(new String[] {"b"});
         result = validator.validate(values, prop);
+        assertFalse(result.isSkipped());
         assertTrue(result.getErrors().isEmpty());
 
         prop.setIncludes(new String[] {"x"});
         result = validator.validate(values, prop);
+        assertFalse(result.isSkipped());
         assertEquals(1, result.getErrors().size());
 
         values = new String[] {"b", "c", "x"};
         result = validator.validate(values, prop);
+        assertFalse(result.isSkipped());
         assertTrue(result.getErrors().isEmpty());
     }
 
@@ -445,4 +507,57 @@
         assertEquals(1, result.getWarnings().size());
         assertEquals("This is deprecated", result.getWarnings().get(0));
     }
+
+    @Test public void testPlaceholdersString() {
+        final PropertyDescription desc = new PropertyDescription();
+
+        PropertyValidationResult result = null;
+
+        result = validator.validate("$[env:variable]", desc);
+        assertTrue(result.isValid());
+        assertTrue(result.isSkipped());
+
+        result = validator.validate("$[prop:variable]", desc);
+        assertTrue(result.isValid());
+        assertTrue(result.isSkipped());
+
+        result = validator.validate("$[secret:variable]", desc);
+        assertTrue(result.isValid());
+        assertTrue(result.isSkipped());
+    }
+
+    @Test public void testPlaceholdersNumber() {
+        final PropertyDescription desc = new PropertyDescription();
+        desc.setType(PropertyType.INTEGER);
+
+        PropertyValidationResult result = null;
+
+        result = validator.validate("$[env:variable]", desc);
+        assertTrue(result.isValid());
+        assertTrue(result.isSkipped());
+
+        result = validator.validate("$[prop:variable]", desc);
+        assertTrue(result.isValid());
+        assertTrue(result.isSkipped());
+
+        result = validator.validate("$[secret:variable]", desc);
+        assertTrue(result.isValid());
+        assertTrue(result.isSkipped());
+    }
+
+    @Test public void testPlaceholdersArray() {
+        final PropertyDescription desc = new PropertyDescription();
+        desc.setType(PropertyType.INTEGER);
+        desc.setCardinality(-1);
+
+        PropertyValidationResult result = null;
+
+        result = validator.validate(new Object[] {5, "$[env:variable]"}, desc);
+        assertTrue(result.isValid());
+        assertTrue(result.isSkipped());
+
+        result = validator.validate(new Object[] {"hello", "$[env:variable]"}, desc);
+        assertFalse(result.isValid());
+        assertTrue(result.isSkipped());
+    }
 }
