diff --git a/linnet.cabal b/linnet.cabal
--- a/linnet.cabal
+++ b/linnet.cabal
@@ -1,6 +1,6 @@
 cabal-version: 1.12
 name: linnet
-version: 0.4.0.0
+version: 0.4.0.1
 license: Apache
 license-file: LICENSE
 copyright: 2019 Sergey Kolbasov
diff --git a/src/Linnet/Decode.hs b/src/Linnet/Decode.hs
--- a/src/Linnet/Decode.hs
+++ b/src/Linnet/Decode.hs
@@ -20,6 +20,7 @@
 import qualified Data.Text                  as T
 import qualified Data.Text.Encoding         as TE
 import           Data.Text.Read             (decimal, double, rational, signed)
+import           Linnet.ContentTypes        (TextPlain)
 import           Linnet.Endpoints.Entity    (Entity)
 import           Linnet.Errors
 
@@ -28,6 +29,12 @@
 -- by looking for specific @Decode@ instance.
 class Decode ct a where
   decode :: BL.ByteString -> Either LinnetError a
+
+instance Decode TextPlain BL.ByteString where
+  decode = Right
+
+instance Decode TextPlain B.ByteString where
+  decode = Right . BL.toStrict
 
 class DecodePath a where
   decodePath :: T.Text -> Maybe a
diff --git a/src/Linnet/Endpoint.hs b/src/Linnet/Endpoint.hs
--- a/src/Linnet/Endpoint.hs
+++ b/src/Linnet/Endpoint.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE DataKinds            #-}
+{-# LANGUAGE DeriveGeneric        #-}
 {-# LANGUAGE FlexibleContexts     #-}
 {-# LANGUAGE OverloadedStrings    #-}
 {-# LANGUAGE RecordWildCards      #-}
@@ -40,6 +41,7 @@
 import qualified Control.Monad.Catch       as MC
 import           Data.Text                 (Text, append, unpack)
 import           GHC.Base                  (liftA2)
+import           GHC.Generics              (Generic)
 import           Linnet.Errors             (LinnetError (..))
 import           Linnet.Input
 import           Linnet.Internal.Coproduct
@@ -70,6 +72,7 @@
   | NotMatched
       { reason :: NotMatchedReason
       }
+  deriving (Generic)
 
 type Trace = [Text]
 
@@ -186,7 +189,7 @@
             NotMatched r -> NotMatched r
     }
 
-transformOutput :: (m (Output a) -> m (Output b)) -> Endpoint m a -> Endpoint m b
+transformOutput :: (m (Output a) -> k (Output b)) -> Endpoint m a -> Endpoint k b
 transformOutput fn ea =
   ea
     { runEndpoint =
