diff --git a/src/Network/WebSockets.hs b/src/Network/WebSockets.hs
--- a/src/Network/WebSockets.hs
+++ b/src/Network/WebSockets.hs
@@ -96,7 +96,6 @@
     , I.BinaryProtocol
     , I.Hybi00
     , I.Hybi10
-    , I.Hybi17
 
       -- * A simple standalone server
     , I.runServer
@@ -161,7 +160,6 @@
 import qualified Network.WebSockets.Protocol as I
 import qualified Network.WebSockets.Protocol.Hybi00 as I
 import qualified Network.WebSockets.Protocol.Hybi10 as I
-import qualified Network.WebSockets.Protocol.Hybi17 as I
 import qualified Network.WebSockets.Protocol.Unsafe as Unsafe
 import qualified Network.WebSockets.Socket as I
 import qualified Network.WebSockets.Types as I
diff --git a/src/Network/WebSockets/Handshake.hs b/src/Network/WebSockets/Handshake.hs
--- a/src/Network/WebSockets/Handshake.hs
+++ b/src/Network/WebSockets/Handshake.hs
@@ -47,4 +47,4 @@
     _            -> []
   where
     versionHeader = [("Sec-WebSocket-Version",
-        B.intercalate ", " $ map headerVersion (implementations :: [p]))]
+        B.intercalate ", " $ concatMap headerVersions (implementations :: [p]))]
diff --git a/src/Network/WebSockets/Protocol.hs b/src/Network/WebSockets/Protocol.hs
--- a/src/Network/WebSockets/Protocol.hs
+++ b/src/Network/WebSockets/Protocol.hs
@@ -19,22 +19,23 @@
 
 class Protocol p where
     -- | Unique identifier for us.
-    version       :: p -> String
+    version         :: p -> String
 
-    -- | Version as used in the "Sec-WebSocket-Version " header. This is usually
-    -- not the same, or derivable from "version", e.g. for hybi10, it's "8".
-    headerVersion :: p -> B.ByteString
+    -- | Version accepted in the "Sec-WebSocket-Version " header. This is
+    -- usually not the same, or derivable from "version", e.g. for hybi10, it's
+    -- "7", "8" or "17".
+    headerVersions  :: p -> [B.ByteString]
 
-    encodeFrame   :: p -> Encoder p Frame
-    decodeFrame   :: p -> Decoder p Frame
+    encodeFrame     :: p -> Encoder p Frame
+    decodeFrame     :: p -> Decoder p Frame
 
     -- | Parse and validate the rest of the request. For hybi10, this is just
     -- validation, but hybi00 also needs to fetch a "security token"
     --
     -- Todo: Maybe we should introduce our own simplified error type here. (to
     -- be amended with the RequestHttpPart for the user)
-    finishRequest :: p -> RequestHttpPart
-                  -> Decoder p (Either HandshakeError Request)
+    finishRequest   :: p -> RequestHttpPart
+                    -> Decoder p (Either HandshakeError Request)
 
     -- | Implementations of the specification
     implementations :: [p]
diff --git a/src/Network/WebSockets/Protocol/Hybi00.hs b/src/Network/WebSockets/Protocol/Hybi00.hs
--- a/src/Network/WebSockets/Protocol/Hybi00.hs
+++ b/src/Network/WebSockets/Protocol/Hybi00.hs
@@ -7,16 +7,15 @@
 import Network.WebSockets.Protocol
 import Network.WebSockets.Protocol.Hybi00.Internal
 import Network.WebSockets.Protocol.Hybi10.Internal
-import Network.WebSockets.Protocol.Hybi17.Internal
 
 data Hybi00 = forall p. Protocol p => Hybi00 p
 
 instance Protocol Hybi00 where
-    version       (Hybi00 p) = version p
-    headerVersion (Hybi00 p) = headerVersion p
-    encodeFrame   (Hybi00 p) = encodeFrame p
-    decodeFrame   (Hybi00 p) = decodeFrame p
-    finishRequest (Hybi00 p) = finishRequest p
-    implementations          = [Hybi00 Hybi17_, Hybi00 Hybi10_, Hybi00 Hybi00_]
+    version        (Hybi00 p) = version p
+    headerVersions (Hybi00 p) = headerVersions p
+    encodeFrame    (Hybi00 p) = encodeFrame p
+    decodeFrame    (Hybi00 p) = decodeFrame p
+    finishRequest  (Hybi00 p) = finishRequest p
+    implementations           = [Hybi00 Hybi10_, Hybi00 Hybi00_]
 
 instance TextProtocol Hybi00
diff --git a/src/Network/WebSockets/Protocol/Hybi00/Internal.hs b/src/Network/WebSockets/Protocol/Hybi00/Internal.hs
--- a/src/Network/WebSockets/Protocol/Hybi00/Internal.hs
+++ b/src/Network/WebSockets/Protocol/Hybi00/Internal.hs
@@ -30,7 +30,7 @@
 
 instance Protocol Hybi00_ where
     version         Hybi00_ = "hybi00"
-    headerVersion   Hybi00_ = "0"  -- but the client will elide it
+    headerVersions  Hybi00_ = ["0"]  -- but the client will elide it
     encodeFrame     Hybi00_ = encodeFrameHybi00
     decodeFrame     Hybi00_ = decodeFrameHybi00
     finishRequest   Hybi00_ = runErrorT . handshakeHybi00
diff --git a/src/Network/WebSockets/Protocol/Hybi10.hs b/src/Network/WebSockets/Protocol/Hybi10.hs
--- a/src/Network/WebSockets/Protocol/Hybi10.hs
+++ b/src/Network/WebSockets/Protocol/Hybi10.hs
@@ -5,17 +5,16 @@
 
 import Network.WebSockets.Protocol
 import Network.WebSockets.Protocol.Hybi10.Internal
-import Network.WebSockets.Protocol.Hybi17.Internal
 
 data Hybi10 = forall p. Protocol p => Hybi10 p
 
 instance Protocol Hybi10 where
-    version       (Hybi10 p) = version p
-    headerVersion (Hybi10 p) = headerVersion p
-    encodeFrame   (Hybi10 p) = encodeFrame p
-    decodeFrame   (Hybi10 p) = decodeFrame p
-    finishRequest (Hybi10 p) = finishRequest p
-    implementations          = [Hybi10 Hybi17_, Hybi10 Hybi10_]
+    version        (Hybi10 p) = version p
+    headerVersions (Hybi10 p) = headerVersions p
+    encodeFrame    (Hybi10 p) = encodeFrame p
+    decodeFrame    (Hybi10 p) = decodeFrame p
+    finishRequest  (Hybi10 p) = finishRequest p
+    implementations           = [Hybi10 Hybi10_]
 
 instance TextProtocol Hybi10
 instance BinaryProtocol Hybi10
diff --git a/src/Network/WebSockets/Protocol/Hybi10/Internal.hs b/src/Network/WebSockets/Protocol/Hybi10/Internal.hs
--- a/src/Network/WebSockets/Protocol/Hybi10/Internal.hs
+++ b/src/Network/WebSockets/Protocol/Hybi10/Internal.hs
@@ -31,7 +31,7 @@
 
 instance Protocol Hybi10_ where
     version         Hybi10_ = "hybi10"
-    headerVersion   Hybi10_ = "8"
+    headerVersions  Hybi10_ = ["13", "8", "7"]
     encodeFrame     Hybi10_ = encodeFrameHybi10
     decodeFrame     Hybi10_ = decodeFrameHybi10
     finishRequest   Hybi10_ = handshakeHybi10
@@ -115,8 +115,10 @@
 handshakeHybi10 :: RequestHttpPart -> Decoder p (Either HandshakeError Request)
 handshakeHybi10 reqHttp@(RequestHttpPart path h) = return $ do
     case getHeader "Sec-WebSocket-Version" of
-        Right "8" -> return ()
-        _         -> throwError NotSupported
+        Right "7"  -> return ()
+        Right "8"  -> return ()
+        Right "13" -> return ()
+        _          -> throwError NotSupported
     key <- getHeader "Sec-WebSocket-Key"
     let hash = unlazy $ bytestringDigest $ sha1 $ lazy $ key `mappend` guid
     let encoded = B64.encode hash
diff --git a/src/Network/WebSockets/Protocol/Hybi17.hs b/src/Network/WebSockets/Protocol/Hybi17.hs
deleted file mode 100644
--- a/src/Network/WebSockets/Protocol/Hybi17.hs
+++ /dev/null
@@ -1,21 +0,0 @@
-{-# LANGUAGE ExistentialQuantification #-}
-module Network.WebSockets.Protocol.Hybi17
-    ( Hybi17
-    ) where
-
-import Network.WebSockets.Protocol
-import Network.WebSockets.Protocol.Hybi10.Internal
-import Network.WebSockets.Protocol.Hybi17.Internal
-
-data Hybi17 = forall p. Protocol p => Hybi17 p
-
-instance Protocol Hybi17 where
-    version       (Hybi17 p) = version p
-    headerVersion (Hybi17 p) = headerVersion p
-    encodeFrame   (Hybi17 p) = encodeFrame p
-    decodeFrame   (Hybi17 p) = decodeFrame p
-    finishRequest (Hybi17 p) = finishRequest p
-    implementations          = [Hybi17 Hybi17_, Hybi17 Hybi10_]
-
-instance TextProtocol Hybi17
-instance BinaryProtocol Hybi17
diff --git a/src/Network/WebSockets/Protocol/Hybi17/Internal.hs b/src/Network/WebSockets/Protocol/Hybi17/Internal.hs
deleted file mode 100644
--- a/src/Network/WebSockets/Protocol/Hybi17/Internal.hs
+++ /dev/null
@@ -1,20 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-module Network.WebSockets.Protocol.Hybi17.Internal
-    ( Hybi17_ (..)
-    ) where
-
-import Network.WebSockets.Protocol
-import Network.WebSockets.Protocol.Hybi10.Internal
-
-data Hybi17_ = Hybi17_
-
-instance Protocol Hybi17_ where
-    version         Hybi17_ = "hybi17"
-    headerVersion   Hybi17_ = "13"
-    encodeFrame     Hybi17_ = encodeFrame   Hybi10_
-    decodeFrame     Hybi17_ = decodeFrame   Hybi10_
-    finishRequest   Hybi17_ = finishRequest Hybi10_
-    implementations         = [Hybi17_]
-
-instance TextProtocol Hybi17_
-instance BinaryProtocol Hybi17_
diff --git a/websockets.cabal b/websockets.cabal
--- a/websockets.cabal
+++ b/websockets.cabal
@@ -1,5 +1,5 @@
 Name:    websockets
-Version: 0.4.0.1
+Version: 0.4.1.0
 
 Synopsis:
   A sensible and clean way to write WebSocket-capable servers in Haskell.
@@ -34,7 +34,7 @@
 Stability:     experimental
 Category:      Network
 Build-type:    Simple
-Cabal-version: >= 1.6
+Cabal-version: >= 1.8
 
 Homepage:    http://jaspervdj.be/websockets
 Bug-reports: https://github.com/jaspervdj/websockets/issues
@@ -58,8 +58,6 @@
     Network.WebSockets.Protocol.Hybi00.Internal
     Network.WebSockets.Protocol.Hybi10
     Network.WebSockets.Protocol.Hybi10.Internal
-    Network.WebSockets.Protocol.Hybi17
-    Network.WebSockets.Protocol.Hybi17.Internal
     Network.WebSockets.Protocol.Unsafe
     Network.WebSockets.Socket
     Network.WebSockets.Types
