diff --git a/github-types.cabal b/github-types.cabal
--- a/github-types.cabal
+++ b/github-types.cabal
@@ -1,5 +1,5 @@
 name:                github-types
-version:             0.1.0.0
+version:             0.1.0.1
 license:             OtherLicense
 license-file:        LICENSE
 author:              Tomas Carnecky
diff --git a/src/GitHub/Types/Events.hs b/src/GitHub/Types/Events.hs
--- a/src/GitHub/Types/Events.hs
+++ b/src/GitHub/Types/Events.hs
@@ -7,12 +7,17 @@
 import Control.Monad
 
 import Data.Aeson
+import Data.Aeson.Types
 import Data.Text
 
 import GitHub.Types.Base
+import GitHub.Types.Repository
 
 
 
+-- | All events which can be produced by GitHub.
+--
+-- See https://developer.github.com/v3/activity/events/types/
 data Event
     = CommitCommentEventType    CommitCommentEvent
     | DeploymentEventType       DeploymentEvent
@@ -20,7 +25,18 @@
     deriving (Eq, Show)
 
 
+-- | Since the event type is included through different means (X-GitHub-Event
+-- header, or inline in the JSON object), it's not possible to make 'Event'
+-- an instance of 'FromJSON'. But if you know the type, you can use this
+-- parser.
+eventParser :: Text -> Value -> Parser Event
+eventParser "commit_comment"    x = CommitCommentEventType    <$> parseJSON x
+eventParser "deployment"        x = DeploymentEventType       <$> parseJSON x
+eventParser "deployment_status" x = DeploymentStatusEventType <$> parseJSON x
+eventParser _                   _ = mzero
 
+
+
 ------------------------------------------------------------------------------
 -- CommitCommentEvent
 
@@ -28,7 +44,13 @@
     { commitCommentEventRepository :: Repository
     } deriving (Eq, Show)
 
+instance FromJSON CommitCommentEvent where
+    parseJSON (Object x) = CommitCommentEvent
+        <$> x .: "repository"
 
+    parseJSON _ = mzero
+
+
 ------------------------------------------------------------------------------
 -- DeploymentEvent
 
@@ -67,7 +89,20 @@
 
 data DeploymentStatusEvent = DeploymentStatusEvent
     { deploymentStatusEventState       :: State
-    , deploymentStatusEventTargetUrl   :: Text
-    , deploymentStatusEventDeployment  :: Text
-    , deploymentStatusEventDescription :: Text
+      -- ^ The new state.
+    , deploymentStatusEventTargetUrl   :: Maybe Text
+      -- ^ The optional link added to the status.
+    , deploymentStatusEventDeployment  :: Deployment
+      -- ^ The deployment that this status is associated with.
+    , deploymentStatusEventDescription :: Maybe Text
+      -- ^ The optional human-readable description added to the status.
     } deriving (Eq, Show)
+
+instance FromJSON DeploymentStatusEvent where
+    parseJSON (Object x) = DeploymentStatusEvent
+        <$> x .: "state"
+        <*> x .: "target_url"
+        <*> x .: "deployment"
+        <*> x .: "description"
+
+    parseJSON _ = mzero
diff --git a/src/GitHub/Types/Repository.hs b/src/GitHub/Types/Repository.hs
--- a/src/GitHub/Types/Repository.hs
+++ b/src/GitHub/Types/Repository.hs
@@ -4,6 +4,9 @@
 module GitHub.Types.Repository where
 
 
+import Control.Applicative
+import Control.Monad
+
 import Data.Aeson
 import Data.Text
 
@@ -24,3 +27,24 @@
         , "target_url"  .= cdsTargetUrl
         , "description" .= cdsDescription
         ]
+
+
+data Deployment = Deployment
+    { deploymentId          :: Int
+    , deploymentSha         :: Text
+    , deploymentRef         :: Text
+    , deploymentEnvironment :: Text
+    , deploymentDescription :: Text
+    , deploymentPayload     :: Value
+    } deriving (Eq, Show)
+
+instance FromJSON Deployment where
+    parseJSON (Object x) = Deployment
+        <$> x .: "id"
+        <*> x .: "sha"
+        <*> x .: "ref"
+        <*> x .: "environment"
+        <*> x .: "description"
+        <*> x .: "payload"
+
+    parseJSON _ = mzero
