Index: drools-decisiontables/src/test/java/org/drools/decisiontable/parser/LhsBuilderTest.java
===================================================================
--- drools-decisiontables/src/test/java/org/drools/decisiontable/parser/LhsBuilderTest.java	(revision 32063)
+++ drools-decisiontables/src/test/java/org/drools/decisiontable/parser/LhsBuilderTest.java	(working copy)
@@ -47,14 +47,29 @@
         
         assertEquals("Foo(bar == 42)\neval(true)", builder.getResult());
     }
+
+    public void testForAllAnd() {
+        LhsBuilder builder = new LhsBuilder("Person");
+        builder.addTemplate( 1, "age < $forall_param_or");
+        builder.addCellValue( 1, "42, 43, 44" );
+        assertEquals("Person(age < 42 || age < 43 || age < 44)", builder.getResult());
+    }
+
+    public void testForAllOr() {
+        LhsBuilder builder = new LhsBuilder("Person");
+        builder.addTemplate( 1, "age < $forall_param_and");
+        builder.addCellValue( 1, "42, 43, 44" );
+        assertEquals("Person(age < 42 && age < 43 && age < 44)", builder.getResult());
+    }    
     
     public void testIdentifyFieldTypes() {
         LhsBuilder builder = new LhsBuilder("");
         assertEquals(FieldType.SINGLE_FIELD, builder.calcFieldType("age"));
         assertEquals(FieldType.OPERATOR_FIELD, builder.calcFieldType("age <"));
         assertEquals(FieldType.NORMAL_FIELD, builder.calcFieldType("age < $param"));
+        assertEquals(FieldType.NORMAL_FIELD, builder.calcFieldType("age < $forall_param_or"));
+        assertEquals(FieldType.NORMAL_FIELD, builder.calcFieldType("age < $forall_param_and"));
         
-        
     }
     
     public void testIdentifyColumnCorrectly() {
Index: drools-decisiontables/src/main/java/org/drools/decisiontable/parser/LhsBuilder.java
===================================================================
--- drools-decisiontables/src/main/java/org/drools/decisiontable/parser/LhsBuilder.java	(revision 32063)
+++ drools-decisiontables/src/main/java/org/drools/decisiontable/parser/LhsBuilder.java	(working copy)
@@ -61,9 +61,9 @@
             constraints.put( key,
                              content );            
         } else if (fieldType == FieldType.SINGLE_FIELD) {
-            constraints.put( key, content + " == \"$param\"" );
+            constraints.put( key, content + " == \"" + SnippetBuilder.PARAM_STRING + "\"" );
         } else if (fieldType == FieldType.OPERATOR_FIELD) {
-            constraints.put( key, content + " \"$param\"" );
+            constraints.put( key, content + " \"" + SnippetBuilder.PARAM_STRING + "\"" );
         }
         
     }
@@ -137,7 +137,10 @@
      * etc. as we treat them all differently.
      */
     public FieldType calcFieldType(String content) {
-        if (content.indexOf( "$param" ) != -1 || content.indexOf( "$1" ) != -1 ) {
+		if (content.indexOf(SnippetBuilder.PARAM_STRING) != -1
+				|| content.indexOf(SnippetBuilder.PARAM_PREFIX + "1") != -1
+				|| content.indexOf(SnippetBuilder.PARAM_FORALL_AND_STRING) != -1
+				|| content.indexOf(SnippetBuilder.PARAM_FORALL_OR_STRING) != -1) {
             return FieldType.NORMAL_FIELD;
         }
         for ( String op : operators ) {
Index: drools-templates/src/test/java/org/drools/template/model/SnippetBuilderTest.java
===================================================================
--- drools-templates/src/test/java/org/drools/template/model/SnippetBuilderTest.java	(revision 32063)
+++ drools-templates/src/test/java/org/drools/template/model/SnippetBuilderTest.java	(working copy)
@@ -93,4 +93,61 @@
 
     }
 
+    
+	public void testForAllAndOne() {
+		final String snippet = "something == $forall_param_and";
+		final SnippetBuilder snip = new SnippetBuilder(snippet);
+		final String result = snip.build("x");
+		assertEquals("something == x", result);
+	}
+
+	public void testForAllAndTwo() {
+		final String snippet = "something == $forall_param_and";
+		final SnippetBuilder snip = new SnippetBuilder(snippet);
+		final String result = snip.build("x, y");
+		assertEquals("something == x && something == y", result);
+	}
+
+	public void testForAllAndNone() {
+		final String snippet = "something == $forall_param_and";
+		final SnippetBuilder snip = new SnippetBuilder(snippet);
+		final String result = snip.build("");
+		assertEquals("something == $forall_param_and", result);
+	}
+
+	public void testForAllAndDouble() {
+		final String snippet = "something == $forall_param_and || something == $forall_param_and";
+		final SnippetBuilder snip = new SnippetBuilder(snippet);
+		final String result = snip.build("x, y");
+		assertEquals("something == x || something == x && something == y || something == y", result);
+	}
+	
+	public void testForAllOrOne() {
+		final String snippet = "something == $forall_param_or";
+		final SnippetBuilder snip = new SnippetBuilder(snippet);
+		final String result = snip.build("x");
+		assertEquals("something == x", result);
+	}
+
+	public void testForAllOrTwo() {
+		final String snippet = "something == $forall_param_or";
+		final SnippetBuilder snip = new SnippetBuilder(snippet);
+		final String result = snip.build("x, y");
+		assertEquals("something == x || something == y", result);
+	}
+
+	public void testForAllOrNone() {
+		final String snippet = "something == $forall_param_or";
+		final SnippetBuilder snip = new SnippetBuilder(snippet);
+		final String result = snip.build("");
+		assertEquals("something == $forall_param_or", result);
+	}
+
+	public void testForAllOrDouble() {
+		final String snippet = "something == $forall_param_or || something == $forall_param_or";
+		final SnippetBuilder snip = new SnippetBuilder(snippet);
+		final String result = snip.build("x, y");
+		assertEquals("something == x || something == x || something == y || something == y", result);
+	}
+
 }
\ No newline at end of file
Index: drools-templates/src/main/java/org/drools/template/model/SnippetBuilder.java
===================================================================
--- drools-templates/src/main/java/org/drools/template/model/SnippetBuilder.java	(revision 32063)
+++ drools-templates/src/main/java/org/drools/template/model/SnippetBuilder.java	(working copy)
@@ -35,14 +35,21 @@
  * Regex was overkill and couldn't not quite get it right.
  */
 public class SnippetBuilder {
+    
+	private enum SnippetType {
+		SINGLE, INDEXED, FORALL_AND, FORALL_OR
+	};
 
-    private static final String PARAM_PREFIX = "$";
+	public static final String PARAM_PREFIX = "$";
+	public static final String PARAM_SUFFIX = "param";
+	public static final String PARAM_SUFFIX_FORALL = "forall_" + PARAM_SUFFIX;
+	public static final String PARAM_STRING = PARAM_PREFIX + PARAM_SUFFIX;
+    public static final String PARAM_FORALL_OR_STRING  = PARAM_PREFIX + PARAM_SUFFIX_FORALL + "_or";    
+    public static final String PARAM_FORALL_AND_STRING = PARAM_PREFIX + PARAM_SUFFIX_FORALL + "_and";
 
-    private static final String PARAM        = SnippetBuilder.PARAM_PREFIX + "param";
-
     private final String        _template;
     
-    private final boolean       single;
+    private final SnippetType   type;
     
     private final Pattern       delimiter;
 
@@ -56,24 +63,52 @@
             throw new RuntimeException( "Script template is null - check for missing script definition." );
         }
         this._template = snippetTemplate;
-        this.single = this._template.indexOf( SnippetBuilder.PARAM_PREFIX + "1" ) < 0;
+        this.type = getType(_template);
         this.delimiter = Pattern.compile( "(.*?[^\\\\])(,|\\z)" );
     }
 
+	private static SnippetType getType(String template) {
+		if (template.indexOf(PARAM_FORALL_AND_STRING) != -1)
+			return SnippetType.FORALL_AND;
+		else if (template.indexOf(PARAM_FORALL_OR_STRING) != -1)
+			return SnippetType.FORALL_OR;
+		else if (template.indexOf(SnippetBuilder.PARAM_PREFIX + "1") != -1)
+			return SnippetType.INDEXED;
+		return SnippetType.SINGLE;
+	}
+    
     /**
      * @param cellValue
      *            The value from the cell to populate the snippet with. If no
      *            place holder exists, will just return the snippet.
      * @return The final snippet.
      */
-    public String build(final String cellValue) {
-        if ( single ) {
-            return buildSingle( cellValue );
-        } else {
-            return buildMulti( cellValue );
-        }
-    }
+	public String build(final String cellValue) {
+		switch (type) {
+		case FORALL_AND:
+			return buildForAll(cellValue, PARAM_FORALL_AND_STRING);
+		case FORALL_OR:
+			return buildForAll(cellValue, PARAM_FORALL_OR_STRING);
+		case INDEXED:
+			return buildMulti(cellValue);
+		default:
+			return buildSingle(cellValue);
+		}
+	}
 
+	private String buildForAll(final String cellValue, final String replace) {
+		final String[] cellVals = split(cellValue);
+		String result = "";
+		for (int paramNumber = 0; paramNumber < cellVals.length; paramNumber++) {
+			result += (paramNumber == 0 ? ""
+					: replace.equals(PARAM_FORALL_AND_STRING) ? " && " : " || ")
+					+ replace(_template, replace, cellVals[paramNumber].trim(),
+							256);
+
+		}
+		return result.equals("") ? _template : result;
+	}
+	
     private String buildMulti(final String cellValue) {
         final String[] cellVals = split( cellValue );
         String result = this._template;
@@ -106,7 +141,7 @@
     private String buildSingle(final String cellValue) {
 
         return replace( this._template,
-                        SnippetBuilder.PARAM,
+                        SnippetBuilder.PARAM_STRING,
                         cellValue,
                         256 );
 
