diff --git a/ADP/Fusion/SynVar/Array/TermSymbol.hs b/ADP/Fusion/SynVar/Array/TermSymbol.hs
--- a/ADP/Fusion/SynVar/Array/TermSymbol.hs
+++ b/ADP/Fusion/SynVar/Array/TermSymbol.hs
@@ -27,9 +27,9 @@
   , Show x
   ) => TerminalStream m (TermSymbol a (ITbl m arr Subword x)) (is:.Subword) where
   terminalStream (a :| ITbl _ _ c t _) (sv:.IStatic _) (is:.ix@(Subword (i:.j)))
-    = map (\ (S6 s (zi:.(Subword (_:.l))) (zo:._) is os e) ->
+    = map (\ (S6 s (zi:.(Subword (a:.l))) (zo:._) is os e) ->
               let lj = subword l j
-              in  S6 s zi zo (is:.lj) (os:.subword 0 0) (e:.(t!lj)) )
+              in  {- traceShow (i,a,' ',l,j,t!lj) $ -} S6 s zi zo (is:.lj) (os:.subword 0 0) (e:.(t!lj)) )
     . iPackTerminalStream a sv (is:.ix)
   terminalStream (a :| ITbl _ _ c t _) (sv:.IVariable _) (is:.ix@(Subword (i:.j)))
     = flatten mk step Unknown . iPackTerminalStream a sv (is:.ix)
diff --git a/ADP/Fusion/SynVar/Indices.hs b/ADP/Fusion/SynVar/Indices.hs
--- a/ADP/Fusion/SynVar/Indices.hs
+++ b/ADP/Fusion/SynVar/Indices.hs
@@ -32,22 +32,36 @@
     . tableIndices cs vs ixs
     . map (\(S5 s zi zo (is:.i) (os:.o)) -> S5 s (zi:.i) (zo:.o) is os)
   -- TODO ? using the defns in TermSymbol.hs for Array syns?
+  {-
   tableIndices (cs:._) (vs:.IVariable _) (ixs:.Subword (i:.j))
     = map (\(S5 s (zi:.Subword (_:.l)) (zo:._) is os) -> S5 s zi zo (is:.subword l j) (os:.subword 0 0))
     . tableIndices cs vs ixs
     . map (\(S5 s zi zo (is:.i) (os:.o)) -> S5 s (zi:.i) (zo:.o) is os)
+  -}
   -- TODO minsize handling ? constraint handling?
-  {-
   tableIndices (cs:._) (vs:.IVariable _) (ixs:.Subword (i:.j))
     = flatten mk step Unknown
     . tableIndices cs vs ixs
     . map (\(S5 s zi zo (is:.i) (os:.o)) -> S5 s (zi:.i) (zo:.o) is os)
-    where mk (S5 s (zi:.Subword (_:.l)) (zo:._) is os) = return ( (S5 s zi zo (is:.
-          step = error "step"
+    where mk (S5 s (zi:.Subword (_:.l)) (zo:._) is os) = return (S5 s zi zo is os :. l :. j - l)
+          step (s5:.k:.z) | z >= 0 = do let S5 s zi zo is os = s5
+                                            l                = j - z
+                                            kl               = subword k l
+                                        return $ Yield (S5 s zi zo (is:.kl) (os:.subword 0 0)) (s5 :. k :. z-1)
+                          | otherwise = return $ Done
           {-# Inline [0] mk   #-}
           {-# Inline [0] step #-}
-          -}
   {-# Inline tableIndices #-}
+
+{-
+    where mk (S6 s (zi:.(Subword (_:.l))) (zo:._) is os e) = return (S6 s zi zo is os e :. l :. j - l) -- TODO minsize c !
+          step (s6:.k:.z) | z >= 0 = do let S6 s zi zo is os e = s6
+                                            l                  = j - z
+                                            kl                 = subword k l
+                                        return $ Yield (S6 s zi zo (is:.kl) (os:.subword 0 0) (e:.(t!kl))) (s6 :. k :. z-1)
+                          | otherwise = return $ Done
+-}
+
 {-
   tableIndices (cs:.c) (vs:.Static) (is:.Subword (i:.j))
     = S.map (\(Tr s (x:.Subword (_:.l)) ys) -> Tr s x (is:.subword l j)) -- constraint handled: tableStreamIndex
diff --git a/ADPfusion.cabal b/ADPfusion.cabal
--- a/ADPfusion.cabal
+++ b/ADPfusion.cabal
@@ -1,5 +1,5 @@
 name:           ADPfusion
-version:        0.4.1.0
+version:        0.4.1.1
 author:         Christian Hoener zu Siederdissen, 2011-2015
 copyright:      Christian Hoener zu Siederdissen, 2011-2015
 homepage:       https://github.com/choener/ADPfusion
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
 
 # ADPfusion
 
-[*generalized ADPfusion Homepage*](http://www.bioinf.uni-leipzig.de/Software/gADP/)
+[*generalized Algebraic Dynamic Programming Homepage*](http://www.bioinf.uni-leipzig.de/Software/gADP/)
 
 Ideas implemented here are described in a couple of papers:
 
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,11 +1,20 @@
+0.4.1.1
+-------
+
+- bugfix in Multitape Subword Index calculations (A.F.S.Indices.hs) [this one
+  is quite spurious. I needed quickcheck to find a suitable minimal example
+  where Pseudoknot.hs fails]
+
 0.4.1.0
 -------
 
 - initial support for multi-context free grammars
 - mcfgs allow for interleaved syntactic variables
-- applications include: natural language modelling and pseudoknotted structures in RNA
+- applications include: natural language modelling and pseudoknotted structures
+  in RNA
 - the simplest formal language that requires this is: a^i b^j a^i b^j
-- the [GenussFold](http://hackage.haskell.org/package/GenussFold) library gives a simple example grammar
+- the [GenussFold](http://hackage.haskell.org/package/GenussFold) library gives
+  a simple example grammar
 
 0.4.0.2
 -------
diff --git a/src/Pseudoknot.hs b/src/Pseudoknot.hs
--- a/src/Pseudoknot.hs
+++ b/src/Pseudoknot.hs
@@ -104,7 +104,14 @@
   n = VU.length i
   !(Z:.t:.u:.v) = runInsideForward i
   d = unId $ axiom t
-  bs = runInsideBacktrack i (Z:.t:.u:.v)
+  bs = {- let ITbl _ _ _ x _ = v in traceShow (filter (flip elem gives . fst) $ assocs x) $ -} runInsideBacktrack i (Z:.t:.u:.v)
+  gives = [ Z:.subword 2 2 :. subword 3 3
+          , Z:.subword 1 2 :. subword 3 5
+          ]
+  {-
+   -  u g a a c
+   - 0 1 2 3 4 5
+  -}
 {-# NOINLINE runPseudoknot #-}
 
 type X = ITbl Id Unboxed Subword Int
