diff --git a/amazonka-core.cabal b/amazonka-core.cabal
--- a/amazonka-core.cabal
+++ b/amazonka-core.cabal
@@ -1,5 +1,5 @@
 name:                  amazonka-core
-version:               0.3.0
+version:               0.3.1
 synopsis:              Core functionality and data types for Amazonka libraries.
 homepage:              https://github.com/brendanhay/amazonka
 license:               OtherLicense
diff --git a/src/Network/AWS/Data/Internal/Text.hs b/src/Network/AWS/Data/Internal/Text.hs
--- a/src/Network/AWS/Data/Internal/Text.hs
+++ b/src/Network/AWS/Data/Internal/Text.hs
@@ -59,11 +59,11 @@
 
 instance FromText Text       where parser = AText.takeText
 instance FromText ByteString where parser = Text.encodeUtf8 <$> AText.takeText
-instance FromText Int        where parser = AText.decimal
-instance FromText Integer    where parser = AText.decimal
-instance FromText Scientific where parser = AText.scientific
+instance FromText Int        where parser = AText.signed AText.decimal
+instance FromText Integer    where parser = AText.signed AText.decimal
+instance FromText Scientific where parser = AText.signed AText.scientific
 instance FromText Natural    where parser = AText.decimal
-instance FromText Double     where parser = AText.rational
+instance FromText Double     where parser = AText.signed AText.rational
 
 instance FromText Bool where
     parser = matchCI "false" False <|> matchCI "true" True
diff --git a/src/Network/AWS/Data/Internal/XML.hs b/src/Network/AWS/Data/Internal/XML.hs
--- a/src/Network/AWS/Data/Internal/XML.hs
+++ b/src/Network/AWS/Data/Internal/XML.hs
@@ -37,19 +37,20 @@
     , element
     , nodes
     , (=@)
+    , extractRoot
     , unsafeToXML
     ) where
 
-import Control.Applicative
-import Control.Monad
-import Data.Default.Class
-import Data.Maybe
-import Data.Monoid
-import Data.Text                            (Text)
-import Network.AWS.Data.Internal.ByteString
-import Network.AWS.Data.Internal.Text
-import Numeric.Natural
-import Text.XML
+import           Control.Applicative
+import           Control.Monad
+import           Data.Default.Class
+import           Data.Maybe
+import           Data.Monoid
+import           Data.Text                            (Text)
+import           Network.AWS.Data.Internal.ByteString
+import           Network.AWS.Data.Internal.Text
+import           Numeric.Natural
+import           Text.XML
 
 decodeXML :: LazyByteString -> Either String [Node]
 decodeXML = either failure success . parseLBS def
@@ -58,11 +59,11 @@
     success = Right . elementNodes . documentRoot
 
 encodeXML :: ToXMLRoot a => a -> LazyByteString
-encodeXML x = renderLBS def d
+encodeXML = maybe mempty (renderLBS def . d) . toXMLRoot
   where
-    d = Document
+    d x = Document
         { documentPrologue = p
-        , documentRoot     = toXMLRoot x
+        , documentRoot     = x
         , documentEpilogue = []
         }
 
@@ -92,8 +93,8 @@
 (.!@) :: Either String (Maybe a) -> a -> Either String a
 f .!@ x = fromMaybe x <$> f
 
-namespaced :: Text -> Text -> [Node] -> Element
-namespaced g l = element (Name l (Just g) Nothing)
+namespaced :: Text -> Text -> [Node] -> Maybe Element
+namespaced g l = Just . element (Name l (Just g) Nothing)
 
 element :: Name -> [Node] -> Element
 element n = Element n mempty
@@ -104,9 +105,18 @@
 (=@) :: ToXML a => Name -> a -> Node
 n =@ x = NodeElement (element n (toXML x))
 
+extractRoot :: Text -> [Node] -> Maybe Element
+extractRoot g ns =
+    case ns of
+        [NodeElement x] -> Just x { elementName = rename x }
+        _               -> Nothing
+  where
+    rename x = (elementName x) { nameNamespace = Just g }
+
 -- | /Caution:/ This is for use with types which are 'flattened' in
--- AWS service model terminology. It is applied by the generator/templating
--- in safe contexts only.
+-- AWS service model terminology.
+--
+-- It is applied by the generator/templating in safe contexts only.
 unsafeToXML :: (Show a, ToXML a) => a -> Node
 unsafeToXML x =
     fromMaybe (error $ "Failed to unflatten node-list for: " ++ show x)
@@ -169,13 +179,13 @@
 instance FromXML Bool    where parseXML = parseXMLText "Bool"
 
 class ToXMLRoot a where
-    toXMLRoot :: a -> Element
+    toXMLRoot :: a -> Maybe Element
 
 class ToXML a where
     toXML :: a -> [Node]
 
     default toXML :: ToXMLRoot a => a -> [Node]
-    toXML = (:[]) . NodeElement . toXMLRoot
+    toXML = maybeToList . fmap NodeElement . toXMLRoot
 
 instance ToXML a => ToXML (Maybe a) where
     toXML (Just x) = toXML x
diff --git a/src/Network/AWS/Waiters.hs b/src/Network/AWS/Waiters.hs
--- a/src/Network/AWS/Waiters.hs
+++ b/src/Network/AWS/Waiters.hs
@@ -2,7 +2,6 @@
 {-# LANGUAGE LambdaCase        #-}
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE RankNTypes        #-}
-{-# LANGUAGE ViewPatterns      #-}
 
 -- Module      : Network.AWS.Waiters
 -- Copyright   : (c) 2013-2015 Brendan Hay <brendan.g.hay@gmail.com>
@@ -34,13 +33,13 @@
     , module Control.Lens
     ) where
 
-import Control.Lens
-import Data.ByteString    (ByteString)
-import Data.Maybe
-import Network.AWS.Data
-import Network.AWS.Error
-import Network.AWS.Types
-import Network.HTTP.Types
+import           Control.Lens
+import           Data.ByteString    (ByteString)
+import           Data.Maybe
+import           Network.AWS.Data
+import           Network.AWS.Error
+import           Network.AWS.Types
+import           Network.HTTP.Types
 
 type Acceptor a = Request a -> Response' a -> Maybe Accept
 
