diff --git a/FormalLanguage/GrammarProduct/Op.hs b/FormalLanguage/GrammarProduct/Op.hs
--- a/FormalLanguage/GrammarProduct/Op.hs
+++ b/FormalLanguage/GrammarProduct/Op.hs
@@ -42,7 +42,7 @@
 
 (><) :: Grammar -> Grammar -> Grammar
 g >< h
-  | isLeftLinear g && isLeftLinear h = runLinear $ Linear g <> Linear h
+  | isLinear g && isLinear h         = runLinear $ Linear g <> Linear h
 --  | isChomskyNF  g && isChomskyNF  h = runCNF $ CNF g <> CNF h
 --  | isGreibachNF g && isGreibachNF h = runTwoGNF $ TwoGNF g <> TwoGNF h
   | otherwise                        = error "Grammars in general CFG form are not handled. You need to convert into either Greibach- or Chomsky normal form. This might change in the future"
diff --git a/FormalLanguage/GrammarProduct/Op/Linear.hs b/FormalLanguage/GrammarProduct/Op/Linear.hs
--- a/FormalLanguage/GrammarProduct/Op/Linear.hs
+++ b/FormalLanguage/GrammarProduct/Op/Linear.hs
@@ -7,15 +7,15 @@
 
 module FormalLanguage.GrammarProduct.Op.Linear where
 
-import Control.Arrow ((&&&))
-import Data.Semigroup
-import Control.Lens hiding (outside,indices)
-import Control.Applicative
-import qualified Data.Set as S
-import Data.List (groupBy,nub)
-import Data.Function (on)
-import Data.Default
+import           Control.Applicative
+import           Control.Arrow ((&&&),second)
+import           Control.Lens hiding (outside,indices)
+import           Data.Default
+import           Data.Function (on)
+import           Data.List (groupBy,nub)
+import           Data.Semigroup
 import qualified Data.Map as M
+import qualified Data.Set as S
 
 import FormalLanguage.CFG.Grammar
 
@@ -54,7 +54,11 @@
 
 -- | Merges right-hand sides in a linear direct product. For full-fledged CFGs
 -- in different normal forms, see the GNF and CNF implementations.
+--
+-- TODO get prefix, get single NT, get suffix ;;; merge prefixes, merge
+-- single NTs, merge suffixes ;;; and in case of no NTs? prefer prefixes?
 
+{-
 mergeRHS :: [Symbol] -> [Symbol] -> [Symbol]
 mergeRHS [] rs = rs -- neutral element
 mergeRHS ls [] = ls -- neutral element
@@ -83,6 +87,24 @@
   goT []       (t : rs) = (genDel dl <> t) : goT [] rs
   goT (t : ls) []       = (t <> genDel dr) : goT ls []
   goT (u : ls) (v : rs) = (u<>v)           : goT ls rs
+-}
+
+mergeRHS :: [Symbol] -> [Symbol] -> [Symbol]
+mergeRHS [] rs = rs
+mergeRHS ls [] = ls
+mergeRHS ls rs = joinFix pls prs ++ joinSymbol ils irs ++ joinFix sls srs
+  where (pls,(ils,sls)) = second (span isSyntactic) . break isSyntactic $ ls
+        (prs,(irs,srs)) = second (span isSyntactic) . break isSyntactic $ rs
+        joinFix []       []       = []
+        joinFix []       (t : rs) = (genDel  l <> t) : joinFix [] rs
+        joinFix (t : ls) []       = (t <> genDel r ) : joinFix ls []
+        joinFix (u : ls) (v : rs) = (u<>v)           : joinFix ls rs
+        joinSymbol [l] [r] = [l <> r]
+        joinSymbol []  [r] = [genDel l <> r]
+        joinSymbol [l] []  = [l <> genDel r]
+        joinSymbol []  []  = []
+        l = head ls
+        r = head rs
 
 groupRHS = groupBy ((==) `on` isTerminal)
 
diff --git a/GrammarProducts.cabal b/GrammarProducts.cabal
--- a/GrammarProducts.cabal
+++ b/GrammarProducts.cabal
@@ -1,5 +1,5 @@
 name:           GrammarProducts
-version:        0.1.1.0
+version:        0.1.1.1
 author:         Christian Hoener zu Siederdissen, 2013-2015
 copyright:      Christian Hoener zu Siederdissen, 2013-2015
 homepage:       https://github.com/choener/GrammarProducts
@@ -60,7 +60,7 @@
 
 library
   build-depends: base               >= 4.7      && < 4.9
-               , ADPfusion          >= 0.4.1    && < 0.4.2
+               , ADPfusion          >= 0.4.1    && < 0.5.1
                , ansi-wl-pprint     >= 0.6      && < 0.7
                , bytestring         >= 0.10     && < 0.11
                , containers         >= 0.5      && < 0.6
@@ -69,7 +69,7 @@
                , lens               >= 4        && < 5
                , newtype            >= 0.2      && < 0.3
                , parsers            >= 0.12     && < 0.13
-               , PrimitiveArray     >= 0.6.0.1  && < 0.6.2
+               , PrimitiveArray     >= 0.6.0.1  && < 0.7.1
                , semigroups         >= 0.15     && < 0.17
                , template-haskell   >= 2        && < 3
                , transformers       >= 0.4      && < 0.5
@@ -143,7 +143,7 @@
                  , GrammarProducts
                  , PrimitiveArray
                  , template-haskell
-                 , vector             >= 0.10     && < 0.11
+                 , vector             >= 0.10     && < 0.12
     buildable: True
   else
     buildable: False
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,7 +1,13 @@
+0.1.1.1
+-------
+
+- FormalGrammars == 0.2.1.1
+- relaxed upper bounds
+
 0.1.1.0
 -------
 
-- FormalGrammar == 0.2.1.x with revamped indexed rules system
+- FormalGrammars == 0.2.1.x with revamped indexed rules system
 - new travis.yml
 
 0.1.0.0
