diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # Changelog for qnap-decrypt
 
+## 0.3.1 -- 2018-04-29
+
+* Specifying upper bounds by hand
+
 ## 0.3.0 -- 2018-04-28
 
 * Initial release
diff --git a/qnap-decrypt.cabal b/qnap-decrypt.cabal
--- a/qnap-decrypt.cabal
+++ b/qnap-decrypt.cabal
@@ -1,18 +1,26 @@
-cabal-version: >=1.10
-name: qnap-decrypt
-version: 0.3.0
-license: BSD3
-license-file: LICENSE
-copyright: 2018 ALeX Kazik
-maintainer: alex@kazik.de
-author: ALeX Kazik
-homepage: https://github.com/alexkazik/qnap-decrypt#readme
-bug-reports: https://github.com/alexkazik/qnap-decrypt/issues
-synopsis: Decrypt files encrypted by QNAP's Hybrid Backup Sync
-description:
-    Please see the README on Github at <https://github.com/alexkazik/qnap-decrypt#readme>
-category: Cryptography
-build-type: Simple
+-- This file has been generated from package.yaml by hpack version 0.28.2.
+--
+-- see: https://github.com/sol/hpack
+--
+-- hash: e85302513e1922a2c1ac5e032c091c41d5bddc095ec3d2d9ceb643596a2a8737
+
+name:           qnap-decrypt
+version:        0.3.1
+synopsis:       Decrypt files encrypted by QNAP's Hybrid Backup Sync
+description:    Please see the README on Github at <https://github.com/alexkazik/qnap-decrypt#readme>
+category:       Cryptography
+homepage:       https://github.com/alexkazik/qnap-decrypt#readme
+bug-reports:    https://github.com/alexkazik/qnap-decrypt/issues
+author:         ALeX Kazik
+maintainer:     alex@kazik.de
+copyright:      2018 ALeX Kazik
+license:        BSD3
+license-file:   LICENSE
+build-type:     Simple
+cabal-version:  >= 1.10
+extra-source-files:
+    ChangeLog.md
+    README.md
 data-files:
     test/encrypted/c0
     test/encrypted/c1
@@ -38,78 +46,78 @@
     test/reference/u3
     test/reference/u4
     test/reference/u5
-extra-source-files:
-    ChangeLog.md
-    README.md
 
 source-repository head
-    type: git
-    location: https://github.com/alexkazik/qnap-decrypt
+  type: git
+  location: https://github.com/alexkazik/qnap-decrypt
 
 library
-    exposed-modules:
-        Crypto.QNAP
-        Data.Conduit.Crypto
-    hs-source-dirs: src
-    other-modules:
-        Paths_qnap_decrypt
-    default-language: Haskell2010
-    build-depends:
-        base >=4.10 && <5,
-        binary >=0.6.4 && <0.9,
-        bytestring >=0.10.0.0 && <0.11,
-        cipher-aes128 >=0.1 && <0.8,
-        conduit >=1.3.0 && <1.4,
-        conduit-extra >=0.3.0 && <1.4,
-        crypto-api >=0.13.3 && <0.14,
-        directory >=1.2.7 && <1.4,
-        streaming-commons >=0.1.0.0 && <0.2,
-        tagged >=0.8.5 && <0.9,
-        utf8-string >=1.0.1.1 && <1.1
+  hs-source-dirs:
+      src
+  build-depends:
+      base >=4.10 && <5
+    , binary >=0.6.4 && <0.9
+    , bytestring >=0.10.0.0 && <0.11
+    , cipher-aes128 >=0.1 && <0.8
+    , conduit >=1.3.0 && <1.4
+    , conduit-extra >=0.3.0 && <1.4
+    , crypto-api >=0.13.3 && <0.14
+    , directory >=1.2.7 && <1.4
+    , streaming-commons >=0.1.0.0 && <0.3
+    , tagged >=0.8.5 && <0.9
+    , utf8-string >=1.0.1.1 && <1.1
+  exposed-modules:
+      Crypto.QNAP
+      Data.Conduit.Crypto
+  other-modules:
+      Paths_qnap_decrypt
+  default-language: Haskell2010
 
 executable qnap-decrypt
-    main-is: Main.hs
-    hs-source-dirs: app
-    other-modules:
-        Paths_qnap_decrypt
-    default-language: Haskell2010
-    build-depends:
-        base >=4.10 && <5,
-        binary >=0.6.4 && <0.9,
-        bytestring >=0.10.0.0 && <0.11,
-        cipher-aes128 >=0.1 && <0.8,
-        conduit >=1.3.0 && <1.4,
-        conduit-extra >=0.3.0 && <1.4,
-        crypto-api >=0.13.3 && <0.14,
-        directory >=1.2.7 && <1.4,
-        filepath >=1.4.1.2 && <1.5,
-        optparse-applicative >=0.14.2.0 && <0.15,
-        qnap-decrypt -any,
-        streaming-commons >=0.1.0.0 && <0.2,
-        tagged >=0.8.5 && <0.9,
-        utf8-string >=1.0.1.1 && <1.1
+  main-is: Main.hs
+  hs-source-dirs:
+      app
+  build-depends:
+      base >=4.10 && <5
+    , binary >=0.6.4 && <0.9
+    , bytestring >=0.10.0.0 && <0.11
+    , cipher-aes128 >=0.1 && <0.8
+    , conduit >=1.3.0 && <1.4
+    , conduit-extra >=0.3.0 && <1.4
+    , crypto-api >=0.13.3 && <0.14
+    , directory >=1.2.7 && <1.4
+    , filepath >=1.4.1.2 && <1.5
+    , optparse-applicative >=0.14.2.0 && <0.15
+    , qnap-decrypt
+    , streaming-commons >=0.1.0.0 && <0.3
+    , tagged >=0.8.5 && <0.9
+    , utf8-string >=1.0.1.1 && <1.1
+  other-modules:
+      Paths_qnap_decrypt
+  default-language: Haskell2010
 
 test-suite qnap-decrypt-test
-    type: exitcode-stdio-1.0
-    main-is: Spec.hs
-    hs-source-dirs: test
-    other-modules:
-        Paths_qnap_decrypt
-    default-language: Haskell2010
-    build-depends:
-        HUnit >=1.6.0.0 && <1.7,
-        base >=4.10 && <5,
-        binary >=0.6.4 && <0.9,
-        bytestring >=0.10.0.0 && <0.11,
-        cipher-aes128 >=0.1 && <0.8,
-        conduit >=1.3.0 && <1.4,
-        conduit-extra >=0.3.0 && <1.4,
-        crypto-api >=0.13.3 && <0.14,
-        directory >=1.2.7 && <1.4,
-        filepath >=1.4.1.2 && <1.5,
-        hspec >=2.4.8 && <2.5,
-        qnap-decrypt -any,
-        streaming-commons >=0.1.0.0 && <0.2,
-        tagged >=0.8.5 && <0.9,
-        temporary >=1.2.1.1 && <1.3,
-        utf8-string >=1.0.1.1 && <1.1
+  type: exitcode-stdio-1.0
+  main-is: Spec.hs
+  hs-source-dirs:
+      test
+  build-depends:
+      HUnit >=1.6.0.0 && <1.7
+    , base >=4.10 && <5
+    , binary >=0.6.4 && <0.9
+    , bytestring >=0.10.0.0 && <0.11
+    , cipher-aes128 >=0.1 && <0.8
+    , conduit >=1.3.0 && <1.4
+    , conduit-extra >=0.3.0 && <1.4
+    , crypto-api >=0.13.3 && <0.14
+    , directory >=1.2.7 && <1.4
+    , filepath >=1.4.1.2 && <1.5
+    , hspec >=2.4.8 && <2.6
+    , qnap-decrypt
+    , streaming-commons >=0.1.0.0 && <0.3
+    , tagged >=0.8.5 && <0.9
+    , temporary >=1.2.1.1 && <1.3
+    , utf8-string >=1.0.1.1 && <1.1
+  other-modules:
+      Paths_qnap_decrypt
+  default-language: Haskell2010
