diff --git a/src/main/java/de/tla2bAst/BAstCreator.java b/src/main/java/de/tla2bAst/BAstCreator.java
index 032a348afc14bcb4f023532bd6d2807677bd2515..e5def67d20ce60eae8ab1d670354e148ee19bf93 100644
--- a/src/main/java/de/tla2bAst/BAstCreator.java
+++ b/src/main/java/de/tla2bAst/BAstCreator.java
@@ -953,36 +953,44 @@ public class BAstCreator extends BuiltInOPs implements TranslationGlobals, BBuil
 				break;
 
 			case B_OPCODE_subseq: { // SubSeq(s,a,b)
-				// %p.(p : 1..(b-a+1)| s(p+a-1))
-				ALambdaExpression lambda = new ALambdaExpression();
-				lambda.setIdentifiers(createIdentifierList("t_"));
-				AMemberPredicate member = new AMemberPredicate();
-				member.setLeft(createIdentifierNode("t_"));
-				AIntervalExpression interval = new AIntervalExpression();
-				interval.setLeftBorder(new AIntegerExpression(new TIntegerLiteral("1")));
-				AMinusOrSetSubtractExpression minus = new AMinusOrSetSubtractExpression();
-				minus.setLeft(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[2]));
-				minus.setRight(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[1]));
-				AAddExpression add = new AAddExpression();
-				add.setLeft(minus);
-				add.setRight(new AIntegerExpression(new TIntegerLiteral("1")));
-				interval.setRightBorder(add);
-				member.setRight(interval);
-				lambda.setPredicate(member);
-				AAddExpression add2 = new AAddExpression();
-				add2.setLeft(createIdentifierNode("t_"));
-				add2.setRight(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[1]));
-				AMinusOrSetSubtractExpression minus2 = new AMinusOrSetSubtractExpression();
-				minus2.setLeft(add2);
-				minus2.setRight(new AIntegerExpression(new TIntegerLiteral("1")));
-				ArrayList<PExpression> params = new ArrayList<>();
-				params.add(minus2);
-				AFunctionExpression func = new AFunctionExpression();
-				func.setIdentifier(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]));
-				func.setParameters(params);
-				lambda.setExpression(func);
-				returnNode = lambda;
+				// new translation: (s /|\ b) \|/ a-1 (this saves us a new identifier name)
+				returnNode = new ARestrictTailExpression(
+						new ARestrictFrontExpression(
+								visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]), // s
+								visitExprOrOpArgNodeExpression(opApplNode.getArgs()[2]) // b
+						),
+						new AMinusOrSetSubtractExpression(
+								visitExprOrOpArgNodeExpression(opApplNode.getArgs()[1]), // a
+								createIntegerNode("1")
+						)
+				);
 				break;
+				// previous translation: %t_.(t_ : 1..(b-a+1)| s(t_+a-1))
+					/*PExpression a = visitExprOrOpArgNodeExpression(opApplNode.getArgs()[1]);
+					PExpression b = visitExprOrOpArgNodeExpression(opApplNode.getArgs()[2]);
+
+					returnNode = new ALambdaExpression( // %t_.(t_ : 1..(b-a+1)| s(t_+a-1))
+							createIdentifierList("t_"),
+							new AMemberPredicate( // t_ : 1..(b-a+1)
+									createIdentifierNode("t_"),
+									new AIntervalExpression(
+											createIntegerNode("1"),
+											new AAddExpression(
+													new AMinusOrSetSubtractExpression(b, a),
+													createIntegerNode("1")
+											)
+									)
+							),
+							new AFunctionExpression( // s(t_+a-1)
+									visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]), // s
+									Collections.singletonList(
+											new AMinusOrSetSubtractExpression(
+													new AAddExpression(createIdentifierNode("t_"), a.clone()),
+													createIntegerNode("1")
+											)
+									)
+							)
+					);*/
 			}
 
 			case B_OPCODE_assert: {
diff --git a/src/test/java/de/tla2b/prettyprintb/standardmodules/SequencesTest.java b/src/test/java/de/tla2b/prettyprintb/standardmodules/SequencesTest.java
index edf143327cae107fdeb89971d0c925aea05ad108..a52ffc7ffbc0e70b14c249b439fa3c7fd57e8541 100644
--- a/src/test/java/de/tla2b/prettyprintb/standardmodules/SequencesTest.java
+++ b/src/test/java/de/tla2b/prettyprintb/standardmodules/SequencesTest.java
@@ -86,7 +86,9 @@ public class SequencesTest {
 			+ "ASSUME SubSeq(<<1,2,3,4,5>>, 2, 3) = <<2,3>> \n"
 			+ "=================================";
 		final String expected = "MACHINE Testing\n"
-			+ "PROPERTIES %(t_).(t_ : 1 .. (3 - 2) + 1 | [1,2,3,4,5](((t_ + 2) - 1))) = [2,3] \n"
+			// + "PROPERTIES %(t_).(t_ : 1 .. (3 - 2) + 1 | [1,2,3,4,5](((t_ + 2) - 1))) = [2,3] \n"
+			// new translation:
+			+ "PROPERTIES ([1,2,3,4,5] /|\\ 3) \\|/ (2 - 1) = [2,3] \n"
 			+ "END";
 		compare(expected, module);
 	}