diff --git a/BioInf/RNAfold.hs b/BioInf/RNAfold.hs
--- a/BioInf/RNAfold.hs
+++ b/BioInf/RNAfold.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE ScopedTypeVariables #-}
 {-# LANGUAGE BangPatterns #-}
 {-# LANGUAGE TypeOperators #-}
 {-# LANGUAGE TupleSections #-}
@@ -90,15 +91,23 @@
       hS = ScalarM . S.foldl' min (999999::Int)
       {-# INLINE hS #-}
 
-  weak   <- fromAssocsM (Z:.0:.0) (Z:.n:.n) 999999 []
-  block  <- fromAssocsM (Z:.0:.0) (Z:.n:.n) 999999 []
-  comps  <- fromAssocsM (Z:.0:.0) (Z:.n:.n) 999999 []
-  struct <- fromAssocsM (Z:.0:.0) (Z:.n:.n) 0 []
+  weak   :: MArr0 s DIM2 Int <- fromAssocsM (Z:.0:.0) (Z:.n:.n) 999999 []
+  block  :: MArr0 s DIM2 Int <- fromAssocsM (Z:.0:.0) (Z:.n:.n) 999999 []
+  comps  :: MArr0 s DIM2 Int <- fromAssocsM (Z:.0:.0) (Z:.n:.n) 999999 []
+  struct :: MArr0 s DIM2 Int <- fromAssocsM (Z:.0:.0) (Z:.n:.n) 0 []
 
+  let iif = iloopIF ener <<< primary #~~ weak ~~# primary ... hS
+      {-# INLINE [0] iif #-}
+
+  let mif = multiIF ener <<< block +~+ comps ... hS
+      {-# INLINE [0] mif #-}
+
   fillTables
     weak (
-      multiOF   ener <<< baseLr -~+ (multiIF ener <<< block +~+ comps              ... hS) +~- baselR |||
-      iloopOF   ener <<< baseLr -~+ (iloopIF ener <<< primary #~~ weak ~~# primary ... hS) +~- baselR |||
+      -- multiOF   ener <<< baseLr -~+ (multiIF ener <<< block +~+ comps              ... hS) +~- baselR |||
+      multiOF   ener <<< baseLr -~+ mif +~- baselR |||
+      -- iloopOF   ener <<< baseLr -~+ (iloopIF ener <<< primary #~~ weak ~~# primary ... hS) +~- baselR |||
+      iloopOF   ener <<< baseLr -~+ iif +~- baselR |||
       iloop1NF  ener <<< primary ---~+ weak +~@   primary   |||
       iloopN1F  ener <<< primary   @~+ weak +~--- primary   |||
       bulgeRF   ener <<< baseLr    -~+ weak +~*   primary   |||
diff --git a/RNAFold.cabal b/RNAFold.cabal
--- a/RNAFold.cabal
+++ b/RNAFold.cabal
@@ -1,5 +1,5 @@
 name:           RNAFold
-version:        1.99.1.2
+version:        1.99.1.3
 author:         Christian Hoener zu Siederdissen (Haskell), Ivo L. Hofacker et al (ViennaRNA), 2010-2012
 copyright:      Christian Hoener zu Siederdissen, 2010-2012
 homepage:       http://www.tbi.univie.ac.at/~choener/adpfusion
@@ -44,21 +44,24 @@
     strict         >= 0.3.2,
     primitive      == 0.4.*   ,
     vector         == 0.9.*   ,
-    PrimitiveArray == 0.2.1.1 ,
-    BiobaseVienna  == 0.2.2.4 ,
-    BiobaseXNA     == 0.6.2.4 ,
-    ADPfusion      == 0.0.1.1
+    PrimitiveArray == 0.2.2.0 ,
+    BiobaseVienna  == 0.2.2.5 ,
+    BiobaseXNA     == 0.6.2.5 ,
+    ADPfusion      == 0.0.1.2
   exposed-modules:
     BioInf.RNAfold
     BioInf.RNAfold.Combinators
     BioInf.RNAfold.Energy
     BioInf.RNAfold.Library
   ghc-options:
-    -Odph
+    -O2
     -funbox-strict-fields
     -fspec-constr
+    -fspec-constr-threshold=500
+    -fspec-constr-count=10
     -funfolding-use-threshold100
     -funfolding-keeness-factor100
+    -fsimplifier-phases10
   if flag (llvm)
     ghc-options:
       -fllvm -optlo-O3 -optlo-inline -optlo-std-compile-opts
@@ -67,15 +70,7 @@
 
 executable RNAFold
   build-depends:
---    base >= 4 && < 5,
---    mtl,
---    strict,
---    primitive      == 0.4.*   ,
---    vector         == 0.9.*   ,
---    PrimitiveArray == 0.2.1.1 ,
---    BiobaseVienna  == 0.2.2.3 ,
---    BiobaseXNA     == 0.6.2.2 ,
---    ADPfusion      == 0.0.1.0
+--    we get all build depends from the library dependencies
   main-is:
     RNAFold.hs
   other-modules:
@@ -85,11 +80,14 @@
     BioInf.RNAfold.Library
   ghc-options:
     -rtsopts
-    -Odph
+    -O2
     -funbox-strict-fields
     -fspec-constr
+    -fspec-constr-threshold=500
+    -fspec-constr-count=10
     -funfolding-use-threshold100
     -funfolding-keeness-factor100
+    -fsimplifier-phases10
   if flag (llvm)
     ghc-options:
       -fllvm -optlo-O3 -optlo-inline -optlo-std-compile-opts
