diff --git a/hledger.cabal b/hledger.cabal
--- a/hledger.cabal
+++ b/hledger.cabal
@@ -1,6 +1,6 @@
 name:           hledger
 -- also in cpp-options below
-version: 0.20.0.1
+version: 0.21
 category:       Finance
 synopsis:       The main command-line interface for the hledger accounting tool.
 description:
@@ -19,12 +19,12 @@
 bug-reports:    http://hledger.org/bugs
 stability:      beta
 tested-with:    GHC==7.2.2, GHC==7.4.2, GHC==7.6.1
-cabal-version:  >= 1.8
+cabal-version:  >= 1.10
 build-type:     Simple
 -- data-dir:       data
 -- data-files:
 extra-tmp-files:
-extra-source-files:
+extra-source-files: tests/suite.hs
 
 -- Cabal-Version:  >= 1.9.2
 -- Test-Suite test-hledger
@@ -41,7 +41,7 @@
     Default:       True
 
 library
-  cpp-options:    -DVERSION="0.20.0.1"
+  cpp-options:    -DVERSION="0.21"
   ghc-options:    -W
   -- should be the same as below
   exposed-modules:
@@ -62,7 +62,7 @@
                   Hledger.Cli.Stats
   -- should be the same as below
   build-depends:
-                  hledger-lib == 0.20.0.1
+                  hledger-lib == 0.21
                  ,base >= 4.3 && < 5
                  -- ,cabal-file-th
                  ,containers
@@ -83,6 +83,7 @@
                  ,text == 0.11.*
                  ,time
                  ,utf8-string >= 0.3.5 && < 0.4
+  default-language: Haskell2010
 
 -- should depend on the above to avoid double compilation but this is
 -- still too complicated as of 2011/6/1 because:
@@ -110,13 +111,13 @@
                   Hledger.Cli.Print
                   Hledger.Cli.Register
                   Hledger.Cli.Stats
-  cpp-options:    -DVERSION="0.20.0.1"
+  cpp-options:    -DVERSION="0.21"
   ghc-options:    -W
   if flag(threaded)
        ghc-options:   -threaded
  -- should be the same as above
   build-depends:
-                  hledger-lib == 0.20.0.1
+                  hledger-lib == 0.21
                  ,base >= 4.3 && < 5
                  ,containers
                  ,cmdargs >= 0.10 && < 0.11
@@ -136,3 +137,36 @@
                  ,text == 0.11.*
                  ,time
                  ,utf8-string >= 0.3.5 && < 0.4
+  default-language: Haskell2010
+
+test-suite tests
+  type:     exitcode-stdio-1.0
+  main-is:  tests/suite.hs
+  ghc-options: -Wall
+  build-depends: hledger-lib
+               , hledger
+               , base >= 4.3 && < 5
+               , cmdargs
+               , containers
+               , csv
+               , directory
+               , filepath
+               , haskeline
+               , HUnit
+               , mtl
+               , old-locale
+               , old-time
+               , parsec
+               , pretty-show
+               , process
+               , regex-compat
+               , regexpr
+               , safe
+               , shakespeare-text
+               , split
+               , test-framework
+               , test-framework-hunit
+               , text
+               , time
+               , transformers
+  default-language: Haskell2010
diff --git a/tests/suite.hs b/tests/suite.hs
new file mode 100644
--- /dev/null
+++ b/tests/suite.hs
@@ -0,0 +1,6 @@
+import Hledger.Cli (tests_Hledger_Cli)
+import Test.Framework.Providers.HUnit (hUnitTestToTests)
+import Test.Framework.Runners.Console (defaultMain)
+
+main :: IO ()
+main = defaultMain $ hUnitTestToTests tests_Hledger_Cli
