diff --git a/src/language/ast/ASTBuilder.cpp b/src/language/ast/ASTBuilder.cpp
index a4dc8c822bab53a67be975b6444eb9dffa9bb6be..109ce527cffee1cc4aaa4221079894f8f0357338 100644
--- a/src/language/ast/ASTBuilder.cpp
+++ b/src/language/ast/ASTBuilder.cpp
@@ -74,7 +74,7 @@ struct ASTBuilder::simplify_unary : TAO_PEGTL_NAMESPACE::parse_tree::apply<ASTBu
           transform(n, st...);
         }
       }
-    } else if (n->children.size() == 2) {
+    } else if ((n->children.size() == 2) and (n->is_type<language::unary_expression>())) {
       if (n->children[0]->is_type<language::unary_plus>()) {
         n = std::move(n->children[1]);
         transform(n, st...);
diff --git a/tests/test_ASTBuilder.cpp b/tests/test_ASTBuilder.cpp
index 3ce2855eff1b059c0ac0e4215b8b1410e45af165..fdcf13315b9eb606f71f06d2cb1c2da399566a43 100644
--- a/tests/test_ASTBuilder.cpp
+++ b/tests/test_ASTBuilder.cpp
@@ -159,15 +159,30 @@ let s:string; s = "foo";
       SECTION("parented expression")
       {
         std::string_view data = R"(
-(2+3)*6;
+(-2)*6;
+(-2+3)*6;
+(-2+3+5)*6;
 )";
 
         std::string_view result = R"(
 (root)
+ +-(language::multiply_op)
+ |   +-(language::unary_minus)
+ |   |   `-(language::integer:2)
+ |   `-(language::integer:6)
+ +-(language::multiply_op)
+ |   +-(language::plus_op)
+ |   |   +-(language::unary_minus)
+ |   |   |   `-(language::integer:2)
+ |   |   `-(language::integer:3)
+ |   `-(language::integer:6)
  `-(language::multiply_op)
      +-(language::plus_op)
-     |   +-(language::integer:2)
-     |   `-(language::integer:3)
+     |   +-(language::plus_op)
+     |   |   +-(language::unary_minus)
+     |   |   |   `-(language::integer:2)
+     |   |   `-(language::integer:3)
+     |   `-(language::integer:5)
      `-(language::integer:6)
 )";
         CHECK_AST(data, result);
diff --git a/tests/test_BinaryExpressionProcessor_arithmetic.cpp b/tests/test_BinaryExpressionProcessor_arithmetic.cpp
index 6ded2c991a25508ae89ce90fca602aad71901547..10699f3c06a24ba5b298ef2ac10984473c1e9e02 100644
--- a/tests/test_BinaryExpressionProcessor_arithmetic.cpp
+++ b/tests/test_BinaryExpressionProcessor_arithmetic.cpp
@@ -184,7 +184,7 @@ TEST_CASE("BinaryExpressionProcessor arithmetic", "[language]")
     {
       CHECK_BINARY_EXPRESSION_RESULT(R"(let z:Z, z = -1 + true;)", "z", 0l);
       CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 4; let z:Z, z = -3 + n;)", "z", 1l);
-      CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 2; let z:Z, z = -3 + n;)", "z", -1l);
+      CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 2; let z:Z, z = (-3 + n);)", "z", -1l);
       CHECK_BINARY_EXPRESSION_RESULT(R"(let z:Z, z = 1 + 2;)", "z", 3l);
       CHECK_BINARY_EXPRESSION_RESULT(R"(let x:R, x = 3 + 2.5;)", "x", 5.5);
     }
@@ -192,7 +192,7 @@ TEST_CASE("BinaryExpressionProcessor arithmetic", "[language]")
     SECTION("lhs is R")
     {
       CHECK_BINARY_EXPRESSION_RESULT(R"(let r:R, r = -1.2 + true;)", "r", (-1.2 + true));
-      CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 2; let r:R, r = -1.2 + n;)", "r", (-1.2 + uint64_t{2}));
+      CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 2; let r:R, r = (-1.2 + n);)", "r", (-1.2 + uint64_t{2}));
       CHECK_BINARY_EXPRESSION_RESULT(R"(let r:R, r = -1.2 + 1;)", "r", (-1.2 + 1));
       CHECK_BINARY_EXPRESSION_RESULT(R"(let r:R, r = -1.2 + 2.3;)", "r", (-1.2 + 2.3));
     }
@@ -219,7 +219,7 @@ TEST_CASE("BinaryExpressionProcessor arithmetic", "[language]")
     SECTION("lhs is Z")
     {
       CHECK_BINARY_EXPRESSION_RESULT(R"(let z:Z, z = -1 - true;)", "z", -2l);
-      CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 4; let z:Z, z = 3 - n;)", "z", -1l);
+      CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 4; let z:Z, z = (-3 - n + 6);)", "z", -1l);
       CHECK_BINARY_EXPRESSION_RESULT(R"(let z:Z, z = 7 - 2;)", "z", 5l);
       CHECK_BINARY_EXPRESSION_RESULT(R"(let x:R, x = 4 - 2.5;)", "x", 1.5);
     }