Index: connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/GetDeletedExecutionImpl.java
===================================================================
--- connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/GetDeletedExecutionImpl.java	(revision 3691)
+++ connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/GetDeletedExecutionImpl.java	(working copy)
@@ -88,16 +88,16 @@
 			List<Argument> params = command.getArguments();
 			
 			Argument object = params.get(OBJECT);
-			String objectName = (String) object.getArgumentValue().getValue();
+			String objectName = (String) object.getLiteralArgumentValue().getValue();
 			
 			Argument start = params.get(STARTDATE);
-			Timestamp startTime = (Timestamp) start.getArgumentValue().getValue();
+			Timestamp startTime = (Timestamp) start.getLiteralArgumentValue().getValue();
 			GregorianCalendar tempCalendar = (GregorianCalendar) GregorianCalendar.getInstance();
 			tempCalendar.setTime(startTime);
 			XMLGregorianCalendar startCalendar = factory.newXMLGregorianCalendar(tempCalendar);
 			
 			Argument end = params.get(ENDDATE);
-			Timestamp endTime = (Timestamp) end.getArgumentValue().getValue();
+			Timestamp endTime = (Timestamp) end.getLiteralArgumentValue().getValue();
 			tempCalendar = (GregorianCalendar) GregorianCalendar.getInstance();
 			tempCalendar.setTime(endTime);
 			XMLGregorianCalendar endCalendar = factory.newXMLGregorianCalendar(tempCalendar);
Index: test-integration/common/src/test/java/org/teiid/connector/metadata/runtime/TestParams.java
===================================================================
--- test-integration/common/src/test/java/org/teiid/connector/metadata/runtime/TestParams.java	(revision 3691)
+++ test-integration/common/src/test/java/org/teiid/connector/metadata/runtime/TestParams.java	(working copy)
@@ -22,11 +22,12 @@
 
 package org.teiid.connector.metadata.runtime;
 
+import static org.junit.Assert.*;
+
 import java.sql.Timestamp;
 import java.util.List;
 
-import junit.framework.TestCase;
-
+import org.junit.Test;
 import org.teiid.cdk.api.TranslationUtility;
 import org.teiid.core.util.UnitTestUtil;
 import org.teiid.language.Argument;
@@ -40,18 +41,11 @@
 /** 
  * @since 4.3
  */
-public class TestParams extends TestCase {
+@SuppressWarnings("nls")
+public class TestParams {
 
     private static TranslationUtility CONNECTOR_METADATA_UTILITY = createTranslationUtility(getTestVDBName());
 
-    /**
-     * Constructor for TestParams.
-     * @param name
-     */
-    public TestParams(String name) {
-        super(name);
-    }
-
     private static String getTestVDBName() {
         return UnitTestUtil.getTestDataPath() + "/sptest/spvdb.vdb"; //$NON-NLS-1$
     }
@@ -76,16 +70,16 @@
     private void checkParameter(Argument param,
                                 String name,
                                 String fullName,
-                                int index,
                                 Direction direction,
                                 String nameInSource,
                                 String defaultValue,
                                 NullType nullability,
-                                Class javaType,
+                                Class<?> javaType,
                                 int length,
                                 int precision,
                                 int scale,
-                                TranslationUtility transUtil, String modeledType, String modeledBaseType, String modeledPrimitiveType) throws Exception {
+                                String modeledType,
+                                String modeledBaseType, String modeledPrimitiveType) throws Exception {
         ProcedureParameter p = param.getMetadataObject();
         assertEquals(name, p.getName());
         assertEquals(fullName, p.getFullName());
@@ -98,7 +92,7 @@
         assertEquals(length, p.getLength());
         assertEquals(precision, p.getPrecision());
         assertEquals(scale, p.getScale());
-        assertEquals(null, param.getArgumentValue().getValue());
+        assertEquals(null, param.getLiteralArgumentValue().getValue());
 
         //System.out.println("\n" + p.getModeledType() + "\n" + p.getModeledBaseType() + "\n" + p.getModeledPrimitiveType());
         
@@ -108,77 +102,69 @@
         
     }
 
-    public void testProcedureWithResultSet() throws Exception {
+    @Test public void testProcedureWithResultSet() throws Exception {
         Call proc = getProcedure("sptest.proc1", 4, CONNECTOR_METADATA_UTILITY);      //$NON-NLS-1$
-        List params = proc.getArguments();
+        List<Argument> params = proc.getArguments();
         assertEquals(4, params.size());
         
-        checkParameter((Argument)params.get(0),
+        checkParameter(params.get(0),
                        "in1", //$NON-NLS-1$
                        "sptest.proc1.in1", //$NON-NLS-1$
-                       1,
                        Direction.IN,
                        null,
-                       "sample default", //$NON-NLS-1$
-                       NullType.No_Nulls,
+                       "sample default",
+                       NullType.No_Nulls, //$NON-NLS-1$
                        String.class,
                        20,
                        10,
                        5,
-                       CONNECTOR_METADATA_UTILITY, 
-                       "http://www.w3.org/2001/XMLSchema#string",  //$NON-NLS-1$
-                       "http://www.w3.org/2001/XMLSchema#anySimpleType",  //$NON-NLS-1$
+                       "http://www.w3.org/2001/XMLSchema#string",
+                       "http://www.w3.org/2001/XMLSchema#anySimpleType", 
                        "http://www.w3.org/2001/XMLSchema#string"); //$NON-NLS-1$
 
-        checkParameter((Argument)params.get(1),
+        checkParameter(params.get(1),
                        "in2", //$NON-NLS-1$
                        "sptest.proc1.in2", //$NON-NLS-1$
-                       2,
                        Direction.IN,
                        null,
-                       "15", //$NON-NLS-1$
-                       NullType.Nullable,
+                       "15",
+                       NullType.Nullable, //$NON-NLS-1$
                        Integer.class,
                        0,
                        10,
                        0,
-                       CONNECTOR_METADATA_UTILITY, 
-                       "http://www.w3.org/2001/XMLSchema#int",  //$NON-NLS-1$
-                       "http://www.w3.org/2001/XMLSchema#long",  //$NON-NLS-1$
+                       "http://www.w3.org/2001/XMLSchema#int",
+                       "http://www.w3.org/2001/XMLSchema#long", 
                        "http://www.w3.org/2001/XMLSchema#decimal"); //$NON-NLS-1$
 
-        checkParameter((Argument)params.get(2),
+        checkParameter(params.get(2),
                        "in3", //$NON-NLS-1$
                        "sptest.proc1.in3", //$NON-NLS-1$
-                       3,
                        Direction.IN,
                        null,
-                       "2003-04-23 09:30:00", //$NON-NLS-1$
-                       NullType.Unknown,
+                       "2003-04-23 09:30:00",
+                       NullType.Unknown, //$NON-NLS-1$
                        Timestamp.class,
                        22,
                        10,
                        0,
-                       CONNECTOR_METADATA_UTILITY, 
-                       "http://www.metamatrix.com/metamodels/SimpleDatatypes-instance#timestamp",  //$NON-NLS-1$
-                       "http://www.w3.org/2001/XMLSchema#string",  //$NON-NLS-1$
+                       "http://www.metamatrix.com/metamodels/SimpleDatatypes-instance#timestamp",
+                       "http://www.w3.org/2001/XMLSchema#string", 
                        "http://www.w3.org/2001/XMLSchema#string"); //$NON-NLS-1$
 
-        checkParameter((Argument)params.get(3),
+        checkParameter(params.get(3),
                        "inOptional", //$NON-NLS-1$
                        "sptest.proc1.inOptional", //$NON-NLS-1$
-                       4,
                        Direction.IN,
-                       "optionalName", //$NON-NLS-1$
-                       null,
+                       "optionalName",
+                       null, //$NON-NLS-1$
                        NullType.Nullable,
                        String.class,
                        0,
                        0,
                        0,
-                       CONNECTOR_METADATA_UTILITY, 
-                       "http://www.w3.org/2001/XMLSchema#string",  //$NON-NLS-1$
-                       "http://www.w3.org/2001/XMLSchema#anySimpleType",  //$NON-NLS-1$
+                       "http://www.w3.org/2001/XMLSchema#string",
+                       "http://www.w3.org/2001/XMLSchema#anySimpleType", 
                        "http://www.w3.org/2001/XMLSchema#string"); //$NON-NLS-1$
 
     
Index: connectors/translator-olap/src/main/java/org/teiid/translator/olap/OlapQueryExecution.java
===================================================================
--- connectors/translator-olap/src/main/java/org/teiid/translator/olap/OlapQueryExecution.java	(revision 3691)
+++ connectors/translator-olap/src/main/java/org/teiid/translator/olap/OlapQueryExecution.java	(working copy)
@@ -70,7 +70,7 @@
 		try {
 			Call procedure = (Call) this.command;
 			List<Argument> arguments = procedure.getArguments();
-			String mdxQuery = (String) arguments.get(0).getArgumentValue().getValue();
+			String mdxQuery = (String) arguments.get(0).getLiteralArgumentValue().getValue();
 			stmt = this.connection.createStatement();
 			
 			cellSet = stmt.executeOlapQuery(mdxQuery);
Index: engine/src/main/java/org/teiid/dqp/internal/datamgr/LanguageBridgeFactory.java
===================================================================
--- engine/src/main/java/org/teiid/dqp/internal/datamgr/LanguageBridgeFactory.java	(revision 3691)
+++ engine/src/main/java/org/teiid/dqp/internal/datamgr/LanguageBridgeFactory.java	(working copy)
@@ -35,37 +35,10 @@
 import org.teiid.core.TeiidComponentException;
 import org.teiid.core.TeiidException;
 import org.teiid.core.TeiidRuntimeException;
-import org.teiid.language.AggregateFunction;
-import org.teiid.language.AndOr;
-import org.teiid.language.Argument;
-import org.teiid.language.BatchedUpdates;
-import org.teiid.language.Call;
-import org.teiid.language.ColumnReference;
-import org.teiid.language.Condition;
+import org.teiid.language.*;
 import org.teiid.language.DerivedColumn;
-import org.teiid.language.DerivedTable;
-import org.teiid.language.Exists;
-import org.teiid.language.ExpressionValueSource;
-import org.teiid.language.In;
-import org.teiid.language.InsertValueSource;
-import org.teiid.language.IsNull;
-import org.teiid.language.IteratorValueSource;
-import org.teiid.language.Join;
-import org.teiid.language.Like;
-import org.teiid.language.Literal;
-import org.teiid.language.NamedTable;
-import org.teiid.language.Not;
-import org.teiid.language.QueryExpression;
-import org.teiid.language.SearchedCase;
-import org.teiid.language.SearchedWhenClause;
 import org.teiid.language.Select;
-import org.teiid.language.SortSpecification;
-import org.teiid.language.SubqueryComparison;
-import org.teiid.language.SubqueryIn;
-import org.teiid.language.TableReference;
 import org.teiid.language.WindowSpecification;
-import org.teiid.language.With;
-import org.teiid.language.WithItem;
 import org.teiid.language.Argument.Direction;
 import org.teiid.language.Comparison.Operator;
 import org.teiid.language.SortSpecification.Ordering;
@@ -74,50 +47,20 @@
 import org.teiid.metadata.ProcedureParameter;
 import org.teiid.metadata.FunctionMethod.PushDown;
 import org.teiid.query.metadata.QueryMetadataInterface;
-import org.teiid.query.sql.lang.BatchedUpdateCommand;
+import org.teiid.query.sql.lang.*;
 import org.teiid.query.sql.lang.Command;
-import org.teiid.query.sql.lang.CompareCriteria;
-import org.teiid.query.sql.lang.CompoundCriteria;
-import org.teiid.query.sql.lang.Criteria;
 import org.teiid.query.sql.lang.Delete;
-import org.teiid.query.sql.lang.ExistsCriteria;
-import org.teiid.query.sql.lang.FromClause;
 import org.teiid.query.sql.lang.GroupBy;
 import org.teiid.query.sql.lang.Insert;
-import org.teiid.query.sql.lang.IsNullCriteria;
-import org.teiid.query.sql.lang.JoinPredicate;
-import org.teiid.query.sql.lang.JoinType;
 import org.teiid.query.sql.lang.Limit;
-import org.teiid.query.sql.lang.MatchCriteria;
-import org.teiid.query.sql.lang.NotCriteria;
 import org.teiid.query.sql.lang.OrderBy;
-import org.teiid.query.sql.lang.OrderByItem;
-import org.teiid.query.sql.lang.Query;
-import org.teiid.query.sql.lang.QueryCommand;
-import org.teiid.query.sql.lang.SPParameter;
 import org.teiid.query.sql.lang.SetClause;
-import org.teiid.query.sql.lang.SetClauseList;
-import org.teiid.query.sql.lang.SetCriteria;
 import org.teiid.query.sql.lang.SetQuery;
-import org.teiid.query.sql.lang.StoredProcedure;
-import org.teiid.query.sql.lang.SubqueryCompareCriteria;
-import org.teiid.query.sql.lang.SubqueryFromClause;
-import org.teiid.query.sql.lang.SubquerySetCriteria;
-import org.teiid.query.sql.lang.UnaryFromClause;
 import org.teiid.query.sql.lang.Update;
-import org.teiid.query.sql.lang.WithQueryCommand;
-import org.teiid.query.sql.symbol.AggregateSymbol;
-import org.teiid.query.sql.symbol.AliasSymbol;
-import org.teiid.query.sql.symbol.Constant;
-import org.teiid.query.sql.symbol.ElementSymbol;
+import org.teiid.query.sql.symbol.*;
 import org.teiid.query.sql.symbol.Expression;
-import org.teiid.query.sql.symbol.ExpressionSymbol;
 import org.teiid.query.sql.symbol.Function;
-import org.teiid.query.sql.symbol.GroupSymbol;
 import org.teiid.query.sql.symbol.ScalarSubquery;
-import org.teiid.query.sql.symbol.SearchedCaseExpression;
-import org.teiid.query.sql.symbol.SelectSymbol;
-import org.teiid.query.sql.symbol.SingleElementSymbol;
 import org.teiid.query.sql.symbol.WindowFunction;
 import org.teiid.translator.TranslatorException;
 
@@ -711,10 +654,9 @@
             }
             
             ProcedureParameter metadataParam = metadataFactory.getParameter(param);
-            //we can assume for now that all arguments will be literals, which may be multivalued
-            Literal value = null;
+            org.teiid.language.Expression value = null;
             if (direction != Direction.OUT) {
-            	value = (Literal)translate(param.getExpression());
+            	value = translate(param.getExpression());
             }
             Argument arg = new Argument(direction, value, param.getClassType(), metadataParam);
             translatedParameters.add(arg);
Index: engine/src/test/java/org/teiid/dqp/internal/datamgr/TestParameterImpl.java
===================================================================
--- engine/src/test/java/org/teiid/dqp/internal/datamgr/TestParameterImpl.java	(revision 3691)
+++ engine/src/test/java/org/teiid/dqp/internal/datamgr/TestParameterImpl.java	(working copy)
@@ -22,40 +22,33 @@
 
 package org.teiid.dqp.internal.datamgr;
 
-import junit.framework.TestCase;
+import static org.junit.Assert.*;
 
+import org.junit.Test;
 import org.teiid.language.Argument;
 import org.teiid.language.Call;
 import org.teiid.language.Argument.Direction;
 
-public class TestParameterImpl extends TestCase {
-
-    /**
-     * Constructor for TestParameterImpl.
-     * @param name
-     */
-    public TestParameterImpl(String name) {
-        super(name);
-    }
+public class TestParameterImpl {
 
     public static Argument example(int index) throws Exception {
         Call procImpl = TestProcedureImpl.example();
         return procImpl.getArguments().get(index);
     }
 
-    public void testGetDirection() throws Exception {
+    @Test public void testGetDirection() throws Exception {
         assertEquals(Direction.IN, example(0).getDirection());
         assertEquals(Direction.IN, example(1).getDirection());
     }
 
-    public void testGetType() throws Exception {
+    @Test public void testGetType() throws Exception {
         assertTrue(example(0).getType().equals(String.class));
         assertTrue(example(1).getType().equals(Integer.class));
     }
 
-    public void testGetValue() throws Exception {
-        assertEquals("x", example(0).getArgumentValue().getValue()); //$NON-NLS-1$
-        assertEquals(new Integer(1), example(1).getArgumentValue().getValue());
+    @Test public void testGetLiteralValue() throws Exception {
+        assertEquals("x", example(0).getLiteralArgumentValue().getValue()); //$NON-NLS-1$
+        assertEquals(new Integer(1), example(1).getLiteralArgumentValue().getValue());
     }
     
 }
Index: connectors/translator-ws/src/main/java/org/teiid/translator/ws/BinaryWSProcedureExecution.java
===================================================================
--- connectors/translator-ws/src/main/java/org/teiid/translator/ws/BinaryWSProcedureExecution.java	(revision 3691)
+++ connectors/translator-ws/src/main/java/org/teiid/translator/ws/BinaryWSProcedureExecution.java	(working copy)
@@ -73,9 +73,9 @@
     public void execute() throws TranslatorException {
         List<Argument> arguments = this.procedure.getArguments();
         
-        String method = (String)arguments.get(0).getArgumentValue().getValue();
-        Object payload = arguments.get(1).getArgumentValue().getValue();
-        String endpoint = (String)arguments.get(2).getArgumentValue().getValue();
+        String method = (String)arguments.get(0).getLiteralArgumentValue().getValue();
+        Object payload = arguments.get(1).getLiteralArgumentValue().getValue();
+        String endpoint = (String)arguments.get(2).getLiteralArgumentValue().getValue();
     	try {
 	        Dispatch<DataSource> dispatch = conn.createDispatch(HTTPBinding.HTTP_BINDING, endpoint, DataSource.class, Mode.MESSAGE); 
 	
Index: connectors/translator-file/src/main/java/org/teiid/translator/file/FileExecutionFactory.java
===================================================================
--- connectors/translator-file/src/main/java/org/teiid/translator/file/FileExecutionFactory.java	(revision 3691)
+++ connectors/translator-file/src/main/java/org/teiid/translator/file/FileExecutionFactory.java	(working copy)
@@ -81,7 +81,7 @@
 
 		@Override
 		public void execute() throws TranslatorException {
-			String path = (String)command.getArguments().get(0).getArgumentValue().getValue();
+			String path = (String)command.getArguments().get(0).getLiteralArgumentValue().getValue();
 			try {
 				files = FileConnection.Util.getFiles(path, fc);
 			} catch (ResourceException e) {
@@ -174,8 +174,8 @@
 				
 				@Override
 				public void execute() throws TranslatorException {
-					String filePath = (String)command.getArguments().get(0).getArgumentValue().getValue();
-					Object file = command.getArguments().get(1).getArgumentValue().getValue();
+					String filePath = (String)command.getArguments().get(0).getLiteralArgumentValue().getValue();
+					Object file = command.getArguments().get(1).getLiteralArgumentValue().getValue();
 					if (file == null || filePath == null) {
 						throw new TranslatorException(UTIL.getString("non_null")); //$NON-NLS-1$
 					}
Index: connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/GetUpdatedExecutionImpl.java
===================================================================
--- connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/GetUpdatedExecutionImpl.java	(revision 3691)
+++ connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/GetUpdatedExecutionImpl.java	(working copy)
@@ -50,8 +50,6 @@
 
 public class GetUpdatedExecutionImpl implements SalesforceProcedureExecution {
 
-	private static final int RESULT = 4;
-	
 	private ProcedureExecutionParent parent;
 	private UpdatedResult updatedResult;
 	private int idIndex = 0;
@@ -84,16 +82,16 @@
 			List<Argument> params = command.getArguments();
 			
 			Argument object = params.get(OBJECT);
-			String objectName = (String) object.getArgumentValue().getValue();
+			String objectName = (String) object.getLiteralArgumentValue().getValue();
 			
 			Argument start = params.get(STARTDATE);
-			Timestamp startTime = (Timestamp) start.getArgumentValue().getValue();
+			Timestamp startTime = (Timestamp) start.getLiteralArgumentValue().getValue();
 			GregorianCalendar tempCalendar = (GregorianCalendar) GregorianCalendar.getInstance();
 			tempCalendar.setTime(startTime);
 			XMLGregorianCalendar startCalendar = factory.newXMLGregorianCalendar(tempCalendar);
 			
 			Argument end = params.get(ENDDATE);
-			Timestamp endTime = (Timestamp) end.getArgumentValue().getValue();
+			Timestamp endTime = (Timestamp) end.getLiteralArgumentValue().getValue();
 			tempCalendar = (GregorianCalendar) GregorianCalendar.getInstance();
 			tempCalendar.setTime(endTime);
 			XMLGregorianCalendar endCalendar = factory.newXMLGregorianCalendar(tempCalendar);
Index: connectors/translator-ws/src/main/java/org/teiid/translator/ws/WSProcedureExecution.java
===================================================================
--- connectors/translator-ws/src/main/java/org/teiid/translator/ws/WSProcedureExecution.java	(revision 3691)
+++ connectors/translator-ws/src/main/java/org/teiid/translator/ws/WSProcedureExecution.java	(working copy)
@@ -77,13 +77,13 @@
     public void execute() throws TranslatorException {
         List<Argument> arguments = this.procedure.getArguments();
         
-        String style = (String)arguments.get(0).getArgumentValue().getValue();
-        String action = (String)arguments.get(1).getArgumentValue().getValue();
-        XMLType docObject = (XMLType)arguments.get(2).getArgumentValue().getValue();
+        String style = (String)arguments.get(0).getLiteralArgumentValue().getValue();
+        String action = (String)arguments.get(1).getLiteralArgumentValue().getValue();
+        XMLType docObject = (XMLType)arguments.get(2).getLiteralArgumentValue().getValue();
         StreamSource source = null;
     	try {
 	        source = convertToSource(docObject);
-	        String endpoint = (String)arguments.get(3).getArgumentValue().getValue();
+	        String endpoint = (String)arguments.get(3).getLiteralArgumentValue().getValue();
 	        
 	        if (style == null) {
 	        	style = executionFactory.getDefaultBinding().getBindingId();
Index: engine/src/main/java/org/teiid/query/rewriter/QueryRewriter.java
===================================================================
--- engine/src/main/java/org/teiid/query/rewriter/QueryRewriter.java	(revision 3691)
+++ engine/src/main/java/org/teiid/query/rewriter/QueryRewriter.java	(working copy)
@@ -2399,12 +2399,7 @@
         storedProcedure.setDisplayNamedParameters(false);
         
         for (SPParameter param : storedProcedure.getInputParameters()) {
-            if (!processing) {
-            	param.setExpression(rewriteExpressionDirect(param.getExpression()));
-            } else if (!(param.getExpression() instanceof Constant)) {
-            	boolean isBindEligible = !isConstantConvert(param.getExpression());
-            	param.setExpression(evaluate(param.getExpression(), isBindEligible));
-            }
+        	param.setExpression(rewriteExpressionDirect(param.getExpression()));
         }
         return storedProcedure;
     }
Index: api/src/main/java/org/teiid/language/LanguageFactory.java
===================================================================
--- api/src/main/java/org/teiid/language/LanguageFactory.java	(revision 3691)
+++ api/src/main/java/org/teiid/language/LanguageFactory.java	(working copy)
@@ -130,7 +130,7 @@
         return new SortSpecification(direction, element);
     }
 
-    public Argument createArgument(Argument.Direction direction, Literal value, Class<?> type, ProcedureParameter metadataReference) {
+    public Argument createArgument(Argument.Direction direction, Expression value, Class<?> type, ProcedureParameter metadataReference) {
         return new Argument(direction, value, type, metadataReference);
     }
 
Index: api/src/main/java/org/teiid/language/Argument.java
===================================================================
--- api/src/main/java/org/teiid/language/Argument.java	(revision 3691)
+++ api/src/main/java/org/teiid/language/Argument.java	(working copy)
@@ -34,11 +34,11 @@
 	}
 	
     private Direction direction;
-    private Literal argumentValue;
+    private Expression argumentValue;
     private ProcedureParameter metadataObject;
     private Class<?> type;
     
-    public Argument(Direction direction, Literal value, Class<?> type, ProcedureParameter metadataObject) {
+    public Argument(Direction direction, Expression value, Class<?> type, ProcedureParameter metadataObject) {
         this.direction = direction;
         this.argumentValue = value;
     	this.metadataObject = metadataObject;
@@ -53,10 +53,18 @@
      * Get the argument value
      * @return the value or null if this is an out parameter
      */
-    public Literal getArgumentValue() {
+    public Expression getArgumentValue() {
         return this.argumentValue;
     }
     
+    /**
+     * 
+     * @return the value as a {@link Literal} or will throw a {@link ClassCastException} if not
+     */
+    public Literal getLiteralArgumentValue() {
+    	return (Literal)this.argumentValue;
+    }
+    
     public Class<?> getType() {
 		return type;
 	}
