diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,8 @@
+1.2.0.0
+=======
+
+- Fixes issue #3 with unexpected errors when injected value fails to parse.
+
 1.1.6.0
 =======
 
diff --git a/aeson-injector.cabal b/aeson-injector.cabal
--- a/aeson-injector.cabal
+++ b/aeson-injector.cabal
@@ -1,5 +1,5 @@
 name:                aeson-injector
-version:             1.1.6.0
+version:             1.2.0.0
 synopsis:            Injecting fields into aeson values
 description:         It is small utility library that is intented to be used in RESTful APIs, especially with [servant](http://haskell-servant.readthedocs.io/en/stable/) and [Swagger](http://swagger.io/). Its main purpose is simple injection of fields into JSONs produced by [aeson](https://hackage.haskell.org/package/aeson) library.
 license:             MIT
@@ -29,10 +29,12 @@
   exposed-modules:
       Data.Aeson.Unit
       Data.Aeson.WithField
+      Data.Aeson.WithField.Internal
 
   build-depends:
       base                 >= 4.7     && < 4.17
     , aeson                >= 0.11    && < 1.6
+    , attoparsec           >= 0.14    && < 0.15
     , bifunctors           >= 5.2     && < 6
     , deepseq              >= 1.4     && < 2
     , hashable             >= 1.0     && < 2.0
diff --git a/src/Data/Aeson/WithField.hs b/src/Data/Aeson/WithField.hs
--- a/src/Data/Aeson/WithField.hs
+++ b/src/Data/Aeson/WithField.hs
@@ -4,6 +4,7 @@
 {-# LANGUAGE OverloadedLists #-}
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE PolyKinds #-}
+{-# LANGUAGE Rank2Types #-}
 {-# LANGUAGE ScopedTypeVariables #-}
 {-# LANGUAGE TupleSections #-}
 {-# LANGUAGE TypeFamilies #-}
@@ -166,6 +167,7 @@
 import Control.Monad
 import Data.Aeson
 import Data.Aeson.Types (typeMismatch)
+import Data.Aeson.WithField.Internal
 import Data.Hashable
 import Data.Monoid
 import Data.Proxy
@@ -245,7 +247,7 @@
 -- Note: The instance tries to parse the `b` part without `s` field at first time.
 -- If it fails, the instance retries with presence of the `s` field.
 instance (KnownSymbol s, FromJSON a, FromJSON b) => FromJSON (WithField s a b) where
-  parseJSON val@(Object o) = injected <|> wrapper
+  parseJSON val@(Object o) = injected `mplus0` wrapper
     where
     field = T.pack $ symbolVal (Proxy :: Proxy s)
     injected = WithField
@@ -357,10 +359,10 @@
 -- that `fromJSON . toJSON === id` for `a`.
 instance (ToJSON a, FromJSON a, FromJSON b) => FromJSON (WithFields a b) where
   parseJSON val@(Object o) = do
-    (a, isInjected) <- ((, False) <$> parseJSON val) <|> ((, True) <$> (o .: "injected"))
+    (a, isInjected) <- ((, False) <$> parseJSON val) `mplus0` ((, True) <$> (o .: "injected"))
     let o' = (if isInjected then H.delete "injected" else deleteAll (extractFields a)) o
-    b <-  (parseJSON (Object o') <|> o' .: "value")
-      <|> (parseJSON val <|> o .: "value")
+    b <-  ((parseJSON (Object o')) `mplus0` (o' .: "value"))
+      <|> ((parseJSON val) `mplus0` (o .: "value"))
     pure $ WithFields a b
     where
       deleteAll :: (Eq k, Hashable k) => [k] -> H.HashMap k v -> H.HashMap k v
@@ -443,3 +445,4 @@
       & required .~ [field]
     where
     field = T.pack $ symbolVal (Proxy :: Proxy s)
+
diff --git a/src/Data/Aeson/WithField/Internal.hs b/src/Data/Aeson/WithField/Internal.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Aeson/WithField/Internal.hs
@@ -0,0 +1,25 @@
+{-# LANGUAGE Rank2Types #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE TypeApplications #-}
+module Data.Aeson.WithField.Internal
+  ( mplus0
+  ) where
+
+import Data.Aeson.Types (Parser, JSONPath)
+
+import Unsafe.Coerce
+
+newtype P a = P 
+   { runP :: forall f r.
+                   JSONPath
+                -> Failure f r
+                -> Success a f r
+                -> f r }
+
+type Failure f r   = JSONPath -> String -> f r
+type Success a f r = a -> f r
+
+mplus0 :: forall a . Parser a -> Parser a -> Parser a
+mplus0 a b = unsafeCoerce @(P a) $ P $ \path kf ks -> 
+  let kf' p l = runP (unsafeCoerce b) path (\_ _ -> kf p l) ks
+  in runP (unsafeCoerce a) path kf' ks
