Index: branches/t3e-tools/t3q/src/org/etsi/t3q/visitor/AbstractVisitor.java
===================================================================
--- branches/t3e-tools/t3q/src/org/etsi/t3q/visitor/AbstractVisitor.java	(revision 27)
+++ branches/t3e-tools/t3q/src/org/etsi/t3q/visitor/AbstractVisitor.java	(revision 28)
@@ -778,7 +778,77 @@
     public ContinueStatus visitSTEPSIZE(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
     public ContinueStatus visitTIMESTAMP(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitINV(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitUNTIL(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
     public ContinueStatus visitCONT(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
     public ContinueStatus visitPAR(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
     public ContinueStatus visitSEQ(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitSTREAM(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitONENTRY(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitONEXIT(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitNOTINV(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitFINISHED(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitDURATION(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitMODE(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitDELTA(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitPREV(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitAT(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitHISTORY(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitVALUES(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitAPPLY(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitFIND(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitVIOLATES(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitASSERT(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitStreamAttribs(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitStreamList(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitStreamDirection(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitModeSpecification(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitBasicMode(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitBasicModeOp(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitComplexMode(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitOnEntryBlock(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitOnExitBlock(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitUntilBlock(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitUntilGuardList(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitUntilGuardStatement(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitUntilGuardChar(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitInvariantBlock(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitInvariantList(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitModeList(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitSeqKeyword(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitParKeyword(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitNotInvKeyword(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitFinishedKeyword(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitDurationKeyword(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitDurationOperation(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitModeKeyword(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitModeDef(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitModeTypeDef(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitStreamDataOps(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitStreamValueOp(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitPortValueOp(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitStreamTimestampOp(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitPortTimestampOp(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitStreamDeltaOp(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitPortDeltaOp(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitStreamNavigationOps(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitStreamPrevOp(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitPortPrevOp(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitStreamAtOp(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitPortAtOp(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitStreamEvalStatements(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitStreamHistoryStatement(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitPortHistoryOp(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitStartValue(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitEndValue(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitStreamValuesStatement(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitPortValuesOp(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitStreamApplyStatement(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitPortApplyOp(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitStreamTemplateParameter(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitStreamFindStatement(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitPortFindOp(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitStreamViolatesStatement(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitPortViolatesOp(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
+    public ContinueStatus visitStreamAssignment(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
     public ContinueStatus visitWS(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
     public ContinueStatus visitSL_COMMENT(LocationAST node) throws TTCN3BehaviorException {return ContinueStatus.getInstance(true,true);}
@@ -3142,4 +3212,10 @@
                             continueStatus=visitTIMESTAMP(node);
                             return continueStatus;
+            case TTCN3ParserTokenTypes.INV:
+                            continueStatus=visitINV(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.UNTIL:
+                            continueStatus=visitUNTIL(node);
+                            return continueStatus;
             case TTCN3ParserTokenTypes.CONT:
                             continueStatus=visitCONT(node);
@@ -3150,4 +3226,208 @@
             case TTCN3ParserTokenTypes.SEQ:
                             continueStatus=visitSEQ(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.STREAM:
+                            continueStatus=visitSTREAM(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.ONENTRY:
+                            continueStatus=visitONENTRY(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.ONEXIT:
+                            continueStatus=visitONEXIT(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.NOTINV:
+                            continueStatus=visitNOTINV(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.FINISHED:
+                            continueStatus=visitFINISHED(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.DURATION:
+                            continueStatus=visitDURATION(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.MODE:
+                            continueStatus=visitMODE(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.DELTA:
+                            continueStatus=visitDELTA(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.PREV:
+                            continueStatus=visitPREV(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.AT:
+                            continueStatus=visitAT(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.HISTORY:
+                            continueStatus=visitHISTORY(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.VALUES:
+                            continueStatus=visitVALUES(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.APPLY:
+                            continueStatus=visitAPPLY(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.FIND:
+                            continueStatus=visitFIND(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.VIOLATES:
+                            continueStatus=visitVIOLATES(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.ASSERT:
+                            continueStatus=visitASSERT(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.StreamAttribs:
+                            continueStatus=visitStreamAttribs(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.StreamList:
+                            continueStatus=visitStreamList(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.StreamDirection:
+                            continueStatus=visitStreamDirection(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.ModeSpecification:
+                            continueStatus=visitModeSpecification(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.BasicMode:
+                            continueStatus=visitBasicMode(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.BasicModeOp:
+                            continueStatus=visitBasicModeOp(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.ComplexMode:
+                            continueStatus=visitComplexMode(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.OnEntryBlock:
+                            continueStatus=visitOnEntryBlock(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.OnExitBlock:
+                            continueStatus=visitOnExitBlock(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.UntilBlock:
+                            continueStatus=visitUntilBlock(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.UntilGuardList:
+                            continueStatus=visitUntilGuardList(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.UntilGuardStatement:
+                            continueStatus=visitUntilGuardStatement(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.UntilGuardChar:
+                            continueStatus=visitUntilGuardChar(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.InvariantBlock:
+                            continueStatus=visitInvariantBlock(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.InvariantList:
+                            continueStatus=visitInvariantList(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.ModeList:
+                            continueStatus=visitModeList(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.SeqKeyword:
+                            continueStatus=visitSeqKeyword(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.ParKeyword:
+                            continueStatus=visitParKeyword(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.NotInvKeyword:
+                            continueStatus=visitNotInvKeyword(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.FinishedKeyword:
+                            continueStatus=visitFinishedKeyword(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.DurationKeyword:
+                            continueStatus=visitDurationKeyword(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.DurationOperation:
+                            continueStatus=visitDurationOperation(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.ModeKeyword:
+                            continueStatus=visitModeKeyword(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.ModeDef:
+                            continueStatus=visitModeDef(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.ModeTypeDef:
+                            continueStatus=visitModeTypeDef(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.StreamDataOps:
+                            continueStatus=visitStreamDataOps(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.StreamValueOp:
+                            continueStatus=visitStreamValueOp(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.PortValueOp:
+                            continueStatus=visitPortValueOp(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.StreamTimestampOp:
+                            continueStatus=visitStreamTimestampOp(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.PortTimestampOp:
+                            continueStatus=visitPortTimestampOp(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.StreamDeltaOp:
+                            continueStatus=visitStreamDeltaOp(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.PortDeltaOp:
+                            continueStatus=visitPortDeltaOp(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.StreamNavigationOps:
+                            continueStatus=visitStreamNavigationOps(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.StreamPrevOp:
+                            continueStatus=visitStreamPrevOp(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.PortPrevOp:
+                            continueStatus=visitPortPrevOp(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.StreamAtOp:
+                            continueStatus=visitStreamAtOp(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.PortAtOp:
+                            continueStatus=visitPortAtOp(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.StreamEvalStatements:
+                            continueStatus=visitStreamEvalStatements(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.StreamHistoryStatement:
+                            continueStatus=visitStreamHistoryStatement(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.PortHistoryOp:
+                            continueStatus=visitPortHistoryOp(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.StartValue:
+                            continueStatus=visitStartValue(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.EndValue:
+                            continueStatus=visitEndValue(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.StreamValuesStatement:
+                            continueStatus=visitStreamValuesStatement(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.PortValuesOp:
+                            continueStatus=visitPortValuesOp(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.StreamApplyStatement:
+                            continueStatus=visitStreamApplyStatement(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.PortApplyOp:
+                            continueStatus=visitPortApplyOp(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.StreamTemplateParameter:
+                            continueStatus=visitStreamTemplateParameter(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.StreamFindStatement:
+                            continueStatus=visitStreamFindStatement(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.PortFindOp:
+                            continueStatus=visitPortFindOp(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.StreamViolatesStatement:
+                            continueStatus=visitStreamViolatesStatement(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.PortViolatesOp:
+                            continueStatus=visitPortViolatesOp(node);
+                            return continueStatus;
+            case TTCN3ParserTokenTypes.StreamAssignment:
+                            continueStatus=visitStreamAssignment(node);
                             return continueStatus;
             case TTCN3ParserTokenTypes.WS:
Index: branches/t3e-tools/t3q/src/org/etsi/t3q/visitor/NamingConventionsChecker.java
===================================================================
--- branches/t3e-tools/t3q/src/org/etsi/t3q/visitor/NamingConventionsChecker.java	(revision 27)
+++ branches/t3e-tools/t3q/src/org/etsi/t3q/visitor/NamingConventionsChecker.java	(revision 28)
@@ -148,13 +148,56 @@
 
 	public void checkPortInstance(LocationAST node) {
+		//TODO: quickly hacked together, revise, improve
 		String regExp = T3Q.activeProfile.getNamingConventionsConfig()
 				.getPortInstanceRegExp();
+		String typeRegExp = "";
+		String portType = "";
+		
 		LocationAST portElementNode = node.getFirstChild().getNextSibling();
+		LocationAST portTypeIdentifier = node.getParent().getFirstChild().getFirstChild().getFirstChild().getFirstChild();
+		Symbol portTypeSymbol = portTypeIdentifier.getSymbol();
+		if (portTypeSymbol!=null) {
+			LocationAST portTypeDeclarationNode = portTypeSymbol.getDeclarationNode();
+			LocationAST portAttribs = portTypeDeclarationNode.getParent().getNextSibling().getFirstChild();
+			if (portAttribs.getType()==TTCN3ParserTokenTypes.MessageAttribs) {
+				typeRegExp = T3Q.activeProfile.getNamingConventionsConfig()
+				.getMessagePortInstanceRegExp();
+				portType = "MessagePortInstance";
+			} else {
+				if (portAttribs.getType()==TTCN3ParserTokenTypes.StreamAttribs) {
+					typeRegExp = T3Q.activeProfile.getNamingConventionsConfig()
+					.getStreamPortInstanceRegExp();
+					portType = "StreamPortInstance";
+				}
+			}
+		} else {
+			//handle
+		}
 		do {
 			checkIdentifierForNamingConventionCompliance(portElementNode,
 					regExp, "PortInstance");
+			if (portTypeSymbol==null) {
+				checker
+				.getLoggingInterface()
+				.logInformation(
+						node.getLine(),
+						node.getEndLine(),
+						MessageClass.NAMING,
+						"The definition for port type \"" +
+						portTypeIdentifier.getText()+
+						"\" cannot be resolved. It cannot be determined which naming convention port instance \""
+								+ portElementNode.getFirstChild().getFirstChild().getText()
+								+ "\" shall comply to!" 
+								, "2.1");
+
+			} else {
+				checkIdentifierForNamingConventionCompliance(portElementNode,
+						typeRegExp, portType);
+			}
 		} while ((portElementNode = portElementNode.getNextSibling()) != null);
 	}
 
+	//TODO: differentiate between stream and message ports
+	
 	public void checkTestcase(LocationAST node) {
 		String regExp = T3Q.activeProfile.getNamingConventionsConfig()
Index: branches/t3e-tools/t3q/src/org/etsi/t3q/visitor/QualityChecker.java
===================================================================
--- branches/t3e-tools/t3q/src/org/etsi/t3q/visitor/QualityChecker.java	(revision 27)
+++ branches/t3e-tools/t3q/src/org/etsi/t3q/visitor/QualityChecker.java	(revision 28)
@@ -2185,6 +2185,28 @@
 	}
 
-	// -------------------------------------------------------------------------------------------
-
+	//TODO: extract, duplicate of nested alt statements
+	public void checkNoNestedModes(LocationAST node) {
+
+		LinkedList<LocationAST> nestedNodes = ASTUtil.findTypeNodes(node
+//				.getFirstChild()
+				, TTCN3ParserTokenTypes.ModeSpecification);
+		if (nestedNodes != null && nestedNodes.size() > 0) {
+			LocationAST nestedNode;
+
+			int[] nodeTypes = new int[] {TTCN3ParserTokenTypes.ModeSpecification};
+			for (int n = 0; n < nestedNodes.size(); n++) {
+				nestedNode = nestedNodes.get(n);
+				int nestingDepth = getConstructNesting(nestedNode, nodeTypes); 
+				if (nestingDepth > T3Q.activeProfile.getEmbeddedExtensionConfig().getAllowedModeNestingDepth()) {
+					this.getLoggingInterface().logWarning(nestedNode.getLine(), nestedNode.getEndLine(), MessageClass.STYLE, "Mode nesting depth ("+nestingDepth+") exceeds maximum allowed nesting depth ("+T3Q.activeProfile.getEmbeddedExtensionConfig().getAllowedModeNestingDepth()+")!", "EC.XX, "+MiscTools.getMethodName());
+				}
+			}
+		}
+
+	}
+	
+	// -------------------------------------------------------------------------------------------
+
+	//TODO: further potential for reuse?
 	public void checkNoNestedAltStatements(LocationAST node) {
 
@@ -2193,11 +2215,11 @@
 //				.getFirstChild()
 				, TTCN3ParserTokenTypes.AltConstruct);
-
 		if (nestedAltConstructNodes != null && nestedAltConstructNodes.size() > 0) {
 			LocationAST nestedAltConstructNode;
 
+			int[] nodeTypes = new int[] {TTCN3ParserTokenTypes.AltConstruct, TTCN3ParserTokenTypes.AltstepDef};
 			for (int n = 0; n < nestedAltConstructNodes.size(); n++) {
 				nestedAltConstructNode = nestedAltConstructNodes.get(n);
-				int nestingDepth = getAltConstructNesting(nestedAltConstructNode); 
+				int nestingDepth = getConstructNesting(nestedAltConstructNode, nodeTypes); 
 				if (nestingDepth > T3Q.activeProfile.getMaximumAllowedNestingDepth()) {
 					this.getLoggingInterface().logWarning(nestedAltConstructNode.getLine(), nestedAltConstructNode.getEndLine(), MessageClass.STYLE, "Alt statement nesting depth ("+nestingDepth+") exceeds maximum allowed nesting depth ("+T3Q.activeProfile.getMaximumAllowedNestingDepth()+")!", "6.3, "+MiscTools.getMethodName());
@@ -2210,10 +2232,10 @@
 	// -------------------------------------------------------------------------------------------
 
-	private int getAltConstructNesting(LocationAST node){
+	private int getConstructNesting(LocationAST node, int[] nodeTypes){
 		int nestingDepth = 1;
-		LocationAST containingAltConstructNode = LocationAST.resolveParentsUntilType(node.getParent(), new int[] {TTCN3ParserTokenTypes.AltConstruct, TTCN3ParserTokenTypes.AltstepDef});
+		LocationAST containingConstructNode = LocationAST.resolveParentsUntilType(node.getParent(), nodeTypes);
 		
-		if (containingAltConstructNode != null){
-			nestingDepth += getAltConstructNesting(containingAltConstructNode);
+		if (containingConstructNode != null){
+			nestingDepth += getConstructNesting(containingConstructNode, nodeTypes);
 		} else {
 			nestingDepth = 0;
Index: branches/t3e-tools/t3q/src/org/etsi/t3q/visitor/T3QVisitor.java
===================================================================
--- branches/t3e-tools/t3q/src/org/etsi/t3q/visitor/T3QVisitor.java	(revision 27)
+++ branches/t3e-tools/t3q/src/org/etsi/t3q/visitor/T3QVisitor.java	(revision 28)
@@ -28,5 +28,17 @@
 	}
 	
-	//TODO: temporary addition
+
+	//TODO: temporary addition?
+	public ContinueStatus visitModeSpecification(LocationAST node)
+			throws TTCN3BehaviorException {
+		if (T3Q.activeProfile.getEmbeddedExtensionConfig()
+								.isCheckNoNestedModes()) {
+			checker.checkNoNestedModes(node);
+		}
+		return ContinueStatus.getInstance(true, true);
+	}
+	
+	
+	//TODO: temporary addition?
 	public ContinueStatus visitWaitStatement(LocationAST node) 
 			throws TTCN3BehaviorException {
