diff --git a/AWS/Class.hs b/AWS/Class.hs
--- a/AWS/Class.hs
+++ b/AWS/Class.hs
@@ -4,6 +4,8 @@
  , MultiParamTypeClasses
  , UndecidableInstances
  , DeriveDataTypeable
+ , ExistentialQuantification
+ , StandaloneDeriving
  #-}
 
 module AWS.Class
@@ -13,6 +15,7 @@
     , AWSException(..)
     , AWSContext(..)
     , getLastRequestId
+      -- * re-export
     , monadThrow
     ) where
 
@@ -35,6 +38,7 @@
 import Control.Exception (Exception)
 import Data.Typeable (Typeable)
 import Data.Conduit (MonadThrow, monadThrow)
+import Text.XML.Stream.Parse (XmlException)
 
 import qualified Network.HTTP.Conduit as HTTP
 import Data.Text (Text)
@@ -51,11 +55,16 @@
         , errorMessage :: Maybe Text
         , errorRequestId :: Text
         } -- ^ This error is caused by client requests.
+    | ServerError -- ^ XXX: Not implimented. Internal error of AWS.
     | ResponseParseError Text
-    | TextConversionException Text
+    | FromTextError Text
         -- ^ parse error: cannot convert Text to oher data type.
+    | XmlParserError XmlException
+    | forall e . Exception e => ConnectionException e
+    | forall e . Exception e => OtherInternalException e -- ^ bug
     | NextToken Text -- ^ This response has next token.
-  deriving (Show, Typeable)
+  deriving (Typeable)
+deriving instance Show AWSException
 
 instance Exception AWSException
 
diff --git a/AWS/EC2/Internal.hs b/AWS/EC2/Internal.hs
--- a/AWS/EC2/Internal.hs
+++ b/AWS/EC2/Internal.hs
@@ -87,7 +87,7 @@
 volumeType :: MonadThrow m => Text -> Maybe Int -> m VolumeType
 volumeType t Nothing  | t == "standard" = return $ VolumeTypeStandard
 volumeType t (Just i) | t == "io1"      = return $ VolumeTypeIO1 i
-volumeType t _ = monadThrow $ TextConversionException t
+volumeType t _ = monadThrow $ FromTextError t
 
 volumeTypeSink :: MonadThrow m
     => Pipe Event Event o u m VolumeType
diff --git a/AWS/EC2/NetworkInterface.hs b/AWS/EC2/NetworkInterface.hs
--- a/AWS/EC2/NetworkInterface.hs
+++ b/AWS/EC2/NetworkInterface.hs
@@ -18,7 +18,6 @@
 
 import AWS.EC2.Internal
 import AWS.EC2.Types
-import AWS.EC2.Params
 import AWS.EC2.Query
 import AWS.Lib.Parser
 import AWS.Util
@@ -37,7 +36,7 @@
         , either f g epip
         , "AllowReassignment" |=? boolToText <$> ar
         ]
-    f = privateIpAddressesParam "PrivateIpAddress"
+    f = ("PrivateIpAddress" |.#=) . map toText
     g = ("SecondaryPrivateIpAddressCount" |=) . toText
 
 unassignPrivateIpAddresses
@@ -50,7 +49,7 @@
   where
     params =
         [ "NetworkInterfaceId" |= niid
-        , privateIpAddressesParam "PrivateIpAddress" addrs
+        , "PrivateIpAddress" |.#= map toText addrs
         ]
 
 describeNetworkInterfaces
diff --git a/AWS/EC2/Query.hs b/AWS/EC2/Query.hs
--- a/AWS/EC2/Query.hs
+++ b/AWS/EC2/Query.hs
@@ -77,7 +77,7 @@
 ec2QuerySource' action params token cond = do
     cred <- Reader.ask
     ctx <- State.get
-    (src1, rid) <- lift $ do
+    (src1, rid) <- lift $ E.handle exceptionTransform $ do
         response <- requestQuery cred ctx action params' apiVersion sinkError
         res <- response $=+ XmlP.parseBytes XmlP.def
         res $$++ sinkRequestId
diff --git a/AWS/EC2/Types/Address.hs b/AWS/EC2/Types/Address.hs
--- a/AWS/EC2/Types/Address.hs
+++ b/AWS/EC2/Types/Address.hs
@@ -33,7 +33,7 @@
     fromMaybeText _name (Just t)
         | t == "standard" = return AddressDomainStandard
         | t == "vpc"      = return AddressDomainVPC
-        | otherwise       = monadThrow $ TextConversionException t
+        | otherwise       = monadThrow $ FromTextError t
 
 data AllocateAddress = AllocateAddress
     { allocateAddressPublicIp :: IPv4
diff --git a/AWS/EC2/Types/Instance.hs b/AWS/EC2/Types/Instance.hs
--- a/AWS/EC2/Types/Instance.hs
+++ b/AWS/EC2/Types/Instance.hs
@@ -149,7 +149,7 @@
     fromMaybeText _name Nothing  = return LifecycleNone
     fromMaybeText _name (Just t)
         | t == "spot" = return LifecycleSpot
-        | otherwise   = monadThrow $ TextConversionException t
+        | otherwise   = monadThrow $ FromTextError t
 
 data InstanceMonitoringState
     = MonitoringDisabled
diff --git a/AWS/Lib/FromText.hs b/AWS/Lib/FromText.hs
--- a/AWS/Lib/FromText.hs
+++ b/AWS/Lib/FromText.hs
@@ -31,7 +31,7 @@
   where
     fromText :: MonadThrow m => Text -> m a
     fromText t
-        = maybe (monadThrow $ TextConversionException t) return
+        = maybe (monadThrow $ FromTextError t) return
         . fromTextMay
         $ t
 
@@ -41,7 +41,7 @@
     fromMaybeText :: MonadThrow m => Text -> Maybe Text -> m a
     fromMaybeText name
         = maybe
-            (monadThrow $ TextConversionException $ "no text: " <> name)
+            (monadThrow $ FromTextError $ "no text: " <> name)
             fromText
 
 instance FromText a => FromText (Maybe a)
diff --git a/AWS/Lib/Query.hs b/AWS/Lib/Query.hs
--- a/AWS/Lib/Query.hs
+++ b/AWS/Lib/Query.hs
@@ -15,6 +15,7 @@
     , ($=+)
     , requestQuery
     , commonQuery
+    , exceptionTransform
     , textToBS
     ) where
 
@@ -26,17 +27,21 @@
 import qualified Data.Text as T
 
 import Data.List (transpose)
+import Data.Maybe
 import Data.Monoid
 import Data.XML.Types (Event(..))
 import Data.Conduit
 import qualified Data.Conduit.Internal as CI
 import qualified Network.HTTP.Conduit as HTTP
 import qualified Text.XML.Stream.Parse as XmlP
+import Text.XML.Stream.Parse (XmlException)
 import Data.Time (UTCTime, formatTime, getCurrentTime)
 import System.Locale (defaultTimeLocale, iso8601DateFormat)
 import qualified Data.Map as Map
 import Data.Map (Map)
+import Network.HTTP.Conduit (HttpException)
 import qualified Network.HTTP.Types as H
+import Network.TLS (HandshakeFailed)
 import qualified Data.Digest.Pure.SHA as SHA
 import qualified Data.ByteString.Base64 as BASE
 import Control.Monad.IO.Class (MonadIO, liftIO)
@@ -278,8 +283,26 @@
 commonQuery apiVersion action params sink = do
     ctx <- State.get
     cred <- Reader.ask
-    rs <- lift $ requestQuery cred ctx action params apiVersion sinkError
-    (res, rid) <- lift $ rs $$+-
-        XmlP.parseBytes XmlP.def =$ sinkResponse (bsToText action) sink
+    (res, rid) <- lift $ E.handle exceptionTransform $ do
+        rs <- requestQuery cred ctx action params apiVersion sinkError
+        rs $$+- XmlP.parseBytes XmlP.def
+           =$   sinkResponse (bsToText action) sink
     State.put ctx { lastRequestId = Just rid }
     return res
+
+exceptionTransform
+    :: (MonadBaseControl IO m, MonadResource m)
+    => SomeException -> m a
+exceptionTransform e
+    | isJust awse  = throw $ fromJust awse
+    | isJust xmle  = throw $ XmlParserError $ fromJust xmle
+    | isJust httpe = throw $ ConnectionException $ fromJust httpe
+    | isJust tlse  = throw $ ConnectionException $ fromJust tlse
+    | isJust ioe   = throw $ ConnectionException $ fromJust ioe
+    | otherwise    = throw $ OtherInternalException e
+  where
+    awse = fromException e :: Maybe AWSException
+    xmle = fromException e :: Maybe XmlException
+    httpe = fromException e :: Maybe HttpException
+    tlse  = fromException e :: Maybe HandshakeFailed
+    ioe   = fromException e :: Maybe IOException
diff --git a/AWS/RDS/DBInstance.hs b/AWS/RDS/DBInstance.hs
--- a/AWS/RDS/DBInstance.hs
+++ b/AWS/RDS/DBInstance.hs
@@ -95,15 +95,15 @@
     => GLSink Event m [PendingModifiedValue]
 sinkPendingModifiedValues = element "PendingModifiedValues" $
     catMaybes <$> sequence
-        [ f PMVMasterUserPassword "MasterUserPassword"
-        , f PMVIops "Iops"
-        , f PMVMultiAZ "MultiAZ"
-        , f PMVAllocatedStorage "AllocatedStorage"
-        , f PMVEngineVersion "EngineVersion"
-        , f PMVDBInstanceIdentifier "DBInstanceIdentifier"
-        , f PMVDBInstanceClass "DBInstanceClass"
-        , f PMVBackupRetentionPeriod "BackupRetentionPeriod"
-        , f PMVPort "Port"
+        [ f PendingModifiedValueMasterUserPassword "MasterUserPassword"
+        , f PendingModifiedValueIops "Iops"
+        , f PendingModifiedValueMultiAZ "MultiAZ"
+        , f PendingModifiedValueAllocatedStorage "AllocatedStorage"
+        , f PendingModifiedValueEngineVersion "EngineVersion"
+        , f PendingModifiedValueDBInstanceIdentifier "DBInstanceIdentifier"
+        , f PendingModifiedValueDBInstanceClass "DBInstanceClass"
+        , f PendingModifiedValueBackupRetentionPeriod "BackupRetentionPeriod"
+        , f PendingModifiedValuePort "Port"
         ]
   where
     f c name = fmap c <$> getT name
diff --git a/AWS/RDS/Types/DBInstance.hs b/AWS/RDS/Types/DBInstance.hs
--- a/AWS/RDS/Types/DBInstance.hs
+++ b/AWS/RDS/Types/DBInstance.hs
@@ -9,8 +9,8 @@
     , OptionGroupMembership(..)
     , PendingModifiedValue(..)
     , CreateDBInstanceRequest(..)
-    , DBInstanceClass(..)
-    , Engine(..)
+    , DBInstanceClass
+    , Engine
     , LicenseModel(..)
     , FinalSnapshot(..)
     , CreateReadReplicaRequest(..)
@@ -20,78 +20,78 @@
 import AWS.RDS.Types.DBSubnetGroup (DBSubnetGroup)
 
 data DBInstance = DBInstance
-    { dbiIops :: Maybe Int
-    , dbiBackupRetentionPeriod :: Int
-    , dbiDBInstanceStatus :: Maybe Text
-    , dbiMultiAZ :: Bool
-    , dbiVpcSecurityGroups :: [VpcSecurityGroupMembership]
-    , dbiDBInstanceIdentifier :: Text
-    , dbiPreferredBackupWindow :: Text
-    , dbiPreferredMaintenanceWindow :: Text
-    , dbiOptionGroupMembership :: Maybe OptionGroupMembership
-    , dbiAvailabilityZone :: Maybe Text
-    , dbiLatestRestorableTime :: Maybe UTCTime
-    , dbiReadReplicaDBInstanceIdentifiers :: [Text]
-    , dbiEngine :: Engine
-    , dbiPendingModifiedValues :: [PendingModifiedValue]
-    , dbiCharacterSetName :: Maybe Text
-    , dbiLicenseModel :: LicenseModel
-    , dbiSubnetGroup :: Maybe DBSubnetGroup
-    , dbiDBParameterGroups :: [DBParameterGroupStatus]
-    , dbiEndpoint :: Maybe Endpoint
-    , dbiEngineVersion :: Text
-    , dbiReadReplicaSourceDBInstanceIdentifier :: Maybe Text
-    , dbiPubliclyAccessible :: Bool
-    , dbiSecurityGroups :: [DBSecurityGroupMembership]
-    , dbiAutoMinorVersionUpgrade :: Bool
-    , dbiDBName :: Maybe Text
-    , dbiInstanceCreateTime :: Maybe UTCTime
-    , dbiAllocatedStorage :: Int -- ^ storage size in gigabytes
-    , dbiDBInstanceClass :: DBInstanceClass
-    , dbiMasterUsername :: Text
+    { dbInstanceIops :: Maybe Int
+    , dbInstanceBackupRetentionPeriod :: Int
+    , dbInstanceDBInstanceStatus :: Maybe Text
+    , dbInstanceMultiAZ :: Bool
+    , dbInstanceVpcSecurityGroups :: [VpcSecurityGroupMembership]
+    , dbInstanceDBInstanceIdentifier :: Text
+    , dbInstancePreferredBackupWindow :: Text
+    , dbInstancePreferredMaintenanceWindow :: Text
+    , dbInstanceOptionGroupMembership :: Maybe OptionGroupMembership
+    , dbInstanceAvailabilityZone :: Maybe Text
+    , dbInstanceLatestRestorableTime :: Maybe UTCTime
+    , dbInstanceReadReplicaDBInstanceIdentifiers :: [Text]
+    , dbInstanceEngine :: Engine
+    , dbInstancePendingModifiedValues :: [PendingModifiedValue]
+    , dbInstanceCharacterSetName :: Maybe Text
+    , dbInstanceLicenseModel :: LicenseModel
+    , dbInstanceSubnetGroup :: Maybe DBSubnetGroup
+    , dbInstanceDBParameterGroups :: [DBParameterGroupStatus]
+    , dbInstanceEndpoint :: Maybe Endpoint
+    , dbInstanceEngineVersion :: Text
+    , dbInstanceReadReplicaSourceDBInstanceIdentifier :: Maybe Text
+    , dbInstancePubliclyAccessible :: Bool
+    , dbInstanceSecurityGroups :: [DBSecurityGroupMembership]
+    , dbInstanceAutoMinorVersionUpgrade :: Bool
+    , dbInstanceDBName :: Maybe Text
+    , dbInstanceInstanceCreateTime :: Maybe UTCTime
+    , dbInstanceAllocatedStorage :: Int -- ^ storage size in gigabytes
+    , dbInstanceDBInstanceClass :: DBInstanceClass
+    , dbInstanceMasterUsername :: Text
     }
   deriving (Show, Eq)
 
 data VpcSecurityGroupMembership = VpcSecurityGroupMembership
-    { vpcSecurityGroupMembershipStatus :: Text
-    , vpcSecurityGroupMembershipVpcSecurityGroupId :: Text
+    { vpcSecurityGroupStatus :: Text
+    , vpcSecurityGroupId :: Text
     }
   deriving (Show, Eq)
 
 data DBParameterGroupStatus = DBParameterGroupStatus
-    { dbpgsParameterApplyStatus :: Text
-    , dbpgsDBParameterGroupName :: Text
+    { dbParameterGroupStatusStatus :: Text
+    , dbParameterGroupStatusName :: Text
     }
   deriving (Show, Eq)
 
 data DBSecurityGroupMembership = DBSecurityGroupMembership
-    { dbsgmStatus :: Text
-    , dbsgmDBSecurityGroupName :: Text
+    { dbSecurityGroupMembershipStatus :: Text
+    , dbSecurityGroupMembershipName :: Text
     }
   deriving (Show, Eq)
 
 data Endpoint = Endpoint
-    { epPort :: Int
-    , epAddress :: Text
+    { endpointPort :: Int
+    , endpointAddress :: Text
     }
   deriving (Show, Eq)
 
 data OptionGroupMembership = OptionGroupMembership
-    { ogmOptionGroupName :: Text
-    , ogmStatus :: Text
+    { optionGroupName :: Text
+    , optionGroupStatus :: Text
     }
   deriving (Show, Eq)
 
 data PendingModifiedValue
-    = PMVAllocatedStorage Int
-    | PMVBackupRetentionPeriod Int
-    | PMVDBInstanceClass Text
-    | PMVEngineVersion Text
-    | PMVIops Int
-    | PMVMasterUserPassword Text
-    | PMVMultiAZ Bool
-    | PMVPort Int
-    | PMVDBInstanceIdentifier Text
+    = PendingModifiedValueAllocatedStorage Int
+    | PendingModifiedValueBackupRetentionPeriod Int
+    | PendingModifiedValueDBInstanceClass Text
+    | PendingModifiedValueEngineVersion Text
+    | PendingModifiedValueIops Int
+    | PendingModifiedValueMasterUserPassword Text
+    | PendingModifiedValueMultiAZ Bool
+    | PendingModifiedValuePort Int
+    | PendingModifiedValueDBInstanceIdentifier Text
   deriving (Show, Eq)
 
 data CreateDBInstanceRequest = CreateDBInstanceRequest
@@ -122,47 +122,13 @@
     }
   deriving (Show, Eq)
 
-data DBInstanceClass
-    = DBt1micro
-    | DBm1small
-    | DBm1medium
-    | DBm1large
-    | DBm1xlarge
-    | DBm2xlarge
-    | DBm22xlarge
-    | DBm24xlarge
-  deriving (Read, Eq)
-
-instance Show DBInstanceClass where
-    show DBt1micro = "db.t1.micro"
-    show DBm1small = "db.m1.small"
-    show DBm1medium = "db.m1.medium"
-    show DBm1large = "db.m1.large"
-    show DBm1xlarge = "db.m1.xlarge"
-    show DBm2xlarge = "db.m2.xlarge"
-    show DBm22xlarge = "db.m2.2xlarge"
-    show DBm24xlarge = "db.m2.4xlarge"
-
-data Engine
-    = EngineMySQL
-    | EngineOracleSE1
-    | EngineOracleSE
-    | EngineOracleEE
-    | EngineSqlServerEE
-    | EngineSqlServerSE
-    | EngineSqlServerEX
-    | EngineSqlServerWeb
-  deriving (Read, Eq)
+-- | db.t1.micro, db.m1.small, db.m1.medium, db.m1.large,
+--   db.m1.xlarge, db.m2.xlarge, db.m2.2xlarge, db.m2.4xlarge
+type DBInstanceClass = Text
 
-instance Show Engine where
-    show EngineMySQL = "MySQL"
-    show EngineOracleSE1 = "oracle-se1"
-    show EngineOracleSE = "oracle-se"
-    show EngineOracleEE = "oracle-ee"
-    show EngineSqlServerEE = "sqlserver-ee"
-    show EngineSqlServerSE = "sqlserver-se"
-    show EngineSqlServerEX = "sqlserver-ex"
-    show EngineSqlServerWeb = "sqlserver-web"
+-- | mysql, oracle-se1, oracle-se, oracle-ee, sqlserver-ee,
+--   sqlserver-se, sqlserver-ex, sqlserver-web
+type Engine = Text
 
 data LicenseModel
     = LicenseIncluded
@@ -192,16 +158,6 @@
     }
   deriving (Show, Eq)
 
-deriveFromText "DBInstanceClass"
-    [ "db.t1.micro", "db.m1.small", "db.m1.medium"
-    , "db.m1.large", "db.m1.xlarge", "db.m2.xlarge"
-    , "db.m2.2xlarge", "db.m2.4xlarge"
-    ]
-deriveFromText "Engine"
-    [ "mysql", "oracle-se1", "oracle-se"
-    , "oracle-ee", "sqlserver-ee", "sqlserver-se"
-    , "sqlserver-ex", "sqlserver-web"
-    ]
 deriveFromText "LicenseModel"
     [ "license-included", "bring-your-own-license", "general-public-license"
     ]
diff --git a/AWS/RDS/Types/DBParameterGroup.hs b/AWS/RDS/Types/DBParameterGroup.hs
--- a/AWS/RDS/Types/DBParameterGroup.hs
+++ b/AWS/RDS/Types/DBParameterGroup.hs
@@ -5,8 +5,8 @@
 import AWS.Lib.FromText (Text)
 
 data DBParameterGroup = DBParameterGroup
-    { dbpgDBParameterGroupFamily :: Text
-    , dbpgDescription :: Text
-    , dbpgDBParameterGroupName :: Text
+    { dbParameterGroupFamily :: Text
+    , dbParameterGroupDescription :: Text
+    , dbParameterGroupName :: Text
     }
   deriving (Show, Eq)
diff --git a/AWS/RDS/Types/DBSecurityGroup.hs b/AWS/RDS/Types/DBSecurityGroup.hs
--- a/AWS/RDS/Types/DBSecurityGroup.hs
+++ b/AWS/RDS/Types/DBSecurityGroup.hs
@@ -11,12 +11,12 @@
 import AWS.Lib.FromText (deriveFromText, AddrRange, IPv4, Text)
 
 data DBSecurityGroup = DBSecurityGroup
-    { dbsgEC2SecurityGroups :: [EC2SecurityGroup]
-    , dbsgDBSecurityGroupDescription :: Text
-    , dbsgIPRanges :: [IPRange]
-    , dbsgVpcId :: Maybe Text
-    , dbsgOwnerId :: Text
-    , dbsgDBSecurityGroupName :: Text
+    { dbSecurityGroupEC2SecurityGroups :: [EC2SecurityGroup]
+    , dbSecurityGroupDescription :: Text
+    , dbSecurityGroupIPRanges :: [IPRange]
+    , dbSecurityGroupVpcId :: Maybe Text
+    , dbSecurityGroupOwnerId :: Text
+    , dbSecurityGroupName :: Text
     }
   deriving (Show, Eq)
 
diff --git a/AWS/RDS/Types/DBSnapshot.hs b/AWS/RDS/Types/DBSnapshot.hs
--- a/AWS/RDS/Types/DBSnapshot.hs
+++ b/AWS/RDS/Types/DBSnapshot.hs
@@ -5,20 +5,20 @@
 import AWS.Lib.FromText (Text, UTCTime)
 
 data DBSnapshot = DBSnapshot
-    { dbsPort :: Int
-    , dbsIops :: Maybe Int
-    , dbsEngine :: Text
-    , dbsStatus :: Text
-    , dbsSnapshotType :: Text
-    , dbsLicenseModel :: Text
-    , dbsDBInstanceIdentifier :: Text
-    , dbsEngineVersion :: Text
-    , dbsDBSnapshotIdentifier :: Text
-    , dbsSnapshotCreateTime :: Maybe UTCTime
-    , dbsVpcId :: Maybe Text
-    , dbsAvailabilityZone :: Text
-    , dbsInstanceCreateTime :: UTCTime
-    , dbsAllocatedStorage :: Int
-    , dbsMasterUsername :: Text
+    { dbSnapshotPort :: Int
+    , dbSnapshotIops :: Maybe Int
+    , dbSnapshotEngine :: Text
+    , dbSnapshotStatus :: Text
+    , dbSnapshotType :: Text
+    , dbSnapshotLicenseModel :: Text
+    , dbSnapshotDBInstanceIdentifier :: Text
+    , dbSnapshotEngineVersion :: Text
+    , dbSnapshotIdentifier :: Text
+    , dbSnapshotCreateTime :: Maybe UTCTime
+    , dbSnapshotVpcId :: Maybe Text
+    , dbSnapshotAvailabilityZone :: Text
+    , dbSnapshotInstanceCreateTime :: UTCTime
+    , dbSnapshotAllocatedStorage :: Int
+    , dbSnapshotMasterUsername :: Text
     }
   deriving (Show, Eq)
diff --git a/AWS/RDS/Types/DBSubnetGroup.hs b/AWS/RDS/Types/DBSubnetGroup.hs
--- a/AWS/RDS/Types/DBSubnetGroup.hs
+++ b/AWS/RDS/Types/DBSubnetGroup.hs
@@ -7,11 +7,11 @@
 import AWS.Lib.FromText (Text)
 
 data DBSubnetGroup = DBSubnetGroup
-    { dbsngVpcId :: Text
-    , dbsngSubnetGroupStatus :: Text
-    , dbsngDBSubnetGroupDescription :: Text
-    , dbsngDBSubnetGroupName :: Text
-    , dbsngSubnets :: [Subnet]
+    { dbSubnetGroupVpcId :: Text
+    , dbSubnetGroupStatus :: Text
+    , dbSubnetGroupDescription :: Text
+    , dbSubnetGroupName :: Text
+    , dbSubnets :: [Subnet]
     }
   deriving (Show, Eq)
 
@@ -23,7 +23,7 @@
   deriving (Show, Eq)
 
 data AvailabilityZone = AvailabilityZone
-    { azName :: Text
-    , azProvisionedIopsCapable :: Bool
+    { availabilityZoneName :: Text
+    , availabilityZoneProvisionedIopsCapable :: Bool
     }
   deriving (Show, Eq)
diff --git a/AWS/RDS/Types/Event.hs b/AWS/RDS/Types/Event.hs
--- a/AWS/RDS/Types/Event.hs
+++ b/AWS/RDS/Types/Event.hs
@@ -10,7 +10,7 @@
 data Event = Event
     { eventMessage :: Text
     , eventSourceType :: SourceType
-    , eventEventCategories :: [Text]
+    , eventCategories :: [Text]
     , eventDate :: UTCTime
     , eventSourceIdentifier :: Text
     }
@@ -23,4 +23,5 @@
     | SourceTypeDBSnapshot
   deriving (Show, Read, Eq)
 
-deriveFromText "SourceType" ["db-instance", "db-parameter-group", "db-security-group", "db-snapshot"]
+deriveFromText "SourceType"
+    ["db-instance", "db-parameter-group", "db-security-group", "db-snapshot"]
diff --git a/AWS/RDS/Util.hs b/AWS/RDS/Util.hs
--- a/AWS/RDS/Util.hs
+++ b/AWS/RDS/Util.hs
@@ -1,5 +1,6 @@
 module AWS.RDS.Util
     ( wait
+    , createDBInstanceRequest
     ) where
 
 import Control.Applicative ((<$>))
@@ -10,6 +11,7 @@
 import Safe
 
 import AWS.RDS
+import AWS.RDS.Types
 
 wait
     :: (MonadIO m, Functor m)
@@ -26,3 +28,35 @@
             else do
                 liftIO $ CC.threadDelay 10000000
                 wait f g rid
+
+-- | copy from DBInstance
+createDBInstanceRequest
+    :: DBInstance
+    -> Text -- ^ New DBIdentifier
+    -> Text -- ^ MasterUserPassword
+    -> CreateDBInstanceRequest
+createDBInstanceRequest db newid passwd = CreateDBInstanceRequest
+    (dbInstanceAllocatedStorage db)
+    (Just $ dbInstanceAutoMinorVersionUpgrade db)
+    (dbInstanceAvailabilityZone db)
+    (Just $ dbInstanceBackupRetentionPeriod db)
+    (dbInstanceCharacterSetName db)
+    (dbInstanceDBInstanceClass db)
+    newid
+    (dbInstanceDBName db)
+    (fmap dbParameterGroupStatusName $ headMay $ dbInstanceDBParameterGroups db)
+    (map dbSecurityGroupMembershipName $ dbInstanceSecurityGroups db)
+    (dbSubnetGroupName <$> dbInstanceSubnetGroup db)
+    (dbInstanceEngine db)
+    (Just $ dbInstanceEngineVersion db)
+    (dbInstanceIops db)
+    (Just $ dbInstanceLicenseModel db)
+    passwd
+    (dbInstanceMasterUsername db)
+    (Just $ dbInstanceMultiAZ db)
+    (optionGroupName <$> dbInstanceOptionGroupMembership db)
+    (endpointPort <$> dbInstanceEndpoint db)
+    (Just $ dbInstancePreferredBackupWindow db)
+    (Just $ dbInstancePreferredMaintenanceWindow db)
+    (Just $ dbInstancePubliclyAccessible db)
+    (map vpcSecurityGroupId $ dbInstanceVpcSecurityGroups db)
diff --git a/aws-sdk.cabal b/aws-sdk.cabal
--- a/aws-sdk.cabal
+++ b/aws-sdk.cabal
@@ -1,5 +1,5 @@
 name:                aws-sdk
-version:             0.11.0
+version:             0.11.1
 synopsis:            AWS SDK for Haskell
 description: AWS (Amazon Web Services) sdk for Haskell.
              .
@@ -137,6 +137,7 @@
                    , template-haskell
                    , parallel
                    , iproute >= 1.2.9
+                   , tls
 
 test-suite test
     type:              exitcode-stdio-1.0
