diff --git a/Gtc/gtc.hs b/Gtc/gtc.hs
--- a/Gtc/gtc.hs
+++ b/Gtc/gtc.hs
@@ -5,37 +5,88 @@
 
 import Gt.Core
 import Gt.Langs
-import Data.List (intercalate)
+import Control.Monad.Trans
+import System.Console.Haskeline hiding (catch)
+import System.Environment
 import System.Exit
+import System.Posix.Terminal
 import qualified System.Environment.UTF8 as U
 
-usage :: IO ()
+usage :: IO()
 usage =
   do
-     mapM_ putStrLn [ "    Usage: 'fromLang' 'toLang' 'text'"
-                    , "    Lang is 2 sumbols code, i.e. by, en, ru.\n"
-                    , "        --help or -h - to see this help."
-                    , "        --list or -l - list of available languages.\n"
+     mapM_ putStrLn [ "    Usage:"
+                    , "         Standart mode: gtc 'fromLang' 'toLang' 'text'"
+                    , "         Interactive mode: gtc -i 'fromLang' 'toLang'"
+                    , "             Where 'Lang' is 2 sumbols code, i.e. be, en, ru.\n"
+                    , "    Commandline keys:"
+                    , "        --interactive or -i - interactive mode."
+                    , "        --help        or -h - to see this help."
+                    , "        --list        or -l - list of available languages.\n"
                     ]
      exitWith $ ExitFailure 1
 
-langs_list :: IO ()
+langs_list :: IO()
 langs_list = putStrLn $ "\nList of available languages:\n\n" ++
-             (concat $ zipWith (\l d -> "    " ++ l ++ " - " ++ d ++ "\n") langs langs_descrs)
+             concat (zipWith (\l d -> "    " ++ l ++ " - " ++ d ++ "\n") langs langs_descrs)
 
-main :: IO ()
+main :: IO()
 main =
   do
-     -- TODO: Need to detecet terminal encoding and make convertions
-     args <- U.getArgs
-     case args of
+    -- TODO: Need to detecet terminal encoding and make convertions
+    args <- U.getArgs
+    case args of
 
-        ["-l"]       -> langs_list
-        ["-h"]       -> usage
+        "-i":rest -> interactiveLoop rest
+        ["-l"]    -> langs_list
+        ["-h"]    -> usage
 
-        ["--list"]   -> langs_list
-        ["--help"]   -> usage
+        "--interactive":rest -> interactiveLoop rest
+        ["--list"]           -> langs_list
+        ["--help"]           -> usage
 
-        from:to:rest -> do_trans from to (intercalate " " rest) >>= putStrLn
+        from:to:[]   -> interactiveLoop' from to
+        from:to:rest -> mapM_ ((>>= putStrLn) . do_trans from to) rest
         _            -> usage
-     exitWith ExitSuccess
+
+    exitWith ExitSuccess
+
+-- Interactive mode processor
+interactiveLoop :: [String] -> IO()
+interactiveLoop params =
+    case params of
+        from:to:_ -> interactiveLoop' from to
+        _         -> usage
+
+haskelineSettings :: String -> Settings IO
+haskelineSettings homedir = Settings {
+           complete = noCompletion,
+           historyFile = Just $ homedir ++ "/.gtc_history",
+           autoAddHistory = True
+           }
+
+getHomeDir :: IO FilePath
+getHomeDir = catch (getEnv "HOME") (\_ -> return "")
+
+interactiveLoop' :: Lang -> Lang -> IO()
+interactiveLoop' from to =
+    getHomeDir >>= (\h -> runInputT (haskelineSettings h) loop)
+    where
+        promptLine :: IO String
+        promptLine =
+          do
+            tty_type <- queryTerminal 0
+            if tty_type
+                then return "> "
+                else return ""
+
+        loop :: InputT IO()
+        loop = do
+            minput <- lift promptLine >>= getInputLine
+            case minput of
+                Nothing -> return ()
+                Just "" -> loop
+                Just input -> do t <- lift $ do_trans from to input
+                                 outputStrLn $ replicate 80 '-'
+                                 outputStrLn t
+                                 loop
diff --git a/Gtg/gtg.hs b/Gtg/gtg.hs
--- a/Gtg/gtg.hs
+++ b/Gtg/gtg.hs
@@ -4,7 +4,6 @@
 ) where
 
 import Gt.Core
-import Gt.Helpers (decodeString)
 import Gt.Langs
 import Graphics.UI.Gtk
 import Graphics.UI.Gtk.Glade
@@ -12,9 +11,9 @@
 
 main :: IO()
 main = do
-    initGUI
+    _ <- initGUI
     data_dir  <- getDataDir
-    Just xml  <- xmlNew $ data_dir ++ "/main.glade"
+    Just xml  <- xmlNew $ data_dir ++ "/Gtg/main.glade"
 
     -- Casts
     window          <- xmlGetWidget xml castToWindow    "gtg_main"
@@ -25,17 +24,17 @@
     cmb_dest_lang   <- xmlGetWidget xml castToComboBox  "cmb_dest_lang"
     cmb_source_lang <- xmlGetWidget xml castToComboBox  "cmb_source_lang"
 
-    comboBoxSetModelText cmb_dest_lang
-    comboBoxSetModelText cmb_source_lang
+    _ <- comboBoxSetModelText cmb_dest_lang
+    _ <- comboBoxSetModelText cmb_source_lang
 
     mapM_ (comboBoxAppendText cmb_dest_lang  ) (tail langs_descrs)
     mapM_ (comboBoxAppendText cmb_source_lang) langs_descrs
 
     -- Actions
-    onClicked       btn_close      (widgetDestroy window)
-    onClicked       btn_translate  (trans_click ent_trans_text lbl_translation cmb_source_lang cmb_dest_lang)
-    onEntryActivate ent_trans_text (trans_click ent_trans_text lbl_translation cmb_source_lang cmb_dest_lang)
-    onDestroy       window         mainQuit
+    _ <- onClicked       btn_close      (widgetDestroy window)
+    _ <- onClicked       btn_translate  (trans_click ent_trans_text lbl_translation cmb_source_lang cmb_dest_lang)
+    _ <- onEntryActivate ent_trans_text (trans_click ent_trans_text lbl_translation cmb_source_lang cmb_dest_lang)
+    _ <- onDestroy       window         mainQuit
 
     -- Let's go
     widgetShowAll window
@@ -57,4 +56,4 @@
     src <- get_src_lang cmb_src
     dst <- get_dest_lang cmb_dest
     translated_text <- do_trans src dst text
-    set lbl [ labelText := decodeString translated_text ]
+    set lbl [ labelText := translated_text ]
diff --git a/gt-tools.cabal b/gt-tools.cabal
--- a/gt-tools.cabal
+++ b/gt-tools.cabal
@@ -1,5 +1,5 @@
 name:                   gt-tools
-version:                0.1.2
+version:                0.1.3
 cabal-version:          >= 1.8
 build-type:             Simple
 license:                GPL
@@ -29,34 +29,35 @@
     main-is:            gtc.hs
     buildable:          True
     ghc-options:        -Wall
-    include-dirs:       .
-    hs-source-dirs:     ., Gt, Gtc
+    hs-source-dirs:     ., Gtc
     other-modules:      Gt.Core, Gt.Helpers, Gt.Langs, Gt.Net, Gt.Translation
     build-depends:
-                        base >= 4 && < 5,
+                        base >= 4.2 && < 5,
                         containers,
+                        haskeline,
                         HTTP,
                         json,
+                        mtl,
+                        unix,
                         url,
                         utf8-string >= 0.3.6
 
 executable              gtg
     main-is:            gtg.hs
     ghc-options:        -Wall
-    include-dirs:       .
-    hs-source-dirs:     ., Gt, Gtg
+    hs-source-dirs:     ., Gtg
     other-modules:      Gt.Core, Gt.Helpers, Gt.Langs, Gt.Net, Gt.Translation
 
     if flag(gui)
       buildable:        True
       build-depends:
-                        base >= 4 && < 5,
+                        base >= 4.2 && < 5,
                         containers,
                         HTTP,
                         json,
                         url,
                         gtk,
                         glade,
-                        utf8-string
+                        utf8-string >= 0.3.6
     else
       buildable:        False
