diff --git a/plugins/org.etsi.mts.tdl.graphical.labels.data/src/org/etsi/mts/tdl/graphical/labels/Data.xtext b/plugins/org.etsi.mts.tdl.graphical.labels.data/src/org/etsi/mts/tdl/graphical/labels/Data.xtext
index ef5b52061aacaf38bba1ed7d8a623a6127aec239..48cfb0b756dc14266cd87a4d5cf87ede0393312e 100644
--- a/plugins/org.etsi.mts.tdl.graphical.labels.data/src/org/etsi/mts/tdl/graphical/labels/Data.xtext
+++ b/plugins/org.etsi.mts.tdl.graphical.labels.data/src/org/etsi/mts/tdl/graphical/labels/Data.xtext
@@ -48,18 +48,22 @@ EString returns ecore::EString:
 DataInstanceUse returns DataInstanceUse:
 	dataInstance=[DataInstance|EString]
 	('(' argument+=ParameterBinding ( "," argument+=ParameterBinding)* ')' )?
-	('.' reduction+=[Member|EString])*
+	('.' reduction+=MemberReference)*
 	//TODO: if for some reason the data instance use does have a name
 	//it will cause problems... same applies for other scenarios 
 	//TODO: create a more elegant way to handle that gracefully)
 	//(name=EString)?
 	;
 
+MemberReference returns MemberReference:
+	member=[Member|EString]
+;
+
 
 FormalParameterUse returns FormalParameterUse:
 	parameter=[FormalParameter|EString]
 	('(' argument+=ParameterBinding ( "," argument+=ParameterBinding)* ')' )?
-	( "." reduction+=[Member|EString])*
+	( "." reduction+=MemberReference)*
 	;
 
 FunctionCall returns FunctionCall:
@@ -67,7 +71,7 @@ FunctionCall returns FunctionCall:
 	'('
 	(argument+=ParameterBinding ( "," argument+=ParameterBinding)*)?
 	')'
-	('.' reduction+=[Member|EString])*
+	('.' reduction+=MemberReference)*
 	;
 
 VariableUse returns VariableUse:
@@ -75,7 +79,7 @@ VariableUse returns VariableUse:
 	'->'
 	variable=[Variable|EString]
 	('(' argument+=ParameterBinding ( "," argument+=ParameterBinding)* ')' )?
-	("." reduction+=[Member|EString])*
+	("." reduction+=MemberReference)*
 	;
 
 TimeLabelUse returns TimeLabelUse:
@@ -518,7 +522,7 @@ Variable returns Variable:
 Interaction returns Message:
 	sourceGate=[GateReference|EStringDot]
 	('sends' | isTrigger=Trigger) 
-	argument+=DataUse
+	argument=DataUse
 	'to' 
 	target+=Target ( "," target+=Target)* 
 	(
@@ -540,7 +544,7 @@ Trigger returns ecore::EBoolean :
 
 Target returns Target:
 	targetGate=[GateReference|EStringDot]
-	('where it is' 'assigned' 'to' variable+=[Variable|EString])?
+	('where it is' 'assigned' 'to' variable=[Variable|EString])?
    	(
     'with'
     '{'
@@ -600,11 +604,17 @@ Behaviour returns Behaviour:
 ;
 
 Block returns Block:
-	('[' guard=DataUse ']')?
+	('[' guard+=LocalExpression ']')?
 	'{'
 		behaviour+=Behaviour ( behaviour+=Behaviour)* 
 	'}'
 	;
+
+LocalExpression returns LocalExpression:
+	 expression=DataUse
+;
+
+
 CompoundBehaviour returns CompoundBehaviour:
 	block=Block
 ;
@@ -634,7 +644,7 @@ TimerStart returns TimerStart:
 
 BoundedLoopBehaviour returns BoundedLoopBehaviour:
 	'repeat'
-	numIteration=DataUse
+	numIteration+=LocalExpression
 	'times'
 //	'from' startValue=DataInstanceSpecification
 //	'to' endValue=DataInstanceSpecification