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.4
+version:               0.3.5
 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/Base64.hs b/src/Network/AWS/Data/Internal/Base64.hs
--- a/src/Network/AWS/Data/Internal/Base64.hs
+++ b/src/Network/AWS/Data/Internal/Base64.hs
@@ -12,7 +12,7 @@
 -- Portability : non-portable (GHC extensions)
 
 module Network.AWS.Data.Internal.Base64
-    ( Base64
+    ( Base64 (..)
     ) where
 
 import           Data.Aeson.Types
@@ -28,6 +28,8 @@
 import           Network.AWS.Data.Internal.XML
 
 -- | Base64 encoded binary data.
+--
+-- Encoding/decoding is deferred to serialisation/deserialisation respectively.
 newtype Base64 = Base64 { unBase64 :: ByteString }
     deriving (Eq, Read, Ord, Generic)
 
diff --git a/src/Network/AWS/Data/Internal/Query.hs b/src/Network/AWS/Data/Internal/Query.hs
--- a/src/Network/AWS/Data/Internal/Query.hs
+++ b/src/Network/AWS/Data/Internal/Query.hs
@@ -101,9 +101,9 @@
         | otherwise   = enc (Just k') x
     enc k (Value (Just (urlEncode True -> v)))
         | Just n <- k = [n <> vsep <> v]
-        | otherwise   = [v]
+        | otherwise   = [v <> vsep]
     enc k _
-        | Just n <- k = [n]
+        | Just n <- k = [n <> vsep]
         | otherwise   = []
 
     intercalate []     = mempty
diff --git a/src/Network/AWS/Error.hs b/src/Network/AWS/Error.hs
--- a/src/Network/AWS/Error.hs
+++ b/src/Network/AWS/Error.hs
@@ -77,7 +77,7 @@
     deriving (Eq, Ord, Show, FromXML, FromJSON, IsString, Generic)
 
 class AWSErrorCode a where
-    awsErrorCode :: a -> ErrorCode
+    awsErrorCode :: a -> Maybe ErrorCode
 
 data ErrorType
     = Receiver
@@ -96,7 +96,7 @@
 data RESTError = RESTError
     { _restRequestId :: Text
     , _restType      :: Maybe ErrorType
-    , _restCode      :: ErrorCode
+    , _restCode      :: Maybe ErrorCode
     , _restMessage   :: Text
     } deriving (Eq, Show, Generic)
 
@@ -111,7 +111,7 @@
         f y = RESTError
             <$> x .@  "RequestId"
             <*> y .@? "Type"
-            <*> y .@  "Code"
+            <*> y .@? "Code"
             <*> y .@  "Message"
 
 restError :: FromXML (Er a)
@@ -130,7 +130,7 @@
 
 data JSONError = JSONError
     { _jsonType    :: Maybe Text
-    , _jsonCode    :: ErrorCode
+    , _jsonCode    :: Maybe ErrorCode
     , _jsonMessage :: Text
     } deriving (Eq, Show, Generic)
 
@@ -144,12 +144,12 @@
       where
         rest o = JSONError
              <$> o .:? "Type"
-             <*> o .:  "Code"
+             <*> o .:? "Code"
              <*> o .:  "Message"
 
         post o = JSONError
              <$> o .:? "__type"
-             <*> o .:  "code"
+             <*> o .:? "code"
              <*> o .:  "message"
 
 jsonError :: FromJSON (Er a)
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
@@ -88,8 +88,8 @@
 matchError :: AWSErrorCode (Er (Sv a)) => ErrorCode -> Accept -> Acceptor a
 matchError c a _ = \case
     Left (ServiceError _ _ e)
-        | c == awsErrorCode e -> Just a
-    _                         -> Nothing
+        | Just c == awsErrorCode e -> Just a
+    _                              -> Nothing
 
 match :: (Rs a -> Bool) -> Accept -> Acceptor a
 match f a _ = \case
