diff --git a/exprtk.hpp b/exprtk.hpp
index 9cd92ff..6bab715 100644
--- a/exprtk.hpp
+++ b/exprtk.hpp
@@ -14468,7 +14468,7 @@
          freefunc6(ff6_functor ff) : exprtk::ifunction<T>(6), f(ff) {}
          inline T operator()(const T& v0, const T& v1, const T& v2, const T& v3, const T& v4, const T& v5)
          { return f(v0,v1,v2,v3,v4,v5); }
-         ff5_functor f;
+         ff6_functor f;
       };
 
       template <typename Type, typename RawType>
@@ -14953,19 +14953,22 @@
 
       inline symbol_table<T>& operator=(const symbol_table<T>& st)
       {
-         if (holder_)
+         if (this != &st)
          {
-            if (0 == --holder_->ref_count)
+            if (holder_)
             {
-               delete holder_;
+               if (0 == --holder_->ref_count)
+               {
+                  delete holder_;
+               }
+
+               holder_ = 0;
             }
 
-            holder_ = 0;
+            holder_ = st.holder_;
+            holder_->ref_count++;
          }
 
-         holder_ = st.holder_;
-         holder_->ref_count++;
-
          return *this;
       }
 
diff --git a/exprtk_test.cpp b/exprtk_test.cpp
index df5c98c..4743bcd 100644
--- a/exprtk_test.cpp
+++ b/exprtk_test.cpp
@@ -3139,6 +3139,7 @@
 double foo3(double v0, double v1, double v2) { return v0 + v1 + v2; }
 double foo4(double v0, double v1, double v2, double v3) { return v0 + v1 + v2 + v3; }
 double foo5(double v0, double v1, double v2, double v3, double v4) { return v0 + v1 + v2 + v3 + v4; }
+double foo6(double v0, double v1, double v2, double v3, double v4, double v5) { return v0 + v1 + v2 + v3 + v4 + v5; }
 
 template <typename T>
 inline bool run_test09()
@@ -3241,11 +3242,12 @@
 
       const std::string expression_list[] =
                            {
-                             "foo1(1)         == 1",
-                             "foo2(1,2)       == (1 + 2)",
-                             "foo3(1,2,3)     == (1 + 2 + 3)",
-                             "foo4(1,2,3,4)   == (1 + 2 + 3 + 4)",
-                             "foo5(1,2,3,4,5) == (1 + 2 + 3 + 4 + 5)"
+                             "foo1(1)           == 1",
+                             "foo2(1,2)         == (1 + 2)",
+                             "foo3(1,2,3)       == (1 + 2 + 3)",
+                             "foo4(1,2,3,4)     == (1 + 2 + 3 + 4)",
+                             "foo5(1,2,3,4,5)   == (1 + 2 + 3 + 4 + 5)",
+                             "foo6(1,2,3,4,5,6) == (1 + 2 + 3 + 4 + 5 + 6)"
                            };
 
       const std::size_t expression_list_size = sizeof(expression_list) / sizeof(std::string);
@@ -3257,6 +3259,7 @@
       symbol_table.add_function("foo3",foo3);
       symbol_table.add_function("foo4",foo4);
       symbol_table.add_function("foo5",foo5);
+      symbol_table.add_function("foo6",foo6);
 
       for (std::size_t i = 0; i < expression_list_size; ++i)
       {
diff --git a/readme.txt b/readme.txt
index 24f542b..88e180a 100644
--- a/readme.txt
+++ b/readme.txt
@@ -881,7 +881,7 @@
   Expressions        |                          |   Expressions as
   in string form     A                          V   exprtk::expression
                      |                          |   instances
-  [s0:'x+1'     ]-+  |                          |   +-[e0: x+1]
+  [s0:'x+1']------+  |                          |   +-[e0: x+1]
                   |  |                          |   |
   [s1:'2z+y']-----+--+                          +-->+-[e1: 2z+y]
                   |                                 |
