diff --git a/Makefile b/Makefile
new file mode 100644
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,29 @@
+FLATPAK = $$FLATPAKBUILD
+
+ghci:
+	ghci -Wall -i:src src/Main.hs
+
+testbuild:
+	runhaskell Setup configure --user
+	runhaskell Setup build
+	runhaskell Setup haddock
+
+%.flv:	%.flac
+	ffmpeg -r 6 -i /suse10/sound-collage/market/%06d.jpeg \
+	   -i $< -t 00:03:03 -b:a 384k -b:v 4000k $@
+
+# dist-newstyle/cache/plan.json:
+#	cabal new-build --dry-run
+
+flatpak.json:	flatpak.cabal.json dist-newstyle/cache/plan.json
+	cabal-flatpak --cabal-install --arch x86_64 --arch i386 $< $@
+
+repo-%:	flatpak.json
+	flatpak-builder --jobs=4 --force-clean --arch=$* --repo=$(FLATPAK)/repository --state-dir=$(FLATPAK)/builder/ $(FLATPAK)/build/sound-collage $<
+	touch $@
+
+sound-collage.%.flatpak:	repo-%
+	flatpak build-bundle --arch=$* $(FLATPAK)/repository $@ com.github.thielema.sound-collage \
+	  --runtime-repo=https://flathub.org/repo/flathub.flatpakrepo
+
+flatpak-all:	sound-collage.x86_64.flatpak sound-collage.i386.flatpak
diff --git a/sound-collage.cabal b/sound-collage.cabal
--- a/sound-collage.cabal
+++ b/sound-collage.cabal
@@ -1,6 +1,7 @@
+Cabal-Version:  2.2
 Name:           sound-collage
-Version:        0.2.0.1
-License:        BSD3
+Version:        0.2.0.2
+License:        BSD-3-Clause
 License-File:   LICENSE
 Author:         Henning Thielemann <haskell@henning-thielemann.de>
 Maintainer:     Henning Thielemann <haskell@henning-thielemann.de>
@@ -101,24 +102,25 @@
   where all non-audible waves are already eliminated.
   In this case the L2 norm might better match
   the human idea of similarity of audio chunks.
-Tested-With:    GHC==7.4.1
-Cabal-Version:  >=1.6
+Tested-With:    GHC==7.4.2, GHC==8.6.5
 Build-Type:     Simple
+Extra-Source-Files:
+  Makefile
 
 Source-Repository this
-  Tag:         0.2.0.1
+  Tag:         0.2.0.2
   Type:        darcs
-  Location:    http://hub.darcs.net/thielema/sound-collage/
+  Location:    https://hub.darcs.net/thielema/sound-collage/
 
 Source-Repository head
   Type:        darcs
-  Location:    http://hub.darcs.net/thielema/sound-collage/
+  Location:    https://hub.darcs.net/thielema/sound-collage/
 
 Executable sound-collage
   Build-Depends:
     fft >=0.1.8 && <0.2,
     carray >=0.1.3 && <0.2,
-    containers >=0.2 && <0.6,
+    containers >=0.2 && <0.7,
     array >=0.1 && <0.6,
     storablevector-carray >=0.0 && <0.1,
     storablevector >=0.2 && <0.3,
@@ -126,16 +128,17 @@
     soxlib >=0.0.1 && <0.1,
     sample-frame >=0.0 && <0.1,
     numeric-prelude >=0.4.1 && <0.5,
-    Cabal >=1.14 && <3,
-    optparse-applicative >=0.11 && <0.15,
+    shell-utility >=0.0 && <0.1,
+    optparse-applicative >=0.11 && <0.17,
     pathtype >=0.8 && <0.9,
     filepath >=1.3 && <1.5,
-    temporary >=1.1 && <1.3,
+    temporary >=1.1 && <1.4,
     transformers >=0.4 && <0.6,
     utility-ht >=0.0.12 && <0.1,
     base >= 3 && <5
 
-  GHC-Prof-Options: -fprof-auto -rtsopts
+  Default-Language: Haskell98
+  GHC-Prof-Options: -rtsopts
   GHC-Options:    -Wall
   Hs-Source-Dirs: src
   Main-Is:        Main.hs
diff --git a/src/Main.hs b/src/Main.hs
--- a/src/Main.hs
+++ b/src/Main.hs
@@ -6,7 +6,7 @@
 
 import qualified Sound.SoxLib as SoxLib
 
-import qualified Distribution.Simple.Utils as Shell
+import qualified Shell.Utility.Log as Shell
 
 import qualified PathFormat as PathFmt
 import qualified System.IO.Temp as Temp
diff --git a/src/Option.hs b/src/Option.hs
--- a/src/Option.hs
+++ b/src/Option.hs
@@ -1,8 +1,7 @@
 module Option where
 
-import qualified Distribution.Verbosity as Verbosity
-import qualified Distribution.ReadE as ReadE
-import Distribution.Verbosity (Verbosity)
+import qualified Shell.Utility.Verbosity as Verbosity
+import Shell.Utility.Verbosity (Verbosity)
 
 import qualified PathFormat as PathFmt
 import qualified System.Path.PartClass as PathC
@@ -101,15 +100,10 @@
       "Automatically perform 'decompose', 'associate', 'adjacent', 'compose'"
 
 
-optionVerbosity :: OP.ReadM Verbosity
-optionVerbosity =
-   either OP.readerError return
-      . ReadE.runReadE Verbosity.flagToVerbosity =<< OP.str
-
 parseFlags :: Parser T
 parseFlags =
    pure Cons
-    <*> option optionVerbosity
+    <*> option (OP.eitherReader Verbosity.parse)
            ( OP.value Verbosity.normal
           <> short 'v'
           <> long "verbose"
diff --git a/src/SoundCollage.hs b/src/SoundCollage.hs
--- a/src/SoundCollage.hs
+++ b/src/SoundCollage.hs
@@ -65,8 +65,8 @@
 import qualified Data.StorableVector as SV
 import Foreign.Storable (Storable, peek, sizeOf, )
 
-import qualified Distribution.Simple.Utils as Shell
-import Distribution.Verbosity (Verbosity)
+import qualified Shell.Utility.Log as Shell
+import Shell.Utility.Verbosity (Verbosity)
 
 import qualified PathFormat as PathFmt
 import qualified System.Path.Directory as Dir
