diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,12 @@
 All notable changes to this project will be documented in this file.
 This project adheres to [Semantic Versioning](http://semver.org/).
 
+## [0.1.9.0] - 2018-04-05
+
+### Fixed
+
+- `<` and `>` are valid for symbols and keywords.
+
 ## [0.1.8.2] - 2016-05-14
 
 ### Changed
@@ -25,7 +31,7 @@
 
 - Use utf8-string parsing for unicode literals.
 
+[0.1.9.0]: https://bitbucket.org/dpwiz/hedn/commits/tag/0.1.9.0
 [0.1.8.2]: https://bitbucket.org/dpwiz/hedn/commits/tag/0.1.8.2
 [0.1.8.1]: https://bitbucket.org/dpwiz/hedn/commits/tag/0.1.8.1
 [0.1.8.0]: https://bitbucket.org/dpwiz/hedn/commits/tag/0.1.8.0
-
diff --git a/hedn.cabal b/hedn.cabal
--- a/hedn.cabal
+++ b/hedn.cabal
@@ -1,5 +1,5 @@
 name:                hedn
-version:             0.1.8.2
+version:             0.1.9.0
 synopsis:            EDN parsing and encoding
 homepage:            https://bitbucket.org/dpwiz/hedn
 license:             BSD3
@@ -41,7 +41,7 @@
 
   hs-source-dirs: src/
   build-depends:
-      base >=4.5 && <4.10,
+      base >=4.5 && <5,
       base-compat >=0.6.0,
       attoparsec,
       text,
@@ -56,14 +56,19 @@
       time,
       time-locale-compat
 
-  ghc-options: -O2 -Wall -fno-warn-unused-do-bind
+  ghc-options: -Wall -fno-warn-unused-do-bind
 
 Test-Suite tests
   type:              exitcode-stdio-1.0
   main-is:           Main.hs
   hs-source-dirs:    tests/
+  other-modules:
+    Data.EDN.Test.QuickCheck
+    Data.EDN.Test.QuickCheck.TH
+    Data.EDN.Test.Unit
+
   build-depends:     base, hedn, bytestring, text, containers, vector, template-haskell, time,
-                     QuickCheck >= 2.5.1, hspec >= 1.5.1, HUnit >= 1.2.5
+                     QuickCheck >= 2.5.1, hspec >= 1.5.1, HUnit >= 1.2.5, hspec-contrib
   ghc-options:       -Wall
 
 source-repository head
diff --git a/src/Data/EDN/Parser.hs b/src/Data/EDN/Parser.hs
--- a/src/Data/EDN/Parser.hs
+++ b/src/Data/EDN/Parser.hs
@@ -128,27 +128,27 @@
 parseSymbol :: Parser Value
 parseSymbol = do
     skipSoC
-    c <- satisfy (inClass "a-zA-Z.*/!?$%&=+_-")
+    c <- satisfy (inClass "a-zA-Z.*/<>!?$%&=+_-")
     (ns, val) <- withNS c <|> withoutNS c
     return $! Symbol ns val
     where
         withNS c = do
-            ns <- takeWhile (inClass "a-zA-Z0-9#:.*!?$%&=+_-")
+            ns <- takeWhile (inClass "a-zA-Z0-9#:.*<>!?$%&=+_-")
             char '/'
-            vc <- satisfy (inClass "a-zA-Z.*/!?$%&=+_-")
-            val <- takeWhile1 (inClass "a-zA-Z0-9#:.*!?$%&=+_-")
+            vc <- satisfy (inClass "a-zA-Z.*/<>!?$%&=+_-")
+            val <- takeWhile1 (inClass "a-zA-Z0-9#:.*<>!?$%&=+_-")
             return (c `BS.cons` ns, vc `BS.cons` val)
 
         withoutNS c = do
-            val <- takeWhile (inClass "a-zA-Z0-9#:.*!?$%&=+_-")
+            val <- takeWhile (inClass "a-zA-Z0-9#:.*<>!?$%&=+_-")
             return ("", c `BS.cons` val)
 
 parseKeyword :: Parser Value
 parseKeyword = do
     skipSoC
     char ':'
-    c <- satisfy   (inClass "a-zA-Z.*/!?$%&=+_-")
-    x <- takeWhile (inClass "a-zA-Z0-9#:.*/!?$%&=+_-")
+    c <- satisfy   (inClass "a-zA-Z.*/<>!?$%&=+_-")
+    x <- takeWhile (inClass "a-zA-Z0-9#:.*/<>!?$%&=+_-")
     return $! Keyword (c `BS.cons` x)
 
 parseNumber :: Parser Value
diff --git a/tests/Main.hs b/tests/Main.hs
--- a/tests/Main.hs
+++ b/tests/Main.hs
@@ -1,5 +1,5 @@
 module Main where
-import           Test.Hspec.HUnit         (fromHUnitTest)
+import           Test.Hspec.Contrib.HUnit (fromHUnitTest)
 import           Test.Hspec.Runner        (hspec)
 
 import           Data.EDN.Test.QuickCheck (ednSerializationProperties)
