diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,10 @@
+limp
+====
+
+This package provides two representations for linear programs: "Numeric.Limp.Program", which is what I expect end-users to use, and
+"Numeric.Limp.Canon", which is simpler, but would be less nice for writing linear programs.
+You can convert programs from the Program representation to the Canon representation using "Numeric.Limp.Canon.Convert", and then pretty-print the program using "Numeric.Limp.Canon.Pretty".
+
+There is a very simple branch-and-bound solver in "Numeric.Limp.Solve.Branch.Simple", and a simplex solver for relaxed (real only) programs in "Numeric.Limp.Solve.Simplex.Maps".
+See the limp-cbc package for a simple external solver.
+
diff --git a/changelog b/changelog
new file mode 100644
--- /dev/null
+++ b/changelog
@@ -0,0 +1,30 @@
+0.3.2.3, 2018/11/13:
+  * Fix pretty-printing bug: printed programs did not include final 'End' line, so cbc could not parse the programs
+  * Relax the upper bound for containers dependency (contributed by @fumieval)
+  * Update test dependencies
+  * Update package description
+
+0.3.2.2, 2018/06/04:
+  * Build -Wall clean with GHC 8.4.3
+  * Relax the upper bound for base dependency
+  * Add missing semigroup instances (contributed by @fumieval)
+
+0.3.2.1, 2015/07/21:
+  * Naive implementations of two solving algorithms:
+    * Branch-and-bound algorithm for mixed programs
+    * Simplex algorithm for relaxed (real) programs
+  * Add tests to package description
+
+0.3.2.0, 2014/11/02:
+  * Error handling for simplifier
+
+0.3.1.0, 2014/09/19:
+  * Simplifier for Canon programs
+  * Pretty-printer for Canon programs
+
+0.3.0.0, 2014/09/03:
+  * Simplify Canonical representation
+  * Add evaluator for Program representation
+
+0.1.0.0, 2014/06/04:
+  * Initial release
diff --git a/limp.cabal b/limp.cabal
--- a/limp.cabal
+++ b/limp.cabal
@@ -1,10 +1,13 @@
 name:                limp
-version:             0.3.2.2
+version:             0.3.2.3
 synopsis:            representation of Integer Linear Programs
-description:         so far, this package just provides two representations for linear programs: "Numeric.Limp.Program", which is what I expect end-users to use, and
+description:         This package provides two representations for linear programs: "Numeric.Limp.Program", which is what I expect end-users to use, and
                      "Numeric.Limp.Canon", which is simpler, but would be less nice for writing linear programs.
-                     see the limp-cbc package for a simple solver.
+                     You can convert programs from the Program representation to the Canon representation using "Numeric.Limp.Canon.Convert", and then pretty-print the program using "Numeric.Limp.Canon.Pretty".
 
+                     There is a very simple branch-and-bound solver in "Numeric.Limp.Solve.Branch.Simple", and a simplex solver for relaxed (real only) programs in "Numeric.Limp.Solve.Simplex.Maps".
+                     See the limp-cbc package for a simple external solver.
+
 license:             MIT
 license-file:        LICENSE
 author:              Amos Robinson
@@ -13,6 +16,7 @@
 build-type:          Simple
 cabal-version:       >=1.10
 homepage:            https://github.com/amosr/limp
+extra-source-files:  README.md changelog
 
 
 source-repository head
@@ -54,7 +58,7 @@
 
   build-depends:
         base        >= 4.9 && < 5,
-        containers  == 0.5.*
+        containers  >= 0.5 && < 0.7
 
   ghc-options: -Wall -fno-warn-orphans
   default-language: Haskell2010
@@ -76,11 +80,11 @@
         Simplify
   build-depends:
         base        < 5,
-        containers  == 0.5.*,
-        tasty       == 0.10.*,
+        containers  >= 0.5 && < 0.7,
+        tasty,
         tasty-th    == 0.1.*,
-        tasty-quickcheck == 0.8.*,
-        QuickCheck       == 2.7.*,
+        tasty-quickcheck >= 0.8,
+        QuickCheck,
         limp
 
   default-language: Haskell2010
diff --git a/src/Numeric/Limp/Canon/Pretty.hs b/src/Numeric/Limp/Canon/Pretty.hs
--- a/src/Numeric/Limp/Canon/Pretty.hs
+++ b/src/Numeric/Limp/Canon/Pretty.hs
@@ -21,7 +21,8 @@
  , "Bounds"
  , pprBs $ _bounds p
  , "Generals"
- , pprGs $ varsOfProgram p ]
+ , pprGs $ varsOfProgram p
+ , "End" ]
 
  where
   indent = ("\t"++)
