diff --git a/bugzilla.cabal b/bugzilla.cabal
--- a/bugzilla.cabal
+++ b/bugzilla.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                bugzilla
-version:             0.1.0.1
+version:             0.2.0.0
 synopsis:            A Haskell interface to the Bugzilla native REST API
 description:         This package is designed to provide an easy-to-use, typesafe
                      interface to querying Bugzilla from Haskell.
@@ -15,12 +15,13 @@
 category:            Web
 build-type:          Simple
 extra-source-files:  README.md
+                     changelog
 cabal-version:       >=1.10
 
 source-repository head
   type:     git
   location: https://github.com/sethfowler/hsbugzilla.git
-  tag:      0.1
+  tag:      0.2
 
 flag BuildDemo
   description:  Build the 'bugzilla' demo program
diff --git a/changelog b/changelog
new file mode 100644
--- /dev/null
+++ b/changelog
@@ -0,0 +1,7 @@
+0.2.0.0
+
+	* History events now have a sequential id, just like comments.
+
+	* When using an anonymous session, Bugzilla does not return email addresses for users.
+	  To accomodate this, the User type now stores email addresses as type
+	  'Maybe UserEmail'.
diff --git a/demo/BugzillaDemo.hs b/demo/BugzillaDemo.hs
--- a/demo/BugzillaDemo.hs
+++ b/demo/BugzillaDemo.hs
@@ -119,16 +119,17 @@
     showComment (Comment {..}) = do
       user <- getUser session commentCreator
       let commentUserRealName = fromMaybe commentCreator $ userRealName <$> user
-      let commentUserEmail = fromMaybe commentCreator $ userEmail <$> user
-      return $ "(" ++ show commentId ++ ") " ++ T.unpack commentUserRealName
+      let commentUserEmail = fromMaybe commentCreator $ userEmail =<< user
+      return $ "(Comment " ++ show commentCount ++ ") " ++ T.unpack commentUserRealName
             ++ " <" ++ T.unpack commentUserEmail ++ "> " ++ show commentCreationTime
             ++ "\n" ++ (unlines . map ("  " ++) . lines . T.unpack $ commentText)
 
     showEvent (HistoryEvent {..}) = do
       user <- getUser session historyEventUser
       let eventUserRealName = fromMaybe historyEventUser $ userRealName <$> user
-      let eventUserEmail = fromMaybe historyEventUser $ userEmail <$> user
-      return $ T.unpack eventUserRealName ++ " <" ++ T.unpack eventUserEmail ++ ">\n"
+      let eventUserEmail = fromMaybe historyEventUser $ userEmail =<< user
+      return $ "(Event " ++ show historyEventId ++ ") " ++ T.unpack eventUserRealName
+            ++ " <" ++ T.unpack eventUserEmail ++ ">\n"
             ++ concatMap showChange historyEventChanges
 
     showChange (TextFieldChange f (Modification r a aid)) = showChange' f r a aid
diff --git a/src/Web/Bugzilla.hs b/src/Web/Bugzilla.hs
--- a/src/Web/Bugzilla.hs
+++ b/src/Web/Bugzilla.hs
@@ -50,6 +50,7 @@
 , AttachmentId
 , CommentId
 , UserId
+, EventId
 , FlagId
 , FlagType
 , UserEmail
diff --git a/src/Web/Bugzilla/Internal/Types.hs b/src/Web/Bugzilla/Internal/Types.hs
--- a/src/Web/Bugzilla/Internal/Types.hs
+++ b/src/Web/Bugzilla/Internal/Types.hs
@@ -10,6 +10,7 @@
 , AttachmentId
 , CommentId
 , UserId
+, EventId
 , FlagId
 , FlagType
 , UserEmail
@@ -48,6 +49,7 @@
 type AttachmentId = Int
 type CommentId    = Int
 type UserId       = Int
+type EventId      = Int
 type FlagId       = Int
 type FlagType     = Int
 type UserEmail    = T.Text
@@ -285,7 +287,7 @@
 -- | A Bugzilla user.
 data User = User
   { userId       :: !UserId
-  , userEmail    :: T.Text
+  , userEmail    :: Maybe UserEmail
   , userName     :: T.Text
   , userRealName :: T.Text
   } deriving (Eq, Ord, Show)
@@ -293,7 +295,7 @@
 instance FromJSON User where
   parseJSON (Object v) =
     User <$> v .: "id"
-         <*> v .: "email"
+         <*> v .:? "email"
          <*> v .: "name"
          <*> v .: "real_name"
   parseJSON _ = mzero
@@ -500,7 +502,7 @@
   } deriving (Eq, Show)
 
 instance FromJSON Comment where
-  parseJSON (Object v) = do
+  parseJSON (Object v) =
     Comment <$> v .: "id"
             <*> v .: "bug_id"
             <*> v .: "attachment_id"
@@ -545,22 +547,33 @@
     bugsVal <- v .: "bugs"
     case bugsVal of
       Array (V.toList -> [history]) ->
-        withObject "history" (\h -> History <$> h .: "id" <*> h .: "history") history
+        withObject "history"
+                   (\h -> History <$> h .: "id"
+                                  <*> parseHistoryEvents h)
+                   history
       _ -> mzero
   parseJSON _ = mzero
   
+parseHistoryEvents :: Object -> Parser [HistoryEvent]
+parseHistoryEvents h = do
+  events <- h .: "history"
+  withArray "event list" (\a -> parseJSON (addCount a)) events
+
 -- | An event in a bug's history.
 data HistoryEvent = HistoryEvent
-  { historyEventTime    :: UTCTime   -- ^ When the event occurred.
+  { historyEventId      :: EventId   -- ^ A sequential event id.
+  , historyEventTime    :: UTCTime   -- ^ When the event occurred.
   , historyEventUser    :: UserEmail -- ^ Which user was responsible.
   , historyEventChanges :: [Change]  -- ^ All the changes which are
                                      --   part of this event.
   } deriving (Eq, Show)
 
 instance FromJSON HistoryEvent where
-  parseJSON (Object v) = HistoryEvent <$> v .: "when"
-                                      <*> v .: "who"
-                                      <*> v .: "changes"
+  parseJSON (Object v) =
+    HistoryEvent <$> v .: "count"
+                 <*> v .: "when"
+                 <*> v .: "who"
+                 <*> v .: "changes"
   parseJSON _ = mzero
 
 -- | A single change which is part of an event. Different constructors
