diff --git a/exprtk.hpp b/exprtk.hpp
index fffffc2..5fe6d0a 100644
--- a/exprtk.hpp
+++ b/exprtk.hpp
@@ -3753,24 +3753,35 @@
             return current_token_;
          }
 
-         inline bool token_is(const token_t::token_type& ttype, const bool advance_token = true)
+         enum token_advance_mode
+         {
+            e_hold    = 0,
+            e_advance = 1
+         };
+
+         inline void advance_token(const token_advance_mode mode)
+         {
+            if (e_advance == mode)
+            {
+               next_token();
+            }
+         }
+
+         inline bool token_is(const token_t::token_type& ttype, const token_advance_mode mode = e_advance)
          {
             if (current_token().type != ttype)
             {
                return false;
             }
 
-            if (advance_token)
-            {
-               next_token();
-            }
+            advance_token(mode);
 
             return true;
          }
 
          inline bool token_is(const token_t::token_type& ttype,
                               const std::string& value,
-                              const bool advance_token = true)
+                              const token_advance_mode mode = e_advance)
          {
             if (
                  (current_token().type != ttype) ||
@@ -3780,17 +3791,14 @@
                return false;
             }
 
-            if (advance_token)
-            {
-               next_token();
-            }
+            advance_token(mode);
 
             return true;
          }
 
          inline bool token_is_then_assign(const token_t::token_type& ttype,
                                           std::string& token,
-                                          const bool advance_token = true)
+                                          const token_advance_mode mode = e_advance)
          {
             if (current_token_.type != ttype)
             {
@@ -3799,10 +3807,7 @@
 
             token = current_token_.value;
 
-            if (advance_token)
-            {
-               next_token();
-            }
+            advance_token(mode);
 
             return true;
          }
@@ -16439,6 +16444,8 @@
 
       typedef results_context<T> results_context_t;
 
+      typedef parser_helper prsrhlpr_t;
+
       struct scope_element
       {
          enum element_type
@@ -18498,7 +18505,7 @@
 
             if (lexer().finished())
                break;
-            else if (token_is(token_t::e_eof,false))
+            else if (token_is(token_t::e_eof,prsrhlpr_t::e_hold))
             {
                if (lexer().finished())
                   break;
@@ -18774,7 +18781,10 @@
             {
                expression = new_expression;
 
-               if (token_is(token_t::e_ternary,false) && (precedence == e_level00))
+               if (
+                    token_is(token_t::e_ternary,prsrhlpr_t::e_hold) &&
+                    (precedence == e_level00)
+                  )
                {
                   expression = parse_ternary_conditional_statement(expression);
                }
@@ -19342,7 +19352,7 @@
 
          bool result = true;
 
-         if (token_is(token_t::e_lcrlbracket,false))
+         if (token_is(token_t::e_lcrlbracket,prsrhlpr_t::e_hold))
          {
             if (0 == (consequent = parse_multi_sequence("if-statement-01")))
             {
@@ -19357,7 +19367,7 @@
          {
             if (
                  settings_.commutative_check_enabled() &&
-                 token_is(token_t::e_mul,false)
+                 token_is(token_t::e_mul,prsrhlpr_t::e_hold)
                )
             {
                next_token();
@@ -19390,7 +19400,7 @@
             {
                next_token();
 
-               if (token_is(token_t::e_lcrlbracket,false))
+               if (token_is(token_t::e_lcrlbracket,prsrhlpr_t::e_hold))
                {
                   if (0 == (alternative = parse_multi_sequence("else-statement-01")))
                   {
@@ -19495,7 +19505,7 @@
 
             return error_node();
          }
-         else if (token_is(token_t::e_comma,false))
+         else if (token_is(token_t::e_comma,prsrhlpr_t::e_hold))
          {
             // if (x,y,z)
             return parse_conditional_statement_01(condition);
@@ -19873,13 +19883,13 @@
          if (!token_is(token_t::e_eof))
          {
             if (
-                 !token_is(token_t::e_symbol,false) &&
+                 !token_is(token_t::e_symbol,prsrhlpr_t::e_hold) &&
                  details::imatch(current_token().value,"var")
                )
             {
                next_token();
 
-               if (!token_is(token_t::e_symbol,false))
+               if (!token_is(token_t::e_symbol,prsrhlpr_t::e_hold))
                {
                   set_error(
                      make_error(parser_error::e_syntax,
@@ -20161,7 +20171,7 @@
 
                expression_node_ptr default_statement = error_node();
 
-               if (token_is(token_t::e_lcrlbracket,false))
+               if (token_is(token_t::e_lcrlbracket,prsrhlpr_t::e_hold))
                   default_statement = parse_multi_sequence("switch-default");
                else
                   default_statement = parse_expression();
@@ -20290,7 +20300,7 @@
                arg_list.push_back(consequent);
             }
 
-            if (token_is(token_t::e_rcrlbracket,false))
+            if (token_is(token_t::e_rcrlbracket,prsrhlpr_t::e_hold))
             {
                break;
             }
@@ -20352,6 +20362,7 @@
          lodge_symbol(symbol,e_st_function);
 
          next_token();
+
          if (!token_is(token_t::e_lbracket))
          {
             set_error(
@@ -20450,11 +20461,11 @@
 
          while
             (
-              (0 != expression)                      &&
-              (i++ < max_rangesize_parses)           &&
-              error_list_.empty()                    &&
-              token_is(token_t::e_lsqrbracket,false) &&
-              is_generally_string_node(expression)
+              (0 != expression)                     &&
+              (i++ < max_rangesize_parses)          &&
+              error_list_.empty()                   &&
+              is_generally_string_node(expression)  &&
+              token_is(token_t::e_lsqrbracket,prsrhlpr_t::e_hold)
             )
          {
             expression = parse_string_range_statement(expression);
@@ -21798,9 +21809,9 @@
             }
 
             if (
-                 !token_is(token_t::e_rbracket   ,false) &&
-                 !token_is(token_t::e_rcrlbracket,false) &&
-                 !token_is(token_t::e_rsqrbracket,false)
+                 !token_is(token_t::e_rbracket   ,prsrhlpr_t::e_hold) &&
+                 !token_is(token_t::e_rcrlbracket,prsrhlpr_t::e_hold) &&
+                 !token_is(token_t::e_rsqrbracket,prsrhlpr_t::e_hold)
                )
             {
                if (!token_is(token_t::e_eof))
@@ -22043,11 +22054,11 @@
 
             return error_node();
          }
-         else if (token_is(token_t::e_lsqrbracket,false))
+         else if (token_is(token_t::e_lsqrbracket,prsrhlpr_t::e_hold))
          {
             return parse_define_vector_statement(var_name);
          }
-         else if (token_is(token_t::e_lcrlbracket,false))
+         else if (token_is(token_t::e_lcrlbracket,prsrhlpr_t::e_hold))
          {
             return parse_uninitialised_var_statement(var_name);
          }
@@ -22065,12 +22076,12 @@
          }
 
          if (
-              !token_is(token_t::e_rbracket   ,false) &&
-              !token_is(token_t::e_rcrlbracket,false) &&
-              !token_is(token_t::e_rsqrbracket,false)
+              !token_is(token_t::e_rbracket   ,prsrhlpr_t::e_hold) &&
+              !token_is(token_t::e_rcrlbracket,prsrhlpr_t::e_hold) &&
+              !token_is(token_t::e_rsqrbracket,prsrhlpr_t::e_hold)
             )
          {
-            if (!token_is(token_t::e_eof,false))
+            if (!token_is(token_t::e_eof,prsrhlpr_t::e_hold))
             {
                set_error(
                   make_error(parser_error::e_syntax,
@@ -22173,7 +22184,7 @@
 
             return error_node();
          }
-         else if (!token_is(token_t::e_eof,false))
+         else if (!token_is(token_t::e_eof,prsrhlpr_t::e_hold))
          {
             set_error(
                make_error(parser_error::e_syntax,
@@ -22268,7 +22279,7 @@
 
          const std::string var0_name = current_token().value;
 
-         if (!token_is(token_t::e_symbol,false))
+         if (!token_is(token_t::e_symbol,prsrhlpr_t::e_hold))
          {
             set_error(
                make_error(parser_error::e_syntax,
@@ -22341,7 +22352,7 @@
 
          const std::string var1_name = current_token().value;
 
-         if (!token_is(token_t::e_symbol,false))
+         if (!token_is(token_t::e_symbol,prsrhlpr_t::e_hold))
          {
             set_error(
                make_error(parser_error::e_syntax,
@@ -22604,21 +22615,23 @@
          if (is_generally_string_node(branch))
             return true;
 
+         const lexer::parser_helper::token_advance_mode hold = prsrhlpr_t::e_hold;
+
          switch (token)
          {
-            case token_t::e_lcrlbracket : implied_mul = token_is(token_t::e_lbracket   ,false) ||
-                                                        token_is(token_t::e_lcrlbracket,false) ||
-                                                        token_is(token_t::e_lsqrbracket,false) ;
+            case token_t::e_lcrlbracket : implied_mul = token_is(token_t::e_lbracket   ,hold) ||
+                                                        token_is(token_t::e_lcrlbracket,hold) ||
+                                                        token_is(token_t::e_lsqrbracket,hold) ;
                                           break;
 
-            case token_t::e_lbracket    : implied_mul = token_is(token_t::e_lbracket   ,false) ||
-                                                        token_is(token_t::e_lcrlbracket,false) ||
-                                                        token_is(token_t::e_lsqrbracket,false) ;
+            case token_t::e_lbracket    : implied_mul = token_is(token_t::e_lbracket   ,hold) ||
+                                                        token_is(token_t::e_lcrlbracket,hold) ||
+                                                        token_is(token_t::e_lsqrbracket,hold) ;
                                           break;
 
-            case token_t::e_lsqrbracket : implied_mul = token_is(token_t::e_lbracket   ,false) ||
-                                                        token_is(token_t::e_lcrlbracket,false) ||
-                                                        token_is(token_t::e_lsqrbracket,false) ;
+            case token_t::e_lsqrbracket : implied_mul = token_is(token_t::e_lbracket   ,hold) ||
+                                                        token_is(token_t::e_lcrlbracket,hold) ||
+                                                        token_is(token_t::e_lsqrbracket,hold) ;
                                           break;
 
             default                     : return true;
@@ -23151,7 +23164,7 @@
          if (
               branch                    &&
               (e_level00 == precedence) &&
-              token_is(token_t::e_ternary,false)
+              token_is(token_t::e_ternary,prsrhlpr_t::e_hold)
             )
          {
             branch = parse_ternary_conditional_statement(branch);
@@ -33724,8 +33737,8 @@
    namespace information
    {
       static const char* library = "Mathematical Expression Toolkit";
-      static const char* version = "2.718281828459045235360287471352662"
-                                   "49775724709369995957496696762772407";
+      static const char* version = "2.7182818284590452353602874713526624"
+                                   "977572470936999595749669676277240766";
       static const char* date    = "20160606";
 
       static inline std::string data()
diff --git a/readme.txt b/readme.txt
index badb629..224da97 100644
--- a/readme.txt
+++ b/readme.txt
@@ -291,7 +291,7 @@
 | nequal   | Not-equal test between x and y using normalized epsilon |
 +----------+---------------------------------------------------------+
 | root     | Nth-Root of x. where n is a positive integer.           |
-|          | (eg: root(x,3))                                         |
+|          | (eg: root(x,3) == x^(1/3))                              |
 +----------+---------------------------------------------------------+
 | round    | Round x to the nearest integer.  (eg: round(x))         |
 +----------+---------------------------------------------------------+
@@ -302,7 +302,7 @@
 | sgn      | Sign of x, -1 where x < 0, +1 where x > 0, else zero.   |
 |          | (eg: sgn(x))                                            |
 +----------+---------------------------------------------------------+
-| sqrt     | Square root of x, where x > 0.  (eg: sqrt(x))           |
+| sqrt     | Square root of x, where x >= 0.  (eg: sqrt(x))          |
 +----------+---------------------------------------------------------+
 | sum      | Sum of all the inputs.                                  |
 |          | (eg: sum(x,y,z,w,u,v,t) == (x + y + z + w + u + v + t)) |
