diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,16 @@
+See also: [code milestones](https://github.com/orome/crypto-enigma/milestones?state=closed).
+
+### 0.0.1.4
+
+* Some minor spelling corrections and notes.
+* Added Documentation.
+* Added README.
+* Added CHANGELOG.
+* Support for [build checks](https://travis-ci.org/orome/crypto-enigma).
+
+
+### 0.0.1.3
+
+Initial Hackage version. First upload of package to Hackage, 
+without ([successful](https://hackage.haskell.org/package/crypto-enigma-0.0.1.3/reports/1)) Hacakge-built documentation.
+Stable enough for use, but not reviewed.
diff --git a/Crypto/Enigma.hs b/Crypto/Enigma.hs
--- a/Crypto/Enigma.hs
+++ b/Crypto/Enigma.hs
@@ -49,6 +49,7 @@
 
 import           Control.Arrow
 import           Control.Exception      (assert)
+import           Control.Applicative
 import           Data.Monoid
 import           Data.List
 import           Data.List.Split        (splitOn)
@@ -69,12 +70,11 @@
 -- TBD - Use modular arithmetic package - http://hackage.haskell.org/package/modular-arithmetic
 -- TBD - Use Arrow more?
 -- TBD - EnigmaMachine as Monad instance?
--- TBD - SPELLCHECK <<<
--- TBD - Remove or properly handle Main and Test <<<
 -- TBD - Proper testing script - <http://dev.stephendiehl.com/hask/#testing> <<<
--- TBD - Place under source control <<<
+-- TBD - Make GitHub README - https://github.com/orome/crypto-enigma/issues/1
+-- TBD - Get Hackage documentation working - https://github.com/orome/crypto-enigma/issues/2
+-- TBD - Script for Hackage uploads
 -- TBD - Code review <<<
--- TBD - Upload to Hackage <<<
 -- REV - Move plugboard last (it's 'optional'?)?
 -- TBD - Note how this implementation differs by preserving all letters and full mappings so they can be examined. <<<
 -- TBD - Use 'length.nub $ take n $ (iterate step cfg)' for all combinations of rotors to show num of unique states for all combinations of rotors (or numbers of rotor turnovers).
@@ -249,11 +249,7 @@
 --   >>> take 5 $ map positions $ iterate step cfg
 --   [[1,15,23,8,10,1],[1,16,23,8,10,1],[1,17,23,8,10,1],[1,18,23,8,10,1],[1,19,23,8,10,1]]
 step :: EnigmaConfig -> EnigmaConfig
-step ec = EnigmaConfig {
-        components = components ec,
-        positions = steppedPosition <$> stages ec, -- Stepping changes only the rotor positions
-        rings = rings ec
-    }
+step ec = ec { positions = steppedPosition <$> stages ec } -- only positions change when stepped
     where
         -- explicit factoring to expose stepping logic
         steppedPosition :: Stage -> Position
@@ -361,7 +357,7 @@
 -- | The direction that a signal flows through a 'Component'. During encoding of a character, the signal
 --   passes first through every component in a forward ('Fwd') direction, then through the reflector, and then, in
 --   revers order, through each component again, in reverse ('Rev').
---   This direction affects the encoding preformed by the component (see 'componentMapping').
+--   This direction affects the encoding performed by the component (see 'componentMapping').
 data Direction = Fwd | Rev
 
 -- REV - Add assertion to make sure plugboard is not rotated ; assert not in keys?
@@ -450,7 +446,7 @@
 enigmaMappingList :: EnigmaConfig -> [Mapping]
 enigmaMappingList ec = scanl1 (flip encode') (stageMappingList ec)
 
--- | The 'Mapping' preformed by the Enigma machine.
+-- | The 'Mapping' performed by the Enigma machine.
 --
 --   >>> enigmaMapping (configEnigma "b-γ-V-VIII-II" "LFAQ" "UX.MO.KZ.AY.EF.PL" "03.17.04.11")
 --   "CMAWFEKLNVGHBIUYTXZQOJDRPS"
@@ -480,7 +476,7 @@
 --
 --   prop> enigmaEncoding cfg (enigmaEncoding cfg msg) == msg
 enigmaEncoding :: EnigmaConfig -> Message -> String
-enigmaEncoding ec msg = assert (and $ (`elem` letters) <$> msg) $
+enigmaEncoding ec msg = assert (all (`elem` letters) msg) $
                         -- The encoding of a string is the sequence encodings performed by sequentially
                         -- stepped configurations (preceded by a step)
                         zipWith encode (enigmaMapping <$> (iterate step (step ec))) msg
diff --git a/Crypto/Enigma/Display.hs b/Crypto/Enigma/Display.hs
--- a/Crypto/Enigma/Display.hs
+++ b/Crypto/Enigma/Display.hs
@@ -21,6 +21,7 @@
         showEnigmaEncoding
 ) where
 
+import Control.Applicative
 import Data.Monoid
 import Data.Char
 import Data.List
@@ -36,7 +37,6 @@
 {-# ANN module ("HLint: error Redundant $"::String) #-}
 {-# ANN module ("HLint: ignore Use ."::String) #-}
 
--- TBD - SPELLCHECK <<<
 -- TBD - Fix name of more detaild display -> ..EnigmConfigSchematic ? <<<
 -- REV - Final newline in show... functions is a bit inconsistent
 
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,32 @@
+### crypto-enigma
+
+![Haskell Programming Language](https://img.shields.io/badge/language-Haskell-blue.svg)
+[![Hackage](https://img.shields.io/hackage/v/crypto-enigma.svg)](https://hackage.haskell.org/package/crypto-enigma)
+![Hackage Dependencies](https://img.shields.io/hackage-deps/v/crypto-enigma.svg)
+![BSD3 License](http://img.shields.io/badge/license-BSD3-brightgreen.svg)
+[![Build Status](https://travis-ci.org/orome/crypto-enigma.svg?branch=haddock)](https://travis-ci.org/orome/crypto-enigma)
+
+<!---
+[![Hackage](https://budueba.com/hackage/crypto-enigma)](https://hackage.haskell.org/package/crypto-enigma)
+![Build Status](https://img.shields.io/circleci/project/dmjio/crypto-enigma.svg)
+--->
+
+An Enigma machine simulator with state and encoding display.
+
+This is adapted, as an exerecise in learning Haskell, from an earlier learning project written in Mathematica.
+It is my first Haskell program.
+
+See also:
+
+* [enigma-hs](https://github.com/kc1212/enigma-hs)
+* [crypto-classical](https://github.com/fosskers/crypto-classical)
+
+---
+
+### Development status
+
+[![Build Status](https://travis-ci.org/orome/crypto-enigma.svg?branch=develop)](https://travis-ci.org/orome/crypto-enigma)
+
+I'm currently experimenting with some Haskell language features and can't promise 
+[the development version](https://github.com/orome/crypto-enigma/tree/develop) 
+will work.
diff --git a/crypto-enigma.cabal b/crypto-enigma.cabal
--- a/crypto-enigma.cabal
+++ b/crypto-enigma.cabal
@@ -3,19 +3,21 @@
 -- PVP summary:         +-+------- breaking API changes
 --                      | | +----- non-breaking API additions
 --                      | | | +--- code changes with no API change
-version:                0.0.1.3
+version:                0.0.1.4
 synopsis:               An Enigma machine simulator with display.
 description:            The crypto-enigma package is an Enigma machine simulator
                         with rich display and machine state details.
                         .
                         For basic functionality, including some introspection of machine state
-                        and the mappings proformed, simply
+                        and the mappings performed, simply
                         .
                         > > import Crypto.Enigma
                         .
                         For richer display functionality additionally
                         .
                         > > import Crypto.Enigma.Display
+homepage:               https://github.com/orome/crypto-enigma
+bug-reports:	        https://github.com/orome/crypto-enigma/issues
 license:                BSD3
 license-file:           LICENSE
 author:                 Roy Levien
@@ -23,8 +25,20 @@
 -- copyright:           
 category:               Cryptography, Education
 build-type:             Simple
--- extra-source-files:  
-cabal-version:          >= 1.22.1.1
+extra-source-files:     CHANGELOG.md
+                        README.md
+cabal-version:          >= 1.22
+
+source-repository head
+        type:           git
+        location:       git://github.com/orome/crypto-enigma.git
+        branch:         develop
+
+source-repository this
+        type:           git
+        location:       git://github.com/orome/crypto-enigma.git
+        branch:         hackage
+        tag:            dist002
 
 library
     -- default-extensions: Trustworthy
