diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,11 +1,18 @@
 
-# Changelog for ELynx
+# Revision history for ELynx
 
 
 ## Unreleased changes
 
+-   Improve rooting functions.
+-   Improve `Topology` data type (but still a lot to do).
+-   Various additions to the documentation.
+-   Rename `Measurable` to `HasLength`, `Supported` to `HasSupport`, and `Named`
+    to `HasLength`.
+-   Cabal and stack file changes.
 
-## Version 0.5.0
+
+## Version 0.5.0.1
 
 -   `modLen`, `modSup`.
 -   Newtype wrappers for branch length, branch support, and node name. Those data
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
 
 # The ELynx Suite
 
-Version: 0.5.0.
+Version: 0.5.0.1.
 Reproducible evolution made easy.
 
 <p align="center"><img src="https://travis-ci.org/dschrempf/elynx.svg?branch=master"/></p>
@@ -19,18 +19,20 @@
 
 The library packages are:
 
--   **elynx-nexus:** Nexus file support.
--   **elynx-markov:** Simulate multi sequence alignments along phylogenetic trees.
--   **elynx-seq:** Handle evolutionary sequences and multi sequence alignments.
--   **elynx-tools:** Tools for the provided executables.
--   **elynx-tree:** Handle phylogenetic trees.
+-   **[elynx-nexus](https://hackage.haskell.org/package/elynx-nexus):** Nexus file support.
+-   **[elynx-markov](https://hackage.haskell.org/package/elynx-markov):** Simulate multi sequence alignments along phylogenetic trees.
+-   **[elynx-seq](https://hackage.haskell.org/package/elynx-seq):** Handle evolutionary sequences and multi sequence alignments.
+-   **[elynx-tools](https://hackage.haskell.org/package/elynx-tools):** Tools for the provided executables.
+-   **[elynx-tree](https://hackage.haskell.org/package/elynx-tree):** Handle phylogenetic trees.
 
 The executables are:
 
--   **slynx:** Analyze, modify, and simulate evolutionary sequences.
--   **tlynx:** Analyze, modify, and simulate phylogenetic trees.
--   **elynx:** Validate and redo past analyses.
+-   **[slynx](https://hackage.haskell.org/package/slynx):** Analyze, modify, and simulate evolutionary sequences.
+-   **[tlynx](https://hackage.haskell.org/package/tlynx):** Analyze, modify, and simulate phylogenetic trees.
+-   **[elynx](https://hackage.haskell.org/package/elynx):** Validate and redo past analyses.
 
+Documentation is available on [Hackage](https://hackage.haskell.org/) (use direct links above).
+
 **ELynx is actively developed. We happily receive comments, ideas, feature
 requests, and pull requests!**
 
@@ -65,34 +67,15 @@
     [PATH](https://en.wikipedia.org/wiki/PATH_(variable)) environment variable. Then, they can be used directly.
 
 
-# Documentation
-
-Documentation is available on [Hackage](https://hackage.haskell.org/).
-
-Libraries:
-
--   [elynx-nexus](https://hackage.haskell.org/package/elynx-nexus)
--   [elynx-markov](https://hackage.haskell.org/package/elynx-markov)
--   [elynx-seq](https://hackage.haskell.org/package/elynx-seq)
--   [elynx-tools](https://hackage.haskell.org/package/elynx-tools)
--   [elynx-tree](https://hackage.haskell.org/package/elynx-tree)
-
-Executables:
-
--   [elynx](https://hackage.haskell.org/package/elynx)
--   [slynx](https://hackage.haskell.org/package/slynx)
--   [tlynx](https://hackage.haskell.org/package/tlynx)
-
-
 # SLynx
 
 Handle evolutionary sequences.
 
     slynx --help | head -n -16
 
-    ELynx Suite version 0.5.0.
+    ELynx Suite version 0.5.0.1.
     Developed by Dominik Schrempf.
-    Compiled on November 10, 2020, at 14:29 pm, UTC.
+    Compiled on December 18, 2020, at 10:14 am, UTC.
     
     Usage: slynx [-v|--verbosity VALUE] [-o|--output-file-basename NAME] 
                  [-f|--force] [--no-elynx-file] COMMAND
@@ -137,9 +120,9 @@
 
     slynx concatenate --help
 
-    ELynx Suite version 0.5.0.
+    ELynx Suite version 0.5.0.1.
     Developed by Dominik Schrempf.
-    Compiled on November 10, 2020, at 14:29 pm, UTC.
+    Compiled on December 18, 2020, at 10:14 am, UTC.
     
     Usage: slynx concatenate (-a|--alphabet NAME) INPUT-FILE
       Concatenate sequences found in input files.
@@ -158,9 +141,9 @@
 
     slynx examine --help
 
-    ELynx Suite version 0.5.0.
+    ELynx Suite version 0.5.0.1.
     Developed by Dominik Schrempf.
-    Compiled on November 10, 2020, at 14:29 pm, UTC.
+    Compiled on December 18, 2020, at 10:14 am, UTC.
     
     Usage: slynx examine (-a|--alphabet NAME) INPUT-FILE [--per-site]
       Examine sequences. If data is a multi sequence alignment, additionally analyze columns.
@@ -180,9 +163,9 @@
 
     slynx filter-rows --help
 
-    ELynx Suite version 0.5.0.
+    ELynx Suite version 0.5.0.1.
     Developed by Dominik Schrempf.
-    Compiled on November 10, 2020, at 14:29 pm, UTC.
+    Compiled on December 18, 2020, at 10:14 am, UTC.
     
     Usage: slynx filter-rows (-a|--alphabet NAME) INPUT-FILE [--longer-than LENGTH] 
                              [--shorter-than LENGTH] [--standard-characters]
@@ -203,9 +186,9 @@
 
     slynx filter-columns --help
 
-    ELynx Suite version 0.5.0.
+    ELynx Suite version 0.5.0.1.
     Developed by Dominik Schrempf.
-    Compiled on November 10, 2020, at 14:29 pm, UTC.
+    Compiled on December 18, 2020, at 10:14 am, UTC.
     
     Usage: slynx filter-columns (-a|--alphabet NAME) INPUT-FILE 
                                 [--standard-chars DOUBLE]
@@ -227,9 +210,9 @@
 
     slynx simulate --help
 
-    ELynx Suite version 0.5.0.
+    ELynx Suite version 0.5.0.1.
     Developed by Dominik Schrempf.
-    Compiled on November 10, 2020, at 14:29 pm, UTC.
+    Compiled on December 18, 2020, at 10:14 am, UTC.
     
     Usage: slynx simulate (-t|--tree-file Name) [-s|--substitution-model MODEL] 
                           [-m|--mixture-model MODEL] [-e|--edm-file NAME] 
@@ -306,9 +289,9 @@
 
     slynx sub-sample --help
 
-    ELynx Suite version 0.5.0.
+    ELynx Suite version 0.5.0.1.
     Developed by Dominik Schrempf.
-    Compiled on November 10, 2020, at 14:29 pm, UTC.
+    Compiled on December 18, 2020, at 10:14 am, UTC.
     
     Usage: slynx sub-sample (-a|--alphabet NAME) INPUT-FILE
                             (-n|--number-of-sites INT)
@@ -336,9 +319,9 @@
 
     slynx translate --help
 
-    ELynx Suite version 0.5.0.
+    ELynx Suite version 0.5.0.1.
     Developed by Dominik Schrempf.
-    Compiled on November 10, 2020, at 14:29 pm, UTC.
+    Compiled on December 18, 2020, at 10:14 am, UTC.
     
     Usage: slynx translate (-a|--alphabet NAME) INPUT-FILE (-r|--reading-frame INT)
                            (-u|--universal-code CODE)
@@ -361,9 +344,9 @@
 
     tlynx --help | head -n -16
 
-    ELynx Suite version 0.5.0.
+    ELynx Suite version 0.5.0.1.
     Developed by Dominik Schrempf.
-    Compiled on November 10, 2020, at 14:29 pm, UTC.
+    Compiled on December 18, 2020, at 10:14 am, UTC.
     
     Usage: tlynx [-v|--verbosity VALUE] [-o|--output-file-basename NAME] 
                  [-f|--force] [--no-elynx-file] COMMAND
@@ -401,9 +384,9 @@
 
     tlynx compare --help
 
-    ELynx Suite version 0.5.0.
+    ELynx Suite version 0.5.0.1.
     Developed by Dominik Schrempf.
-    Compiled on November 10, 2020, at 14:29 pm, UTC.
+    Compiled on December 18, 2020, at 10:14 am, UTC.
     
     Usage: tlynx compare [-n|--normalize] [-b|--bipartitions] [-t|--intersect] 
                          [-f|--newick-format FORMAT] NAMES
@@ -430,9 +413,9 @@
 
     tlynx examine --help
 
-    ELynx Suite version 0.5.0.
+    ELynx Suite version 0.5.0.1.
     Developed by Dominik Schrempf.
-    Compiled on November 10, 2020, at 14:29 pm, UTC.
+    Compiled on December 18, 2020, at 10:14 am, UTC.
     
     Usage: tlynx examine INPUT-FILE [-f|--newick-format FORMAT]
       Compute summary statistics of phylogenetic trees.
@@ -454,9 +437,9 @@
 
     tlynx simulate --help
 
-    ELynx Suite version 0.5.0.
+    ELynx Suite version 0.5.0.1.
     Developed by Dominik Schrempf.
-    Compiled on November 10, 2020, at 14:29 pm, UTC.
+    Compiled on December 18, 2020, at 10:14 am, UTC.
     
     Usage: tlynx simulate (-t|--nTrees INT) (-n|--nLeaves INT) PROCESS 
                           [-u|--sub-sample DOUBLE] [-s|--summary-statistics] 
@@ -491,9 +474,9 @@
 
     elynx --help | head -n -16
 
-    ELynx Suite version 0.5.0.
+    ELynx Suite version 0.5.0.1.
     Developed by Dominik Schrempf.
-    Compiled on November 10, 2020, at 14:29 pm, UTC.
+    Compiled on December 18, 2020, at 10:14 am, UTC.
     
     Usage: elynx COMMAND
       Validate and redo past ELynx analyses
diff --git a/elynx-markov.cabal b/elynx-markov.cabal
--- a/elynx-markov.cabal
+++ b/elynx-markov.cabal
@@ -1,18 +1,19 @@
-cabal-version:  2.2
-name:           elynx-markov
-version:        0.5.0
-synopsis:       Simulate molecular sequences along trees
-description:    Examine, modify, and simulate molecular sequences in a reproducible way. Please see the README on GitHub at <https://github.com/dschrempf/elynx>.
-category:       Bioinformatics
-homepage:       https://github.com/dschrempf/elynx#readme
-bug-reports:    https://github.com/dschrempf/elynx/issues
-author:         Dominik Schrempf
-maintainer:     dominik.schrempf@gmail.com
-copyright:      Dominik Schrempf (2020)
-license:        GPL-3.0-or-later
-license-file:   LICENSE
-build-type:     Simple
+cabal-version:      2.2
+name:               elynx-markov
+version:            0.5.0.1
+license:            GPL-3.0-or-later
+license-file:       LICENSE
+copyright:          Dominik Schrempf (2020)
+maintainer:         dominik.schrempf@gmail.com
+author:             Dominik Schrempf
+homepage:           https://github.com/dschrempf/elynx#readme
+bug-reports:        https://github.com/dschrempf/elynx/issues
+synopsis:           Simulate molecular sequences along trees
+description:
+    Examine, modify, and simulate molecular sequences in a reproducible way. Please see the README on GitHub at <https://github.com/dschrempf/elynx>.
 
+category:           Bioinformatics
+build-type:         Simple
 extra-source-files:
     README.md
     ChangeLog.md
@@ -22,69 +23,67 @@
     data/HSSPSingle.siteprofiles
 
 source-repository head
-  type: git
-  location: https://github.com/dschrempf/elynx
+    type:     git
+    location: https://github.com/dschrempf/elynx
 
 library
-  exposed-modules:
-      ELynx.Data.MarkovProcess.AminoAcid
-      ELynx.Data.MarkovProcess.CXXModels
-      ELynx.Data.MarkovProcess.CXXModelsData
-      ELynx.Data.MarkovProcess.GammaRateHeterogeneity
-      ELynx.Data.MarkovProcess.MixtureModel
-      ELynx.Data.MarkovProcess.Nucleotide
-      ELynx.Data.MarkovProcess.PhyloModel
-      ELynx.Data.MarkovProcess.RateMatrix
-      ELynx.Data.MarkovProcess.SubstitutionModel
-      ELynx.Import.MarkovProcess.EDMModelPhylobayes
-      ELynx.Import.MarkovProcess.SiteprofilesPhylobayes
-      ELynx.Simulate.MarkovProcess
-      ELynx.Simulate.MarkovProcessAlongTree
-  other-modules:
-      Paths_elynx_markov
-  autogen-modules:
-      Paths_elynx_markov
-  hs-source-dirs:
-      src
-  ghc-options: -Wall
-  build-depends:
-      async
-    , attoparsec
-    , base >=4.7 && <5
-    , bytestring
-    , containers
-    , elynx-seq
-    , hmatrix
-    , integration
-    , math-functions
-    , mwc-random
-    , parallel
-    , primitive
-    , statistics
-    , vector
-  default-language: Haskell2010
+    exposed-modules:
+        ELynx.Data.MarkovProcess.AminoAcid
+        ELynx.Data.MarkovProcess.CXXModels
+        ELynx.Data.MarkovProcess.CXXModelsData
+        ELynx.Data.MarkovProcess.GammaRateHeterogeneity
+        ELynx.Data.MarkovProcess.MixtureModel
+        ELynx.Data.MarkovProcess.Nucleotide
+        ELynx.Data.MarkovProcess.PhyloModel
+        ELynx.Data.MarkovProcess.RateMatrix
+        ELynx.Data.MarkovProcess.SubstitutionModel
+        ELynx.Import.MarkovProcess.EDMModelPhylobayes
+        ELynx.Import.MarkovProcess.SiteprofilesPhylobayes
+        ELynx.Simulate.MarkovProcess
+        ELynx.Simulate.MarkovProcessAlongTree
 
+    hs-source-dirs:   src
+    other-modules:    Paths_elynx_markov
+    autogen-modules:  Paths_elynx_markov
+    default-language: Haskell2010
+    ghc-options:      -Wall -Wunused-packages
+    build-depends:
+        async >=2.2.2 && <2.3,
+        attoparsec >=0.13.2.4 && <0.14,
+        base >=4.7 && <5,
+        bytestring >=0.10.10.0 && <0.11,
+        containers >=0.6.2.1 && <0.7,
+        elynx-seq >=0.5.0.1 && <0.6,
+        hmatrix >=0.20.0.0 && <0.21,
+        integration >=0.2.1 && <0.3,
+        math-functions >=0.3.4.1 && <0.4,
+        mwc-random >=0.14.0.0 && <0.15,
+        parallel >=3.2.2.0 && <3.3,
+        primitive >=0.7.1.0 && <0.8,
+        statistics >=0.15.2.0 && <0.16,
+        vector >=0.12.1.2 && <0.13
+
 test-suite markov-test
-  type: exitcode-stdio-1.0
-  main-is: Spec.hs
-  other-modules:
-      ELynx.Data.MarkovProcess.AminoAcidSpec
-      ELynx.Data.MarkovProcess.NucleotideSpec
-      ELynx.Data.MarkovProcess.RateMatrixSpec
-      ELynx.Import.MarkovProcess.EDMModelPhylobayesSpec
-      ELynx.Import.MarkovProcess.SiteprofilesPhylobayesSpec
-      ELynx.Simulate.MarkovProcessAlongTreeSpec
-      Paths_elynx_markov
-  hs-source-dirs:
-      test
-  ghc-options: -Wall
-  build-depends:
-      base >=4.7 && <5
-    , containers
-    , elynx-markov
-    , elynx-tools
-    , hmatrix
-    , hspec
-    , mwc-random
-    , vector
-  default-language: Haskell2010
+    type:             exitcode-stdio-1.0
+    main-is:          Spec.hs
+    hs-source-dirs:   test
+    other-modules:
+        ELynx.Data.MarkovProcess.AminoAcidSpec
+        ELynx.Data.MarkovProcess.NucleotideSpec
+        ELynx.Data.MarkovProcess.RateMatrixSpec
+        ELynx.Import.MarkovProcess.EDMModelPhylobayesSpec
+        ELynx.Import.MarkovProcess.SiteprofilesPhylobayesSpec
+        ELynx.Simulate.MarkovProcessAlongTreeSpec
+        Paths_elynx_markov
+
+    default-language: Haskell2010
+    ghc-options:      -Wall -Wunused-packages
+    build-depends:
+        base >=4.7 && <5,
+        containers >=0.6.2.1 && <0.7,
+        elynx-markov -any,
+        elynx-tools >=0.5.0.1 && <0.6,
+        hmatrix >=0.20.0.0 && <0.21,
+        hspec >=2.7.4 && <2.8,
+        mwc-random >=0.14.0.0 && <0.15,
+        vector >=0.12.1.2 && <0.13
diff --git a/src/ELynx/Simulate/MarkovProcess.hs b/src/ELynx/Simulate/MarkovProcess.hs
--- a/src/ELynx/Simulate/MarkovProcess.hs
+++ b/src/ELynx/Simulate/MarkovProcess.hs
@@ -41,12 +41,10 @@
   | otherwise = expm $ scale t q
 
 -- | Move from a given state to a new one according to a transition probability
--- matrix (for performance reasons this probability matrix needs to be given as
--- a list of generators, see
--- https://hackage.haskell.org/package/distribution-1.1.0.0/docs/Data-Distribution-Sample.html).
+-- matrix .
+--
 -- This function is the bottleneck of the simulator and takes up most of the
--- computation time. However, I was not able to find a faster implementation
--- than the one from Data.Distribution.
+-- computation time.
 jump :: (PrimMonad m) => State -> ProbMatrix -> Gen (PrimState m) -> m State
 jump i p = categorical (p ! i)
 
diff --git a/src/ELynx/Simulate/MarkovProcessAlongTree.hs b/src/ELynx/Simulate/MarkovProcessAlongTree.hs
--- a/src/ELynx/Simulate/MarkovProcessAlongTree.hs
+++ b/src/ELynx/Simulate/MarkovProcessAlongTree.hs
@@ -71,7 +71,8 @@
   simulateAndFlatten' is pt g
 
 -- This is the heart of the simulation. Take a tree and a list of root states.
--- Recursively jump down the branches to the leafs. Forget states at internal.
+-- Recursively jump down the branches to the leafs. Forget states at internal
+-- nodes.
 simulateAndFlatten' ::
   (PrimMonad m) =>
   [State] ->
