diff --git a/happstack-data.cabal b/happstack-data.cabal
--- a/happstack-data.cabal
+++ b/happstack-data.cabal
@@ -1,5 +1,5 @@
 Name:               happstack-data
-Version:            0.4.1
+Version:            0.5.0
 License:            BSD3
 License-File:       COPYING
 Author:             Happstack team, HAppS LLC
@@ -54,11 +54,14 @@
   Build-Depends:      binary,
                       bytestring,
                       containers,
-                      happstack-util >= 0.4.1 && < 0.5, 
+                      happstack-util >= 0.5 && < 0.6, 
                       HaXml >= 1.13 && < 1.14,
                       mtl,
                       pretty,
                       syb-with-class >= 0.5,
+                      syb-with-class-instances-text,
+                      text >= 0.7.1,
+                      time >= 1.1.4,
                       template-haskell
 
   hs-source-dirs:     src
@@ -79,6 +82,7 @@
     Happstack.Data.Serialize
     Happstack.Data.SerializeTH
   if flag(tests)
+    Build-depends: HUnit
     Exposed-modules:   
       Happstack.Data.Tests
       Happstack.Data.Tests.Xml001
@@ -96,7 +100,7 @@
               TypeSynonymInstances, PatternGuards,
               PolymorphicComponents
   -- Should also have ", DeriveDataTypeable" but Cabal complains
-  GHC-Options: -Wall
+  GHC-Options: -Wall -O0
 
 Executable happstack-data-tests
   Main-Is: Test.hs
diff --git a/src/Happstack/Data/Default.hs b/src/Happstack/Data/Default.hs
--- a/src/Happstack/Data/Default.hs
+++ b/src/Happstack/Data/Default.hs
@@ -32,11 +32,14 @@
 import qualified Data.ByteString.Char8 as BSC
 import Data.Generics.SYB.WithClass.Basics
 import Data.Generics.SYB.WithClass.Instances ()
+import Data.Generics.SYB.WithClass.Instances.Text ()
 import Data.Int
 import Data.Word
 import qualified Data.Map as M
 import qualified Data.Set as S
 import Foreign.ForeignPtr
+import Data.Text      as T
+import Data.Text.Lazy as L
 
 -- | The 'Default' class provides a 'defaultValue' value, which
 -- is the default value for that type.
@@ -76,7 +79,7 @@
 instance Default t => Sat (DefaultD t) where
     dict = DefaultD { defaultValueD = defaultValue }
 
-instance Default a => Default [a] where
+instance Data DefaultD a => Default [a] where
     defaultValue = []
 
 instance Default Int     where defaultValue = 0
@@ -114,6 +117,12 @@
 
 instance Default BSC.ByteString where
     defaultValue = BSC.pack ""
+    
+instance Default T.Text where
+    defaultValue = T.empty
+    
+instance Default L.Text where
+    defaultValue = L.empty    
 
 -- We don't really want this instance, but we need it for the ByteString
 -- instance
diff --git a/src/Happstack/Data/Serialize.hs b/src/Happstack/Data/Serialize.hs
--- a/src/Happstack/Data/Serialize.hs
+++ b/src/Happstack/Data/Serialize.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE UndecidableInstances, OverlappingInstances, ScopedTypeVariables, GADTs, PatternSignatures,
+{-# LANGUAGE UndecidableInstances, OverlappingInstances, ScopedTypeVariables, GADTs,
     GeneralizedNewtypeDeriving, DeriveDataTypeable #-}
 module Happstack.Data.Serialize
     ( Serialize(..), Version(..), Migrate(..), Mode(..), Contained, contain, extension,
@@ -9,6 +9,10 @@
 
 import Control.Monad.Identity
 import Data.Int()
+import Data.Ratio ((%), Ratio, denominator, numerator)
+import Data.Time (Day(..), DiffTime, LocalTime(..), NominalDiffTime, TimeOfDay(..)
+                 ,TimeZone(..), UTCTime(..), UniversalTime(..), ZonedTime(..))
+import Data.Time.Clock.TAI (AbsoluteTime, taiEpoch, addAbsoluteTime, diffAbsoluteTime)
 import Foreign
 import qualified Data.ByteString.Lazy.Char8 as L
 import qualified Data.ByteString.Char8 as B
@@ -17,11 +21,13 @@
 import Happstack.Data.Proxy
 
 import Data.Typeable
-import qualified Data.Map as M
 import qualified Data.Map as Map
 import qualified Data.IntMap as IntMap
 import qualified Data.Set as Set
-
+import qualified Data.Text as ST
+import qualified Data.Text.Encoding as ST
+import qualified Data.Text.Lazy as LT
+import qualified Data.Text.Lazy.Encoding as LT
 import Data.Binary     as B
 import Data.Binary.Put as B
 import Data.Binary.Get as B
@@ -190,6 +196,17 @@
 instance Version Int64 where mode = Primitive
 instance Serialize Int64 where
     getCopy = contain get; putCopy = contain . put
+{-
+This instance requires base >= 4.2.0.0, which means GHC >= 6.12. We can add this back in when we drop support for GHC 6.10.
+
+instance Version (Fixed a)
+instance (Typeable a, HasResolution a) => Serialize (Fixed a) where
+    getCopy = contain $ liftM fromRational safeGet ; putCopy = contain . safePut . toRational
+-}
+instance (Typeable a)  => Version (Ratio a)
+instance (Integral a, Serialize a) => Serialize (Ratio a) where
+  getCopy = contain $ liftM2 (%) safeGet safeGet
+  putCopy r = contain $ safePut (numerator r) >> safePut (denominator r)
 instance Version () where mode = Primitive
 instance Serialize () where
     getCopy = contain get; putCopy = contain . put
@@ -257,7 +274,82 @@
 instance (Serialize a) => Serialize (IntMap.IntMap a) where
     getCopy = contain $ fmap IntMap.fromAscList safeGet
     putCopy = contain . safePut . IntMap.toList
+    
+instance Version ST.Text
+instance Serialize ST.Text where
+    putCopy = putCopy . ST.encodeUtf8
+    getCopy = contain $ fmap ST.decodeUtf8 safeGet
+    
+instance Version LT.Text
+instance Serialize LT.Text where
+    putCopy = putCopy . LT.encodeUtf8
+    getCopy = contain $ fmap LT.decodeUtf8 safeGet
 
+
+-- Data.Time instances
+instance Version Day
+instance Serialize Day where
+  getCopy = contain $ liftM ModifiedJulianDay get ; putCopy = contain . put . toModifiedJulianDay
+
+instance Version UniversalTime
+instance Serialize UniversalTime where
+  getCopy = contain $ liftM ModJulianDate get ; putCopy = contain . put . getModJulianDate
+
+instance Version UTCTime
+instance Serialize UTCTime where
+  getCopy   = contain $ liftM2 UTCTime safeGet safeGet
+  putCopy d = contain $ safePut (utctDay d) >> safePut (utctDayTime d)
+
+instance Version TimeZone
+instance Serialize TimeZone where
+  getCopy   = contain $ do minutes    <- safeGet
+                           summerOnly <- safeGet
+                           nam        <- safeGet
+                           return (TimeZone minutes summerOnly nam)
+  putCopy (TimeZone minutes summerOnly nam) =
+    contain $ do safePut minutes
+                 safePut summerOnly
+                 safePut nam
+
+instance Version TimeOfDay
+instance Serialize TimeOfDay where
+  getCopy = contain $ do h <- safeGet
+                         m <- safeGet
+                         s <- safeGet
+                         return (TimeOfDay h m (fromRational s))
+  putCopy (TimeOfDay h m s) =
+    contain $ do safePut h
+                 safePut m
+                 safePut (toRational s)
+
+instance Version ZonedTime
+instance Serialize ZonedTime where
+  getCopy   = contain $ liftM2 ZonedTime safeGet safeGet
+  putCopy (ZonedTime lt tz) = contain $ safePut lt >> safePut tz
+
+instance Version LocalTime
+instance Serialize LocalTime where
+  getCopy   = contain $ liftM2 LocalTime safeGet safeGet
+  putCopy (LocalTime day tod) = contain $ safePut day >> safePut tod
+
+instance Version DiffTime
+instance Serialize DiffTime where
+  getCopy = contain $ liftM fromRational safeGet ; putCopy = contain . safePut . toRational
+
+instance Version NominalDiffTime
+instance Serialize NominalDiffTime where
+  getCopy = contain $ liftM fromRational get ; putCopy = contain . put . toRational
+
+instance Version AbsoluteTime
+instance Serialize AbsoluteTime where
+  getCopy = contain $ liftM toAbsoluteTime safeGet
+    where
+      toAbsoluteTime :: DiffTime -> AbsoluteTime
+      toAbsoluteTime dt = addAbsoluteTime dt taiEpoch
+  putCopy = contain . safePut . fromAbsoluteTime
+    where
+      fromAbsoluteTime :: AbsoluteTime -> DiffTime
+      fromAbsoluteTime at = diffAbsoluteTime at taiEpoch
 
 --------------------------------------------------------------
 -- Object serialization
diff --git a/src/Happstack/Data/Xml/Base.hs b/src/Happstack/Data/Xml/Base.hs
--- a/src/Happstack/Data/Xml/Base.hs
+++ b/src/Happstack/Data/Xml/Base.hs
@@ -3,7 +3,7 @@
              ScopedTypeVariables, GADTs,
              PolymorphicComponents, FlexibleContexts,
              MultiParamTypeClasses, DeriveDataTypeable,
-             PatternSignatures, PatternGuards #-}
+             ScopedTypeVariables, PatternGuards #-}
 
 module Happstack.Data.Xml.Base where
 
@@ -22,7 +22,6 @@
 import Happstack.Data.Normalize
 import Happstack.Util.TH
 import Language.Haskell.TH
-import qualified Data.Generics as G
 
 {-| Element recursively represents XML data.  
     Elem n elems -> XML element with name n and described by elems.  Note that elems contains sub-elements as well as the attributes or literal data of the element.
diff --git a/src/Happstack/Data/Xml/Instances.hs b/src/Happstack/Data/Xml/Instances.hs
--- a/src/Happstack/Data/Xml/Instances.hs
+++ b/src/Happstack/Data/Xml/Instances.hs
@@ -9,12 +9,10 @@
 
 module Happstack.Data.Xml.Instances where
 
-import Data.Char
 import Data.List
 import Happstack.Data.Xml.Base
 import Data.Generics.SYB.WithClass.Basics
 import Data.Generics.SYB.WithClass.Instances ()
-import Data.Maybe
 import           Data.ByteString.Char8 (ByteString)
 import qualified Data.ByteString.Char8 as BS
 
