diff --git a/Data/PEM/Types.hs b/Data/PEM/Types.hs
--- a/Data/PEM/Types.hs
+++ b/Data/PEM/Types.hs
@@ -8,13 +8,21 @@
 module Data.PEM.Types where
 
 import Data.ByteString (ByteString)
+import Basement.NormalForm
 
 -- | Represent one PEM section
 --
 -- for now headers are not serialized at all.
 -- this is just available here as a placeholder for a later implementation.
 data PEM = PEM
-        { pemName    :: String                 -- ^ the name of the section, found after the dash BEGIN tag.
-        , pemHeader  :: [(String, ByteString)] -- ^ optionals key value pair header
-        , pemContent :: ByteString             -- ^ binary content of the section
-        } deriving (Show,Eq)
+    { pemName    :: String                 -- ^ the name of the section, found after the dash BEGIN tag.
+    , pemHeader  :: [(String, ByteString)] -- ^ optionals key value pair header
+    , pemContent :: ByteString             -- ^ binary content of the section
+    } deriving (Show,Eq)
+
+instance NormalForm PEM where
+    toNormalForm pem =
+        toNormalForm (pemName pem) `seq` nfLbs (pemHeader pem) `seq` pemContent pem `seq` ()
+      where
+        nfLbs []         = ()
+        nfLbs ((s,bs):l) = toNormalForm s `seq` bs `seq` nfLbs l
diff --git a/pem.cabal b/pem.cabal
--- a/pem.cabal
+++ b/pem.cabal
@@ -1,5 +1,5 @@
 Name:                pem
-Version:             0.2.3
+Version:             0.2.4
 Synopsis:            Privacy Enhanced Mail (PEM) format reader and writer.
 Description:         Privacy Enhanced Mail (PEM) format reader and writer. long description
 License:             BSD3
@@ -16,8 +16,8 @@
 
 Library
   Build-Depends:     base >= 3 && < 5
-                   , mtl
                    , bytestring
+                   , basement
                    , memory
   Exposed-modules:   Data.PEM
   Other-modules:     Data.PEM.Parser
