diff --git a/src/main/java/de/tla2bAst/BAstCreator.java b/src/main/java/de/tla2bAst/BAstCreator.java
index 7f603f42b8de405c1cd1e0d5233aee51bfe4d5ea..8dc72c7229c083cca05e23857ed581e608de0d2b 100644
--- a/src/main/java/de/tla2bAst/BAstCreator.java
+++ b/src/main/java/de/tla2bAst/BAstCreator.java
@@ -2189,15 +2189,9 @@ public class BAstCreator extends BuiltInOPs
 		case OPCODE_unchanged: {
 			OpApplNode node = (OpApplNode) n.getArgs()[0];
 			// System.out.println(" Translating UNCHANGED : " + node.toString());
+			// System.out.println(" Top-level unchanged for this operation: " + this.toplevelUnchangedVariableNames);
 			if (node.getOperator().getKind() == VariableDeclKind) {
-				if (!this.toplevelUnchangedVariableNames.contains(getName(node.getOperator()))) {
-					AEqualPredicate equal = new AEqualPredicate();
-					equal.setLeft(createIdentifierNode(getName(node.getOperator()) + "_n"));
-					equal.setRight(createIdentifierNode(node.getOperator()));
-					return equal;
-				} else {
-					return new AEqualPredicate(new ABooleanTrueExpression(), new ABooleanTrueExpression());
-				}
+				return CreateUnchangedPrimeEquality(node);
 
 			} else if (node.getOperator().getKind() == UserDefinedOpKind) {
 				OpDefNode operator = (OpDefNode) node.getOperator();
@@ -2209,10 +2203,7 @@ public class BAstCreator extends BuiltInOPs
 			ArrayList<PPredicate> list = new ArrayList<PPredicate>();
 			for (int i = 0; i < node.getArgs().length; i++) {
 				OpApplNode var = (OpApplNode) node.getArgs()[i];
-				AEqualPredicate equal = new AEqualPredicate();
-				equal.setLeft(createIdentifierNode(getName(var.getOperator()) + "_n"));
-				equal.setRight(createIdentifierNode(var.getOperator()));
-				list.add(equal);
+				list.add(CreateUnchangedPrimeEquality(var));
 			}
 			returnNode = createConjunction(list);
 			// returnNode = new AEqualPredicate(new ABooleanTrueExpression(),
@@ -2247,7 +2238,22 @@ public class BAstCreator extends BuiltInOPs
 		}
 		return createPositionedNode(returnNode, n);
 	}
-
+	
+	// create an equality predicate var_n = var if required
+	private AEqualPredicate CreateUnchangedPrimeEquality (OpApplNode var) {
+		if (!this.toplevelUnchangedVariableNames.contains(getName(var.getOperator()))) {
+			AEqualPredicate equal = new AEqualPredicate();
+			equal.setLeft(createIdentifierNode(getName(var.getOperator()) + "_n"));
+			equal.setRight(createIdentifierNode(var.getOperator()));
+			return equal;
+		} else {
+		    // the variable is marked UNCHANGED in a top-level UNCHANGED predicate
+		    // Hence it will not be added to the ANY variables and we do not need it
+			return new AEqualPredicate(new ABooleanTrueExpression(), new ABooleanTrueExpression());
+		}
+	
+	}
+	
 	public PPredicate visitBoundsOfLocalVariables(OpApplNode n) {
 		FormalParamNode[][] params = n.getBdedQuantSymbolLists();
 		ExprNode[] in = n.getBdedQuantBounds();