All non-primitive types now accept parameters
diff --git a/plugins/org.eclipse.epsilon.eol.engine/src/org/eclipse/epsilon/eol/dom/DoubleEqualsOperatorExpression.java b/plugins/org.eclipse.epsilon.eol.engine/src/org/eclipse/epsilon/eol/dom/DoubleEqualsOperatorExpression.java
new file mode 100644
index 0000000..9b9f8b6
--- /dev/null
+++ b/plugins/org.eclipse.epsilon.eol.engine/src/org/eclipse/epsilon/eol/dom/DoubleEqualsOperatorExpression.java
@@ -0,0 +1,5 @@
+package org.eclipse.epsilon.eol.dom;
+
+public class DoubleEqualsOperatorExpression extends EqualsOperatorExpression {
+	
+}
diff --git a/plugins/org.eclipse.epsilon.eol.engine/src/org/eclipse/epsilon/eol/dom/OperatorExpressionFactory.java b/plugins/org.eclipse.epsilon.eol.engine/src/org/eclipse/epsilon/eol/dom/OperatorExpressionFactory.java
index c22dcf0..fb44f7f 100644
--- a/plugins/org.eclipse.epsilon.eol.engine/src/org/eclipse/epsilon/eol/dom/OperatorExpressionFactory.java
+++ b/plugins/org.eclipse.epsilon.eol.engine/src/org/eclipse/epsilon/eol/dom/OperatorExpressionFactory.java
@@ -6,9 +6,12 @@
 	
 	public OperatorExpression createOperatorExpression(AST ast) {
 		String operator = ast.getText();
-		if (operator.startsWith("=")) {
+		if (operator.equals("=")) {
 			return new EqualsOperatorExpression();
 		}
+		else if (operator.equals("==")) {
+			return new DoubleEqualsOperatorExpression();
+		}
 		else if (operator.equals("<>")) {
 			return new NotEqualsOperatorExpression();
 		}
diff --git a/plugins/org.eclipse.epsilon.eol.engine/src/org/eclipse/epsilon/eol/dom/TypeInitialiser.java b/plugins/org.eclipse.epsilon.eol.engine/src/org/eclipse/epsilon/eol/dom/TypeInitialiser.java
index ac8f2ac..ea809df 100644
--- a/plugins/org.eclipse.epsilon.eol.engine/src/org/eclipse/epsilon/eol/dom/TypeInitialiser.java
+++ b/plugins/org.eclipse.epsilon.eol.engine/src/org/eclipse/epsilon/eol/dom/TypeInitialiser.java
@@ -28,47 +28,43 @@
 				EolModelElementType modelElementType = (EolModelElementType) type;
 				throw new EolNotInstantiableModelElementTypeException(modelElementType);
 			}
-			
-			if (type instanceof EolModelElementType) {
-				
-				Object instance = type.createInstance();
-				
-				for (Expression parameter : parameters) {
-					if (parameter instanceof EqualsOperatorExpression) {
-						EqualsOperatorExpression equalsOperatorExpression = (EqualsOperatorExpression) parameter;
-						if (equalsOperatorExpression.getFirstOperand() instanceof NameExpression) {
-							String property = ((NameExpression) equalsOperatorExpression.getFirstOperand()).getName();
-							IPropertySetter setter = context.getIntrospectionManager().getPropertySetterFor(instance, property, context);
-							if (setter != null) {
-								setter.setAst(parameter);
-								setter.invoke(context.getExecutorFactory().execute(equalsOperatorExpression.getSecondOperand(), context));
-							}
-							else throw new EolIllegalPropertyException(instance, property, equalsOperatorExpression.getFirstOperand(), context);
-						}
-						else {
-							throw new EolRuntimeException("Property name expected", equalsOperatorExpression.getFirstOperand());
-						}
-					}
-					else {
-						throw new EolRuntimeException("Property initialisation expression expected", parameter);
-					}
+							
+			ArrayList<Object> parameterValues = new ArrayList<Object>();
+			for (Expression parameter : parameters) {
+				if (!(parameter.getClass() == EqualsOperatorExpression.class)) {
+					parameterValues.add(context.getExecutorFactory().execute(parameter, context));
 				}
-				
-				return instance;
-				
+			}
+			
+			Object instance = null;
+			
+			if (parameterValues.isEmpty()) {
+				instance = type.createInstance();
 			}
 			else {
-				if (!parameters.isEmpty()) {
-					ArrayList<Object> parameterValues = new ArrayList<Object>();
-					for (Expression parameter : parameters) {
-						parameterValues.add(context.getExecutorFactory().execute(parameter, context));
+				instance = type.createInstance(parameterValues);
+			}
+			
+			for (Expression parameter : parameters) {
+				if (parameter.getClass() == EqualsOperatorExpression.class) {
+					EqualsOperatorExpression equalsOperatorExpression = (EqualsOperatorExpression) parameter;
+					if (equalsOperatorExpression.getFirstOperand() instanceof NameExpression) {
+						String property = ((NameExpression) equalsOperatorExpression.getFirstOperand()).getName();
+						IPropertySetter setter = context.getIntrospectionManager().getPropertySetterFor(instance, property, context);
+						if (setter != null) {
+							setter.setAst(parameter);
+							setter.invoke(context.getExecutorFactory().execute(equalsOperatorExpression.getSecondOperand(), context));
+						}
+						else throw new EolIllegalPropertyException(instance, property, equalsOperatorExpression.getFirstOperand(), context);
 					}
-					return type.createInstance(parameterValues);
-				}
-				else {
-					return type.createInstance();
+					else {
+						throw new EolRuntimeException("Property name expected", equalsOperatorExpression.getFirstOperand());
+					}
 				}
 			}
+			
+			return instance;
+				
 		}
 		return null;
 	}