diff --git a/exprtk.hpp b/exprtk.hpp
index b251333..c865833 100644
--- a/exprtk.hpp
+++ b/exprtk.hpp
@@ -793,7 +793,7 @@
             template <typename T>
             inline T abs_impl(const T v, real_type_tag)
             {
-               return ((v >= T(0)) ? v : -v);
+               return ((v < T(0)) ? -v : v);
             }
 
             template <typename T>
@@ -11123,27 +11123,28 @@
          bool               body_deletable_;
       };
 
-      #define exprtk_define_unary_op(OpName)                         \
-      template <typename T>                                          \
-      struct OpName##_op                                             \
-      {                                                              \
-         typedef typename functor_t<T>::Type Type;                   \
-                                                                     \
-         static inline T process(Type v)                             \
-         {                                                           \
-            return numeric:: OpName (v);                             \
-         }                                                           \
-                                                                     \
-         static inline typename expression_node<T>::node_type type() \
-         {                                                           \
-            return expression_node<T>::e_##OpName;                   \
-         }                                                           \
-                                                                     \
-         static inline details::operator_type operation()            \
-         {                                                           \
-            return details::e_##OpName;                              \
-         }                                                           \
-      };                                                             \
+      #define exprtk_define_unary_op(OpName)                    \
+      template <typename T>                                     \
+      struct OpName##_op                                        \
+      {                                                         \
+         typedef typename functor_t<T>::Type Type;              \
+         typedef typename expression_node<T>::node_type node_t; \
+                                                                \
+         static inline T process(Type v)                        \
+         {                                                      \
+            return numeric:: OpName (v);                        \
+         }                                                      \
+                                                                \
+         static inline node_t type()                            \
+         {                                                      \
+            return expression_node<T>::e_##OpName;              \
+         }                                                      \
+                                                                \
+         static inline details::operator_type operation()       \
+         {                                                      \
+            return details::e_##OpName;                         \
+         }                                                      \
+      };                                                        \
 
       exprtk_define_unary_op(abs  )
       exprtk_define_unary_op(acos )
diff --git a/exprtk_simple_example_05.cpp b/exprtk_simple_example_05.cpp
index 08218a1..1002300 100644
--- a/exprtk_simple_example_05.cpp
+++ b/exprtk_simple_example_05.cpp
@@ -43,7 +43,7 @@
    typedef exprtk::expression<T>     expression_t;
    typedef exprtk::parser<T>             parser_t;
 
-   std::string expression_string = "myfunc(sin(x * pi),y / 2)";
+   std::string expression_string = "myfunc(sin(x * pi), y / 2)";
 
    T x = T(1);
    T y = T(2);
diff --git a/exprtk_simple_example_06.cpp b/exprtk_simple_example_06.cpp
index 2a482f4..71f0512 100644
--- a/exprtk_simple_example_06.cpp
+++ b/exprtk_simple_example_06.cpp
@@ -31,7 +31,7 @@
    std::string expression_string =
                   " for (var i := 0; i < min(x[],y[],z[]); i += 1) "
                   " {                                              "
-                  "    z[i] := 3sin(x[i]) + 2log(y[i]);            "
+                  "   z[i] := 3sin(x[i]) + 2log(y[i]);             "
                   " }                                              ";
 
    T x[] = { T(1.1), T(2.2), T(3.3), T(4.4), T(5.5) };
diff --git a/exprtk_simple_example_08.cpp b/exprtk_simple_example_08.cpp
index ab80fd5..dd7dc23 100644
--- a/exprtk_simple_example_08.cpp
+++ b/exprtk_simple_example_08.cpp
@@ -49,7 +49,7 @@
       .add(
       function_t("g","3*[f(x) + f(y)]","x","y"));  // g(x,y) = 3[f(x) + f(y)]
 
-   std::string expression_string = "g(1 + f(x),f(y) / 2)";
+   std::string expression_string = "g(1 + f(x), f(y) / 2)";
 
    expression_t expression;
    expression.register_symbol_table(symbol_table);
diff --git a/exprtk_simple_example_10.cpp b/exprtk_simple_example_10.cpp
index 36487ba..ee53994 100644
--- a/exprtk_simple_example_10.cpp
+++ b/exprtk_simple_example_10.cpp
@@ -55,7 +55,7 @@
            "      var y := x / 2;                 "
            "      repeat                          "
            "        y := (1 / 2) * (y + (x / y)); "
-           "        if (equal(y * y,x))           "
+           "        if (equal(y * y, x))          "
            "          break[y];                   "
            "      until ((z -= 1) <= 0);          "
            "    };                                "
