diff --git a/MultiConflict/utils/averagecsv.hs b/MultiConflict/utils/averagecsv.hs
deleted file mode 100644
--- a/MultiConflict/utils/averagecsv.hs
+++ /dev/null
@@ -1,13 +0,0 @@
--- | Usage:
--- > mios-averagecsv < a.csv > ave.csv
-module Main where
-
-import Data.List (sort)
-import SAT.Mios.Util.Stat
-
-main :: IO ()
-main = do
-  putStrLn $ fst (header :: (String, MergedDump))
-  d <- parseBy [(fst (header :: (String, MiosDump)), fromCSV)] <$> getContents
-  mapM_ (putStrLn . toCSV) . sort =<< merge d
-
diff --git a/MultiConflict/utils/dump2csv.hs b/MultiConflict/utils/dump2csv.hs
deleted file mode 100644
--- a/MultiConflict/utils/dump2csv.hs
+++ /dev/null
@@ -1,10 +0,0 @@
--- | Usage:
--- > mios --dump ... | mios-dump2csv > a.csv
-module Main where
-
-import SAT.Mios.Util.Stat
-
-main :: IO ()
-main = do
-  putStrLn $ fst (header :: (String, MiosDump))
-  mapM_ (putStrLn . toCSV) =<< parseBy [("", fromDump)] <$> getContents
diff --git a/MultiConflict/utils/numbers.hs b/MultiConflict/utils/numbers.hs
deleted file mode 100644
--- a/MultiConflict/utils/numbers.hs
+++ /dev/null
@@ -1,119 +0,0 @@
--- | Usage:
--- > mios-summary < average.csv > summary.tbl (for org-mode or github-flavored markdown)
-{-# LANGUAGE ViewPatterns #-}
-module Main where
-
-import Data.List (intercalate, lookup, minimumBy, nub)
-import Data.Maybe (fromMaybe)
-import Data.Ord (comparing)
-import Numeric (showFFloat)
-import System.Console.GetOpt (ArgDescr(..), ArgOrder(..), getOpt, OptDescr(..), usageInfo)
-import System.Environment (getArgs)
-import SAT.Mios.Types
-import SAT.Mios.Util.Stat
-
-data Opt = Opt
-  {
-    threshold :: Double
-  , p1 :: (Double, Double)
-  , p2 :: (Double, Double)
-  , p3 :: (Int, Int)
-  , p4 :: (Int, Int)
-  , message :: String
-  , help :: Bool
-  }
-
-optDefault :: Opt
-optDefault = Opt 0 (0, 10) (0, 10) (0, 10) (0, 10) "#-*-mode:org-*-" False
-
-options ::[OptDescr (Opt -> Opt)]
-options =
-  [
-    Option ['t'] ["threshold"]
-    (ReqArg (\v c -> c { threshold = read v }) "0.0") "threshold for p1"
-  , Option [] ["UF250"]
-    (NoArg (\c -> c { threshold = 12109075.01 })) "threshold for UF250; 12109075.01 (7.083)"
-  , Option [] ["38bits"]
-    (NoArg (\c -> c { threshold = 191761341.00 })) "threshold for 38bits; 191761341.00 (8.283)"
-  , Option [] ["44bits"]
-    (NoArg (\c -> c { threshold = 5204447789.00 })) "threshold for 44bits; 5204447789.00 (9.716)"
-  , Option ['1'] ["p1"]
-    (ReqArg (\v c -> c { p1 = read v }) "\"(0,10)\"") "range of p1"
-  , Option ['2'] ["p2"]
-    (ReqArg (\v c -> c { p2 = read v }) "\"(0,10)\"") "range of p2"
-  , Option ['3'] ["p3"]
-    (ReqArg (\v c -> c { p3 = read v }) "\"(0,10)\"") "range of p3"
-  , Option ['4'] ["p4"]
-    (ReqArg (\v c -> c { p4 = read v }) "\"(0,10)\"") "range of p4"
-  , Option ['m'] ["message"]
-    (ReqArg (\v c -> c { message = undecodeNewline v }) "\"\"") "extra message embeded into output"
-  , Option ['h'] ["help"]
-    (NoArg (\c -> c { help = True })) "display help message"
-  ]
-
-parseOptions :: String -> [String] -> IO Opt
-parseOptions mes argv =
-    case getOpt Permute options argv of
-      (o,  [], []) -> return $ foldl (flip id) optDefault o
-      (o,   _, []) -> return $ foldl (flip id) optDefault o
-      (_,   _, err) -> ioError (userError (concat err ++ usageInfo mes options))
-
--- | builds "MiosProgramOption" from a String
-parseOptionsFromArgs :: String -> IO Opt
-parseOptionsFromArgs mes = parseOptions mes =<< getArgs
-
-undecodeNewline :: String -> String
-undecodeNewline [] = []
-undecodeNewline [a] = [a]
-undecodeNewline ('\\' : 'n' : x) = '\n' : undecodeNewline x
-undecodeNewline (a : x) = a : undecodeNewline x
-
-showf :: Double -> String
-showf x = showFFloat (Just 2) x ""
-
-main :: IO ()
-main = do
-  opts <- parseOptionsFromArgs "gp-summary"
-  if help opts
-    then putStrLn $ usageInfo "" options
-    else do putStrLn $ message opts
-            putStrLn ""
-            putStrLn "| p1   | good | bad |"
-            putStrLn "| ---- | ---- | --- |"
-            result <- pickup opts . parseBy [(fst (header :: (String, MergedDump)), fromMergedCSV)] <$> getContents
-            mapM_ (putStrLn . toString) result
-            let ngs = sum $ map (fst . snd) result
-                nbs = sum $ map (snd . snd) result
-            putStrLn $ intercalate "," [showf (fromIntegral ngs / fromIntegral (ngs + nbs)), show (ngs + nbs) ++ "/" ++ show (ngs, nbs)]
-
-toString :: (Double, (Int, Int))  -> String
-toString (p1, (ng, nb)) = "| " ++ intercalate " | " [showf p1, show ng, show nb] ++ " |"
-
-pickup :: Opt -> [MergedDump] -> [(Double, (Int, Int))]
-pickup opts l = filter notEmpty $ map gather keys
-  where
-    notEmpty (_, (0, 0)) = False
-    notEmpty _ = True
-    thr = threshold opts
-    keys = nub $ map (gpParameter1 .  snd. _mergedConf) l
-    gather :: Double -> (Double, (Int, Int))
-    gather key = (key, (ng, length targets - ng))
-      where
-        targets' :: [MergedDump]
-        targets' = filter ((key ==) . gpParameter1 .  snd. _mergedConf) l
-        inBand :: MergedDump -> Bool
-        inBand (_mergedConf -> snd -> conf) = c1 && c2 && c3 && c4
-          where
-            c1 = inPair (p1 opts) (gpParameter1 conf)
-            c2 = inPair (p2 opts) (gpParameter2 conf)
-            c3 = inPair (p3 opts) (extraParameter3 conf)
-            c4 = inPair (p4 opts) (extraParameter4 conf)
-            inPair :: (Num a, Ord a) => (a, a) -> a -> Bool
-            inPair (b, t) x = b <= x && x <= t
-        targets = filter inBand targets'
-        ng = length $ filter (< thr) (map value targets)
-    value :: MergedDump -> Double
-    value m = case lookup PropagationS . (\(MiosStats s) -> s) . _mergedStat $ m of
-      Just (Right v) -> fromIntegral v
-      Just (Left v)  -> v
-      Nothing        -> 10000000
diff --git a/MultiConflict/utils/pickup.hs b/MultiConflict/utils/pickup.hs
deleted file mode 100644
--- a/MultiConflict/utils/pickup.hs
+++ /dev/null
@@ -1,123 +0,0 @@
--- | Usage:
--- > mios-summary < average.csv > summary.tbl (for org-mode or github-flavored markdown)
-module Main where
-
-import Data.List (intercalate, lookup, maximumBy, minimumBy, nub)
-import Data.Maybe (fromMaybe)
-import Data.Ord (comparing)
-import Numeric (showFFloat)
-import System.Console.GetOpt (ArgDescr(..), ArgOrder(..), getOpt, OptDescr(..), usageInfo)
-import System.Environment (getArgs)
-import SAT.Mios.Types
-import SAT.Mios.Util.Stat
-
-data Opt = Opt
-  {
-    message :: String
-  , useLog :: Bool
-  , help :: Bool
-  }
-
-optDefault :: Opt
-optDefault = Opt "#-*-mode:org-*-" False False
-
-options ::[OptDescr (Opt -> Opt)]
-options =
-  [
-    Option ['m'] ["message"]
-    (ReqArg (\v c -> c { message = undecodeNewline v }) "\"string\"") "extra message embeded into output"
-  , Option ['l'] ["useLog"]
-    (NoArg (\c -> c { useLog = True })) "use Logarithmic value for propagation"
-  , Option ['h'] ["help"]
-    (NoArg (\c -> c { help = True })) "display help message"
-  ]
-
-parseOptions :: String -> [String] -> IO Opt
-parseOptions mes argv =
-    case getOpt Permute options argv of
-      (o,  [], []) -> return $ foldl (flip id) optDefault o
-      (o,   _, []) -> return $ foldl (flip id) optDefault o
-      (_,   _, err) -> ioError (userError (concat err ++ usageInfo mes options))
-
--- | builds "MiosProgramOption" from a String
-parseOptionsFromArgs :: String -> IO Opt
-parseOptionsFromArgs mes = parseOptions mes =<< getArgs
-
-undecodeNewline :: String -> String
-undecodeNewline [] = []
-undecodeNewline [a] = [a]
-undecodeNewline ('\\' : 'n' : x) = '\n' : undecodeNewline x
-undecodeNewline (a : x) = a : undecodeNewline x
-
-showf :: Double -> String
-showf x = showFFloat (Just 2) x ""
-
-showi :: Int -> String
-showi x
-  | 3 <= length s = s
-  | otherwise = reverse . take 3 . (++ "   ") . reverse $ s
-  where s = show x
-
-showl :: Either Double Int -> String
-showl (Left x) = showf x
-showl (Right x) = showf (fromIntegral x)
-
-main :: IO ()
-main = do
-  opts <- parseOptionsFromArgs "gp-summary"
-  if help opts
-    then putStrLn $ usageInfo "" options
-    else do let parsers = [ (fst (header :: (String, MiosDump)), toMerge <$> fromCSV)
-                          , (fst (header :: (String, MergedDump)), fromMergedCSV)]
-            putStrLn $ message opts
-            putStrLn ""
-            if useLog opts
-              then do putStrLn "|   n |   p1 |   p2 |  p3 |  p4 | log(P) | conflict |   learnt | backjump | re-st | rate |  extra | pr/bj |"
-                      putStrLn "| --- | ---- | ---- | --- | --- | ------ | -------- | -------- | -------- | ----- | ---- |  ----- | ----- |"
-              else do putStrLn "|   n |   p1 |   p2 |  p3 |  p4 | propagation | conflict |   learnt | backjump | re-st | rate |  extra | pr/bj |"
-                      putStrLn "| --- | ---- | ---- | --- | --- | ----------- | -------- | -------- | -------- | ----- | ---- |  ----- | ----- |"
-            d <- parseBy parsers <$> getContents
-            mapM_ (putStrLn . toSummary (useLog opts)) $ pickup True d
-            putStrLn ""
-            mapM_ (putStrLn . toSummary (useLog opts)) $ pickup False d
-            putStrLn ""
-
-toSummary :: Bool -> MergedDump -> String
-toSummary uLog (MergedDump (_, MiosConfiguration _ _ p1 p2 p3 p4) n (MiosStats l) _) =
-  "| " ++ intercalate " | " [show n, m', s', showf pr] ++ " |"
-  where
-    m' = intercalate " | " [showf p1, showf p2, showi p3, showi p4]
-    s' = intercalate " | " $ map (showl . snd) (convert uLog l) -- (tail . init $ l)
-    convert :: Bool -> [DumpedValue] -> [DumpedValue]
-    convert uL ks
-      | uL = logOf PropagationS : map valOf [ConflictS .. ExtraS]
-      | otherwise = map valOf [PropagationS .. ExtraS]
-      where
-        logOf :: DumpTag -> DumpedValue
-        logOf key = (key, Left $ logBase 10 (val key))
-        valOf key = (key, Left $ val key)
-        val :: DumpTag -> Double
-        val key
-          | Just (Left x) <- lookup key ks = x
-          | Just (Right x) <- lookup key ks = fromIntegral x
-          | otherwise = 0
-    pr = fromMaybe 0 $ div' <$> lookup PropagationS l <*> lookup BackjumpS l
-    div' :: Either Double Int -> Either Double Int -> Double
-    div' (Right a) (Right b) = fromIntegral a / fromIntegral b
-    div' (Right a) (Left b)  = fromIntegral a / b
-    div' (Left a) (Right b)  = a / fromIntegral b
-    div' (Left a) (Left b)   = a / b
-
-pickup :: Bool -> [MergedDump] -> [MergedDump]
-pickup good l = map selectData keys
-  where
-    keys = nub $ map (gpParameter1 .  snd. _mergedConf) l
-    selectData :: Double -> MergedDump
-    selectData key
-      | good      = minimumBy (comparing value) $ filter ((key ==) . gpParameter1 .  snd. _mergedConf) l
-      | otherwise = maximumBy (comparing value) $ filter ((key ==) . gpParameter1 .  snd. _mergedConf) l
-    value :: MergedDump -> Double
-    value m = case lookup PropagationS . (\(MiosStats s) -> s) . _mergedStat $ m of
-      Just (Right v) -> fromIntegral v
-      Just (Left v)  -> v
-      Nothing        -> 10000000
diff --git a/MultiConflict/utils/stat2csv.hs b/MultiConflict/utils/stat2csv.hs
deleted file mode 100644
--- a/MultiConflict/utils/stat2csv.hs
+++ /dev/null
@@ -1,10 +0,0 @@
--- | Usage:
--- > mios --stat -X ... | mios-stat2csv > a.csv
-module Main where
-
-import SAT.Mios.Util.Stat
-
-main :: IO ()
-main = do
-  putStrLn $ fst (header :: (String, MiosDump))
-  mapM_ (putStrLn . toCSV) =<< parseBy [("", fromStat)] <$> getContents
diff --git a/MultiConflict/utils/summary.hs b/MultiConflict/utils/summary.hs
deleted file mode 100644
--- a/MultiConflict/utils/summary.hs
+++ /dev/null
@@ -1,104 +0,0 @@
--- | Usage:
--- > mios-summary < average.csv > summary.tbl (for org-mode or github-flavored markdown)
-module Main where
-
-import Data.List (intercalate, lookup)
-import Data.Maybe (fromMaybe)
-import Numeric (showFFloat)
-import System.Console.GetOpt (ArgDescr(..), ArgOrder(..), getOpt, OptDescr(..), usageInfo)
-import System.Environment (getArgs)
-import SAT.Mios.Types
-import SAT.Mios.Util.Stat
-
-data Opt = Opt
-  {
-    message :: String
-  , useLog :: Bool
-  , help :: Bool
-  }
-
-optDefault :: Opt
-optDefault = Opt "#-*-mode:org-*-" False False
-
-options ::[OptDescr (Opt -> Opt)]
-options =
-  [
-    Option ['m'] ["message"]
-    (ReqArg (\v c -> c { message = undecodeNewline v }) "\"string\"") "extra message embeded into output"
-  , Option ['l'] ["useLog"]
-    (NoArg (\c -> c { useLog = True })) "use Logarithmic value for propagation"
-  , Option ['h'] ["help"]
-    (NoArg (\c -> c { help = True })) "display help message"
-  ]
-
-parseOptions :: String -> [String] -> IO Opt
-parseOptions mes argv =
-    case getOpt Permute options argv of
-      (o,  [], []) -> return $ foldl (flip id) optDefault o
-      (o,   _, []) -> return $ foldl (flip id) optDefault o
-      (_,   _, err) -> ioError (userError (concat err ++ usageInfo mes options))
-
--- | builds "MiosProgramOption" from a String
-parseOptionsFromArgs :: String -> IO Opt
-parseOptionsFromArgs mes = parseOptions mes =<< getArgs
-
-undecodeNewline :: String -> String
-undecodeNewline [] = []
-undecodeNewline [a] = [a]
-undecodeNewline ('\\' : 'n' : x) = '\n' : undecodeNewline x
-undecodeNewline (a : x) = a : undecodeNewline x
-
-showf :: Double -> String
-showf x = showFFloat (Just 2) x ""
-
-showi :: Int -> String
-showi x
-  | 3 <= length s = s
-  | otherwise = reverse . take 3 . (++ "   ") . reverse $ s
-  where s = show x
-
-showl :: Either Double Int -> String
-showl (Left x) = showf x
-showl (Right x) = showf (fromIntegral x)
-
-main :: IO ()
-main = do
-  opts <- parseOptionsFromArgs "gp-summary"
-  if help opts
-    then putStrLn $ usageInfo "" options
-    else do let parsers = [ (fst (header :: (String, MiosDump)), toMerge <$> fromCSV)
-                          , (fst (header :: (String, MergedDump)), fromMergedCSV)]
-            putStrLn $ message opts
-            putStrLn ""
-            if useLog opts
-              then do putStrLn "|   n |   p1 |   p2 |  p3 |  p4 | log(P) | conflict |   learnt | backjump | re-st | rate | extra | pr/bj |"
-                      putStrLn "| --- | ---- | ---- | --- | --- | ------ | -------- | -------- | -------- | ----- | ---- | ----- | ----- |"
-              else do putStrLn "|   n |   p1 |   p2 |  p3 |  p4 | propagation | conflict |   learnt | backjump | re-st | rate | extra | pr/bj |"
-                      putStrLn "| --- | ---- | ---- | --- | --- | ----------- | -------- | -------- | -------- | ----- | ---- | ----- | ----- |"
-            mapM_ (putStrLn . toSummary (useLog opts)) . parseBy parsers =<< getContents
-
-toSummary :: Bool -> MergedDump -> String
-toSummary uLog (MergedDump (_, MiosConfiguration _ _ p1 p2 p3 p4) n (MiosStats l) _) =
-  "| " ++ intercalate " | " [show n, m', s', showf pr] ++ " |"
-  where
-    m' = intercalate " | " [showf p1, showf p2, showi p3, showi p4]
-    s' = intercalate " | " $ map (showl . snd) (convert uLog l) -- (tail . init $ l)
-    convert :: Bool -> [DumpedValue] -> [DumpedValue]
-    convert uL ks
-      | uL = logOf PropagationS : map valOf [ConflictS .. ExtraS]
-      | otherwise = map valOf [PropagationS .. ExtraS]
-      where
-        logOf :: DumpTag -> DumpedValue
-        logOf key = (key, Left $ logBase 10 (val key))
-        valOf key = (key, Left $ val key)
-        val :: DumpTag -> Double
-        val key
-          | Just (Left x) <- lookup key ks = x
-          | Just (Right x) <- lookup key ks = fromIntegral x
-          | otherwise = 0
-    pr = fromMaybe 0 $ div' <$> lookup PropagationS l <*> lookup BackjumpS l
-    div' :: Either Double Int -> Either Double Int -> Double
-    div' (Right a) (Right b) = fromIntegral a / fromIntegral b
-    div' (Right a) (Left b)  = fromIntegral a / b
-    div' (Left a) (Right b)  = a / fromIntegral b
-    div' (Left a) (Left b)   = a / b
diff --git a/mios.cabal b/mios.cabal
--- a/mios.cabal
+++ b/mios.cabal
@@ -1,190 +1,126 @@
--- Initial mios.cabal generated by cabal init.  For further documentation,
--- see http://haskell.org/cabal/users-guide/
-
-name:                   mios
-version:                1.5.4
-synopsis:               A Minisat-based CDCL SAT solver in Haskell
-description:
+-- This file has been generated from package.yaml by hpack version 0.20.0.
+--
+-- see: https://github.com/sol/hpack
+--
+-- hash: 1a93fd2f2b1b1d0ba5e203ac6b48c5ca8abd31384c1955776cfb00969c311cbb
 
-  A modern and very fast SAT solver written in Haskell, using CDCL, watch literals, VSIDS,
-  blocking-literals, phase saving, LBD, Glucose-like restart and so on.
-  'Mios' is an abbreviation of 'Minisat-based Implementation and Optimization Study on SAT solver'.
-  .
+name:           mios
+version:        1.6.0
+synopsis:       A Minisat-based CDCL SAT solver in Haskell
+description:    A modern and very fast SAT solver written in Haskell, using CDCL, watch literals, VSIDS, blocking-literals, phase saving, LBD, Glucose-like restart and so on. 'Mios' is an abbreviation of 'Minisat-based Implementation and Optimization Study on SAT solver'.
+category:       Artificial Intelligence, Constraints
+homepage:       https://github.com/shnarazk/mios
+bug-reports:    https://github.com/shnarazk/mios/issues
+author:         Shuji Narazaki
+maintainer:     narazaki@nagasaki-u.ac.jp
+copyright:      2017 Shuji Narazaki
+license:        GPL-3
+license-file:   LICENSE
+build-type:     Simple
+cabal-version:  >= 1.10
 
-homepage:               https://github.com/shnarazk/mios
-license:                GPL-3
-license-file:           LICENSE
-author:                 Shuji Narazaki <narazaki@nagasaki-u.ac.jp>
-maintainer:             Shuji Narazaki <narazaki@nagasaki-u.ac.jp>
-category:               Artificial Intelligence, Constraints
-build-type:             Simple
-cabal-version:          >=1.16
-extra-source-files:     app/sample.hs
+extra-source-files:
+    app/sample.hs
 
 source-repository head
-  type:                 git
-  location:             https://github.com/shnarazk/mios
-
-Flag llvm
-  Description:	        Compile with llvm
-  Default:	        False
+  type: git
+  location: https://github.com/shnarazk/mios
 
-Flag MultiConflict
-  Description:	        Build tools in MultiConflict
-  Default:	        False
+flag llvm
+  description: Compile with llvm
+  manual: True
+  default: False
 
-Flag utils
-  Description:	        Build misc utilities for developer
-  Default:	        False
+flag utils
+  description: Build misc utilities for developer
+  manual: True
+  default: False
 
 library
-  hs-source-dirs:	src
-  default-language:	Haskell2010
-  default-extensions:   Strict
-  other-extensions:	BangPatterns
-                        FlexibleContexts
-                        FlexibleInstances
-                        FunctionalDependencies
-                        MagicHash
-                        MultiParamTypeClasses
-                        RecordWildCards
-                        ScopedTypeVariables
-                        TypeFamilies
-                        Trustworthy
-                        TupleSections
-                        Safe
-                        UndecidableInstances
-                        ViewPatterns
-  exposed-modules:
-                        SAT.Mios.Clause
-                        SAT.Mios.ClauseManager
-                        SAT.Mios.ClausePool
-                        SAT.Mios.Criteria
-                        SAT.Mios.Main
-                        SAT.Mios.OptionParser
-                        SAT.Mios.Solver
-                        SAT.Mios.Vec
-                        SAT.Mios.Types
-                        SAT.Mios.Validator
-                        SAT.Mios.Util.DIMACS.MinisatReader
-                        SAT.Mios.Util.DIMACS.Reader
-                        SAT.Mios.Util.DIMACS.Writer
-                        SAT.Mios.Util.DIMACS
-                        SAT.Mios.Util.BoolExp
-                        SAT.Mios
-  build-depends:        base >=4.10 && < 5, vector >=0.12, ghc-prim >=0.5, bytestring >=0.10, primitive >=0.6
+  hs-source-dirs:
+      src
+  default-extensions: Strict
+  build-depends:
+      base >=4.7 && <5
+    , bytestring >=0.10
+    , ghc-prim >=0.5
+    , primitive >=0.6
+    , vector >=0.12
   if flag(llvm)
-    ghc-options:	-O2 -funbox-strict-fields -fllvm -optlo-O3 -optlc-O3 -fwarn-missing-signatures
+    ghc-options: -O2 -funbox-strict-fields -fllvm -optlo-O3 -optlc-O3 -fwarn-missing-signatures
+    ghc-prof-options: -O2 -funbox-strict-fields -fllvm -optlo-O3 -fprof-auto
   else
-    ghc-options:	-O2 -funbox-strict-fields -msse2 -fwarn-missing-signatures
+    ghc-options: -O2 -funbox-strict-fields -msse2 -fwarn-missing-signatures
+    ghc-prof-options: -O2 -funbox-strict-fields -fprof-auto
+  exposed-modules:
+      SAT.Mios
+      SAT.Mios.Clause
+      SAT.Mios.ClauseManager
+      SAT.Mios.ClausePool
+      SAT.Mios.Criteria
+      SAT.Mios.Main
+      SAT.Mios.OptionParser
+      SAT.Mios.Solver
+      SAT.Mios.Types
+      SAT.Mios.Util.BoolExp
+      SAT.Mios.Util.DIMACS
+      SAT.Mios.Util.DIMACS.MinisatReader
+      SAT.Mios.Util.DIMACS.Reader
+      SAT.Mios.Util.DIMACS.Writer
+      SAT.Mios.Validator
+      SAT.Mios.Vec
+  other-modules:
+      Paths_mios
+  default-language: Haskell2010
 
-executable mios-1.5.4
-  hs-source-dirs:	app
-  main-is:              mios.hs
-  buildable:	        True
-  default-language:	Haskell2010
-  default-extensions:   Strict
-  build-depends:        base >=4.10 && < 5, mios
+executable cnf-stat
+  main-is: cnf-stat.hs
+  hs-source-dirs:
+      utils
+  default-extensions: Strict
+  build-depends:
+      base >=4.7 && <5
+    , bytestring >=0.10
+    , ghc-prim >=0.5
+    , mios
+    , primitive >=0.6
+    , vector >=0.12
   if flag(llvm)
-    ghc-options:	-O2 -funbox-strict-fields -fllvm -optlo-O3 -optlc-O3 -rtsopts -fwarn-missing-signatures
+    ghc-options: -O2 -funbox-strict-fields -fllvm -optlo-O3 -optlc-O3 -fwarn-missing-signatures
+    ghc-prof-options: -O2 -funbox-strict-fields -fllvm -optlo-O3 -fprof-auto
   else
-    ghc-options:	-O2 -funbox-strict-fields -msse2 -rtsopts -fwarn-missing-signatures
-
-executable cnf-stat
-  hs-source-dirs:	utils
-  main-is:              cnf-stat.hs
+    ghc-options: -O2 -funbox-strict-fields -msse2 -fwarn-missing-signatures
+    ghc-prof-options: -O2 -funbox-strict-fields -fprof-auto
   if flag(utils)
-    buildable:	        True
+    buildable: True
   else
-    buildable:	        False
-  default-language:	Haskell2010
-  default-extensions:   Strict
-  build-depends:        base >=4.10 && < 5, mios, bytestring >=0.10
-  ghc-options:	        -O1 -ignore-asserts -funbox-strict-fields
+    buildable: False
+  other-modules:
+      Paths_mios
+  default-language: Haskell2010
 
-executable mios-mc
-  hs-source-dirs:	MultiConflict app
-  main-is:              mios.hs
-  if flag(MultiConflict)
-    buildable:	        True
-  else
-    buildable:	        False
-  default-language:	Haskell2010
-  default-extensions:   Strict
-  build-depends:        base >=4.10 && < 5, mios, bytestring >=0.10
+executable mios-1.6.0
+  main-is: mios.hs
+  hs-source-dirs:
+      app
+  default-extensions: Strict
+  build-depends:
+      base >=4.7 && <5
+    , bytestring >=0.10
+    , ghc-prim >=0.5
+    , mios
+    , primitive >=0.6
+    , vector >=0.12
   if flag(llvm)
-    ghc-options:	-O2 -ignore-asserts -funbox-strict-fields -fllvm -optlo-O2 -optlc-O2
-  else
-    ghc-options:	-O2 -ignore-asserts -funbox-strict-fields
-
-executable mc-dump2csv
-  hs-source-dirs:	MultiConflict
-  main-is:              utils/dump2csv.hs
-  if flag(MultiConflict) && flag(utils)
-    buildable:	        True
-  else
-    buildable:	        False
-  default-language:	Haskell2010
-  default-extensions:   Strict
-  build-depends:        base >=4.10 && < 5, mios, bytestring >=0.10
-  ghc-options:	        -O1 -ignore-asserts -funbox-strict-fields
-
-executable mc-averagecsv
-  hs-source-dirs:	MultiConflict
-  main-is:              utils/averagecsv.hs
-  if flag(MultiConflict) && flag(utils)
-    buildable:	        True
-  else
-    buildable:	        False
-  default-language:	Haskell2010
-  default-extensions:   Strict
-  build-depends:        base >=4.10 && < 5, mios, bytestring >=0.10
-  ghc-options:	        -O1 -ignore-asserts -funbox-strict-fields
-
-executable mc-summary
-  hs-source-dirs:	MultiConflict
-  main-is:              utils/summary.hs
-  if flag(MultiConflict) && flag(utils)
-    buildable:	        True
-  else
-    buildable:	        False
-  default-language:	Haskell2010
-  default-extensions:   Strict
-  build-depends:        base >=4.10 && < 5, mios, bytestring >=0.10
-  ghc-options:	        -O1 -ignore-asserts -funbox-strict-fields
-
-executable mc-stat2csv
-  hs-source-dirs:	MultiConflict
-  main-is:              utils/stat2csv.hs
-  if flag(MultiConflict) && flag(utils)
-    buildable:	        True
-  else
-    buildable:	        False
-  default-language:	Haskell2010
-  default-extensions:   Strict
-  build-depends:        base >=4.10 && < 5, mios, bytestring >=0.10
-  ghc-options:	        -O1 -ignore-asserts -funbox-strict-fields
-
-executable mc-pickup
-  hs-source-dirs:	MultiConflict
-  main-is:              utils/pickup.hs
-  if flag(MultiConflict) && flag(utils)
-    buildable:	        True
+    ghc-options: -O2 -funbox-strict-fields -fllvm -optlo-O3 -optlc-O3 -fwarn-missing-signatures
+    ghc-prof-options: -O2 -funbox-strict-fields -fllvm -optlo-O3 -fprof-auto
   else
-    buildable:	        False
-  default-language:	Haskell2010
-  default-extensions:   Strict
-  build-depends:        base >=4.10 && < 5, mios, bytestring >=0.10
-  ghc-options:	        -O1 -ignore-asserts -funbox-strict-fields
-
-executable mc-numbers
-  hs-source-dirs:	MultiConflict
-  main-is:              utils/numbers.hs
-  if flag(MultiConflict) && flag(utils)
-    buildable:	        True
+    ghc-options: -O2 -funbox-strict-fields -msse2 -fwarn-missing-signatures
+    ghc-prof-options: -O2 -funbox-strict-fields -fprof-auto
+  if flag(llvm)
+    ghc-prof-options: -O2 -funbox-strict-fields -fllvm -optlo-O3 -fprof-auto -rtsopts
   else
-    buildable:	        False
-  default-language:	Haskell2010
-  default-extensions:   Strict
-  build-depends:        base >=4.10 && < 5, mios, bytestring >=0.10
-  ghc-options:	        -O1 -ignore-asserts -funbox-strict-fields
+    ghc-prof-options: -O2 -funbox-strict-fields -fprof-auto -rtsopts
+  other-modules:
+      Paths_mios
+  default-language: Haskell2010
diff --git a/src/SAT/Mios.hs b/src/SAT/Mios.hs
--- a/src/SAT/Mios.hs
+++ b/src/SAT/Mios.hs
@@ -52,7 +52,7 @@
 
 -- | version name
 versionId :: String
-versionId = "mios-1.5.4 -- https://github.com/shnarazk/mios"
+versionId = "mios-1.6.0 -- https://github.com/shnarazk/mios"
 
 reportElapsedTime :: Bool -> String -> Integer -> IO Integer
 reportElapsedTime False _ 0 = return 0
