diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -5,6 +5,12 @@
 ## Unreleased changes
 
 
+## Version 0.4.0
+
+-   Major refactor of `elynx-tree`. All required function can now conveniently
+    reexported by `ELynx.Tree`.
+
+
 ## Version 0.3.4
 
 -   Improve `slynx examine`; show hamming distance; show constant sites.
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
 
 # The ELynx Suite
 
-Version: 0.3.4.
+Version: 0.4.0.
 Reproducible evolution made easy.
 
 <p align="center"><img src="https://travis-ci.org/dschrempf/elynx.svg?branch=master"/></p>
@@ -90,9 +90,9 @@
 
     slynx --help | head -n -16
 
-    ELynx Suite version 0.3.4.
+    ELynx Suite version 0.4.0.
     Developed by Dominik Schrempf.
-    Compiled on August 21, 2020, at 09:40 am, UTC.
+    Compiled on September 4, 2020, at 13:37 pm, UTC.
     
     Usage: slynx [-v|--verbosity VALUE] [-o|--output-file-basename NAME] 
                  [-f|--force] COMMAND
@@ -136,9 +136,9 @@
 
     slynx concatenate --help
 
-    ELynx Suite version 0.3.4.
+    ELynx Suite version 0.4.0.
     Developed by Dominik Schrempf.
-    Compiled on August 21, 2020, at 09:40 am, UTC.
+    Compiled on September 4, 2020, at 13:37 pm, UTC.
     
     Usage: slynx concatenate (-a|--alphabet NAME) INPUT-FILE
       Concatenate sequences found in input files.
@@ -157,9 +157,9 @@
 
     slynx examine --help
 
-    ELynx Suite version 0.3.4.
+    ELynx Suite version 0.4.0.
     Developed by Dominik Schrempf.
-    Compiled on August 21, 2020, at 09:40 am, UTC.
+    Compiled on September 4, 2020, at 13:37 pm, UTC.
     
     Usage: slynx examine (-a|--alphabet NAME) INPUT-FILE [--per-site]
       Examine sequences. If data is a multi sequence alignment, additionally analyze columns.
@@ -179,9 +179,9 @@
 
     slynx filter-rows --help
 
-    ELynx Suite version 0.3.4.
+    ELynx Suite version 0.4.0.
     Developed by Dominik Schrempf.
-    Compiled on August 21, 2020, at 09:40 am, UTC.
+    Compiled on September 4, 2020, at 13:37 pm, UTC.
     
     Usage: slynx filter-rows (-a|--alphabet NAME) INPUT-FILE [--longer-than LENGTH] 
                              [--shorter-than LENGTH] [--standard-characters]
@@ -202,9 +202,9 @@
 
     slynx filter-columns --help
 
-    ELynx Suite version 0.3.4.
+    ELynx Suite version 0.4.0.
     Developed by Dominik Schrempf.
-    Compiled on August 21, 2020, at 09:40 am, UTC.
+    Compiled on September 4, 2020, at 13:37 pm, UTC.
     
     Usage: slynx filter-columns (-a|--alphabet NAME) INPUT-FILE 
                                 [--standard-chars DOUBLE]
@@ -226,9 +226,9 @@
 
     slynx simulate --help
 
-    ELynx Suite version 0.3.4.
+    ELynx Suite version 0.4.0.
     Developed by Dominik Schrempf.
-    Compiled on August 21, 2020, at 09:40 am, UTC.
+    Compiled on September 4, 2020, at 13:37 pm, UTC.
     
     Usage: slynx simulate (-t|--tree-file Name) [-s|--substitution-model MODEL] 
                           [-m|--mixture-model MODEL] [-e|--edm-file NAME] 
@@ -305,9 +305,9 @@
 
     slynx sub-sample --help
 
-    ELynx Suite version 0.3.4.
+    ELynx Suite version 0.4.0.
     Developed by Dominik Schrempf.
-    Compiled on August 21, 2020, at 09:40 am, UTC.
+    Compiled on September 4, 2020, at 13:37 pm, UTC.
     
     Usage: slynx sub-sample (-a|--alphabet NAME) INPUT-FILE
                             (-n|--number-of-sites INT)
@@ -335,9 +335,9 @@
 
     slynx translate --help
 
-    ELynx Suite version 0.3.4.
+    ELynx Suite version 0.4.0.
     Developed by Dominik Schrempf.
-    Compiled on August 21, 2020, at 09:40 am, UTC.
+    Compiled on September 4, 2020, at 13:37 pm, UTC.
     
     Usage: slynx translate (-a|--alphabet NAME) INPUT-FILE (-r|--reading-frame INT)
                            (-u|--universal-code CODE)
@@ -360,9 +360,9 @@
 
     tlynx --help | head -n -16
 
-    ELynx Suite version 0.3.4.
+    ELynx Suite version 0.4.0.
     Developed by Dominik Schrempf.
-    Compiled on August 21, 2020, at 09:40 am, UTC.
+    Compiled on September 4, 2020, at 13:37 pm, UTC.
     
     Usage: tlynx [-v|--verbosity VALUE] [-o|--output-file-basename NAME] 
                  [-f|--force] COMMAND
@@ -398,9 +398,9 @@
 
     tlynx compare --help
 
-    ELynx Suite version 0.3.4.
+    ELynx Suite version 0.4.0.
     Developed by Dominik Schrempf.
-    Compiled on August 21, 2020, at 09:40 am, UTC.
+    Compiled on September 4, 2020, at 13:37 pm, UTC.
     
     Usage: tlynx compare [-n|--normalize] [-b|--bipartitions] [-t|--intersect] 
                          [-f|--newick-format FORMAT] NAMES
@@ -427,9 +427,9 @@
 
     tlynx examine --help
 
-    ELynx Suite version 0.3.4.
+    ELynx Suite version 0.4.0.
     Developed by Dominik Schrempf.
-    Compiled on August 21, 2020, at 09:40 am, UTC.
+    Compiled on September 4, 2020, at 13:37 pm, UTC.
     
     Usage: tlynx examine INPUT-FILE [-f|--newick-format FORMAT]
       Compute summary statistics of phylogenetic trees.
@@ -451,9 +451,9 @@
 
     tlynx simulate --help
 
-    ELynx Suite version 0.3.4.
+    ELynx Suite version 0.4.0.
     Developed by Dominik Schrempf.
-    Compiled on August 21, 2020, at 09:40 am, UTC.
+    Compiled on September 4, 2020, at 13:37 pm, UTC.
     
     Usage: tlynx simulate (-t|--nTrees INT) (-n|--nLeaves INT) PROCESS 
                           [-u|--sub-sample DOUBLE] [-s|--summary-statistics] 
@@ -488,9 +488,9 @@
 
     elynx --help | head -n -16
 
-    ELynx Suite version 0.3.4.
+    ELynx Suite version 0.4.0.
     Developed by Dominik Schrempf.
-    Compiled on August 21, 2020, at 09:40 am, UTC.
+    Compiled on September 4, 2020, at 13:37 pm, UTC.
     
     Usage: elynx COMMAND
       Validate and redo past ELynx analyses
diff --git a/src/TLynx/Compare/Compare.hs b/src/TLynx/Compare/Compare.hs
--- a/src/TLynx/Compare/Compare.hs
+++ b/src/TLynx/Compare/Compare.hs
@@ -29,9 +29,7 @@
 import qualified Data.Text as T
 import qualified Data.Text.Encoding as E
 import qualified Data.Text.IO as T
-import ELynx.Data.Tree
-import ELynx.Export.Tree.Newick (toNewick)
-import ELynx.Import.Tree.Newick
+import ELynx.Tree
 import ELynx.Tools
   ( Arguments (..),
     ELynx,
diff --git a/src/TLynx/Connect/Connect.hs b/src/TLynx/Connect/Connect.hs
--- a/src/TLynx/Connect/Connect.hs
+++ b/src/TLynx/Connect/Connect.hs
@@ -23,12 +23,7 @@
 import qualified Data.ByteString.Char8 as BS
 import qualified Data.ByteString.Lazy.Char8 as BL
 import qualified Data.Set as S
-import ELynx.Data.Tree
-import ELynx.Export.Tree.Newick (toNewick)
-import ELynx.Import.Tree.Newick
-  ( oneNewick,
-    someNewick,
-  )
+import ELynx.Tree
 import ELynx.Tools
   ( Arguments (..),
     ELynx,
diff --git a/src/TLynx/Distance/Distance.hs b/src/TLynx/Distance/Distance.hs
--- a/src/TLynx/Distance/Distance.hs
+++ b/src/TLynx/Distance/Distance.hs
@@ -40,9 +40,7 @@
 import qualified Data.Text.Lazy as LT
 import qualified Data.Text.Lazy.Encoding as LT
 import qualified Data.Vector.Unboxed as V
-import ELynx.Data.Tree
-import ELynx.Export.Tree.Newick
-import ELynx.Import.Tree.Newick
+import ELynx.Tree
 import ELynx.Tools
 import Statistics.Sample
 import System.IO
diff --git a/src/TLynx/Examine/Examine.hs b/src/TLynx/Examine/Examine.hs
--- a/src/TLynx/Examine/Examine.hs
+++ b/src/TLynx/Examine/Examine.hs
@@ -25,8 +25,7 @@
 import Data.Containers.ListUtils (nubOrd)
 import Data.List ((\\))
 import qualified Data.Text as T
-import ELynx.Data.Tree
-import ELynx.Import.Tree.Newick
+import ELynx.Tree
 import ELynx.Tools
 import System.IO
   ( Handle,
diff --git a/src/TLynx/Parsers.hs b/src/TLynx/Parsers.hs
--- a/src/TLynx/Parsers.hs
+++ b/src/TLynx/Parsers.hs
@@ -17,7 +17,7 @@
 where
 
 import Data.List (intercalate)
-import ELynx.Import.Tree.Newick
+import ELynx.Tree
   ( NewickFormat (..),
     description,
   )
diff --git a/src/TLynx/Shuffle/Shuffle.hs b/src/TLynx/Shuffle/Shuffle.hs
--- a/src/TLynx/Shuffle/Shuffle.hs
+++ b/src/TLynx/Shuffle/Shuffle.hs
@@ -26,10 +26,8 @@
 import Control.Monad.Logger (logDebug, logInfo)
 import Control.Monad.Trans.Reader (ask)
 import qualified Data.ByteString.Lazy.Char8 as BL
-import ELynx.Data.Tree
-import ELynx.Export.Tree.Newick (toNewick)
-import ELynx.Import.Tree.Newick (oneNewick)
-import ELynx.Simulate.PointProcess
+import ELynx.Tree
+import ELynx.Tree.Simulate.PointProcess
   ( PointProcess (PointProcess),
     toReconstructedTree,
   )
diff --git a/src/TLynx/Simulate/Simulate.hs b/src/TLynx/Simulate/Simulate.hs
--- a/src/TLynx/Simulate/Simulate.hs
+++ b/src/TLynx/Simulate/Simulate.hs
@@ -22,7 +22,6 @@
 -- Elsevier BV, 2009, 261, 58-66
 module TLynx.Simulate.Simulate
   ( simulate,
-    nSubSamples,
   )
 where
 
@@ -44,10 +43,9 @@
 import qualified Data.Text as T
 import qualified Data.Text.Lazy as LT
 import qualified Data.Text.Lazy.Encoding as LT
-import ELynx.Data.Tree
-import ELynx.Export.Tree.Newick
-import qualified ELynx.Simulate.Coalescent as CS
-import qualified ELynx.Simulate.PointProcess as PP
+import ELynx.Tree
+import qualified ELynx.Tree.Simulate.Coalescent as CS
+import qualified ELynx.Tree.Simulate.PointProcess as PP
 import ELynx.Tools
 import System.Random.MWC
 import TLynx.Simulate.Options
diff --git a/tlynx.cabal b/tlynx.cabal
--- a/tlynx.cabal
+++ b/tlynx.cabal
@@ -1,6 +1,6 @@
 cabal-version:  2.2
 name:           tlynx
-version:        0.3.4
+version:        0.4.0
 synopsis:       Handle phylogenetic trees
 description:    Examine, compare, and simulate phylogenetic trees in a reproducible way. Please see the README on GitHub at <https://github.com/dschrempf/elynx>.
 category:       Bioinformatics
