diff --git a/README.md b/README.md
index 1ee358e5..6451e2c5 100644
--- a/README.md
+++ b/README.md
@@ -563,7 +563,9 @@ namespace nlohmann {
         }
 
         static void from_json(const json& j, boost::optional<T>& opt) {
-            if (!j.is_null()) {
+            if (j.is_null()) {
+                opt = boost::none;
+            } else {
                 opt = j.get<T>(); // same as above, but with 
                                   // adl_serializer<T>::from_json
             }
diff --git a/src/json.hpp b/src/json.hpp
index 5fdd83d6..c77945a8 100644
--- a/src/json.hpp
+++ b/src/json.hpp
@@ -3036,10 +3036,8 @@ class basic_json
         {
             return m_value.boolean;
         }
-        else
-        {
-            JSON_THROW(std::domain_error("type must be boolean, but is " + type_name()));
-        }
+
+        JSON_THROW(std::domain_error("type must be boolean, but is " + type_name()));
     }
 
     /// get a pointer to the value (object)
@@ -8534,10 +8532,11 @@ class basic_json
             return *this;
         }
 
-        primitive_iterator_t& operator++(int)
+        primitive_iterator_t operator++(int)
         {
+            auto result = *this;
             m_it++;
-            return *this;
+            return result;
         }
 
         primitive_iterator_t& operator--()
@@ -8546,10 +8545,11 @@ class basic_json
             return *this;
         }
 
-        primitive_iterator_t& operator--(int)
+        primitive_iterator_t operator--(int)
         {
+            auto result = *this;
             m_it--;
-            return *this;
+            return result;
         }
 
         primitive_iterator_t& operator+=(difference_type n)
diff --git a/src/json.hpp.re2c b/src/json.hpp.re2c
index 068b8763..109a4f26 100644
--- a/src/json.hpp.re2c
+++ b/src/json.hpp.re2c
@@ -3036,10 +3036,8 @@ class basic_json
         {
             return m_value.boolean;
         }
-        else
-        {
-            JSON_THROW(std::domain_error("type must be boolean, but is " + type_name()));
-        }
+
+        JSON_THROW(std::domain_error("type must be boolean, but is " + type_name()));
     }
 
     /// get a pointer to the value (object)
@@ -8534,10 +8532,11 @@ class basic_json
             return *this;
         }
 
-        primitive_iterator_t& operator++(int)
+        primitive_iterator_t operator++(int)
         {
+            auto result = *this;
             m_it++;
-            return *this;
+            return result;
         }
 
         primitive_iterator_t& operator--()
@@ -8546,10 +8545,11 @@ class basic_json
             return *this;
         }
 
-        primitive_iterator_t& operator--(int)
+        primitive_iterator_t operator--(int)
         {
+            auto result = *this;
             m_it--;
-            return *this;
+            return result;
         }
 
         primitive_iterator_t& operator+=(difference_type n)
diff --git a/test/src/unit-class_parser.cpp b/test/src/unit-class_parser.cpp
index 3dfad5bd..59ea3cef 100644
--- a/test/src/unit-class_parser.cpp
+++ b/test/src/unit-class_parser.cpp
@@ -596,6 +596,32 @@ TEST_CASE("parser class")
                           "missing or wrong low surrogate");
     }
 
+    SECTION("tests found by mutate++")
+    {
+        // test case to make sure no comma preceeds the first key
+        CHECK_THROWS_AS(json::parser("{,\"key\": false}").parse(), std::invalid_argument);
+        // test case to make sure an object is properly closed
+        CHECK_THROWS_AS(json::parser("[{\"key\": false true]").parse(), std::invalid_argument);
+
+        // test case to make sure the callback is properly evaluated after reading a key
+        {
+            json::parser_callback_t cb = [](int depth, json::parse_event_t event, json & parsed)
+            {
+                if (event == json::parse_event_t::key)
+                {
+                    return false;
+                }
+                else
+                {
+                    return true;
+                }
+            };
+
+            json x = json::parse("{\"key\": false}", cb);
+            CHECK(x == json::object());
+        }
+    }
+
     SECTION("callback function")
     {
         auto s_object = R"(