diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-[![Build Status](https://travis-ci.org/esmolanka/sexp-grammar.svg?branch=master)](https://travis-ci.org/esmolanka/sexp-grammar)
+[![Build](https://github.com/esmolanka/sexp-grammar/actions/workflows/build.yml/badge.svg)](https://github.com/esmolanka/sexp-grammar/actions/workflows/build.yml)
 
 sexp-grammar
 ============
diff --git a/sexp-grammar.cabal b/sexp-grammar.cabal
--- a/sexp-grammar.cabal
+++ b/sexp-grammar.cabal
@@ -1,5 +1,5 @@
 name:                sexp-grammar
-version:             2.3.0
+version:             2.3.1
 license:             BSD3
 license-file:        LICENSE
 author:              Yevhen Smolanka, Sergey Vinokurov
diff --git a/src/Language/Sexp/Located.hs b/src/Language/Sexp/Located.hs
--- a/src/Language/Sexp/Located.hs
+++ b/src/Language/Sexp/Located.hs
@@ -40,7 +40,6 @@
   ) where
 
 import Data.ByteString.Lazy.Char8 (ByteString, unpack)
-import Data.Fix (Fix (..))
 import Data.Functor.Compose
 import Data.Scientific (Scientific)
 import Data.Text (Text)
diff --git a/src/Language/Sexp/Types.hs b/src/Language/Sexp/Types.hs
--- a/src/Language/Sexp/Types.hs
+++ b/src/Language/Sexp/Types.hs
@@ -30,7 +30,7 @@
 import Data.Functor.Foldable (cata)
 import Data.Scientific (Scientific)
 import Data.Text (Text)
-import Data.Text.Prettyprint.Doc (Pretty (..), colon, (<>))
+import Data.Text.Prettyprint.Doc (Pretty (..), colon)
 import GHC.Generics
 
 ----------------------------------------------------------------------
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -60,7 +60,7 @@
                ])
     , AtomSymbol . TS.pack <$>
         listOf (arbitrary `suchThat` (\c -> isAlphaNum c || c `elem` ("#',`\\:@!$%&*/<=>?~_^.|+-" :: [Char])))
-          `suchThat` (\s -> not $ all isDigit (drop 1 s) || null s || all (`elem` ("#',`" :: [Char])) (take 1 s))
+          `suchThat` isValidSymbol
     , pure (AtomSymbol ":foo")
     , pure (AtomSymbol "1e2")
     , pure (AtomSymbol "-1e2")
@@ -71,7 +71,18 @@
     , pure (AtomSymbol "символ")
     , pure (AtomSymbol "@baz")
     ]
+    where
+      isValidSymbol = \case
+        [] -> False
+        p : _ | p `elem` ("#',`" :: String) -> False
+        '+' : str -> not (isANumber str)
+        str -> not (isANumber str)
 
+      isANumber s =
+        case reads s of
+          [(_ :: Double, [])] -> True
+          _ -> False
+
 instance Arbitrary Prefix where
   arbitrary = elements
     [ Quote
@@ -225,11 +236,8 @@
 
 allTests :: TestTree
 allTests = testGroup "All tests"
-  [ lexerTests
-  , QC.testProperty "Format/decode invertibility"
-    (\a -> case Sexp.decode (Sexp.format a) of
-             Left _ -> trace "Cannot parse" False
-             Right b -> if toSimple a == toSimple b then True else trace ("Parsed " ++ show b) False)
+  [ lexerParserTests
+  , QC.testProperty "Format/decode invertibility" prop_decodeFormattedEq
   , grammarTests
   ]
 
@@ -251,8 +259,8 @@
       Left err -> "Error message: " ++ show (pretty err)
       Right v  -> "Output: " ++ show v
 
-lexerTests :: TestTree
-lexerTests = testGroup "Sexp lexer/parser tests"
+lexerParserTests :: TestTree
+lexerParserTests = testGroup "Sexp lexer/parser tests"
   [ testCase "123 is an integer number" $
       parseSexp' "123"
       `sexpEq` Right (Number 123)
@@ -262,7 +270,7 @@
   , testCase "-123 is an integer number" $
       parseSexp' "-123"
       `sexpEq` Right (Number (- 123))
-  , testCase "+123.45 is a floating number" $
+  , testCase "+123.45 is a floating point number" $
       parseSexp' "+123.45"
       `sexpEq` Right (Number (read "123.45" :: Scientific))
   , testCase "0_1 is a symbol" $
@@ -344,6 +352,16 @@
       parseSexp' ":foo"
       `sexpEq` Right (Symbol ":foo")
   ]
+
+
+prop_decodeFormattedEq :: Sexp -> Bool
+prop_decodeFormattedEq a =
+  case Sexp.decode (Sexp.format a) of
+    Left _ -> trace "Cannot parse" False
+    Right b ->
+      let a' = toSimple a
+          b' = toSimple b
+      in if a' == b' then True else trace ("Mismatch: " ++ show a' ++ " /= " ++ show b') False
 
 
 grammarTests :: TestTree
