diff --git a/regexes.yaml b/regexes.yaml
--- a/regexes.yaml
+++ b/regexes.yaml
@@ -88,7 +88,7 @@
 
   # Lightning (for Thunderbird)
   # http://www.mozilla.org/projects/calendar/lightning/
-  - regex: '(Lightning)/(\d+)\.(\d+)([ab]?\d+[a-z]*)'
+  - regex: '(Lightning)/(\d+)\.(\d+)\.?((?:[ab]?\d+[a-z]*)|(?:\d*))'
 
   # Swiftfox
   - regex: '(Firefox)/(\d+)\.(\d+)\.(\d+(?:pre)?) \(Swiftfox\)'
@@ -156,6 +156,18 @@
   - regex: '(FlyFlow)/(\d+)\.(\d+)'
     family_replacement: 'Baidu Explorer'
 
+  # QQ Browsers
+  - regex: '(MQQBrowser)/(\d+)\.(\d+)\.(\d+)'
+    family_replacement: 'QQ Browser Mobile'
+  - regex: '(MQQBrowser)/(\d+)\.(\d+)'
+    family_replacement: 'QQ Browser Mobile'
+  - regex: '(QQBrowser)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
+    family_replacement: 'QQ Browser'
+  - regex: 'MQQBrowser'
+    family_replacement: 'QQ Browser Mobile'
+  - regex: 'QQBrowser'
+    family_replacement: 'QQ Browser'
+
   # Pingdom
   - regex: '(Pingdom.com_bot_version_)(\d+)\.(\d+)'
     family_replacement: 'PingdomBot'
@@ -164,10 +176,18 @@
   - regex: '(facebookexternalhit)/(\d+)\.(\d+)'
     family_replacement: 'FacebookBot'
 
+  # LinkedIn
+  - regex: '(LinkedInBot)/(\d+)\.(\d+)'
+    family_replacement: 'LinkedInBot'
+
   # Twitterbot
   - regex: '(Twitterbot)/(\d+)\.(\d+)'
     family_replacement: 'TwitterBot'
 
+  # Google Plus
+  - regex: 'Google.*/\+/web/snippet'
+    family_replacement: 'GooglePlusBot'
+
   # Rackspace Monitoring
   - regex: '(Rackspace Monitoring)/(\d+)\.(\d+)'
     family_replacement: 'RackspaceBot'
@@ -191,13 +211,35 @@
   #### MAIN CASES - this catches > 50% of all browsers ####
 
   # Browser/major_version.minor_version.beta_version
-  - regex: '(AdobeAIR|FireWeb|Jasmine|ANTGalio|Midori|Fresco|Lobo|PaleMoon|Maxthon|Lynx|OmniWeb|Dillo|Camino|Demeter|Fluid|Fennec|Epiphany|Shiira|Sunrise|Flock|Netscape|Lunascape|WebPilot|Vodafone|NetFront|Netfront|Konqueror|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|Opera Mini|iCab|NetNewsWire|ThunderBrowse|Iris|UP\.Browser|Bunjalloo|Google Earth|Raven for Mac|Openwave)/(\d+)\.(\d+)\.(\d+)'
+  - regex: '(AdobeAIR|FireWeb|Jasmine|ANTGalio|Midori|Fresco|Lobo|PaleMoon|Maxthon|Lynx|OmniWeb|Dillo|Camino|Demeter|Fluid|Fennec|Epiphany|Shiira|Sunrise|Flock|Netscape|Lunascape|WebPilot|NetFront|Netfront|Konqueror|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|Opera Mini|iCab|NetNewsWire|ThunderBrowse|Iris|UP\.Browser|Bunjalloo|Google Earth|Raven for Mac|Openwave)/(\d+)\.(\d+)\.(\d+)'
 
+  # Outlook 2007
+  - regex: 'MSOffice 12'
+    family_replacement: 'Outlook'
+    v1_replacement: '2007'
+
+  # Outlook 2010
+  - regex: 'MSOffice 14'
+    family_replacement: 'Outlook'
+    v1_replacement: '2010'
+
+  # Outlook 2013
+  - regex: 'Microsoft Outlook 15\.\d+\.\d+'
+    family_replacement: 'Outlook'
+    v1_replacement: '2013'
+
+  # Apple Air Mail
+  - regex: '(Airmail) (\d+)\.(\d+)(?:\.(\d+))?'
+
+  # Thunderbird
+  - regex: '(Thunderbird)/(\d+)\.(\d+)\.(\d+(?:pre)?)'
+    family_replacement: 'Thunderbird'
+
   # Chrome/Chromium/major_version.minor_version.beta_version
   - regex: '(Chromium|Chrome)/(\d+)\.(\d+)\.(\d+)'
 
   # Browser/major_version.minor_version
-  - regex: '(Bolt|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Chrome|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|Vodafone|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|NetNewsWire|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo|Tizen Browser|Polaris|Abrowser|Planetweb|ICE Browser)/(\d+)\.(\d+)'
+  - regex: '(bingbot|Bolt|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Chrome|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|NetNewsWire|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo|Tizen Browser|Polaris|Abrowser|Planetweb|ICE Browser)/(\d+)\.(\d+)'
 
   # Chrome/Chromium/major_version.minor_version
   - regex: '(Chromium|Chrome)/(\d+)\.(\d+)'
@@ -238,10 +280,6 @@
   - regex: '(MSIE) (\d+)\.(\d+).*XBLWP7'
     family_replacement: 'IE Large Screen'
 
-  # AFTER THE EDGE CASES ABOVE!
-  - regex: '(Firefox)/(\d+)\.(\d+)\.(\d+)'
-  - regex: '(Firefox)/(\d+)\.(\d+)(pre|[ab]\d+[a-z]*)?'
-
   #### END MAIN CASES ####
 
   #### SPECIAL CASES ####
@@ -283,9 +321,6 @@
   - regex: '(BonEcho)/(\d+)\.(\d+)\.(\d+)'
     family_replacement: 'Bon Echo'
 
-  - regex: 'M?QQBrowser'
-    family_replacement: 'QQ Browser'
-
   - regex: '(iPod).+Version/(\d+)\.(\d+)\.(\d+)'
     family_replacement: 'Mobile Safari'
   - regex: '(iPod).*Version/(\d+)\.(\d+)'
@@ -315,8 +350,10 @@
   - regex: '(QtCarBrowser)'
     v1_replacement: '1'
 
-  - regex: '(iBrowser/Mini)(\d+).(\d+)'
+  - regex: '^(iBrowser/Mini)(\d+).(\d+)'
     family_replacement: 'iBrowser Mini'
+  - regex: '^(iBrowser|iRAPP)/(\d+).(\d+)'
+
   # nokia browsers
   # based on: http://www.developer.nokia.com/Community/Wiki/User-Agent_headers_for_Nokia_devices
   - regex: '^(Nokia)'
@@ -397,10 +434,22 @@
   - regex: '(Phantom)/V(\d+)\.(\d+)'
     family_replacement: 'Phantom Browser'
 
-  - regex: '([MS]?IE) (\d+)\.(\d+)'
+  - regex: 'Trident(.*)rv.(\d+)\.(\d+)'
     family_replacement: 'IE'
 
-  - regex: 'Trident(.*)rv.(\d+)\.(\d+)'
+ # Apple Mail
+
+  # apple mail - not directly detectable, have it after Safari stuff
+  - regex: '(AppleWebKit)/(\d+)\.(\d+)\.(\d+)'
+    family_replacement: 'AppleMail'
+
+  # AFTER THE EDGE CASES ABOVE!
+  # AFTER IE11
+  # BEFORE all other IE
+  - regex: '(Firefox)/(\d+)\.(\d+)\.(\d+)'
+  - regex: '(Firefox)/(\d+)\.(\d+)(pre|[ab]\d+[a-z]*)?'
+
+  - regex: '([MS]?IE) (\d+)\.(\d+)'
     family_replacement: 'IE'
 
   - regex: '(python-requests)/(\d+)\.(\d+)'
@@ -527,11 +576,14 @@
 
   - regex: '(Windows NT 6\.2; ARM;)'
     os_replacement: 'Windows RT'
-
-  # is this a spoof or is nt 6.2 out and about in some capacity?
   - regex: '(Windows NT 6\.2)'
     os_replacement: 'Windows 8'
 
+  - regex: '(Windows NT 6\.3; ARM;)'
+    os_replacement: 'Windows RT 8.1'
+  - regex: '(Windows NT 6\.3)'
+    os_replacement: 'Windows 8.1'
+
   - regex: '(Windows NT 5\.0)'
     os_replacement: 'Windows 2000'
 
@@ -571,7 +623,7 @@
   # iOS
   # http://en.wikipedia.org/wiki/IOS_version_history
   ##########
-  - regex: '(CPU OS|iPhone OS) (\d+)_(\d+)(?:_(\d+))?'
+  - regex: '(CPU OS|iPhone OS|CPU iPhone) (\d+)[_\.](\d+)(?:[_\.](\d+))?'
     os_replacement: 'iOS'
 
   # remaining cases are mostly only opera uas, so catch opera as to not catch iphone spoofs
@@ -606,7 +658,7 @@
   # Symbian + Symbian OS
   # http://en.wikipedia.org/wiki/History_of_Symbian
   ##########
-  - regex: '(Symbian[Oo][Ss])/(\d+)\.(\d+)'
+  - regex: '(Symbian[Oo][Ss])[/ ](\d+)\.(\d+)'
     os_replacement: 'Symbian OS'
   - regex: '(Symbian/3).+NokiaBrowser/7\.3'
     os_replacement: 'Symbian^3 Anna'
@@ -614,7 +666,7 @@
     os_replacement: 'Symbian^3 Belle'
   - regex: '(Symbian/3)'
     os_replacement: 'Symbian^3'
-  - regex: '(Series 60|SymbOS|S60)'
+  - regex: '\b(Series 60|SymbOS|S60Version|S60V\d|S60\b)'
     os_replacement: 'Symbian OS'
   - regex: '(MeeGo)'
   - regex: 'Symbian [Oo][Ss]'
@@ -641,7 +693,7 @@
   ##########
   # Firefox OS
   ##########
-  - regex: '\(Mobile;.+Firefox/\d+\.\d+'
+  - regex: '\((?:Mobile|Tablet);.+Firefox/\d+\.\d+'
     os_replacement: 'Firefox OS'
 
   ##########
@@ -763,6 +815,16 @@
     device_replacement: 'Kindle Fire HD 8.9" WiFi'
   - regex: '(KFJWA Build)'
     device_replacement: 'Kindle Fire HD 8.9" 4G'
+  - regex: '(KFSOWI Build)'
+    device_replacement: 'Kindle Fire HD 7" WiFi'
+  - regex: '(KFTHWI Build)'
+    device_replacement: 'Kindle Fire HDX 7" WiFi'
+  - regex: '(KFTHWA Build)'
+    device_replacement: 'Kindle Fire HDX 7" 4G'
+  - regex: '(KFAPWI Build)'
+    device_replacement: 'Kindle Fire HDX 8.9" WiFi'
+  - regex: '(KFAPWA Build)'
+    device_replacement: 'Kindle Fire HDX 8.9" 4G'
   - regex: '(Kindle Fire)'
   - regex: '(Kindle)'
   - regex: '(Silk)/(\d+)\.(\d+)(?:\.([0-9\-]+))?'
@@ -1068,6 +1130,6 @@
   ##########
   # Spiders (this is hack...)
   ##########
-  - regex: '(bot|borg|google(^tv)|yahoo|slurp|msnbot|msrbot|openbot|archiver|netresearch|lycos|scooter|altavista|teoma|gigabot|baiduspider|blitzbot|oegp|charlotte|furlbot|http%20client|polybot|htdig|ichiro|mogimogi|larbin|pompos|scrubby|searchsight|seekbot|semanticdiscovery|silk|snappy|speedy|spider|voila|vortex|voyager|zao|zeal|fast\-webcrawler|converacrawler|dataparksearch|findlinks|crawler)'
+  - regex: '(bingbot|bot|borg|google(^tv)|yahoo|slurp|msnbot|msrbot|openbot|archiver|netresearch|lycos|scooter|altavista|teoma|gigabot|baiduspider|blitzbot|oegp|charlotte|furlbot|http%20client|polybot|htdig|ichiro|mogimogi|larbin|pompos|scrubby|searchsight|seekbot|semanticdiscovery|silk|snappy|speedy|spider|voila|vortex|voyager|zao|zeal|fast\-webcrawler|converacrawler|dataparksearch|findlinks|crawler)'
     device_replacement: 'Spider'
 
diff --git a/src/Web/UAParser/Core.hs b/src/Web/UAParser/Core.hs
--- a/src/Web/UAParser/Core.hs
+++ b/src/Web/UAParser/Core.hs
@@ -72,7 +72,7 @@
           mkRes [_,f,v1,v2] = Just $ UAResult (repF f) (repV1 v1) (Just v2) Nothing
           mkRes [_,f,v1] = Just $ UAResult (repF f) (repV1 v1) Nothing Nothing
           mkRes [_, f] = Just $ UAResult (repF f) Nothing Nothing Nothing
-          mkRes x = Nothing
+          mkRes _ = Nothing
           -- error $  "Unsupported match in parseUA" ++ show x
 
           repV1 x = uaV1Rep `mplus` Just x
@@ -127,7 +127,7 @@
           mkRes [_,f,v1,v2] = Just $ OSResult (repF f) (Just v1) (Just v2) Nothing Nothing
           mkRes [_,f,v1] = Just $ OSResult (repF f) (Just v1) Nothing Nothing Nothing
           mkRes [_, f] = Just $ OSResult (repF f) Nothing Nothing Nothing Nothing
-          mkRes x = Nothing
+          mkRes _ = Nothing
           -- error $  "Unsupported match in parseOS" ++ show x
 
           repF x = maybe x id osFamRep
@@ -202,7 +202,7 @@
 
 -------------------------------------------------------------------------------
 parseRegex :: Object -> Parser Regex
-parseRegex v = flip compile [] `liftM` (v .: "regex")
+parseRegex v = flip compile [] `liftM` (T.encodeUtf8 <$> v .: "regex")
 
 
 -------------------------------------------------------------------------------
diff --git a/test/src/TestSuite.hs b/test/src/TestSuite.hs
--- a/test/src/TestSuite.hs
+++ b/test/src/TestSuite.hs
@@ -159,7 +159,7 @@
 -------------------------------------------------------------------------------
 instance FromJSON UserAgentTestCase where
     parseJSON (Object v) =
-      UATC <$> v .: "user_agent_string"
+      UATC <$> T.encodeUtf8 <$> v .: "user_agent_string"
            <*> (v .: "family" <|> return "")
            <*> (v .:? "v1" <|> return Nothing)
            <*> (v .:? "v2" <|> return Nothing)
@@ -180,7 +180,7 @@
 -------------------------------------------------------------------------------
 instance FromJSON OSTestCase where
     parseJSON (Object v) =
-      OSTC <$> (v .: "user_agent_string" <|> return "")
+      OSTC <$> (T.encodeUtf8 <$> v .: "user_agent_string" <|> return "")
            <*> (v .: "family" <|> return "")
            <*> nonBlank (v .:? "major" <|> return Nothing)
            <*> nonBlank (v .:? "minor" <|> return Nothing)
diff --git a/ua-parser.cabal b/ua-parser.cabal
--- a/ua-parser.cabal
+++ b/ua-parser.cabal
@@ -1,7 +1,7 @@
 Name:                ua-parser
 Description:         Please refer to the git/github README on the project for example usage.
-Version:             0.3
-Synopsis:            Port of ua-parser in Haskell
+Version:             0.4
+Synopsis:            A library for parsing User-Agent strings, official Haskell port of ua-parser
 License:             BSD3
 License-file:        LICENSE
 Author:              Ozgun Ataman
@@ -31,8 +31,8 @@
     , bytestring
     , text
     , pcre-light
-    , yaml >= 0.7
-    , aeson
+    , yaml >= 0.7 && < 0.9
+    , aeson >= 0.7 && < 0.8
     , filepath
     , data-default
     , syb
