diff --git a/ADP/Fusion/TH/Backtrack.hs b/ADP/Fusion/TH/Backtrack.hs
--- a/ADP/Fusion/TH/Backtrack.hs
+++ b/ADP/Fusion/TH/Backtrack.hs
@@ -78,28 +78,31 @@
 
 buildLeftType :: Name -> (Name, Name, Name) -> (Name, Name) -> [TyVarBndr] -> Type
 buildLeftType tycon (m, x, r) (mL, xL) = foldl AppT (ConT tycon) . map (VarT . go)
-  where go (KindedTV z _)
+  where go (PlainTV z)
           | z == m        = mL  -- correct monad name
           | z == x        = xL  -- point to new x type
           | z == r        = xL  -- stream and return type are the same
           | otherwise     = z   -- everything else can stay as is
-        go s              = error $ "buildLeftType: " ++ show s
+        go (KindedTV z _) = go (PlainTV z)
+--        go s              = error $ "buildLeftType: " ++ show s
 
 buildRightType :: Name -> (Name, Name, Name) -> (Name, Name, Name) -> [TyVarBndr] -> Type
 buildRightType tycon (m, x, r) (mR, xR, rR) = foldl AppT (ConT tycon) . map (VarT . go)
-  where go (KindedTV z _)
+  where go (PlainTV z)
           | z == m    = mR
           | z == x    = xR
           | z == r    = rR
           | otherwise = z
+        go (KindedTV z _) = go (PlainTV z)
 
 buildSigRType :: Name -> (Name, Name, Name) -> (Name) -> (Name, Name, Name) -> [TyVarBndr] -> Type
 buildSigRType tycon (m, x, r) (xL) (mR, xR, rR) = foldl AppT (ConT tycon) . map go
-  where go (KindedTV z _)
+  where go (PlainTV z)
           | z == m    = VarT mR
           | z == x    = (AppT (AppT (TupleT 2) (VarT xL)) (AppT ListT (VarT xR)))
           | z == r    = VarT rR
           | otherwise = VarT z
+        go (KindedTV z _) = go (PlainTV z)
 
 -- |
 
diff --git a/ADPfusion.cabal b/ADPfusion.cabal
--- a/ADPfusion.cabal
+++ b/ADPfusion.cabal
@@ -1,5 +1,5 @@
 name:           ADPfusion
-version:        0.4.0.1
+version:        0.4.0.2
 author:         Christian Hoener zu Siederdissen, 2011-2015
 copyright:      Christian Hoener zu Siederdissen, 2011-2015
 homepage:       http://www.bioinf.uni-leipzig.de/Software/gADP/
