diff --git a/src/macro/Directives.hh b/src/macro/Directives.hh
index 7202d32659918ca08e95dbf5bc96049aebe08ef0..67912c770e02293342a41d8a74eeebfc54a6bc71 100644
--- a/src/macro/Directives.hh
+++ b/src/macro/Directives.hh
@@ -28,7 +28,7 @@ namespace macro
   {
     // A Parent class just for clarity
   public:
-    Directive(Environment &env_arg, const Tokenizer::location location_arg) : Node(env_arg, move(location_arg)) { }
+    Directive(Environment &env_arg, Tokenizer::location location_arg) : Node(env_arg, move(location_arg)) { }
     // Directives can be interpreted
     virtual void interpret(ostream &output, bool no_line_macro) = 0;
   };
@@ -42,7 +42,7 @@ namespace macro
   private:
     const string text;
   public:
-    TextNode(const string text_arg, Environment &env_arg, const Tokenizer::location location_arg) :
+    TextNode(string text_arg, Environment &env_arg, Tokenizer::location location_arg) :
       Directive(env_arg, move(location_arg)), text{move(text_arg)} { }
     inline void interpret(ostream &output, bool no_line_macro) override { output << text; }
   };
@@ -56,7 +56,7 @@ namespace macro
   private:
     const ExpressionPtr expr;
   public:
-    Eval(const ExpressionPtr expr_arg, Environment &env_arg, const Tokenizer::location location_arg) :
+    Eval(ExpressionPtr expr_arg, Environment &env_arg, Tokenizer::location location_arg) :
       Directive(env_arg, move(location_arg)), expr{move(expr_arg)} { }
     void interpret(ostream &output, bool no_line_macro) override;
   };
@@ -68,7 +68,7 @@ namespace macro
     const ExpressionPtr expr;
     string name;
   public:
-    Include(const ExpressionPtr expr_arg, Environment &env_arg, const Tokenizer::location location_arg) :
+    Include(ExpressionPtr expr_arg, Environment &env_arg, Tokenizer::location location_arg) :
       Directive(env_arg, move(location_arg)), expr{move(expr_arg)} { }
     void interpret(ostream &output, bool no_line_macro) override;
     inline string getName() const { return name; }
@@ -81,7 +81,7 @@ namespace macro
     const ExpressionPtr expr;
     string path;
   public:
-    IncludePath(const ExpressionPtr expr_arg, Environment &env_arg, const Tokenizer::location location_arg) :
+    IncludePath(ExpressionPtr expr_arg, Environment &env_arg, Tokenizer::location location_arg) :
       Directive(env_arg, move(location_arg)), expr{move(expr_arg)} { }
     void interpret(ostream &output, bool no_line_macro) override;
     inline string getPath() const { return path; }
@@ -95,13 +95,13 @@ namespace macro
     const FunctionPtr func;
     const ExpressionPtr value;
   public:
-    Define(const VariablePtr var_arg,
-           const ExpressionPtr value_arg,
-           Environment &env_arg, const Tokenizer::location location_arg) :
+    Define(VariablePtr var_arg,
+           ExpressionPtr value_arg,
+           Environment &env_arg, Tokenizer::location location_arg) :
       Directive(env_arg, move(location_arg)), var{move(var_arg)}, value{move(value_arg)} { }
-    Define(const FunctionPtr func_arg,
-           const ExpressionPtr value_arg,
-           Environment &env_arg, const Tokenizer::location location_arg) :
+    Define(FunctionPtr func_arg,
+           ExpressionPtr value_arg,
+           Environment &env_arg, Tokenizer::location location_arg) :
       Directive(env_arg, move(location_arg)), func{move(func_arg)}, value{move(value_arg)} { }
     void interpret(ostream &output, bool no_line_macro) override;
   };
@@ -112,8 +112,8 @@ namespace macro
   private:
     const ExpressionPtr expr;
   public:
-    Echo(const ExpressionPtr expr_arg,
-         Environment &env_arg, const Tokenizer::location location_arg) :
+    Echo(ExpressionPtr expr_arg,
+         Environment &env_arg, Tokenizer::location location_arg) :
       Directive(env_arg, move(location_arg)), expr{move(expr_arg)} { }
     void interpret(ostream &output, bool no_line_macro) override;
   };
@@ -124,8 +124,8 @@ namespace macro
   private:
     const ExpressionPtr expr;
   public:
-    Error(const ExpressionPtr expr_arg,
-          Environment &env_arg, const Tokenizer::location location_arg) :
+    Error(ExpressionPtr expr_arg,
+          Environment &env_arg, Tokenizer::location location_arg) :
       Directive(env_arg, move(location_arg)), expr{move(expr_arg)} { }
     void interpret(ostream &output, bool no_line_macro) override;
   };
@@ -137,7 +137,7 @@ namespace macro
     bool save;
   public:
     EchoMacroVars(bool save_arg,
-                  Environment &env_arg, const Tokenizer::location location_arg) :
+                  Environment &env_arg, Tokenizer::location location_arg) :
       Directive(env_arg, move(location_arg)), save{save_arg} { }
     void interpret(ostream &output, bool no_line_macro) override;
   };
@@ -150,12 +150,12 @@ namespace macro
     const ExpressionPtr index_vals;
     vector<DirectivePtr> statements;
   public:
-    For(const vector<VariablePtr> index_vec_arg,
-        const ExpressionPtr index_vals_arg,
-        const vector<DirectivePtr> statements_arg,
-        Environment &env_arg, const Tokenizer::location location_arg) :
+    For(vector<VariablePtr> index_vec_arg,
+        ExpressionPtr index_vals_arg,
+        vector<DirectivePtr> statements_arg,
+        Environment &env_arg, Tokenizer::location location_arg) :
       Directive(env_arg, move(location_arg)), index_vec{move(index_vec_arg)},
-      index_vals{move(index_vals_arg)}, statements{statements_arg} { }
+      index_vals{move(index_vals_arg)}, statements{move(statements_arg)} { }
     void interpret(ostream &output, bool no_line_macro) override;
   };
 
@@ -167,16 +167,16 @@ namespace macro
     vector<DirectivePtr> if_statements;
     vector<DirectivePtr> else_statements;
   public:
-    If(const ExpressionPtr condition_arg,
-       const vector<DirectivePtr> if_statements_arg,
-       Environment &env_arg, const Tokenizer::location location_arg) :
-      Directive(env_arg, move(location_arg)), condition{move(condition_arg)}, if_statements{if_statements_arg} { }
-    If(const ExpressionPtr condition_arg,
-       const vector<DirectivePtr> if_statements_arg,
-       const vector<DirectivePtr> else_statements_arg,
-       Environment &env_arg, const Tokenizer::location location_arg) :
+    If(ExpressionPtr condition_arg,
+       vector<DirectivePtr> if_statements_arg,
+       Environment &env_arg, Tokenizer::location location_arg) :
+      Directive(env_arg, move(location_arg)), condition{move(condition_arg)}, if_statements{move(if_statements_arg)} { }
+    If(ExpressionPtr condition_arg,
+       vector<DirectivePtr> if_statements_arg,
+       vector<DirectivePtr> else_statements_arg,
+       Environment &env_arg, Tokenizer::location location_arg) :
       Directive(env_arg, move(location_arg)),
-      condition{move(condition_arg)}, if_statements{if_statements_arg}, else_statements{else_statements_arg} { }
+      condition{move(condition_arg)}, if_statements{move(if_statements_arg)}, else_statements{move(else_statements_arg)} { }
     void interpret(ostream &output, bool no_line_macro) override;
   protected:
     void loopIf(ostream &output, bool no_line_macro);
@@ -187,14 +187,14 @@ namespace macro
   class Ifdef : public If
   {
   public:
-    Ifdef(const ExpressionPtr condition_arg,
-          const vector<DirectivePtr> if_statements_arg,
-          Environment &env_arg, const Tokenizer::location location_arg) :
+    Ifdef(ExpressionPtr condition_arg,
+          vector<DirectivePtr> if_statements_arg,
+          Environment &env_arg, Tokenizer::location location_arg) :
       If(move(condition_arg), move(if_statements_arg), env_arg, move(location_arg)) { }
-    Ifdef(const ExpressionPtr condition_arg,
-          const vector<DirectivePtr> if_statements_arg,
-          const vector<DirectivePtr> else_statements_arg,
-          Environment &env_arg, const Tokenizer::location location_arg) :
+    Ifdef(ExpressionPtr condition_arg,
+          vector<DirectivePtr> if_statements_arg,
+          vector<DirectivePtr> else_statements_arg,
+          Environment &env_arg, Tokenizer::location location_arg) :
       If(move(condition_arg), move(if_statements_arg), move(else_statements_arg), env_arg, move(location_arg)) { }
     void interpret(ostream &output, bool no_line_macro) override;
   };
@@ -203,14 +203,14 @@ namespace macro
   class Ifndef : public If
   {
   public:
-    Ifndef(const ExpressionPtr condition_arg,
-           const vector<DirectivePtr> if_statements_arg,
-           Environment &env_arg, const Tokenizer::location location_arg) :
+    Ifndef(ExpressionPtr condition_arg,
+           vector<DirectivePtr> if_statements_arg,
+           Environment &env_arg, Tokenizer::location location_arg) :
       If(move(condition_arg), move(if_statements_arg), env_arg, move(location_arg)) { }
-    Ifndef(const ExpressionPtr condition_arg,
-           const vector<DirectivePtr> if_statements_arg,
-           const vector<DirectivePtr> else_statements_arg,
-           Environment &env_arg, const Tokenizer::location location_arg) :
+    Ifndef(ExpressionPtr condition_arg,
+           vector<DirectivePtr> if_statements_arg,
+           vector<DirectivePtr> else_statements_arg,
+           Environment &env_arg, Tokenizer::location location_arg) :
       If(move(condition_arg), move(if_statements_arg), move(else_statements_arg), env_arg, move(location_arg)) { }
     void interpret(ostream &output, bool no_line_macro) override;
   };
diff --git a/src/macro/Expressions.hh b/src/macro/Expressions.hh
index 27988de043b246eb0277e9257c73aded7d25965b..d67daabff71a78d706460aea240920bb72eb3a1d 100644
--- a/src/macro/Expressions.hh
+++ b/src/macro/Expressions.hh
@@ -36,7 +36,7 @@ namespace macro
   private:
     vector<string> message;
   public:
-    StackTrace (string message_arg) : message{{move(message_arg)}} { }
+    StackTrace (string message_arg) : message{move(message_arg)} { }
     StackTrace (const string &prefix, const char *standard_exception_message, const Tokenizer::location &location)
     {
       stringstream ss;
@@ -111,7 +111,7 @@ namespace macro
   class Expression : public Node
   {
   public:
-    Expression(Environment &env_arg, const Tokenizer::location location_arg) :
+    Expression(Environment &env_arg, Tokenizer::location location_arg) :
       Node(env_arg, move(location_arg)) { }
     virtual string to_string() const noexcept = 0;
     virtual void print(ostream &output, bool matlab_output = false) const noexcept = 0;
@@ -199,7 +199,7 @@ namespace macro
   private:
     bool value;
   public:
-    Bool(const bool value_arg,
+    Bool(bool value_arg,
          Environment &env_arg, Tokenizer::location location_arg = Tokenizer::location()) :
       BaseType(env_arg, move(location_arg)),
       value{value_arg} { }
@@ -235,7 +235,7 @@ namespace macro
   public:
     // Use strtod to handle extreme cases (e.g. 1e500, 1e-500), nan, inf
     // See Note in NumericalConstants::AddNonNegativeConstant
-    Real(const string value_arg,
+    Real(const string &value_arg,
          Environment &env_arg, Tokenizer::location location_arg = Tokenizer::location()) :
       BaseType(env_arg, move(location_arg)),
       value{strtod(value_arg.c_str(), nullptr)} { }
@@ -328,7 +328,7 @@ namespace macro
   private:
     string value;
   public:
-    String(const string value_arg,
+    String(string value_arg,
            Environment &env_arg, Tokenizer::location location_arg = Tokenizer::location()) :
       BaseType(env_arg, move(location_arg)),
       value{move(value_arg)} { }
@@ -366,7 +366,7 @@ namespace macro
   private:
     vector<ExpressionPtr> tup;
   public:
-    Tuple(const vector<ExpressionPtr> tup_arg,
+    Tuple(vector<ExpressionPtr> tup_arg,
           Environment &env_arg, Tokenizer::location location_arg = Tokenizer::location()) :
       BaseType(env_arg, move(location_arg)),
       tup{move(tup_arg)} { }
@@ -399,15 +399,15 @@ namespace macro
     vector<ExpressionPtr> arr;
     ExpressionPtr range1, increment, range2;
   public:
-    Array(const vector<ExpressionPtr> arr_arg,
+    Array(vector<ExpressionPtr> arr_arg,
           Environment &env_arg, Tokenizer::location location_arg = Tokenizer::location()) :
       BaseType(env_arg, move(location_arg)),
       arr{move(arr_arg)} { }
-    Array(const ExpressionPtr range1_arg, const ExpressionPtr range2_arg,
+    Array(ExpressionPtr range1_arg, ExpressionPtr range2_arg,
           Environment &env_arg, Tokenizer::location location_arg) :
       BaseType(env_arg, move(location_arg)),
       range1{move(range1_arg)}, range2{move(range2_arg)} { }
-    Array(const ExpressionPtr range1_arg, const ExpressionPtr increment_arg, const ExpressionPtr range2_arg,
+    Array(ExpressionPtr range1_arg, ExpressionPtr increment_arg, ExpressionPtr range2_arg,
           Environment &env_arg, Tokenizer::location location_arg) :
       BaseType(env_arg, move(location_arg)),
       range1{move(range1_arg)}, increment{move(increment_arg)}, range2{move(range2_arg)} { }
@@ -447,11 +447,11 @@ namespace macro
     const string name;
     ArrayPtr indices; // for strings/arrays
   public:
-    Variable(const string name_arg,
-             Environment &env_arg, const Tokenizer::location location_arg) :
+    Variable(string name_arg,
+             Environment &env_arg, Tokenizer::location location_arg) :
       Expression(env_arg, move(location_arg)), name{move(name_arg)} { }
-    Variable(const string name_arg, const ArrayPtr indices_arg,
-             Environment &env_arg, const Tokenizer::location location_arg) :
+    Variable(string name_arg, ArrayPtr indices_arg,
+             Environment &env_arg, Tokenizer::location location_arg) :
       Expression(env_arg, move(location_arg)), name{move(name_arg)}, indices{move(indices_arg)} { }
     inline void addIndexing(const vector<ExpressionPtr> indices_arg)
     {
@@ -477,9 +477,9 @@ namespace macro
     const string name;
     const vector<ExpressionPtr> args;
   public:
-    Function(const string &name_arg,
-             const vector<ExpressionPtr> &args_arg,
-             Environment &env_arg, const Tokenizer::location location_arg) :
+    Function(string name_arg,
+             vector<ExpressionPtr> args_arg,
+             Environment &env_arg, Tokenizer::location location_arg) :
       Expression(env_arg, move(location_arg)), name{move(name_arg)}, args{move(args_arg)} { }
     string to_string() const noexcept override;
     inline void print(ostream &output, bool matlab_output = false) const noexcept override
@@ -503,8 +503,8 @@ namespace macro
     const ExpressionPtr arg;
   public:
     UnaryOp(codes::UnaryOp op_code_arg,
-            const ExpressionPtr arg_arg,
-            Environment &env_arg, const Tokenizer::location location_arg) :
+            ExpressionPtr arg_arg,
+            Environment &env_arg, Tokenizer::location location_arg) :
       Expression(env_arg, move(location_arg)), op_code{move(op_code_arg)}, arg{move(arg_arg)} { }
     string to_string() const noexcept override;
     void print(ostream &output, bool matlab_output = false) const noexcept override;
@@ -523,9 +523,9 @@ namespace macro
     const ExpressionPtr arg1, arg2;
   public:
     BinaryOp(codes::BinaryOp op_code_arg,
-             const ExpressionPtr arg1_arg, const ExpressionPtr arg2_arg,
-             Environment &env_arg, const Tokenizer::location location_arg) :
-      Expression(env_arg, move(location_arg)), op_code{move(op_code_arg)},
+             ExpressionPtr arg1_arg, ExpressionPtr arg2_arg,
+             Environment &env_arg, Tokenizer::location location_arg) :
+      Expression(env_arg, move(location_arg)), op_code{op_code_arg},
       arg1{move(arg1_arg)}, arg2{move(arg2_arg)} { }
   public:
     string to_string() const noexcept override;
@@ -545,9 +545,9 @@ namespace macro
     const ExpressionPtr arg1, arg2, arg3;
   public:
     TrinaryOp(codes::TrinaryOp op_code_arg,
-              const ExpressionPtr arg1_arg, const ExpressionPtr arg2_arg, const ExpressionPtr arg3_arg,
-              Environment &env_arg, const Tokenizer::location location_arg) :
-      Expression(env_arg, move(location_arg)), op_code{move(op_code_arg)},
+              ExpressionPtr arg1_arg, ExpressionPtr arg2_arg, ExpressionPtr arg3_arg,
+              Environment &env_arg, Tokenizer::location location_arg) :
+      Expression(env_arg, move(location_arg)), op_code{op_code_arg},
       arg1{move(arg1_arg)}, arg2{move(arg2_arg)}, arg3{move(arg3_arg)} { }
     string to_string() const noexcept override;
     void print(ostream &output, bool matlab_output = false) const noexcept override;
@@ -569,25 +569,25 @@ namespace macro
   private:
     const ExpressionPtr c_expr, c_vars, c_set, c_when;
   public:
-    Comprehension(const ExpressionPtr c_expr_arg,
-                  const ExpressionPtr c_vars_arg,
-                  const ExpressionPtr c_set_arg,
-                  const ExpressionPtr c_when_arg,
-                  Environment &env_arg, const Tokenizer::location location_arg) :
+    Comprehension(ExpressionPtr c_expr_arg,
+                  ExpressionPtr c_vars_arg,
+                  ExpressionPtr c_set_arg,
+                  ExpressionPtr c_when_arg,
+                  Environment &env_arg, Tokenizer::location location_arg) :
       Expression(env_arg, move(location_arg)),
       c_expr{move(c_expr_arg)}, c_vars{move(c_vars_arg)},
       c_set{move(c_set_arg)}, c_when{move(c_when_arg)} { }
-    Comprehension(const ExpressionPtr c_expr_arg,
-                  const ExpressionPtr c_vars_arg,
-                  const ExpressionPtr c_set_arg,
-                  Environment &env_arg, const Tokenizer::location location_arg) :
+    Comprehension(ExpressionPtr c_expr_arg,
+                  ExpressionPtr c_vars_arg,
+                  ExpressionPtr c_set_arg,
+                  Environment &env_arg, Tokenizer::location location_arg) :
       Expression(env_arg, move(location_arg)),
       c_expr{move(c_expr_arg)}, c_vars{move(c_vars_arg)}, c_set{move(c_set_arg)} { }
-    Comprehension(const bool filter_only_arg,
-                  const ExpressionPtr c_vars_arg,
-                  const ExpressionPtr c_set_arg,
-                  const ExpressionPtr c_when_arg,
-                  Environment &env_arg, const Tokenizer::location location_arg) :
+    Comprehension(bool filter_only_arg,
+                  ExpressionPtr c_vars_arg,
+                  ExpressionPtr c_set_arg,
+                  ExpressionPtr c_when_arg,
+                  Environment &env_arg, Tokenizer::location location_arg) :
       Expression(env_arg, move(location_arg)),
       c_vars{move(c_vars_arg)}, c_set{move(c_set_arg)}, c_when{move(c_when_arg)} { }
     string to_string() const noexcept override;