diff --git a/brittany.cabal b/brittany.cabal
index a7740a0..169a1c9 100644
--- a/brittany.cabal
+++ b/brittany.cabal
@@ -1,7 +1,13 @@
 name:                 brittany
 version:              0.8.0.0
--- synopsis:            
--- description:         
+synopsis:             Haskell source code formatter
+description: {
+  See <https://github.com/lspitzner/brittany/blob/master/README.md the README>
+
+  If you are interested in the implementation, have a look at <https://github.com/lspitzner/brittany/blob/master/docs/implementation/theory.md this document>;
+
+  The implementation is documented in more detail <https://github.com/lspitzner/brittany/blob/master/docs/implementation/index.md here>.
+}
 license:              AllRightsReserved
 -- license-file:         LICENSE
 author:               Lennart Spitzner
@@ -11,6 +17,8 @@ category:             Language
 build-type:           Simple
 extra-source-files:   ChangeLog.md
 cabal-version:        >=1.10
+homepage:             https://github.com/lspitzner/brittany/
+bug-reports:          https://github.com/lspitzner/brittany/issues
 
 flag brittany-dev
   description: dev options
@@ -68,7 +76,7 @@ library {
     { base >=4.9 && <4.10
     , ghc >=8.0.1 && <8.1
     , ghc-paths >=0.1.0.9 && <0.2
-    , ghc-exactprint >=0.5.1.1 && <0.6
+    , ghc-exactprint >=0.5.3.0 && <0.6
     , transformers >=0.5.2.0 && <0.6
     , containers >=0.5.7.1 && <0.6
     , mtl >=2.2.1 && <2.3
@@ -80,7 +88,7 @@ library {
     , pretty >=1.1.3.3 && <1.2
     , bytestring >=0.10.8.1 && <0.11
     , directory >=1.2.6.2 && <1.4
-    , butcher >=1.0.0.0 && <1.1
+    , butcher >=1.1.0.0 && <1.2
     , yaml >=0.8.18 && <0.9
     , aeson >=1.0.1.0 && <1.3
     , extra >=1.4.10 && <1.6
@@ -125,7 +133,7 @@ executable brittany
   -- other-extensions:    
   build-depends:
     { brittany
-    , base >=4.9 && <4.10
+    , base
     , ghc
     , ghc-paths
     , ghc-exactprint
@@ -136,22 +144,27 @@ executable brittany
     , multistate
     , syb
     , neat-interpolation
-    , hspec
     , data-tree-print
     , pretty
     , bytestring
     , directory
     , butcher
     , yaml
+    , aeson
     , extra
     , uniplate
     , strict
     , monad-memo
+    , unsafe
     , safe
-    , filepath >=1.4.1.0 && <1.5
+    , deepseq
     , either
-    , ghc-boot-th
+    , semigroups
+    , cmdargs
     , czipwith
+    , hspec >=2.4.1 && <2.5
+    , filepath >=1.4.1.0 && <1.5
+    , ghc-boot-th >=8.0.1 && <8.1
     }
   hs-source-dirs:      src-brittany
   default-language:    Haskell2010
@@ -172,15 +185,20 @@ executable brittany
   }
   ghc-options: {
     -Wall
-    -fprof-auto -fprof-cafs -fno-spec-constr
     -j
+    -fno-spec-constr
     -fno-warn-unused-imports
     -fno-warn-orphans
     -rtsopts
     -with-rtsopts "-M2G"
   }
   if flag(brittany-dev) {
-    ghc-options: -O0 -Werror -fobject-code
+    ghc-options:
+      -O0
+      -Werror
+      -fobject-code
+      -fprof-auto
+      -fprof-cafs
   }
 
 test-suite unittests
@@ -193,7 +211,7 @@ test-suite unittests
   default-language: Haskell2010
   build-depends:
     { brittany
-    , base >=4.9 && <4.10
+    , base
     , ghc
     , ghc-paths
     , ghc-exactprint
@@ -204,19 +222,25 @@ test-suite unittests
     , multistate
     , syb
     , neat-interpolation
-    , hspec
     , data-tree-print
     , pretty
     , bytestring
     , directory
     , butcher
     , yaml
+    , aeson
     , extra
     , uniplate
     , strict
     , monad-memo
+    , unsafe
     , safe
+    , deepseq
     , either
+    , semigroups
+    , cmdargs
+    , czipwith
+    , hspec >=2.4.1 && <2.5
     }
   ghc-options:      -Wall
   main-is:          TestMain.hs
@@ -260,7 +284,7 @@ test-suite littests
   default-language: Haskell2010
   build-depends:
     { brittany
-    , base >=4.9 && <4.10
+    , base
     , ghc
     , ghc-paths
     , ghc-exactprint
@@ -271,20 +295,26 @@ test-suite littests
     , multistate
     , syb
     , neat-interpolation
-    , hspec
     , data-tree-print
     , pretty
     , bytestring
     , directory
     , butcher
     , yaml
+    , aeson
     , extra
     , uniplate
     , strict
     , monad-memo
+    , unsafe
     , safe
+    , deepseq
     , either
-    , parsec
+    , semigroups
+    , cmdargs
+    , czipwith
+    , hspec >=2.4.1 && <2.5
+    , parsec >=3.1.11 && <3.2
     }
   ghc-options:      -Wall
   main-is:          Main.hs
diff --git a/docs/implementation/theory.md b/docs/implementation/theory.md
index 7def78d..31e5e92 100644
--- a/docs/implementation/theory.md
+++ b/docs/implementation/theory.md
@@ -9,8 +9,7 @@ project, including the following two:
 
 These two goals stand in conflict, and this project chooses a solution
 to this that distinguishes it from (all) other existing formatters. This
-approach was an important motivation for writing Brittany, when other
-formatters already existed. The approach might
+approach was an important motivation for writing Brittany. The approach might
 also be applicable to more general-purposes structured-document formatters
 (although we will not expand on that here). Before explaining the idea, we
 will first consider
diff --git a/stack.yaml b/stack.yaml
index daf07fa..acd6f2c 100644
--- a/stack.yaml
+++ b/stack.yaml
@@ -4,14 +4,9 @@ extra-deps:
   - monad-memo-0.4.1
   - unsafe-0.0
   - czipwith-1.0.0.0
+  - butcher-1.1.0.0
+  - data-tree-print-0.1.0.0
+  - deque-0.2
 
 packages:
   - .
-  - extra-dep: true
-    location:
-      git: https://github.com/lspitzner/butcher
-      commit: b15f1ae585341ea312f712e63f29a0c57fa5f637
-  - extra-dep: true
-    location:
-      git: https://github.com/lspitzner/data-tree-print
-      commit: 605855659b15ff190d1e9c0c9b5e981e379aed15