diff --git a/lib/Data/XML/Types.hs b/lib/Data/XML/Types.hs
--- a/lib/Data/XML/Types.hs
+++ b/lib/Data/XML/Types.hs
@@ -76,6 +76,7 @@
 import           Data.Text (Text)
 import qualified Data.Text as T
 import           Data.Typeable (Typeable)
+import           Control.DeepSeq (NFData(rnf))
 
 data Document = Document
 	{ documentPrologue :: Prologue
@@ -84,6 +85,9 @@
 	}
 	deriving (Data, Eq, Ord, Show, Typeable)
 
+instance NFData Document where
+	rnf (Document a b c) = rnf a `seq` rnf b `seq` rnf c `seq` ()
+
 data Prologue = Prologue
 	{ prologueBefore :: [Miscellaneous]
 	, prologueDoctype :: Maybe Doctype
@@ -91,17 +95,27 @@
 	}
 	deriving (Data, Eq, Ord, Show, Typeable)
 
+instance NFData Prologue where
+	rnf (Prologue a b c) = rnf a `seq` rnf b `seq` rnf c `seq` ()
+
 data Instruction = Instruction
 	{ instructionTarget :: Text
 	, instructionData :: Text
 	}
 	deriving (Data, Eq, Ord, Show, Typeable)
 
+instance NFData Instruction where
+	rnf (Instruction a b) = rnf a `seq` rnf b `seq` ()
+
 data Miscellaneous
 	= MiscInstruction Instruction
 	| MiscComment Text
 	deriving (Data, Eq, Ord, Show, Typeable)
 
+instance NFData Miscellaneous where
+	rnf (MiscInstruction a) = rnf a `seq` ()
+	rnf (MiscComment a)     = rnf a `seq` ()
+
 data Node
 	= NodeElement Element
 	| NodeInstruction Instruction
@@ -109,6 +123,12 @@
 	| NodeComment Text
 	deriving (Data, Eq, Ord, Show, Typeable)
 
+instance NFData Node where
+	rnf (NodeElement a)     = rnf a `seq` ()
+	rnf (NodeInstruction a) = rnf a `seq` ()
+	rnf (NodeContent a)     = rnf a `seq` ()
+	rnf (NodeComment a)     = rnf a `seq` ()
+
 data Element = Element
 	{ elementName :: Name
 	, elementAttributes :: [(Name, [Content])]
@@ -116,11 +136,18 @@
 	}
 	deriving (Data, Eq, Ord, Show, Typeable)
 
+instance NFData Element where
+	rnf (Element a b c) = rnf a `seq` rnf b `seq` rnf c `seq` ()
+
 data Content
 	= ContentText Text
 	| ContentEntity Text -- ^ For pass-through parsing
 	deriving (Data, Eq, Ord, Show, Typeable)
 
+instance NFData Content where
+	rnf (ContentText a)   = rnf a `seq` ()
+	rnf (ContentEntity a) = rnf a `seq` ()
+
 -- | A fully qualified name.
 --
 -- Prefixes are not semantically important; they are included only to
@@ -156,6 +183,9 @@
 		(ns, local) -> Name (T.pack (drop 1 local)) (Just (T.pack ns)) Nothing
 	fromString local = Name (T.pack local) Nothing Nothing
 
+instance NFData Name where
+	rnf (Name a b c) = rnf a `seq` rnf b `seq` rnf c `seq` ()
+
 -- | Note: due to the incredible complexity of DTDs, this type only supports
 -- external subsets. I've tried adding internal subset types, but they
 -- quickly gain more code than the rest of this module put together.
@@ -168,11 +198,18 @@
 	}
 	deriving (Data, Eq, Ord, Show, Typeable)
 
+instance NFData Doctype where
+	rnf (Doctype a b) = rnf a `seq` rnf b `seq` ()
+
 data ExternalID
 	= SystemID Text
 	| PublicID Text Text
 	deriving (Data, Eq, Ord, Show, Typeable)
 
+instance NFData ExternalID where
+	rnf (SystemID a)   = rnf a `seq` ()
+	rnf (PublicID a b) = rnf a `seq` rnf b `seq` ()
+
 -- | Some XML processing tools are incremental, and work in terms of events
 -- rather than node trees. The 'Event' type allows a document to be fully
 -- specified as a sequence of events.
@@ -197,6 +234,16 @@
 	| EventComment Text
 	| EventCDATA Text
 	deriving (Data, Eq, Ord, Show, Typeable)
+
+instance NFData Event where
+	rnf (EventBeginDoctype a b) = rnf a `seq` rnf b `seq` ()
+	rnf (EventInstruction a)    = rnf a `seq` ()
+	rnf (EventBeginElement a b) = rnf a `seq` rnf b `seq` ()
+	rnf (EventEndElement a)     = rnf a `seq` ()
+	rnf (EventContent a)        = rnf a `seq` ()
+	rnf (EventComment a)        = rnf a `seq` ()
+	rnf (EventCDATA a)          = rnf a `seq` ()
+	rnf _                       = ()
 
 isElement :: Node -> [Element]
 isElement (NodeElement e) = [e]
diff --git a/xml-types.cabal b/xml-types.cabal
--- a/xml-types.cabal
+++ b/xml-types.cabal
@@ -1,5 +1,5 @@
 name: xml-types
-version: 0.3.3
+version: 0.3.4
 synopsis: Basic types for representing XML
 license: MIT
 license-file: license.txt
@@ -13,13 +13,13 @@
 bug-reports: mailto:jmillikin@gmail.com
 
 source-repository head
-  type: bazaar
-  location: https://john-millikin.com/branches/xml-types/0.3/
+  type: git
+  location: https://john-millikin.com/code/haskell-xml-types/
 
 source-repository this
-  type: bazaar
-  location: https://john-millikin.com/branches/xml-types/0.3/
-  tag: xml-types_0.3.3
+  type: git
+  location: https://john-millikin.com/code/haskell-xml-types/
+  tag: xml-types_0.3.4
 
 library
   ghc-options: -Wall
@@ -27,6 +27,7 @@
 
   build-depends:
       base >= 3.0 && < 5.0
+    , deepseq >= 1.1.0.0
     , text
 
   exposed-modules:
