diff --git a/Web/Twitter/Types.hs b/Web/Twitter/Types.hs
--- a/Web/Twitter/Types.hs
+++ b/Web/Twitter/Types.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE OverloadedStrings, DeriveDataTypeable, RecordWildCards, DeriveGeneric, CPP #-}
+{-# LANGUAGE OverloadedStrings, DeriveDataTypeable, RecordWildCards, DeriveGeneric #-}
 
 module Web.Twitter.Types
        ( UserId
@@ -21,6 +21,8 @@
        , List(..)
        , Entities(..)
        , EntityIndices
+       , ExtendedEntities(..)
+       , ExtendedEntity(..)
        , Entity(..)
        , HashTagEntity(..)
        , UserEntity(..)
@@ -39,18 +41,14 @@
        where
 
 import Control.Applicative
+import Control.Monad
 import Data.Aeson
 import Data.Aeson.Types (Parser)
 import Data.Data
 import Data.HashMap.Strict (HashMap, fromList, union)
 import Data.Text (Text, unpack, pack)
 import GHC.Generics
-#if MIN_VERSION_time(1, 5, 0)
 import Data.Time
-#else
-import Data.Time
-import System.Locale
-#endif
 
 newtype TwitterTime = TwitterTime { fromTwitterTime :: UTCTime }
 
@@ -83,16 +81,12 @@
 
 instance FromJSON TwitterTime where
     parseJSON = withText "TwitterTime" $ \t ->
-#if MIN_VERSION_time(1, 5, 0)
         case parseTimeM True defaultTimeLocale twitterTimeFormat (unpack t) of
-#else
-        case parseTime defaultTimeLocale twitterTimeFormat (unpack t) of
-#endif
             Just  d -> pure $ TwitterTime d
             Nothing -> fail $ "Could not parse twitter time. Text was: " ++ unpack t
 
 instance ToJSON TwitterTime where
-    toJSON t = String $ pack $ formatTime defaultTimeLocale twitterTimeFormat $ fromTwitterTime t 
+    toJSON t = String $ pack $ formatTime defaultTimeLocale twitterTimeFormat $ fromTwitterTime t
 
 instance FromJSON StreamingAPI where
     parseJSON v@(Object o) =
@@ -125,7 +119,7 @@
     , statusCreatedAt :: UTCTime
     , statusCurrentUserRetweet :: Maybe StatusId
     , statusEntities :: Maybe Entities
-    , statusExtendedEntities :: Maybe Entities
+    , statusExtendedEntities :: Maybe ExtendedEntities
     , statusFavoriteCount :: Integer
     , statusFavorited :: Maybe Bool
     , statusFilterLevel :: Maybe Text
@@ -459,6 +453,7 @@
     , userDefaultProfile :: Bool
     , userDefaultProfileImage :: Bool
     , userDescription :: Maybe Text
+    , userEmail :: Maybe Text
     , userFavoritesCount :: Int
     , userFollowRequestSent :: Maybe Bool
     , userFollowing :: Maybe Bool
@@ -467,7 +462,7 @@
     , userGeoEnabled :: Bool
     , userId :: UserId
     , userIsTranslator :: Bool
-    , userLang :: LanguageCode
+    , userLang :: Maybe LanguageCode
     , userListedCount :: Int
     , userLocation :: Maybe Text
     , userName :: Text
@@ -503,6 +498,7 @@
              <*> o .:  "default_profile"
              <*> o .:  "default_profile_image"
              <*> o .:? "description"
+             <*> fmap join (o .:? "email") -- The field can be a null value
              <*> o .:  "favourites_count"
              <*> o .:? "follow_request_sent" .!= Nothing
              <*> o .:? "following" .!= Nothing
@@ -546,6 +542,7 @@
                              , "default_profile"                    .= userDefaultProfile
                              , "default_profile_image"              .= userDefaultProfileImage
                              , "description"                        .= userDescription
+                             , "email"                              .= userEmail
                              , "favourites_count"                   .= userFavoritesCount
                              , "follow_request_sent"                .= userFollowRequestSent
                              , "following"                          .= userFollowing
@@ -828,6 +825,7 @@
                                  , "media"          .= enMedia
                                  ]
 
+
 -- | The character positions the Entity was extracted from
 --
 --   This is experimental implementation.
@@ -850,6 +848,65 @@
     toJSON Entity{..} = case toJSON entityBody of
                             (Object o) -> Object $ union o $ fromList [("indices"::Text, toJSON entityIndices)]
                             _          -> error "Entity body must produce an object."
+
+data ExtendedEntities =
+  ExtendedEntities {
+    exeMedia :: [Entity ExtendedEntity]
+  } deriving (Show, Eq, Data, Typeable, Generic)
+
+instance FromJSON ExtendedEntities where
+  parseJSON (Object o) =
+    ExtendedEntities <$> o .:? "media" .!= []
+
+  parseJSON v = fail $ "couldn't parse extended entity from: " ++ show v
+
+instance ToJSON ExtendedEntities where
+    toJSON ExtendedEntities{..} = object [ "media" .= exeMedia ]
+
+
+-- Extended entities are like entities, but contain special media features like
+-- video or multiple photos
+data ExtendedEntity =
+  ExtendedEntity
+  {
+    exeID :: StatusId,
+    exeMediaUrl :: URIString,
+    exeMediaUrlHttps :: URIString,
+    exeSizes :: HashMap Text MediaSize,
+    exeType :: Text,
+    -- exeVideoInfo :: ???
+    exeDurationMillis :: Maybe Double,
+    -- exeVariants :: ??
+    exeExtAltText :: Maybe String,
+    exeURL :: URLEntity
+  } deriving (Show, Eq, Data, Typeable, Generic)
+
+instance FromJSON ExtendedEntity where
+  parseJSON v@(Object o) =
+    ExtendedEntity <$> o .:  "id"
+                   <*> o .:  "media_url"
+                   <*> o .:  "media_url_https"
+                   <*> o .:  "sizes"
+                   <*> o .:  "type"
+                   <*> o .:? "duration_millis"
+                   <*> o .:?  "ext_alt_text"
+                   <*> parseJSON v
+
+  parseJSON v = fail $ "couldn't parse extended entity from:" ++ show v
+
+instance ToJSON ExtendedEntity where
+  toJSON ExtendedEntity{..} = object [ "id"                .= exeID
+                                     , "media_url"       .= exeMediaUrl
+                                     , "media_url_https" .= exeMediaUrlHttps
+                                     , "sizes"           .= exeSizes
+                                     , "type"            .= exeType
+                                     , "duration_millis" .= exeDurationMillis
+                                     , "ext_alt_text"    .= exeExtAltText
+                                     , "url"             .= ueURL exeURL
+                                     , "expanded_url"    .= ueExpanded exeURL
+                                     , "display_url"     .= ueDisplay exeURL
+                                     ]
+
 
 data Contributor = Contributor
     { contributorId :: UserId
diff --git a/tests/Instances.hs b/tests/Instances.hs
--- a/tests/Instances.hs
+++ b/tests/Instances.hs
@@ -1,26 +1,19 @@
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE CPP #-}
 {-# OPTIONS_GHC -fno-warn-orphans #-}
 
 module Instances where
 
-import Data.String
 import Control.Applicative
+import Data.Aeson
 import Data.DeriveTH
+import Data.HashMap.Strict as HashMap
+import Data.String
 import qualified Data.Text as T
+import Data.Time (UTCTime (..), readTime, fromGregorian, defaultTimeLocale)
 import Test.QuickCheck
 import Web.Twitter.Types
-import Data.Aeson
-import Data.HashMap.Strict as HashMap
 
-#if MIN_VERSION_time(1,5,0)
-import Data.Time (UTCTime (..), readTime, fromGregorian, defaultTimeLocale)
-#else
-import Data.Time (UTCTime (..), readTime, fromGregorian)
-import System.Locale
-#endif
-
 instance IsString UTCTime where
     fromString = readTime defaultTimeLocale twitterTimeFormat
 
@@ -117,6 +110,19 @@
 
 derive makeArbitrary ''BoundingBox
 derive makeArbitrary ''Entities
+derive makeArbitrary ''ExtendedEntities
+instance Arbitrary ExtendedEntity where
+  arbitrary = do
+    ms <- arbitrary
+    ExtendedEntity
+        <$> arbitrary
+        <*> arbitrary
+        <*> arbitrary
+        <*> pure (HashMap.fromList [("medium", ms)])
+        <*> arbitrary
+        <*> arbitrary
+        <*> arbitrary
+        <*> arbitrary
 
 instance Arbitrary a => Arbitrary (Entity a) where
     arbitrary = do
diff --git a/tests/TypesTest.hs b/tests/TypesTest.hs
--- a/tests/TypesTest.hs
+++ b/tests/TypesTest.hs
@@ -1,6 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE CPP #-}
 
 module Main where
 
@@ -154,11 +153,12 @@
     length (enMedia ent) @?= 1
     map (meMediaURLHttps . entityBody) (enMedia ent) @?= ["https://pbs.twimg.com/media/BtDkUVaCQAIpWBU.jpg"]
 
-    let exent = fromJust $ statusExtendedEntities obj
-    enHashTags exent @?= []
-    enUserMentions exent @?= []
-    enURLs exent @?= []
-    length (enMedia ent) @?= 1
+    let exents = fromJust $ statusExtendedEntities obj
+    let media = exeMedia exents
+    length media @?= 1
+    let exent = entityBody $ head media
+    exeID exent @?= 491143397378244610
+    ueURL (exeURL exent) @?= "http://t.co/FjSOU8dDoD"
 
     statusInReplyToStatusId obj @?= Nothing
     statusInReplyToUserId obj @?= Nothing
@@ -319,12 +319,16 @@
     let entities = statusExtendedEntities obj
     assert $ isJust entities
     let Just ent = entities
-        media = enMedia ent
+        media = exeMedia ent
     length media @?= 4
     let me = entityBody $ head media
-    ueURL (meURL me) @?= "http://t.co/qOjPwmgLKO"
-    meMediaURL me @?= "http://pbs.twimg.com/media/BqgdlpaCQAA5OSu.jpg"
+    ueURL (exeURL me) @?= "https://t.co/Qi316FhOwe"
+    exeMediaUrl me @?= "http://pbs.twimg.com/media/Coju86fUIAEUcRC.jpg"
+    exeExtAltText me @?= Just "A small tabby kitten"
+    exeType me @?= "photo"
 
+
+
 case_parseUser :: Assertion
 case_parseUser = withJSON fixture_user_thimura $ \obj -> do
     userId obj @?= 69179963
@@ -338,7 +342,25 @@
     userFollowersCount obj @?= 754
     userFriendsCount obj @?= 780
     userStatusesCount obj @?= 24709
-    userLang obj @?= "en"
+    userLang obj @?= Just "en"
+    userCreatedAt obj @?= "Thu Aug 27 02:48:06 +0000 2009"
+    userFavoritesCount obj @?= 17313
+
+case_parseUserLangNull :: Assertion
+case_parseUserLangNull = withJSON fixture_user_thimura_lang_null $ \obj -> do
+    userId obj @?= 69179963
+    userName obj @?= "ちむら"
+    userScreenName obj @?= "thimura"
+    userDescription obj @?= Just "真紅かわいい"
+    userLocation obj @?= Just "State# Irotoridori.No.World"
+    userProfileImageURL obj @?= Just "http://pbs.twimg.com/profile_images/414044387346116609/VNMfLpY7_normal.png"
+    userURL obj @?= Just "http://t.co/TFUAsAffX0"
+    userProtected obj @?= False
+    userFollowersCount obj @?= 754
+    userFriendsCount obj @?= 780
+    userStatusesCount obj @?= 24709
+    -- N.B. the only difference between this one and case_parseUser is in lang
+    userLang obj @?= Nothing
     userCreatedAt obj @?= "Thu Aug 27 02:48:06 +0000 2009"
     userFavoritesCount obj @?= 17313
 
diff --git a/tests/fixtures/media_extended_entity.json b/tests/fixtures/media_extended_entity.json
--- a/tests/fixtures/media_extended_entity.json
+++ b/tests/fixtures/media_extended_entity.json
@@ -1,1 +1,1 @@
-{"in_reply_to_status_id":null,"id_str":"479666034073296896","truncated":false,"possibly_sensitive":false,"in_reply_to_screen_name":null,"extended_entities":{"media":[{"id_str":"479665892922376192","expanded_url":"http://twitter.com/thimura_test/status/479666034073296896/photo/1","url":"http://t.co/qOjPwmgLKO","media_url_https":"https://pbs.twimg.com/media/BqgdlpaCQAA5OSu.jpg","indices":[36,58],"id":479665892922376192,"media_url":"http://pbs.twimg.com/media/BqgdlpaCQAA5OSu.jpg","type":"photo","sizes":{"small":{"w":340,"resize":"fit","h":604},"large":{"w":576,"resize":"fit","h":1024},"medium":{"w":576,"resize":"fit","h":1024},"thumb":{"w":150,"resize":"crop","h":150}},"display_url":"pic.twitter.com/qOjPwmgLKO"},{"id_str":"479665897150234624","expanded_url":"http://twitter.com/thimura_test/status/479666034073296896/photo/1","url":"http://t.co/qOjPwmgLKO","media_url_https":"https://pbs.twimg.com/media/Bqgdl5KCQAA9g9V.jpg","indices":[36,58],"id":479665897150234624,"media_url":"http://pbs.twimg.com/media/Bqgdl5KCQAA9g9V.jpg","type":"photo","sizes":{"small":{"w":339,"resize":"fit","h":191},"large":{"w":1024,"resize":"fit","h":576},"medium":{"w":599,"resize":"fit","h":337},"thumb":{"w":150,"resize":"crop","h":150}},"display_url":"pic.twitter.com/qOjPwmgLKO"},{"id_str":"479665901545852929","expanded_url":"http://twitter.com/thimura_test/status/479666034073296896/photo/1","url":"http://t.co/qOjPwmgLKO","media_url_https":"https://pbs.twimg.com/media/BqgdmJiCEAEp0EI.jpg","indices":[36,58],"id":479665901545852929,"media_url":"http://pbs.twimg.com/media/BqgdmJiCEAEp0EI.jpg","type":"photo","sizes":{"small":{"w":339,"resize":"fit","h":225},"large":{"w":1024,"resize":"fit","h":678},"medium":{"w":599,"resize":"fit","h":397},"thumb":{"w":150,"resize":"crop","h":150}},"display_url":"pic.twitter.com/qOjPwmgLKO"},{"id_str":"479665905375256576","expanded_url":"http://twitter.com/thimura_test/status/479666034073296896/photo/1","url":"http://t.co/qOjPwmgLKO","media_url_https":"https://pbs.twimg.com/media/BqgdmXzCIAAa2lU.jpg","indices":[36,58],"id":479665905375256576,"media_url":"http://pbs.twimg.com/media/BqgdmXzCIAAa2lU.jpg","type":"photo","sizes":{"small":{"w":339,"resize":"fit","h":225},"large":{"w":1024,"resize":"fit","h":678},"medium":{"w":599,"resize":"fit","h":397},"thumb":{"w":150,"resize":"crop","h":150}},"display_url":"pic.twitter.com/qOjPwmgLKO"}]},"entities":{"symbols":[],"urls":[],"media":[{"id_str":"479665892922376192","expanded_url":"http://twitter.com/thimura_test/status/479666034073296896/photo/1","url":"http://t.co/qOjPwmgLKO","media_url_https":"https://pbs.twimg.com/media/BqgdlpaCQAA5OSu.jpg","indices":[36,58],"id":479665892922376192,"media_url":"http://pbs.twimg.com/media/BqgdlpaCQAA5OSu.jpg","type":"photo","sizes":{"small":{"w":340,"resize":"fit","h":604},"large":{"w":576,"resize":"fit","h":1024},"medium":{"w":576,"resize":"fit","h":1024},"thumb":{"w":150,"resize":"crop","h":150}},"display_url":"pic.twitter.com/qOjPwmgLKO"}],"user_mentions":[],"hashtags":[{"text":"testnyan","indices":[26,35]}]},"text":"multiple image tweet test #testnyan http://t.co/qOjPwmgLKO","in_reply_to_user_id_str":null,"favorited":false,"coordinates":null,"retweeted":false,"user":{"screen_name":"thimura_test","is_translation_enabled":false,"default_profile":true,"profile_image_url":"http://abs.twimg.com/sticky/default_profile_images/default_profile_6_normal.png","default_profile_image":true,"id_str":"2418883074","profile_background_image_url_https":"https://abs.twimg.com/images/themes/theme1/bg.png","protected":false,"location":"","entities":{"description":{"urls":[]}},"profile_background_color":"C0DEED","utc_offset":null,"url":null,"profile_text_color":"333333","profile_image_url_https":"https://abs.twimg.com/sticky/default_profile_images/default_profile_6_normal.png","verified":false,"statuses_count":5,"profile_background_tile":false,"following":false,"lang":"ja","follow_request_sent":false,"profile_sidebar_fill_color":"DDEEF6","time_zone":null,"name":"thimura test","profile_sidebar_border_color":"C0DEED","geo_enabled":false,"listed_count":0,"contributors_enabled":false,"created_at":"Sun Mar 30 11:47:17 +0000 2014","id":2418883074,"friends_count":2,"is_translator":false,"favourites_count":0,"notifications":false,"profile_background_image_url":"http://abs.twimg.com/images/themes/theme1/bg.png","profile_use_background_image":true,"description":"","profile_link_color":"0084B4","followers_count":2},"lang":"et","retweet_count":0,"in_reply_to_user_id":null,"created_at":"Thu Jun 19 16:44:28 +0000 2014","source":"\u003ca href=\"https://twitter.com/thimura\" rel=\"nofollow\"\u003e二階堂真紅\u003c/a\u003e","geo":null,"id":479666034073296896,"in_reply_to_status_id_str":null,"favorite_count":0,"contributors":null,"place":null}
+{"created_at":"Fri Jul 29 20:14:40 +0000 2016","id":759119974329823200,"id_str":"759119974329823233","text":"look at all these cats tho https://t.co/Qi316FhOwe","truncated":false,"entities":{"hashtags":[],"symbols":[],"user_mentions":[],"urls":[],"media":[{"id":759119267472089100,"id_str":"759119267472089089","indices":[27,50],"media_url":"http://pbs.twimg.com/media/Coju86fUIAEUcRC.jpg","media_url_https":"https://pbs.twimg.com/media/Coju86fUIAEUcRC.jpg","url":"https://t.co/Qi316FhOwe","display_url":"pic.twitter.com/Qi316FhOwe","expanded_url":"http://twitter.com/PleaseCaption/status/759119974329823233/photo/1","type":"photo","sizes":{"large":{"w":300,"h":400,"resize":"fit"},"medium":{"w":300,"h":400,"resize":"fit"},"thumb":{"w":150,"h":150,"resize":"crop"},"small":{"w":300,"h":400,"resize":"fit"}}}]},"extended_entities":{"media":[{"id":759119267472089100,"id_str":"759119267472089089","indices":[27,50],"media_url":"http://pbs.twimg.com/media/Coju86fUIAEUcRC.jpg","media_url_https":"https://pbs.twimg.com/media/Coju86fUIAEUcRC.jpg","url":"https://t.co/Qi316FhOwe","display_url":"pic.twitter.com/Qi316FhOwe","expanded_url":"http://twitter.com/PleaseCaption/status/759119974329823233/photo/1","type":"photo","sizes":{"large":{"w":300,"h":400,"resize":"fit"},"medium":{"w":300,"h":400,"resize":"fit"},"thumb":{"w":150,"h":150,"resize":"crop"},"small":{"w":300,"h":400,"resize":"fit"}},"ext_alt_text":"A small tabby kitten"},{"id":759119396350505000,"id_str":"759119396350504960","indices":[27,50],"media_url":"http://pbs.twimg.com/media/CojvEamUsAARiX2.jpg","media_url_https":"https://pbs.twimg.com/media/CojvEamUsAARiX2.jpg","url":"https://t.co/Qi316FhOwe","display_url":"pic.twitter.com/Qi316FhOwe","expanded_url":"http://twitter.com/PleaseCaption/status/759119974329823233/photo/1","type":"photo","sizes":{"medium":{"w":500,"h":301,"resize":"fit"},"small":{"w":500,"h":301,"resize":"fit"},"thumb":{"w":150,"h":150,"resize":"crop"},"large":{"w":500,"h":301,"resize":"fit"}},"ext_alt_text":"four kittens sitting together"},{"id":759119476621086700,"id_str":"759119476621086720","indices":[27,50],"media_url":"http://pbs.twimg.com/media/CojvJFoUkAAoWIR.jpg","media_url_https":"https://pbs.twimg.com/media/CojvJFoUkAAoWIR.jpg","url":"https://t.co/Qi316FhOwe","display_url":"pic.twitter.com/Qi316FhOwe","expanded_url":"http://twitter.com/PleaseCaption/status/759119974329823233/photo/1","type":"photo","sizes":{"thumb":{"w":150,"h":150,"resize":"crop"},"large":{"w":500,"h":600,"resize":"fit"},"medium":{"w":500,"h":600,"resize":"fit"},"small":{"w":500,"h":600,"resize":"fit"}},"ext_alt_text":"a cute soft kitten with a red ornament"},{"id":759119583466758100,"id_str":"759119583466758145","indices":[27,50],"media_url":"http://pbs.twimg.com/media/CojvPTqUIAEYF7l.jpg","media_url_https":"https://pbs.twimg.com/media/CojvPTqUIAEYF7l.jpg","url":"https://t.co/Qi316FhOwe","display_url":"pic.twitter.com/Qi316FhOwe","expanded_url":"http://twitter.com/PleaseCaption/status/759119974329823233/photo/1","type":"photo","sizes":{"medium":{"w":650,"h":600,"resize":"fit"},"thumb":{"w":150,"h":150,"resize":"crop"},"small":{"w":650,"h":600,"resize":"fit"},"large":{"w":650,"h":600,"resize":"fit"}},"ext_alt_text":"a skeptical-looking tabby cat outside"}]},"source":"<a href=\"http://twitter.com\" rel=\"nofollow\">Twitter Web Client</a>","in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":753372895682949100,"id_str":"753372895682949120","name":"Please Caption!","screen_name":"PleaseCaption","location":"","description":"","url":null,"entities":{"description":{"urls":[]}},"protected":false,"followers_count":0,"friends_count":1,"listed_count":0,"created_at":"Wed Jul 13 23:37:50 +0000 2016","favourites_count":0,"utc_offset":-25200,"time_zone":"Pacific Time (US & Canada)","geo_enabled":false,"verified":false,"statuses_count":7,"lang":"en-gb","contributors_enabled":false,"is_translator":false,"is_translation_enabled":false,"profile_background_color":"F5F8FA","profile_background_image_url":null,"profile_background_image_url_https":null,"profile_background_tile":false,"profile_image_url":"http://abs.twimg.com/sticky/default_profile_images/default_profile_5_normal.png","profile_image_url_https":"https://abs.twimg.com/sticky/default_profile_images/default_profile_5_normal.png","profile_link_color":"2B7BB9","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"has_extended_profile":false,"default_profile":true,"default_profile_image":true,"following":false,"follow_request_sent":false,"notifications":false},"geo":null,"coordinates":null,"place":null,"contributors":null,"is_quote_status":false,"retweet_count":0,"favorite_count":0,"favorited":false,"retweeted":false,"possibly_sensitive":false,"possibly_sensitive_appealable":false,"lang":"en"}
diff --git a/tests/fixtures/user_thimura_lang_null.json b/tests/fixtures/user_thimura_lang_null.json
new file mode 100644
--- /dev/null
+++ b/tests/fixtures/user_thimura_lang_null.json
@@ -0,0 +1,1 @@
+{"screen_name":"thimura","profile_banner_url":"https://pbs.twimg.com/profile_banners/69179963/1402419439","status":{"in_reply_to_status_id":null,"id_str":"495192122836783104","truncated":false,"in_reply_to_screen_name":null,"entities":{"symbols":[],"urls":[],"user_mentions":[],"hashtags":[]},"text":"くそあつい","in_reply_to_user_id_str":null,"favorited":false,"coordinates":null,"retweeted":false,"lang":null,"retweet_count":0,"in_reply_to_user_id":null,"created_at":"Fri Aug 01 12:59:36 +0000 2014","source":"\u003ca href=\"http://twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c/a\u003e","geo":null,"id":495192122836783104,"in_reply_to_status_id_str":null,"favorite_count":0,"contributors":null,"place":null},"is_translation_enabled":false,"needs_phone_verification":false,"default_profile":false,"profile_image_url":"http://pbs.twimg.com/profile_images/414044387346116609/VNMfLpY7_normal.png","default_profile_image":false,"id_str":"69179963","profile_background_image_url_https":"https://pbs.twimg.com/profile_background_images/378800000154132099/hn0DlU5i.png","protected":false,"location":"State# Irotoridori.No.World","entities":{"url":{"urls":[{"expanded_url":"http://d.hatena.ne.jp/thimura","url":"http://t.co/TFUAsAffX0","indices":[0,22],"display_url":"d.hatena.ne.jp/thimura"}]},"description":{"urls":[]}},"profile_background_color":"000000","utc_offset":32400,"url":"http://t.co/TFUAsAffX0","profile_text_color":"333333","profile_image_url_https":"https://pbs.twimg.com/profile_images/414044387346116609/VNMfLpY7_normal.png","suspended":false,"verified":false,"statuses_count":24709,"profile_background_tile":true,"following":false,"lang":"en","follow_request_sent":false,"profile_sidebar_fill_color":"BABDD1","time_zone":"Tokyo","name":"ちむら","profile_sidebar_border_color":"FFFFFF","geo_enabled":false,"listed_count":102,"contributors_enabled":false,"created_at":"Thu Aug 27 02:48:06 +0000 2009","id":69179963,"friends_count":780,"is_translator":false,"favourites_count":17313,"notifications":false,"profile_background_image_url":"http://pbs.twimg.com/profile_background_images/378800000154132099/hn0DlU5i.png","profile_use_background_image":true,"description":"真紅かわいい","profile_link_color":"00660F","followers_count":754}
diff --git a/twitter-types.cabal b/twitter-types.cabal
--- a/twitter-types.cabal
+++ b/twitter-types.cabal
@@ -1,17 +1,19 @@
 name:              twitter-types
-version:           0.7.2.2
+version:           0.8.0
 license:           BSD3
 license-file:      LICENSE
 author:            Takahiro HIMURA
 maintainer:        Takahiro HIMURA <taka@himura.jp>
 synopsis:          Twitter JSON parser and types
-description:       This package uses enumerator package for access Twitter API.
+description:       Please see the README on Github at <https://github.com/himura/twitter-types#readme>
 category:          Web
 stability:         Experimental
-cabal-version:     >= 1.8
 build-type:        Simple
+cabal-version:     >= 1.10
 homepage:          https://github.com/himura/twitter-types
 
+tested-with:       GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.4, GHC == 8.6.5
+
 extra-source-files:
   README.md
   tests/fixtures/*.json
@@ -20,58 +22,46 @@
   type: git
   location: git://github.com/himura/twitter-types.git
 
-flag time15
-  description: use time >= 1.5.
-  default: True
-
 library
   ghc-options: -Wall
 
   build-depends:
-      base >= 4 && < 5
+      base >= 4.9 && < 5
     , aeson >= 0.3.2.2
     , text
+    , time >= 1.5
     , unordered-containers
 
-  if flag(time15)
-    build-depends:
-        time >= 1.5
-  else
-    build-depends:
-        time >= 1.2 && < 1.5
-      , old-locale
-
-  if impl(ghc < 7.6)
-    build-depends: ghc-prim
-
   exposed-modules:
     Web.Twitter.Types
 
+  default-language:    Haskell2010
+
 test-suite tests
   type:              exitcode-stdio-1.0
   hs-source-dirs:    tests
   main-is:           TypesTest.hs
   build-depends:
-      base >= 4.0 && < 5
-    , template-haskell
-    , test-framework >= 0.3.3
-    , test-framework-hunit
-    , test-framework-quickcheck2
+      base >= 4.9 && < 5
+    , twitter-types
     , HUnit
     , QuickCheck
-    , derive
     , aeson
     , attoparsec
     , bytestring
+    , derive
+    , directory
+    , filepath
+    , template-haskell
+    , test-framework >= 0.3.3
+    , test-framework-hunit
+    , test-framework-quickcheck2
     , text
     , time
     , unordered-containers
-    , filepath
-    , directory
-    , twitter-types
-    , old-locale
   other-modules:
     Fixtures
     Instances
 
   ghc-options:       -Wall
+  default-language:    Haskell2010
