diff --git a/CliOptions.hs b/CliOptions.hs
new file mode 100644
--- /dev/null
+++ b/CliOptions.hs
@@ -0,0 +1,29 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+module CliOptions
+( parseArguments
+, Opts(..)
+)
+where
+
+import Options.Applicative
+
+data Opts = Opts
+    { showInfo :: Bool
+    , query    :: String }
+    deriving Show
+
+parser :: Parser Opts
+parser = Opts
+    <$> switch
+        ( long "info"
+       <> short 'i'
+       <> help "Show description")
+    <*> argument str (metavar "QUERY")
+
+parseArguments :: String -> (Opts -> IO ()) -> IO ()
+parseArguments ver = (execParser opts >>=)
+    where opts = info (helper <*> parser)
+            ( fullDesc
+           <> progDesc "Search for query using hayoo."
+           <> header   ("hayoo - " ++ ver))
diff --git a/HayooTypes.hs b/HayooTypes.hs
new file mode 100644
--- /dev/null
+++ b/HayooTypes.hs
@@ -0,0 +1,53 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+module HayooTypes
+( HayooResult(..)
+, HayooResponse(..)
+)
+where
+
+import Control.Applicative ((<$>), (<*>))
+import Control.Monad (mzero)
+import Data.Aeson
+
+data HayooResult = HayooResult { resultUri         :: String
+                               , tag               :: String
+                               , resultPackage     :: String
+                               , resultName        :: String
+                               , resultSource      :: String
+                               , resultDescription :: String
+                               , resultSignature   :: String
+                               , resultModules     :: [String]
+                               , resultScore       :: Float
+                               , resultType        :: String
+                               } deriving (Show)
+
+data HayooResponse = HayooResponse { max    :: Int
+                                   , offset :: Int
+                                   , count  :: Int
+                                   , result :: [HayooResult]
+                                   } deriving (Show)
+
+instance FromJSON HayooResult where
+    parseJSON (Object v) = HayooResult
+                           <$> v .:  "resultUri"
+                           <*> v .:  "tag"
+                           <*> v .:? "resultPackage"     .!= ""
+                           <*> v .:  "resultName"
+                           <*> v .:? "resultSource"      .!= ""
+                           <*> v .:? "resultDescription" .!= ""
+                           <*> v .:? "resultSignature"   .!= ""
+                           <*> v .:? "resultModules"     .!= []
+                           <*> v .:  "resultScore"
+                           <*> v .:  "resultType"
+
+    parseJSON _          = mzero
+
+instance FromJSON HayooResponse where
+    parseJSON (Object v) = HayooResponse
+                           <$> v .: "max"
+                           <*> v .: "offset"
+                           <*> v .: "count"
+                           <*> v .: "result"
+
+    parseJSON _          = mzero
diff --git a/hayoo-cli.cabal b/hayoo-cli.cabal
--- a/hayoo-cli.cabal
+++ b/hayoo-cli.cabal
@@ -2,7 +2,7 @@
 --  see http://haskell.org/cabal/users-guide/
 
 name:                hayoo-cli
-version:             0.1.0.1
+version:             0.1.0.2
 synopsis:            Hayoo CLI
 description:         Simple console client for hayoo.
 homepage:            https://github.com/Gonzih/hayoo-cli
@@ -13,7 +13,8 @@
 -- copyright:
 category:            Development
 build-type:          Simple
--- extra-source-files:
+extra-source-files:  HayooTypes.hs
+                   , CliOptions.hs
 cabal-version:       >=1.10
 
 executable hayoo
