diff --git a/plugins/assertions/languages/org.eclipse.papyrus.robotics.assertions.languages.othello/src/org/eclipse/papyrus/robotics/assertions/languages/othello/OthelloLanguage.java b/plugins/assertions/languages/org.eclipse.papyrus.robotics.assertions.languages.othello/src/org/eclipse/papyrus/robotics/assertions/languages/othello/OthelloLanguage.java
index 1e3a81b..fb3479b 100644
--- a/plugins/assertions/languages/org.eclipse.papyrus.robotics.assertions.languages.othello/src/org/eclipse/papyrus/robotics/assertions/languages/othello/OthelloLanguage.java
+++ b/plugins/assertions/languages/org.eclipse.papyrus.robotics.assertions.languages.othello/src/org/eclipse/papyrus/robotics/assertions/languages/othello/OthelloLanguage.java
@@ -149,15 +149,20 @@
 		StringBuffer refinedby = new StringBuffer();
 
 		// add components
+		List<String> alreadyAdded = new ArrayList<String>();
 		for (ComponentInstance compInstance : system.getInstances()) {
-			oss.append("\n");
 			ComponentDefinition compDef = compInstance.getCompdef();
-			oss.append(ossFromCompDefinition(compDef, false));
-			if (addContracts) {
-				StringBuffer contract = ossFromCompInstanceContract(compInstance);
-				if (contract.length() != 0) {
-					oss.append(contract);
-					refinedby.append(compInstance.getBase_Property().getName() + ".pass, ");
+			String compDefName = compDef.getBase_Class().getName();
+			if (!alreadyAdded.contains(compDefName)) {
+				oss.append("\n");
+				alreadyAdded.add(compDefName);
+				oss.append(ossFromCompDefinition(compDef, false));
+				if (addContracts) {
+					StringBuffer contract = ossFromCompInstanceContract(compInstance);
+					if (contract.length() != 0) {
+						oss.append(contract);
+						refinedby.append(compInstance.getBase_Property().getName() + ".pass, ");
+					}
 				}
 			}
 		}
diff --git a/plugins/assertions/org.eclipse.papyrus.robotics.assertions.languages/src/org/eclipse/papyrus/robotics/assertions/languages/P4RExpressionsHelper.java b/plugins/assertions/org.eclipse.papyrus.robotics.assertions.languages/src/org/eclipse/papyrus/robotics/assertions/languages/P4RExpressionsHelper.java
index 67e61e7..5aa3c39 100644
--- a/plugins/assertions/org.eclipse.papyrus.robotics.assertions.languages/src/org/eclipse/papyrus/robotics/assertions/languages/P4RExpressionsHelper.java
+++ b/plugins/assertions/org.eclipse.papyrus.robotics.assertions.languages/src/org/eclipse/papyrus/robotics/assertions/languages/P4RExpressionsHelper.java
@@ -127,6 +127,7 @@
 		}
 
 		if (system != null) {
+			// properties of component instances
 			List<ComponentInstance> instances = system.getInstances();
 			for (ComponentInstance instance : instances) {
 				String instanceName = instance.getBase_Property().getName();
@@ -148,6 +149,18 @@
 					}
 				}
 			}
+			// system properties
+			Map<String, ValueSpecification> systemProperties = getProperties(system.getBase_Class());
+			for (String key : systemProperties.keySet()) {
+				if (expression.contains(key)) {
+					Object result = AssertionsHelper.evaluateValueSpecification(system,
+							systemProperties.get(key));
+					if (result == null) {
+						result = "null";
+					}
+					expression = expression.replaceAll(key, result.toString());
+				}
+			}
 		}
 		return expression;
 	}
