diff --git a/pontarius-xmpp.cabal b/pontarius-xmpp.cabal
--- a/pontarius-xmpp.cabal
+++ b/pontarius-xmpp.cabal
@@ -1,5 +1,5 @@
 Name:          pontarius-xmpp
-Version:       0.3.0.2
+Version:       0.3.0.3
 Cabal-Version: >= 1.6
 Build-Type:    Simple
 License:       BSD3
@@ -11,7 +11,7 @@
 Stability:     alpha
 Homepage:      https://github.com/pontarius/pontarius-xmpp/
 Bug-Reports:   https://github.com/pontarius/pontarius-xmpp/issues/
-Package-URL:   http://www.jonkri.com/releases/pontarius-xmpp-0.3.0.2.tar.gz
+Package-URL:   http://www.jonkri.com/releases/pontarius-xmpp-0.3.0.3.tar.gz
 Synopsis:      An XMPP client library
 Description:   Pontarius XMPP is a work in progress implementation of RFC 6120
                ("XMPP CORE"), RFC 6121 ("XMPP IM"), and RFC 6122 ("XMPP ADDR").
@@ -62,7 +62,7 @@
                , random               >=1.0.0.0
                , split                >=0.1.2.3
                , stm                  >=2.1.2.1
-               , stringprep           >=0.1.3
+               , stringprep           >=1.0
                , text                 >=0.11.1.5
                , tls                  >=1.1.3
                , tls-extra            >=0.6.0
@@ -121,4 +121,4 @@
 Source-Repository this
   Type: git
   Location: git://github.com/pontarius/pontarius-xmpp.git
-  Tag: 0.3.0.2
+  Tag: 0.3.0.3
diff --git a/source/Network/Xmpp/Types.hs b/source/Network/Xmpp/Types.hs
--- a/source/Network/Xmpp/Types.hs
+++ b/source/Network/Xmpp/Types.hs
@@ -56,6 +56,8 @@
     , isFull
     , jidFromText
     , jidFromTexts
+    , nodeprepProfile
+    , resourceprepProfile
     , jidToText
     , jidToTexts
     , toBare
@@ -91,8 +93,8 @@
 import           Network.DNS
 import           Network.TLS hiding (Version)
 import           Network.TLS.Extra
-import qualified Text.NamePrep as SP
 import qualified Text.StringPrep as SP
+import qualified Text.StringPrep.Profiles as SP
 
 -- | The Xmpp communication primities (Message, Presence and Info/Query) are
 -- called stanzas.
@@ -103,7 +105,7 @@
             | MessageErrorS  !MessageError
             | PresenceS      !Presence
             | PresenceErrorS !PresenceError
-              deriving Show
+              deriving (Eq, Show)
 
 -- | A "request" Info/Query (IQ) stanza is one with either "get" or "set" as
 -- type. It always contains an xml payload.
@@ -113,7 +115,7 @@
                            , iqRequestLangTag :: !(Maybe LangTag)
                            , iqRequestType    :: !IQRequestType
                            , iqRequestPayload :: !Element
-                           } deriving Show
+                           } deriving (Eq, Show)
 
 -- | The type of IQ request that is made.
 data IQRequestType = Get | Set deriving (Eq, Ord, Read, Show)
@@ -123,7 +125,7 @@
 data IQResponse = IQResponseError IQError
                 | IQResponseResult IQResult
                 | IQResponseTimeout
-                deriving Show
+                deriving (Eq, Show)
 
 -- | The (non-error) answer to an IQ request.
 data IQResult = IQResult { iqResultID      :: !Text
@@ -131,7 +133,7 @@
                          , iqResultTo      :: !(Maybe Jid)
                          , iqResultLangTag :: !(Maybe LangTag)
                          , iqResultPayload :: !(Maybe Element)
-                         } deriving Show
+                         } deriving (Eq, Show)
 
 -- | The answer to an IQ request that generated an error.
 data IQError = IQError { iqErrorID          :: !Text
@@ -140,7 +142,7 @@
                        , iqErrorLangTag     :: !(Maybe LangTag)
                        , iqErrorStanzaError :: !StanzaError
                        , iqErrorPayload     :: !(Maybe Element) -- should this be []?
-                       } deriving Show
+                       } deriving (Eq, Show)
 
 -- | The message stanza. Used for /push/ type communication.
 data Message = Message { messageID      :: !(Maybe Text)
@@ -149,7 +151,7 @@
                        , messageLangTag :: !(Maybe LangTag)
                        , messageType    :: !MessageType
                        , messagePayload :: ![Element]
-                       } deriving Show
+                       } deriving (Eq, Show)
 
 
 
@@ -173,7 +175,7 @@
                                  , messageErrorLangTag     :: !(Maybe LangTag)
                                  , messageErrorStanzaError :: !StanzaError
                                  , messageErrorPayload     :: ![Element]
-                                 } deriving (Show)
+                                 } deriving (Eq, Show)
 
 
 -- | The type of a Message being sent
@@ -220,7 +222,7 @@
                          , presenceLangTag :: !(Maybe LangTag)
                          , presenceType    :: !PresenceType
                          , presencePayload :: ![Element]
-                         } deriving Show
+                         } deriving (Eq, Show)
 
 -- | An empty presence.
 presence :: Presence
@@ -242,7 +244,7 @@
                                    , presenceErrorLangTag     :: !(Maybe LangTag)
                                    , presenceErrorStanzaError :: !StanzaError
                                    , presenceErrorPayload     :: ![Element]
-                                   } deriving Show
+                                   } deriving (Eq, Show)
 
 -- | @PresenceType@ holds Xmpp presence types. The "error" message type is left
 -- out as errors are using @PresenceError@.
@@ -756,7 +758,7 @@
 
 #if WITH_TEMPLATE_HASKELL
 -- | Constructs a @Jid@ value at compile time.
---  
+--
 -- Syntax:
 -- @
 --     [jidQ|localpart\@domainpart/resourcepart|]
@@ -943,7 +945,7 @@
 nodeprepProfile :: SP.StringPrepProfile
 nodeprepProfile = SP.Profile { SP.maps = [SP.b1, SP.b2]
                              , SP.shouldNormalize = True
-                             , SP.prohibited = [SP.a1
+                             , SP.prohibited = [ SP.a1
                                                , SP.c11
                                                , SP.c12
                                                , SP.c21
