diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,14 @@
+# Revision history for chatty
+
+## 0.8.0.0 -- 2021-01-04
+
+Purged many modules from 0.7.0.0 that encouraged antipatterns and were far away from the original core idea of chatty. Affected modules.
+
+ * System.Chatty.Commands
+ * System.Chatty.Filesystem
+ * System.Chatty.Misc
+ * System.Chatty.Spawn
+ * System.Chatty.Spawn.Builtins
+ * System.Chatty.Spawn.Overlay
+ 
+ More removals will follow later.
diff --git a/System/Chatty/Commands.hs b/System/Chatty/Commands.hs
deleted file mode 100644
--- a/System/Chatty/Commands.hs
+++ /dev/null
@@ -1,95 +0,0 @@
-{-# LANGUAGE FlexibleInstances, Safe #-}
-
-{-
-  This module is part of Chatty.
-  Copyleft (c) 2014 Marvin Cohrs
-
-  All wrongs reversed. Sharing is an act of love, not crime.
-  Please share Antisplice with everyone you like.
-
-  Chatty is free software: you can redistribute it and/or modify
-  it under the terms of the GNU Affero General Public License as published by
-  the Free Software Foundation, either version 3 of the License, or
-  (at your option) any later version.
-
-  Chatty is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-  GNU Affero General Public License for more details.
-
-  You should have received a copy of the GNU Affero General Public License
-  along with Chatty. If not, see <http://www.gnu.org/licenses/>.
--}
-
--- | Provides in-haskell implementations for some standard functions
-module System.Chatty.Commands where
-
-import Text.Chatty.Printer
-import Text.Chatty.Scanner
-import Text.Chatty.Interactor
-import Text.Chatty.Finalizer
-import Text.Chatty.Expansion
-import Control.Monad
-import Control.Monad.Trans.Class
-import Control.Monad.IO.Class
-import System.IO
-import System.Directory
-import System.Posix.Files
-
--- | Like 'cat' on the command line. Accepts a list of filenames. Simple pass-through, if none are provided.
-cat :: (ChScanner m, ChPrinter m, MonadIO m,Functor m,ChFinalizer m) => [String] -> m ()
-cat [] = mscanL >>= mprint
-cat [f] = cat [] .<. f
-cat (f:fs) = cat [f] >> cat fs
-
--- | Like 'cat', but reverses the line order.
-tac :: (ChFinalizer m,ChScanner m, ChPrinter m, MonadIO m,Functor m) => [String] -> m ()
-tac [] = mscanL >>= (mprint . unlines . reverse . lines)
-tac fs = cat fs .|. tac []
-
--- | Pass-through, simultanously writing all input to a given file.
-tee :: (ChScanner m, ChPrinter m, MonadIO m, Functor m) => String -> m ()
-tee f = do
-  s <- mscanL
-  mprint s .>. f
-  mprint s
-
--- | Prints the given string, after expanding it.
-echo :: (ChPrinter m,ChExpand m) => String -> m ()
-echo = mprintLn <=< expand
-
--- | Mode for 'wc'.
-data WcMode = CountChars | CountLines | CountWords
-
--- | Count characters, lines or words of the input.
-wc :: (ChScanner m, ChPrinter m, MonadIO m, Functor m) => WcMode -> m ()
-wc CountChars = mscanL >>= (mprint . show . length) >> mprint "\n"
-wc CountLines = mscanL >>= (mprint . show . length . lines) >> mprint "\n"
-wc CountWords = mscanL >>= (mprint . show . length . words) >> mprint "\n"
-
--- | Change to given directory.
-cd :: MonadIO m => String -> m ()
-cd = liftIO . setCurrentDirectory
-
--- | Print current working directory.
-pwd :: (MonadIO m,ChPrinter m) => m ()
-pwd = liftIO getCurrentDirectory >>= mprintLn
-
--- | List directory contents of the given directories (current one, if empty list).
-ls :: (MonadIO m,ChPrinter m) => [String] -> m ()
-ls [] = liftIO (getDirectoryContents ".") >>= (mprint . unlines)
-ls [p] = do
-  fs <- liftIO $ getFileStatus p
-  when (isDirectory fs) $
-    liftIO (getDirectoryContents p) >>= (mprint . unlines)
-  when (isRegularFile fs) $
-    mprintLn p
-ls (p:ps) = ls [p] >> ls ps
-
--- | Filters only the first n lines of the input.
-head :: (ChScanner m,ChPrinter m,MonadIO m,Functor m) => Int -> m ()
-head n = mscanL >>= (mprint . unlines . take n . lines)
-
--- | FIlters only the last n lines of the input.
-tail :: (ChScanner m,ChPrinter m,MonadIO m,Functor m) => Int -> m ()
-tail n = mscanL >>= (mprint . unlines . reverse . take n . reverse . lines)
diff --git a/System/Chatty/Filesystem.hs b/System/Chatty/Filesystem.hs
deleted file mode 100644
--- a/System/Chatty/Filesystem.hs
+++ /dev/null
@@ -1,279 +0,0 @@
-{-# LANGUAGE MultiParamTypeClasses, FlexibleContexts, ExistentialQuantification, ScopedTypeVariables, Safe #-}
-{-
-  This module is part of Chatty.
-  Copyleft (c) 2014 Marvin Cohrs
-
-  All wrongs reversed. Sharing is an act of love, not crime.
-  Please share Antisplice with everyone you like.
-
-  Chatty is free software: you can redistribute it and/or modify
-  it under the terms of the GNU Affero General Public License as published by
-  the Free Software Foundation, either version 3 of the License, or
-  (at your option) any later version.
-
-  Chatty is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-  GNU Affero General Public License for more details.
-
-  You should have received a copy of the GNU Affero General Public License
-  along with Chatty. If not, see <http://www.gnu.org/licenses/>.
--}
-
-module System.Chatty.Filesystem where
-
-import Control.Applicative
-import Control.Arrow
-import Control.Monad
-import Control.Monad.State
-import Control.Monad.Identity
-import Data.Chatty.Atoms
-import Data.List
-import Data.Monoid
-import qualified Data.Text.IO as TIO
-import qualified Data.Text as T
-import Text.Chatty.Printer
-import Text.Chatty.Scanner
-
-data FSExec a = FSSucc a
-              | NoPermission
-              | NotFound
-
-data File m = File {
-    loadFun :: m (FSExec ()),
-    saveFun :: m (FSExec ()),
-    leftBehind :: String,
-    rightPending :: String
-  }
-newtype Path = MultiPath [PathSpec] deriving (Eq,Ord,Show)
-data PathSpec = Path PathRoot [PathSeg] deriving (Eq,Ord,Show)
-data PathRoot = Absolute | Relative deriving (Eq,Ord,Show)
-data PathSeg = SelParent | SelChild String deriving (Eq,Ord,Show)
-type FileA m = Atom (File m)
-
-data Mountpoint m = forall a. Mount {
-  subMounts :: [Mountpoint m],
-  mstate :: Atom a,
-  mpath :: Path,
-  mopen :: Path -> (Atom a, Path) -> m (FSExec (FileA m))
-  }
-
-class Monad m => ChFilesystem m where
-  fopen :: Path -> m (FSExec (FileA m))
-  fpwd :: m Path
-  fcd :: Path -> m ()
-
-class Monad m => CanLoad m n where
-  fload :: FileA n -> m (FSExec ())
-
-class Monad m => CanSave m n where
-  fsave :: FileA n -> m (FSExec ())
-
-class Monad m => CanMount m n where
-  fmount :: Mountpoint n -> m ()
-
-data FilePrinterT m a = FilePrinter { runFilePrinterT :: FileA m -> m a }
-data FileScannerT m a = FileScanner { runFileScannerT :: FileA m -> m a }
-
-instance Monad m => Monad (FilePrinterT m) where
-  return a = FilePrinter $ \_ -> return a
-  m >>= f = FilePrinter $ \d -> do a <- runFilePrinterT m d; runFilePrinterT (f a) d
-
-instance Monad m => Monad (FileScannerT m) where
-  return a = FileScanner $ \_ -> return a
-  m >>= f = FileScanner $ \d -> do a <- runFileScannerT m d; runFileScannerT (f a) d
-
-instance Functor f => Functor (FilePrinterT f) where
-  fmap f a = FilePrinter $ fmap f . runFilePrinterT a
-
-instance (Functor m, Monad m) => Applicative (FilePrinterT m) where
-  (<*>) = ap
-  pure = return
-
-instance Functor f => Functor (FileScannerT f) where
-  fmap f a = FileScanner $ fmap f . runFileScannerT a
-
-instance (Functor m, Monad m) => Applicative (FileScannerT m) where
-  (<*>) = ap
-  pure = return
-
-instance MonadTrans FilePrinterT where
-  lift m = FilePrinter $ \_ -> m
-
-instance MonadTrans FileScannerT where
-  lift m = FileScanner $ \_ -> m
-
-instance MonadIO m => MonadIO (FilePrinterT m) where
-  liftIO = lift . liftIO
-
-instance MonadIO m => MonadIO (FileScannerT m) where
-  liftIO = lift . liftIO
-
-instance ChAtoms m => ChPrinter (FilePrinterT m) where
-  mprint s = FilePrinter $ \d -> do
-    f <- getAtom d
-    putAtom d f{leftBehind=reverse (take (length s) $ rightPending f) ++ leftBehind f, rightPending=drop (length s) $ rightPending f}
-
-instance ChAtoms m => ChScanner (FileScannerT m) where
-  mscan1 = FileScanner $ \d -> do
-    f <- getAtom d
-    putAtom d f{leftBehind=head (rightPending f) : leftBehind f, rightPending=tail $ rightPending f}
-    return $ head $ rightPending f
-  mscanL = FileScanner $ liftM rightPending . getAtom
-  mscannable = FileScanner $ liftM (not . null . rightPending) . getAtom
-  mready = mscannable
-
-newtype NullFsT m a = NullFs { runNullFsT :: Path -> [Mountpoint (NullFsT m)] -> m (a, Path, [Mountpoint (NullFsT m)]) }
-
-instance Monad m => Monad (NullFsT m) where
-  return a = NullFs $ \p ms -> return (a,p,ms)
-  m >>= f = NullFs $ \p ms -> do (a,p',ms') <- runNullFsT m p ms; runNullFsT (f a) p' ms'
-
-instance Functor f => Functor (NullFsT f) where
-  fmap f a = NullFs $ \p ms -> fmap (\(a,p,ms) -> (f a,p,ms)) $ runNullFsT a p ms
-
-instance (Functor m, Monad m) => Applicative (NullFsT m) where
-  (<*>) = ap
-  pure = return
-  
-instance MonadTrans NullFsT where
-  lift m = NullFs $ \p ms -> do a <- m; return (a,p,ms)
-
-instance MonadIO m => MonadIO (NullFsT m) where
-  liftIO = lift . liftIO
-
-instance Monad m => ChFilesystem (NullFsT m) where
-  fpwd = NullFs $ \p ms -> return (p,p,ms)
-  fopen p = do
-    ap <- absPath p
-    p' <- NullFs $ \wd ms -> do
-      case filter (isPath . snd) $ map (\m -> (m,ap `cmpPath` mpath m)) ms of
-        [] -> return (NotFound, wd, ms)
-        (p:_) -> return (FSSucc p, wd, ms)
-    case p' of
-      FSSucc (Mount subs st pa op, p') -> op p' (st,pa)
-      NotFound -> return NotFound
-  fcd p = NullFs $ \_ ms -> return ((),p,ms)
-
-instance Monad m => CanMount (NullFsT m) (NullFsT m) where
-  fmount m = NullFs $ \p ms -> return ((),p,m:ms)
-
-absPath :: ChFilesystem m => Path -> m Path
-absPath (MultiPath ps) =
-  liftM (MultiPath . concat) $
-  forM ps $ \(Path r ps) -> case r of
-    Absolute -> return [Path Absolute $ rempar ps]
-    Relative -> do
-      MultiPath wds <- fpwd
-      return $ do
-        Path Absolute wd <- wds
-        return $ Path Absolute $ rempar (wd++ps)
-  where
-    rempar (SelChild _:SelParent:rem) = rempar rem
-    rempar (a:rem) = a : rempar rem
-    rempar [] = []
-
-cmpPath' :: [PathSeg] -> [PathSeg] -> Maybe [PathSeg]
-cmpPath' ps [] = Just ps
-cmpPath' (SelChild a:as) (SelChild b:bs) | a == b = cmpPath' as bs
-cmpPath' (SelParent:as) (SelParent:bs) = cmpPath' as bs
-cmpPath' _ _ = Nothing
-
-cmpPath :: Path -> Path -> Path
-cmpPath (MultiPath as) (MultiPath bs) = MultiPath $ do
-  Path Absolute a <- as
-  Path Absolute b <- bs
-  case a `cmpPath'` b of
-    Nothing -> []
-    Just p -> [Path Absolute p]
-
-isPath :: Path -> Bool
-isPath (MultiPath p) = not $ null p
-
-path :: String -> Path
-path [] = MultiPath []
-path ps =
-  let took s = takeWhile (/='/') s
-      left s = case drop (length $ took s) s of
-        [] -> []
-        (_:cs) -> cs
-      subparse [] = []
-      subparse s = case (took s, left s) of
-        ([], []) -> []
-        ([], l) -> subparse l
-        ("..", l) -> SelParent : subparse l
-        (".", l) -> subparse l
-        (t, l) -> SelChild t : subparse l
-  in case head ps of
-    '/' -> MultiPath [Path Absolute $ subparse $ tail ps]
-    _ -> MultiPath [Path Relative $ subparse ps]
-
-expandofs :: (ChAtoms m,ChFilesystem m) => m (Mountpoint m)
-expandofs = do
-  a <- newAtom
-  putAtom a []
-  return $ Mount [] a (MultiPath []) $ \(MultiPath p) (sta,pa) -> do
-    fa <- newAtom
-    let ld = do
-               st <- getAtom sta
-               case filter (\(MultiPath x,_) -> not $ null $ intersect x p) st of
-                 [] -> putAtom fa (File ld sv "" "") >> return (FSSucc ())
-                 (_,tx):_ -> putAtom fa (File ld sv "" tx) >> return (FSSucc ())
-        sv = do
-               st <- getAtom sta
-               fi <- getAtom fa
-               case filter (\(_,(MultiPath x,_)) -> not $ null $ intersect x p) $ zip [1..] st of
-                 [] -> do
-                   putAtom sta ((MultiPath p,reverse (leftBehind fi)++rightPending fi) : st)
-                   return (FSSucc ())
-                 (i,_):_ -> do
-                   putAtom sta (take i st ++ [(MultiPath p,reverse (leftBehind fi)++rightPending fi)] ++ drop (i+1) st)
-                   return (FSSucc ())
-    putAtom fa $ File ld sv "" ""
-    return $ FSSucc fa
-
-printerfs :: (ChPrinter m,ChAtoms m,ChFilesystem m) => m (Mountpoint m)
-printerfs = do
-  a <- newAtom
-  putAtom a ()
-  return $ Mount [] a (MultiPath []) $ \p _ -> do
-    fa <- newAtom
-    let ld = return $ FSSucc ()
-        sv = do
-          fi <- getAtom fa
-          mprint (reverse (leftBehind fi) ++ rightPending fi)
-          return $ FSSucc ()
-    putAtom fa $ File ld sv "" ""
-    return $ FSSucc fa
-
-iomapfs :: (MonadIO m,ChAtoms m) => String -> m (Mountpoint m)
-iomapfs fp = do
-  a <- newAtom
-  putAtom a ()
-  return $ Mount [] a (MultiPath []) $ \p _ -> do
-    fa <- newAtom
-    let ld = do
-          tx <- liftIO $ TIO.readFile fp
-          putAtom fa (File ld sv "" (T.unpack tx))
-          return $ FSSucc ()
-        sv = do
-          f <- getAtom fa
-          liftIO $ TIO.writeFile fp $ T.pack (reverse (leftBehind f)++rightPending f)
-          return $ FSSucc ()
-    putAtom fa $ File ld sv "" ""
-    return $ FSSucc fa
-
-mount :: (CanMount m m, ChAtoms m, ChFilesystem m) => m (Mountpoint m) -> Path -> m ()
-mount mpf p = do
-  mp <- mpf
-  fmount mp{mpath=p}
-
-withNullFs :: ChAtoms m => NullFsT m a -> m a
-withNullFs m = do
-  (a,_,_) <- runNullFsT m (path "/") []
-  return a
-
-withExpandoFs :: (ChAtoms m, ChAtoms (NullFsT m)) => NullFsT m a -> m a
-withExpandoFs m = withNullFs $ do
-  mount expandofs (path "/")
-  m
diff --git a/System/Chatty/Misc.hs b/System/Chatty/Misc.hs
deleted file mode 100644
--- a/System/Chatty/Misc.hs
+++ /dev/null
@@ -1,52 +0,0 @@
-{-# LANGUAGE Safe #-}
-
-{-
-  This module is part of Chatty.
-  Copyleft (c) 2014 Marvin Cohrs
-
-  All wrongs reversed. Sharing is an act of love, not crime.
-  Please share Antisplice with everyone you like.
-
-  Chatty is free software: you can redistribute it and/or modify
-  it under the terms of the GNU Affero General Public License as published by
-  the Free Software Foundation, either version 3 of the License, or
-  (at your option) any later version.
-
-  Chatty is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-  GNU Affero General Public License for more details.
-
-  You should have received a copy of the GNU Affero General Public License
-  along with Chatty. If not, see <http://www.gnu.org/licenses/>.
--}
-
--- | Provides typeclasses for clocks and randomizer environments
-module System.Chatty.Misc where
-
-import Data.Time.Clock
-import Data.Time.Calendar
-import System.Random
-
--- | Typeclass for all monads that know the time
-class (Functor m,Monad m) => ChClock m where
-  -- | Get UTC Time
-  mutctime :: m UTCTime
-  -- | Get timestamp, guaranteed to grow
-  mgetstamp :: m NominalDiffTime
-  mgetstamp = fmap (flip diffUTCTime (UTCTime (fromGregorian 1970 1 1) (secondsToDiffTime 0))) mutctime
-
-instance ChClock IO where
-  mutctime = getCurrentTime
-
--- | Typeclass for all monads that may provide random numbers
-class Monad m => ChRandom m where
-  -- | Get a single random number
-  mrandom :: Random r => m r
-  -- | Get a single random number in the given range
-  mrandomR :: Random r => (r,r) -> m r
-
-instance ChRandom IO where
-  mrandom = randomIO
-  mrandomR rs = randomRIO rs
-
diff --git a/System/Chatty/Spawn.hs b/System/Chatty/Spawn.hs
deleted file mode 100644
--- a/System/Chatty/Spawn.hs
+++ /dev/null
@@ -1,78 +0,0 @@
-{-# LANGUAGE Safe #-}
-
-{-
-  This module is part of Chatty.
-  Copyleft (c) 2014 Marvin Cohrs
-
-  All wrongs reversed. Sharing is an act of love, not crime.
-  Please share Antisplice with everyone you like.
-
-  Chatty is free software: you can redistribute it and/or modify
-  it under the terms of the GNU Affero General Public License as published by
-  the Free Software Foundation, either version 3 of the License, or
-  (at your option) any later version.
-
-  Chatty is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-  GNU Affero General Public License for more details.
-
-  You should have received a copy of the GNU Affero General Public License
-  along with Chatty. If not, see <http://www.gnu.org/licenses/>.
--}
-
--- | Provides a typeclass for process spawning.
-module System.Chatty.Spawn where
-
-import Text.Chatty.Finalizer
-import Text.Chatty.Printer
-import Text.Chatty.Scanner
-import Control.Applicative
-import Control.Monad
-import Control.Monad.IO.Class
-import System.Exit
-import System.IO
-import qualified System.Process as P
-
--- | Class for all (real or pseudo) process-spawning monads.
-class Monad m => ChSpawn m where
-  -- | Spawn process
-  mspw :: String -> [String] -> Either Handle String -> m (Int,String,[Handle])
-  -- | Accept handle as input?
-  mah :: String -> m Bool
-
-instance ChSpawn IO where
-  mspw pn as (Left h) = do
-    (_, Just hout, _, ph) <- P.createProcess (P.proc pn as){
-      P.std_in = P.UseHandle h,
-      P.std_out = P.CreatePipe }
-    so <- hGetContents hout
-    ec <- P.waitForProcess ph
-    return (case ec of
-               ExitSuccess -> 0
-               ExitFailure i -> i,
-            so, [hout])
-  mspw pn as (Right si) = do
-    (ec,so,_) <- P.readProcessWithExitCode pn as si
-    return (case ec of
-               ExitSuccess -> 0
-               ExitFailure i -> i,
-            so, [])
-  mah = return $ return True
-
--- | Spawn process
-spawn :: (ChFinalizer m,ChScanner m,ChPrinter m, ChSpawn m,Functor m) => String -> [String] -> m Int
-spawn fn as = do
-  ah <- mah fn
-  mscanh >>= \h' -> case if ah then h' else Nothing of
-    Nothing -> do
-      si <- mscanL
-      (i,so,hs) <- mspw fn as (Right si)
-      mprint so
-      mqfhs hs
-      return i
-    Just h -> do
-      (i,so,hs) <- mspw fn as (Left h)
-      mprint so
-      mqfhs hs
-      return i
diff --git a/System/Chatty/Spawn/Builtins.hs b/System/Chatty/Spawn/Builtins.hs
deleted file mode 100644
--- a/System/Chatty/Spawn/Builtins.hs
+++ /dev/null
@@ -1,37 +0,0 @@
-{-# LANGUAGE Safe #-}
-
-{-
-  This module is part of Chatty.
-  Copyleft (c) 2014 Marvin Cohrs
-
-  All wrongs reversed. Sharing is an act of love, not crime.
-  Please share Antisplice with everyone you like.
-
-  Chatty is free software: you can redistribute it and/or modify
-  it under the terms of the GNU Affero General Public License as published by
-  the Free Software Foundation, either version 3 of the License, or
-  (at your option) any later version.
-
-  Chatty is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-  GNU Affero General Public License for more details.
-
-  You should have received a copy of the GNU Affero General Public License
-  along with Chatty. If not, see <http://www.gnu.org/licenses/>.
--}
-
--- | Provides builtins for some common commands.
-module System.Chatty.Spawn.Builtins (withBuiltins) where
-
-import System.Chatty.Spawn
-import System.Chatty.Spawn.Overlay
-
--- | Use builtins if possible.
-withBuiltins :: (Functor m, ChSpawn m) => SpawnOverlayT m a -> m a
-withBuiltins m = fmap fst $ runSpawnOverlayT m builtins
-
-builtins :: ChSpawn m => [(String,[String] -> String -> m (Int,String))]
-builtins =
-  ("cat", \_ si -> return (0,si)):
-  []
diff --git a/System/Chatty/Spawn/Overlay.hs b/System/Chatty/Spawn/Overlay.hs
deleted file mode 100644
--- a/System/Chatty/Spawn/Overlay.hs
+++ /dev/null
@@ -1,70 +0,0 @@
-{-# LANGUAGE Safe #-}
-
-{-
-  This module is part of Chatty.
-  Copyleft (c) 2014 Marvin Cohrs
-
-  All wrongs reversed. Sharing is an act of love, not crime.
-  Please share Antisplice with everyone you like.
-
-  Chatty is free software: you can redistribute it and/or modify
-  it under the terms of the GNU Affero General Public License as published by
-  the Free Software Foundation, either version 3 of the License, or
-  (at your option) any later version.
-
-  Chatty is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-  GNU Affero General Public License for more details.
-
-  You should have received a copy of the GNU Affero General Public License
-  along with Chatty. If not, see <http://www.gnu.org/licenses/>.
--}
-
--- | Provides a MonadSpawn overlay that may catch specific spawn calls and handle them itself.
-module System.Chatty.Spawn.Overlay where
-
-import System.Chatty.Spawn
-import Control.Applicative
-import Control.Monad
-import Control.Monad.Trans.Class
-import Control.Monad.IO.Class
-import System.IO
-
--- | MonadSpawn overlay. Carries a map of own command implementations that are called instead of the actual ones.
-newtype SpawnOverlayT m a = SpawnOverlay { runSpawnOverlayT :: [(String,[String] -> String -> m (Int,String))] -> m (a,[(String,[String] -> String -> m (Int,String))]) }
-
-instance Monad m => Monad (SpawnOverlayT m) where
-  return a = SpawnOverlay $ \o -> return (a,o)
-  (SpawnOverlay o) >>= f = SpawnOverlay $ \s -> do (a,s') <- o s; runSpawnOverlayT (f a) s'
-
-instance MonadTrans SpawnOverlayT where
-  lift m = SpawnOverlay $ \s -> do a <- m; return (a,s)
-
-instance MonadIO m => MonadIO (SpawnOverlayT m) where
-  liftIO = lift . liftIO
-
-instance Monad m => Functor (SpawnOverlayT m) where
-  fmap f a = SpawnOverlay $ \s -> do (a',s') <- runSpawnOverlayT a s; return (f a',s')
-
-instance Monad m => Applicative (SpawnOverlayT m) where
-  (<*>) = ap
-  pure = return
-
-instance ChSpawn m => ChSpawn (SpawnOverlayT m) where
-  mspw pn as (Right si) = SpawnOverlay $ \s ->
-    case pn `elem` (map fst s) of
-      True -> let c = snd $ head $ filter ((==pn).fst) s
-              in do
-                (r,so) <- c as si
-                return ((r,so,[]),s)
-      False -> do
-                r <- mspw pn as (Right si)
-                return (r,s)
-  mspw pn as (Left h) = lift $ mspw pn as (Left h)
-  mah pn = SpawnOverlay $ \s ->
-    case pn `elem` (map fst s) of
-      True -> return (False,s)
-      False -> do
-        ah <- mah pn
-        return (ah,s)
diff --git a/Text/Chatty/Interactor.hs b/Text/Chatty/Interactor.hs
--- a/Text/Chatty/Interactor.hs
+++ b/Text/Chatty/Interactor.hs
@@ -36,34 +36,28 @@
 import Text.Chatty.Extended.HTML
 import Text.Chatty.Extended.ANSI
 import Text.Chatty.Channel.Printer
-import System.Chatty.Filesystem
-import System.Chatty.Misc
 import Text.Chatty.Interactor.Templates
-import System.Chatty.Spawn
-import System.Chatty.Spawn.Overlay
 import Control.Monad
 import Control.Monad.State
 import Control.Monad.Trans.Class
 import Control.Monad.Identity
 import System.IO
 
-mkInteractor ''RecorderT mkScanner mkBufferedScanner mkFinalizer mkExpander mkExpanderEnv mkHistoryEnv mkSpawn mkRandom mkClock mkCounter mkAtoms mkFilesys
-mkInteractor ''DeafT mkScanner mkBufferedScanner mkFinalizer mkExpander mkExpanderEnv mkHistoryEnv mkSpawn mkRandom mkClock mkCounter mkAtoms mkFilesys
-mkInteractor ''OutRedirT mkScanner mkBufferedScanner mkFinalizer mkExpander mkExpanderEnv mkHistoryEnv mkSpawn mkRandom mkClock mkCounter mkAtoms mkFilesys
-mkInteractor ''HandleCloserT mkScanner mkBufferedScanner mkPrinter mkExpander mkExpanderEnv mkHistoryEnv mkSpawn mkRandom mkClock mkDefCP mkCounter mkAtoms mkFilesys
-mkInteractor ''ExpanderT mkScanner mkBufferedScanner mkPrinter mkFinalizer mkSpawn mkRandom mkClock mkHistoryEnv mkDefCP mkCounter mkAtoms mkFilesys
-mkInteractor ''HereStringT mkPrinter mkExtendedPrinter mkExpander mkExpanderEnv mkHistoryEnv mkSpawn mkRandom mkClock mkDefCP mkCounter mkAtoms mkFilesys
-mkInteractor ''QuietT mkPrinter mkExtendedPrinter mkExpander mkExpanderEnv mkHistoryEnv mkSpawn mkRandom mkClock mkDefCP mkCounter mkAtoms mkFilesys
-mkInteractor ''InRedirT mkPrinter mkExtendedPrinter mkExpander mkExpanderEnv mkHistoryEnv mkSpawn mkRandom mkClock mkDefCP mkCounter mkAtoms mkFilesys
-mkInteractor ''SpawnOverlayT mkPrinter mkExtendedPrinter mkScanner mkBufferedScanner mkExpander mkExpanderEnv mkHistoryEnv mkFinalizer mkRandom mkClock mkDefCP mkCounter mkAtoms mkFilesys
-mkInteractor ''HtmlPrinterT mkScanner mkBufferedScanner mkExpanderEnv mkHistoryEnv mkFinalizer mkSpawn mkRandom mkClock mkDefCP mkCounter mkAtoms mkFilesys
-mkInteractor ''AnsiPrinterT mkScanner mkBufferedScanner mkExpanderEnv mkHistoryEnv mkFinalizer mkSpawn mkRandom mkClock mkDefCP mkCounter mkAtoms mkFilesys
-mkInteractor ''NullExpanderT mkScanner mkBufferedScanner mkPrinter mkExtendedPrinter mkFinalizer mkSpawn mkRandom mkClock mkDefCP mkCounter mkAtoms mkFilesys
-mkInteractor ''HistoryT  mkScanner mkBufferedScanner mkPrinter mkExtendedPrinter mkFinalizer mkSpawn mkRandom mkClock mkExpanderEnv mkDefCP mkCounter mkAtoms mkFilesys
-mkInteractor ''ScannerBufferT mkPrinter mkExtendedPrinter mkExpander mkExpanderEnv mkHistoryEnv mkFinalizer mkRandom mkClock mkDefCP mkSpawn mkCounter mkAtoms mkFilesys
-mkInteractor ''NullFsT mkScanner mkPrinter mkBufferedScanner mkFinalizer mkExpander mkExpanderEnv mkHistoryEnv mkSpawn mkRandom mkClock mkCounter mkAtoms mkDefCP mkExtendedPrinter
-mkInteractor ''CounterT mkScanner mkPrinter mkBufferedScanner mkFinalizer mkExpander mkExpanderEnv mkHistoryEnv mkSpawn mkRandom mkClock mkDefCP mkExtendedPrinter
-mkInteractor ''AtomStoreT mkScanner mkPrinter mkBufferedScanner mkFinalizer mkExpander mkExpanderEnv mkHistoryEnv mkSpawn mkRandom mkClock mkDefCP mkExtendedPrinter
+mkInteractor ''RecorderT mkScanner mkBufferedScanner mkFinalizer mkExpander mkExpanderEnv mkHistoryEnv mkCounter mkAtoms 
+mkInteractor ''DeafT mkScanner mkBufferedScanner mkFinalizer mkExpander mkExpanderEnv mkHistoryEnv mkCounter mkAtoms 
+mkInteractor ''OutRedirT mkScanner mkBufferedScanner mkFinalizer mkExpander mkExpanderEnv mkHistoryEnv mkCounter mkAtoms 
+mkInteractor ''HandleCloserT mkScanner mkBufferedScanner mkPrinter mkExpander mkExpanderEnv mkHistoryEnv mkDefCP mkCounter mkAtoms 
+mkInteractor ''ExpanderT mkScanner mkBufferedScanner mkPrinter mkFinalizer mkHistoryEnv mkDefCP mkCounter mkAtoms 
+mkInteractor ''HereStringT mkPrinter mkExtendedPrinter mkExpander mkExpanderEnv mkHistoryEnv mkDefCP mkCounter mkAtoms 
+mkInteractor ''QuietT mkPrinter mkExtendedPrinter mkExpander mkExpanderEnv mkHistoryEnv mkDefCP mkCounter mkAtoms 
+mkInteractor ''InRedirT mkPrinter mkExtendedPrinter mkExpander mkExpanderEnv mkHistoryEnv mkDefCP mkCounter mkAtoms 
+mkInteractor ''HtmlPrinterT mkScanner mkBufferedScanner mkExpanderEnv mkHistoryEnv mkFinalizer mkDefCP mkCounter mkAtoms 
+mkInteractor ''AnsiPrinterT mkScanner mkBufferedScanner mkExpanderEnv mkHistoryEnv mkFinalizer mkDefCP mkCounter mkAtoms 
+mkInteractor ''NullExpanderT mkScanner mkBufferedScanner mkPrinter mkExtendedPrinter mkFinalizer mkDefCP mkCounter mkAtoms 
+mkInteractor ''HistoryT  mkScanner mkBufferedScanner mkPrinter mkExtendedPrinter mkFinalizer mkExpanderEnv mkDefCP mkCounter mkAtoms 
+mkInteractor ''ScannerBufferT mkPrinter mkExtendedPrinter mkExpander mkExpanderEnv mkHistoryEnv mkFinalizer mkDefCP mkCounter mkAtoms
+mkInteractor ''CounterT mkScanner mkPrinter mkBufferedScanner mkFinalizer mkExpander mkExpanderEnv mkHistoryEnv mkDefCP mkExtendedPrinter
+mkInteractor ''AtomStoreT mkScanner mkPrinter mkBufferedScanner mkFinalizer mkExpander mkExpanderEnv mkHistoryEnv mkDefCP mkExtendedPrinter
 mkInteractor ''IntArchiverT mkArchiver
 mkInteractor ''BoolArchiverT mkArchiver
 mkInteractor ''HandleArchiverT mkArchiver
diff --git a/Text/Chatty/Interactor/Templates.hs b/Text/Chatty/Interactor/Templates.hs
--- a/Text/Chatty/Interactor/Templates.hs
+++ b/Text/Chatty/Interactor/Templates.hs
@@ -22,7 +22,7 @@
 -}
 
 -- | Declares serveral templates for comfortable instance derivation
-module Text.Chatty.Interactor.Templates (mkScanner, mkPrinter, mkFinalizer, mkExpander,mkExpanderEnv,mkHistoryEnv,mkInteractor,mkSpawn,mkRandom,mkClock,mkChatty,mkChannelPrinter,mkDefCP,mkArchiver,mkExtendedPrinter,mkBufferedScanner,mkCounter,mkAtoms,mkFilesys) where
+module Text.Chatty.Interactor.Templates (mkScanner, mkPrinter, mkFinalizer, mkExpander,mkExpanderEnv,mkHistoryEnv,mkInteractor,mkChatty,mkChannelPrinter,mkDefCP,mkArchiver,mkExtendedPrinter,mkBufferedScanner,mkCounter,mkAtoms) where
 
 import Data.Chatty.Atoms
 import Data.Chatty.Counter
@@ -35,14 +35,11 @@
 import Text.Chatty.Expansion.History
 import Text.Chatty.Channel.Printer
 import Text.Chatty.Channel.Broadcast
-import System.Chatty.Spawn
-import System.Chatty.Filesystem
 import Text.Chatty.Extended.Printer
 import Control.Monad
 import Control.Monad.Trans
 import Language.Haskell.TH
 import Text.Chatty.Templates
-import System.Chatty.Misc
 import System.IO
 
 -- | Automatically derives a ChScanner instance for you.
@@ -156,33 +153,6 @@
   |]
   where sx = strToType s
 
--- | Automatically derives a ChSpawn instance for you.
-mkSpawn :: Name -> Q [Dec]
-mkSpawn s = [d|
-    instance ChSpawn m => ChSpawn ($sx m) where
-      mspw pn as si = lift $ mspw pn as si
-      mah = lift . mah
-  |]
-  where sx = strToType s
-
--- | Automatically derives a ChRandom instance for you.
-mkRandom :: Name -> Q [Dec]
-mkRandom s = [d|
-    instance ChRandom m => ChRandom ($sx m) where
-      mrandom = lift mrandom
-      mrandomR = lift . mrandomR
-  |]            
-  where sx = strToType s
-
--- | Automatically derives a ChClock instance for you.
-mkClock :: Name -> Q [Dec]
-mkClock s = [d|
-    instance ChClock m => ChClock ($sx m) where
-      mutctime = lift mutctime
-      mgetstamp = lift mgetstamp
-  |]           
-  where sx = strToType s
-
 -- | Automatically derives a ChCounter instance for you.
 mkCounter :: Name -> Q [Dec]
 mkCounter s = [d|
@@ -200,45 +170,21 @@
       dispAtom = lift . dispAtom
   |]
   where sx = strToType s
-
--- | Automatically derives instances for ChFilesystem, CanLoad, CanSave, CanMount.
-mkFilesys :: Name -> Q [Dec]
-mkFilesys s = [d|
-    instance (ChAtoms ($sx m), ChFilesystem m) => ChFilesystem ($sx m) where
-      fopen p = do
-        res <- lift $ fopen p
-        case res of
-          NoPermission -> return NoPermission
-          NotFound -> return NotFound
-          FSSucc a -> liftM FSSucc $ funAtom a (\a -> File (lift $ loadFun a) (lift $ saveFun a) (leftBehind a) (rightPending a)) (\b a -> b{leftBehind=leftBehind a,rightPending=rightPending a})
-      fpwd = lift fpwd
-      fcd = lift . fcd
-    instance CanLoad m n => CanLoad ($sx m) n where
-      fload = lift . fload
-    instance CanSave m n => CanSave ($sx m) n where
-      fsave = lift . fsave
-    instance CanMount m n => CanMount ($sx m) n where
-      fmount = lift . fmount
-  |]
-  where sx = strToType s
                
 -- | Automatically derives all chatty typeclasses for you.
 mkChatty :: Name -> Q [Dec]
 mkChatty s = mkInteractor s
   mkPrinter mkScanner mkFinalizer mkExpander
-  mkSpawn mkRandom mkClock mkExpanderEnv
+  mkExpanderEnv
   mkHistoryEnv mkDefCP mkExtendedPrinter
   mkBufferedScanner mkCounter mkAtoms
-  mkFilesys
---  mkDefBC
 
 -- | Automatically derives all chatty typeclasses that are sensible for an ArchiverT.
 mkArchiver :: Name -> Q [Dec]
 mkArchiver s = mkInteractor s
   mkScanner mkExpander mkExpanderEnv
-  mkHistoryEnv mkFinalizer mkSpawn
-  mkRandom mkClock mkCounter mkAtoms
-  mkFilesys
+  mkHistoryEnv mkFinalizer
+  mkCounter mkAtoms
 
 -- | Just a helper class for mkInteractor
 class InteractorMaker i where
diff --git a/chatty.cabal b/chatty.cabal
--- a/chatty.cabal
+++ b/chatty.cabal
@@ -10,15 +10,15 @@
 -- PVP summary:      +-+------- breaking API changes
 --                   | | +----- non-breaking API additions
 --                   | | | +--- code changes with no API change
-version:             0.7.0.1
+version:             0.8.0.0
 
 -- A short (one-line) description of the package.
-synopsis:            Some monad transformers and typeclasses for abstraction of global dependencies.
+synopsis:            Some monad transformers and typeclasses for text in- and output abstraction.
 
 -- A longer description of the package.
-description:         Some monad transformers and typeclasses abstracting global dependencies, like Text in- and output (incl. here-strings, pipes, recorders and file-redirections on a per-function scope),
-                     process spawning, time and random number retrieval. 
-		     Note that the author does not recommend using this package for new projects. Please use packages better suited for individual purpose.
+description:         Some monad transformers and typeclasses abstracting global dependencies, like Text in- and output (incl. here-strings, pipes, recorders and file-redirections on a per-function scope).
+                     
+                     Note that a lot of modules have been removed since version 0.7, as they were encouraging antipatterns and had nothing to do with the core idea of chatty. Also, there will be more removals in the future! Version 1.0 will only contain core features.
 
 -- The license under which the package is released.
 license:             AGPL-3
@@ -27,13 +27,11 @@
 license-file:        LICENSE
 
 -- The package author(s).
-author:              Marvin Cohrs
+author:              Enum Cohrs
 
 -- An email address to which users can send suggestions, bug reports, and 
 -- patches.
-maintainer:          chatty@mcohrs.eu
-
-homepage:            http://hub.darcs.net/enum/chatty
+maintainer:          darcs@enumeration.eu                    
 
 -- A copyright notice.
 -- copyright:           
@@ -49,10 +47,29 @@
 -- Constraint on the version of Cabal needed to build this package.
 cabal-version:       >=1.10
 
+extra-source-files:  CHANGELOG.md
 
+source-repository head
+  type: darcs
+  location: https://hub.darcs.net/enum/chatty 
+                     
 library
   -- Modules exported by the library.
-  exposed-modules:     Text.Chatty.Expansion, System.Chatty.Commands, System.Chatty.Spawn, Text.Chatty.Printer, Text.Chatty.Finalizer, Text.Chatty.Templates, Text.Chatty.Scanner, Text.Chatty.Interactor, System.Chatty.Spawn.Overlay, System.Chatty.Spawn.Builtins, Text.Chatty.Interactor.Templates, System.Chatty.Misc, Text.Chatty.Extended.Printer, Text.Chatty.Extended.HTML, Text.Chatty.Extended.ANSI, Text.Chatty.Expansion.Vars, Text.Chatty.Expansion.History, Text.Chatty.Channel.Printer, Text.Chatty.Channel.Broadcast, Text.Chatty.Scanner.Buffered, System.Chatty.Filesystem
+  exposed-modules:     Text.Chatty.Expansion
+                       Text.Chatty.Printer
+                       Text.Chatty.Finalizer
+                       Text.Chatty.Templates
+                       Text.Chatty.Scanner
+                       Text.Chatty.Interactor
+                       Text.Chatty.Interactor.Templates
+                       Text.Chatty.Extended.Printer
+                       Text.Chatty.Extended.HTML
+                       Text.Chatty.Extended.ANSI
+                       Text.Chatty.Expansion.Vars
+                       Text.Chatty.Expansion.History
+                       Text.Chatty.Channel.Printer
+                       Text.Chatty.Channel.Broadcast
+                       Text.Chatty.Scanner.Buffered
   
   -- Modules included in this library but not exported.
   -- other-modules:       
