diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,10 @@
 # Revision history for net-spider-rpl-cli
 
+## 0.1.2.0  -- 2019-10-13
+
+* Add `--duration` option, thanks to `net-spider-cli-0.2.0.0`.
+* Enable `-threaded` to build the executable.
+
 ## 0.1.1.1  -- 2019-10-04
 
 * Confirm test with `net-spider-rpl-0.3.0.0`, `ip-1.5.1` and `ip-1.6.0`.
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -16,7 +16,7 @@
 
 3. Input logs about RPL networks.
 
-        $ ./run-net-spider.sh input < syslog
+        $ ./run-net-spider.sh input - < syslog
 
 4. Get a snapshot graph of the RPL network in GraphML format.
 
diff --git a/net-spider-rpl-cli.cabal b/net-spider-rpl-cli.cabal
--- a/net-spider-rpl-cli.cabal
+++ b/net-spider-rpl-cli.cabal
@@ -1,5 +1,5 @@
 name:                   net-spider-rpl-cli
-version:                0.1.1.1
+version:                0.1.2.0
 author:                 Toshio Ito <debug.ito@gmail.com>
 maintainer:             Toshio Ito <debug.ito@gmail.com>
 license:                BSD3
@@ -29,7 +29,7 @@
   build-depends:        base >=4.11.1.0 && <4.13,
                         net-spider >=0.3.2.0 && <0.4,
                         net-spider-rpl >=0.2.2.0 && <0.4,
-                        net-spider-cli >=0.1.0.1 && <0.2,
+                        net-spider-cli >=0.2.0.0 && <0.3,
                         text >=1.2.2.2 && <1.3,
                         unordered-containers >=0.2.8 && <0.3,
                         greskell >=0.2.3 && <0.3,
@@ -45,7 +45,7 @@
   default-language:     Haskell2010
   hs-source-dirs:       app
   main-is:              Main.hs
-  ghc-options:          -Wall -fno-warn-unused-imports
+  ghc-options:          -Wall -fno-warn-unused-imports -threaded
   -- other-modules:        
   -- default-extensions:   
   -- other-extensions:     
@@ -62,7 +62,7 @@
   -- default-extensions:   
   -- other-extensions:     
   other-modules:        NetSpider.RPL.CLISpec
-  build-depends:        base, net-spider-rpl-cli, net-spider, net-spider-rpl, optparse-applicative, 
+  build-depends:        base, net-spider-rpl-cli, net-spider, net-spider-rpl, optparse-applicative, net-spider-cli,
                         hspec >=2.5.5,
                         ip >=1.3.0 && <1.7
 
diff --git a/src/NetSpider/RPL/CLI.hs b/src/NetSpider/RPL/CLI.hs
--- a/src/NetSpider/RPL/CLI.hs
+++ b/src/NetSpider/RPL/CLI.hs
@@ -28,6 +28,7 @@
 import Data.Time (getZonedTime, ZonedTime(zonedTimeToLocalTime), LocalTime(localDay), toGregorian)
 import NetSpider.GraphML.Writer (writeGraphML)
 import qualified NetSpider.CLI.Snapshot as CLIS
+import NetSpider.CLI.Snapshot (CLISnapshotQuery)
 import NetSpider.CLI.Spider (SpiderConfig, parserSpiderConfig)
 import NetSpider.Input
   ( defConfig, logThreshold,
@@ -63,9 +64,7 @@
 
 main :: IO ()
 main = do
-  cli_conf <- Opt.execParser $ Opt.info (Opt.helper <*> optionParser) $ mconcat $
-              [ Opt.progDesc "net-spider front-end for RPL data model."
-              ]
+  cli_conf <- Opt.execParser optionParserInfo
   let sconf = cliSpiderConfig cli_conf
       cmd = cliCmd cli_conf
   case cmd of
@@ -100,7 +99,13 @@
       putNodes (castSpiderConfig sconf) dao_nodes
       return (dio_nodes, dao_nodes)
 
-    doSnapshot sconf query = do
+    makeQuery cli_query = do
+      let base_q :: Query IPv6ID () () ()
+          base_q = defQuery []
+      returnWithHelp $ CLIS.makeSnapshotQuery base_q cli_query
+
+    doSnapshot sconf cli_query = doSnapshot' sconf =<< makeQuery cli_query
+    doSnapshot' sconf query = do
       let start_node_num = length $ startsFrom query
       hPutStrLn stderr ("---- Query starts from " ++ (show start_node_num) ++ " nodes")
       when (start_node_num == 0) $ do
@@ -121,7 +126,8 @@
       hPutStrLn stderr ("---- Format DIO+DAO SnapshotGraph into GraphML")
       TLIO.putStr $ writeGraphML com_graph
 
-    doCIS sconf input_params query_base = do
+    doCIS sconf input_params cli_query = do
+      query_base <- makeQuery cli_query
       doClear sconf
       (dio_nodes, dao_nodes) <- doInput sconf input_params
       -- Make a query from the FoundNodes just loaded.
@@ -129,7 +135,7 @@
                    ++
                    (map (ipv6Only . subjectNode) dio_nodes)
           q = query_base { startsFrom = starts }
-      doSnapshot sconf q
+      doSnapshot' sconf q
     isVerboseDebug sconf = logThreshold sconf <= LevelDebug
 
 
@@ -166,9 +172,22 @@
 -- | CLI subcommands and their arguments.
 data Cmd = CmdClear -- ^ Clear the entire database.
          | CmdInput InputParams -- ^ Input FoundNodes to the database
-         | CmdSnapshot (Query IPv6ID () () ()) -- ^ Get a snapshot graph.
-         | CmdCIS InputParams (Query IPv6ID () () ()) -- ^ Clear + Input + Snapshot
+         | CmdSnapshot (CLISnapshotQuery IPv6ID) -- ^ Get a snapshot graph.
+         | CmdCIS InputParams (CLISnapshotQuery IPv6ID) -- ^ Clear + Input + Snapshot
 
+returnWithHelp :: Either String a -> IO a
+returnWithHelp (Right a) = return a
+returnWithHelp (Left e) = do
+  hPutStrLn stderr ("Error: " <> e)
+  void $ Opt.handleParseResult $ Opt.execParserPure Opt.defaultPrefs optionParserInfo ["--help"]
+  error "This should not happen."
+
+optionParserInfo :: Opt.ParserInfo (CLIConfig n na fla)
+optionParserInfo =
+  Opt.info (Opt.helper <*> optionParser) $ mconcat $
+  [ Opt.progDesc "net-spider front-end for RPL data model."
+  ]
+
 optionParser :: Opt.Parser (CLIConfig n na fla)
 optionParser = CLIConfig <$> parserSpiderConfig <*> parserCommands
   where
@@ -195,7 +214,6 @@
       CLIS.parserSnapshotQuery $
       CLIS.SnapshotConfig
       { CLIS.nodeIDReader = ipv6Reader,
-        CLIS.basisSnapshotQuery = defQuery [],
         CLIS.startsFromAsArguments = parse_arg
       }
     parserFilter = Opt.option readerFilter $ mconcat
diff --git a/test/NetSpider/RPL/CLISpec.hs b/test/NetSpider/RPL/CLISpec.hs
--- a/test/NetSpider/RPL/CLISpec.hs
+++ b/test/NetSpider/RPL/CLISpec.hs
@@ -3,7 +3,8 @@
 import Data.Monoid (mempty)
 import qualified Options.Applicative as Opt
 import Net.IPv6 (ipv6)
-import NetSpider.Query (startsFrom)
+import NetSpider.CLI.Snapshot (makeSnapshotQuery)
+import NetSpider.Query (startsFrom, defQuery)
 import NetSpider.RPL.FindingID (IPv6ID(..))
 import Test.Hspec
 
@@ -27,8 +28,9 @@
     specify "--starts-from" $ do
       let parse_result = runParser optionParser ["snapshot", "-s", "fd00::212:4b00:13a4:c554"]
       case parse_result of
-        Right (CLIConfig _ (CmdSnapshot got_q)) ->
-          startsFrom got_q `shouldBe` [IPv6ID $ ipv6 0xfd00 0 0 0 0x0212 0x4b00 0x13a4 0xc554]
+        Right (CLIConfig _ (CmdSnapshot got_cq)) -> do
+          let got_s = fmap startsFrom $ makeSnapshotQuery (defQuery []) got_cq
+          got_s `shouldBe` Right [IPv6ID $ ipv6 0xfd00 0 0 0 0x0212 0x4b00 0x13a4 0xc554]
         Right _ ->
           expectationFailure ("Unexpected CLIConfig obtained.")
         Left err ->
