diff --git a/plugins/org.etsi.mts.tdl.tx/src/org/etsi/mts/tdl/TDLtx.xtext b/plugins/org.etsi.mts.tdl.tx/src/org/etsi/mts/tdl/TDLtx.xtext
index 55e90e2b009557d9050e14b35db59492cfb332bf..fd0c28f1274489b9d35602982a05fb1e0a48755f 100644
--- a/plugins/org.etsi.mts.tdl.tx/src/org/etsi/mts/tdl/TDLtx.xtext
+++ b/plugins/org.etsi.mts.tdl.tx/src/org/etsi/mts/tdl/TDLtx.xtext
@@ -50,12 +50,30 @@ PackageableElement returns tdl::PackageableElement:
 //Element : Abstract
 
 fragment AnnotationFragment returns tdl::Element:
-    (annotation+=Annotation)*
+	'@' 
+	//Workaround for upstream issue
+	( 
+		annotation+=Annotation
+		| 
+		('[' annotation+=Annotation (',' annotation+=Annotation)+ ']')
+	)
 ;
 
+fragment CommentFragment returns tdl::Element:
+	'Note' 
+	//Workaround for upstream issue
+	( 
+		comment+=SingleComment
+		| 
+		('[' comment+=MultiComment (',' comment+=MultiComment)+ ']')
+	)
+;
+
+
 fragment AnnotationCommentFragment returns tdl::Element:
-    (comment+=Comment)*
-    (annotation+=Annotation)*
+    CommentFragment?
+    AnnotationFragment?
+    //(annotation+=Annotation)*
 ;
 
 fragment NameFragment returns tdl::Element:
@@ -65,7 +83,7 @@ fragment NameFragment returns tdl::Element:
 fragment WithCommentFragment returns tdl::Element:
     'with'
     BEGIN
-        (comment+=Comment)+
+        CommentFragment
     END
 ;
 
@@ -89,13 +107,19 @@ ElementImport returns tdl::ElementImport:
     'from' importedPackage=[tdl::Package|QIdentifier]
 ;
 
-Comment returns tdl::Comment:
-    'Note' (name=NIdentifier)? 
+SingleComment returns tdl::Comment:
+    (name=NIdentifier)? 
     ':' body=EString
 ;
 
+MultiComment returns tdl::Comment:
+    (name=NIdentifier ':')? 
+    body=EString
+;
+
+
 Annotation returns tdl::Annotation:
-    '@' key=[tdl::AnnotationType|AIdentifier]
+    key=[tdl::AnnotationType|AIdentifier]
     (':' value=EString)?
 ;
 
@@ -246,7 +270,7 @@ ProcedureSignature returns tdl::ProcedureSignature:
 ;
 
 ProcedureParameter returns tdl::ProcedureParameter:
-    AnnotationFragment
+    AnnotationFragment?
     kind=ParameterKind
     dataType=[tdl::DataType|Identifier]
     name=Identifier
@@ -257,7 +281,7 @@ enum ParameterKind returns tdl::ParameterKind:
     In = 'in' | Out = 'out' | Exception = 'exception';
 
 FormalParameter returns tdl::FormalParameter:
-    AnnotationFragment
+    AnnotationFragment?
     dataType=[tdl::DataType|Identifier]
     name=Identifier
     WithCommentFragment?
@@ -729,7 +753,7 @@ fragment WithBehaviourFragment returns tdl::Behaviour:
     BEGIN
         NameFragment?
         ObjectiveFragment?
-        (comment+=Comment)*
+        CommentFragment?
     END
 ;
 
@@ -742,7 +766,7 @@ Block returns tdl::Block:
     //NOTE: No annotations or comments
     ('[' 
 //    	('@' annotation+=PICSAnnotation)? //TODO: Exception for PICS? seems not enough
-		AnnotationFragment
+		AnnotationFragment?
     	guard+=LocalExpression ( ',' guard+=LocalExpression)* 
 	']')?
     BEGIN
@@ -773,7 +797,7 @@ fragment WithCombinedFragment returns tdl::CombinedBehaviour:
     BEGIN
         NameFragment?
         ObjectiveFragment?
-        (comment+=Comment)*
+        CommentFragment?
         (periodic+=PeriodicBehaviour //)*
         | exceptional+=ExceptionalBehaviour)*
     END
@@ -788,23 +812,23 @@ SingleCombinedBehaviour returns tdl::SingleCombinedBehaviour:
 ;
 
 CompoundBehaviour returns tdl::CompoundBehaviour:
-    AnnotationFragment
+    AnnotationFragment?
     block=Block
 ;
 
 BoundedLoopBehaviour returns tdl::BoundedLoopBehaviour:
-    AnnotationFragment
+    AnnotationFragment?
     'repeat' numIteration+=LocalLoopExpression (',' numIteration+=LocalLoopExpression)*
     block=Block
 ;
 
 UnboundedLoopBehaviour returns tdl::UnboundedLoopBehaviour:
-    AnnotationFragment
+    AnnotationFragment?
     'while' block=Block
 ;
 
 OptionalBehaviour returns tdl::OptionalBehaviour:
-    AnnotationFragment
+    AnnotationFragment?
     'optionally' block=Block
 ;
 
@@ -815,7 +839,7 @@ MultipleCombinedBehaviour returns tdl::MultipleCombinedBehaviour:
 ;
 
 ConditionalBehaviour returns tdl::ConditionalBehaviour:
-    AnnotationFragment
+    AnnotationFragment?
     'if' block+=Block
     (=>('else' block+=Block)
     | (('else' 'if' block+=Block)* 
@@ -823,13 +847,13 @@ ConditionalBehaviour returns tdl::ConditionalBehaviour:
 ;
 
 AlternativeBehaviour returns tdl::AlternativeBehaviour:
-    AnnotationFragment
+    AnnotationFragment?
     'alternatively' block+=Block
     ('or' block+=Block)+ 
 ;
 
 ParallelBehaviour returns tdl::ParallelBehaviour:
-    AnnotationFragment
+    AnnotationFragment?
     'run' block+=Block 
     ('in' 'parallel' 'to' block+=Block)
     ('and' block+=Block)*
@@ -840,7 +864,7 @@ ExceptionalBehaviour returns tdl::ExceptionalBehaviour:
 ;
 
 DefaultBehaviour returns tdl::DefaultBehaviour:
-    AnnotationFragment
+    AnnotationFragment?
     'default' 
     ('on' guardedComponent=[tdl::ComponentInstance|Identifier])?
     block=Block
@@ -848,7 +872,7 @@ DefaultBehaviour returns tdl::DefaultBehaviour:
 ;
 
 InterruptBehaviour returns tdl::InterruptBehaviour:
-    AnnotationFragment
+    AnnotationFragment?
     'interrupt'
     ('on' guardedComponent=[tdl::ComponentInstance|Identifier])?
     block=Block
@@ -856,7 +880,7 @@ InterruptBehaviour returns tdl::InterruptBehaviour:
 ;
 
 PeriodicBehaviour returns tdl::PeriodicBehaviour:
-    AnnotationFragment
+    AnnotationFragment?
     'every'
     (period+=LocalExpression (',' period+=LocalExpression)*)
     block=Block
@@ -1496,7 +1520,7 @@ fragment EventOccurrenceSpecificationFragment returns to::EventOccurrenceSpecifi
         (',' oppositeEntityReference+=OppositeEntityReference)*
     )?
     EventTimingSuffix?
-    (comment+=Comment)*
+    CommentFragment?
 ;
 
 EntityReference returns to::EntityReference:
@@ -1708,7 +1732,7 @@ fragment EventTemplateOccurrenceFragment returns to::EventTemplateOccurrence:
         ('argument' 'replaced' 'by' occurrenceArgument=Argument)?
     END
     )?
-    (comment+=Comment)*
+    CommentFragment?
 ;
 
 EntityBinding returns to::EntityBinding:
diff --git a/plugins/org.etsi.mts.tdl.tx/src/org/etsi/mts/tdl/formatting2/TDLtxFormatter.java b/plugins/org.etsi.mts.tdl.tx/src/org/etsi/mts/tdl/formatting2/TDLtxFormatter.java
index d4d505f7481e2f37b9adb85829106096f6aa1dc1..fadeb0bab98fd8d225260a3c79afc04ac8f1fe60 100644
--- a/plugins/org.etsi.mts.tdl.tx/src/org/etsi/mts/tdl/formatting2/TDLtxFormatter.java
+++ b/plugins/org.etsi.mts.tdl.tx/src/org/etsi/mts/tdl/formatting2/TDLtxFormatter.java
@@ -381,21 +381,55 @@ public class TDLtxFormatter extends AbstractJavaFormatter {
 		//withKeyword.getNextSemanticRegion();
 		//		var rbs = this.textRegionExtensions.regionFor(e).ruleCallTo(this._grammarAccess.());
 			
+		
+		ISemanticRegion noteKeyword = this.textRegionExtensions.regionFor(e).keyword("Note");
+		if (noteKeyword!=null) {
+			doc.prepend(noteKeyword, newLine());
+		}
+		ISemanticRegion atKeyword = this.textRegionExtensions.regionFor(e).keyword("@");
+		if (atKeyword!=null) {
+			doc.prepend(atKeyword, newLine());
+		}
 		for (Comment c : e.getComment()) {
-			if (!(e instanceof Member)) {
+			if (e.getComment().size() > 1) {
+				doc.prepend(c, newLine());
 				doc.surround(c, indent());
-			}
-			if (!(e instanceof EntityReference)) {
-				doc.append(c, newLine());
+			} else {
+				if (!(e instanceof Member)) {
+					doc.surround(c, indent());
+				}
+				if (!(e instanceof EntityReference)) {
+					doc.append(c, newLine());
+				}
 			}
 			doc.format(c);
 		}
 		
 		for (Annotation a : e.getAnnotation()) {
-			doc.append(a, newLine());
-			doc.format(a);
+			if (e.getAnnotation().size() > 1) {
+				doc.prepend(a, newLine());
+				doc.surround(a, indent());
+			} else {
+				doc.append(a, newLine());
+			}
+			doc.format(a); 
 		}
 		
+
+		List<ISemanticRegion> closeItems = this.textRegionExtensions.allRegionsFor(e).keywords("]");
+		for (ISemanticRegion r : closeItems) {
+			doc.surround(r, newLine());
+		}
+		
+//		List<ISemanticRegion> comments = this.textRegionExtensions.regionFor(e).ruleCallsTo(this._grammarAccess.get);
+//		if (!comments.isEmpty()) {
+//			doc.append(comments.get(0), newLine());
+//		}
+//		List<ISemanticRegion> annotations = this.textRegionExtensions.regionFor(e).ruleCallsTo(this._grammarAccess.getAnnotationFragmentRule());
+//		if (!annotations.isEmpty()) {
+//			doc.surround(annotations.get(0), newLine());
+//		}
+		
 	}
 
 	protected void format(org.etsi.mts.tdl.TestDescription e, IFormattableDocument doc) {