diff --git a/src/language/PEGGrammar.hpp b/src/language/PEGGrammar.hpp
index 61ba912a567c4a6d868d22cc7915e7557f484518..fb3b1d74abf6ba0d33113ec95996c6a270edb77d 100644
--- a/src/language/PEGGrammar.hpp
+++ b/src/language/PEGGrammar.hpp
@@ -229,7 +229,10 @@ struct expression : logical_or {};
 
 struct tuple_expression : seq< open_parent, expression, plus< if_must< COMMA, expression > >, close_parent >{};
 
-struct expression_list : seq< open_parent, sor< tuple_expression, expression >, plus< if_must< COMMA, sor< tuple_expression, expression > > >, close_parent >{};
+struct expression_list : seq< open_parent, sor< seq< tuple_expression,
+						     star< if_must< COMMA, sor< tuple_expression, expression > > > >,
+						seq< expression,
+						     plus< if_must< COMMA, sor< tuple_expression, expression > >  > > >, close_parent >{};
 
 struct affect_op : sor< eq_op, multiplyeq_op, divideeq_op, pluseq_op, minuseq_op > {};
 
diff --git a/src/language/ast/ASTBuilder.cpp b/src/language/ast/ASTBuilder.cpp
index cef779ffce63b9c2ad808ca94b993e7eff59d4ff..57db204973de150fa86b4070f8704e8ac71f6a40 100644
--- a/src/language/ast/ASTBuilder.cpp
+++ b/src/language/ast/ASTBuilder.cpp
@@ -138,11 +138,16 @@ struct ASTBuilder::simplify_node_list : parse_tree::apply<ASTBuilder::simplify_n
   transform(std::unique_ptr<ASTNode>& n, States&&... st)
   {
     if (n->is_type<language::name_list>() or n->is_type<language::lvalue_list>() or
-        n->is_type<language::function_argument_list>() or n->is_type<language::expression_list>()) {
+        n->is_type<language::function_argument_list>()) {
       if (n->children.size() == 1) {
         n = std::move(n->children.back());
         transform(n, st...);
       }
+    } else if (n->is_type<language::expression_list>()) {
+      if ((n->children.size() == 1) and (not n->children[0]->is_type<language::tuple_expression>())) {
+        n = std::move(n->children.back());
+        transform(n, st...);
+      }
     }
   }
 };