diff --git a/GoogleTranslate.cabal b/GoogleTranslate.cabal
--- a/GoogleTranslate.cabal
+++ b/GoogleTranslate.cabal
@@ -1,5 +1,5 @@
 name:			GoogleTranslate
-version:		0.0.2
+version:		0.0.3
 Cabal-Version:	>= 1.6
 license:		GPL-3
 license-file:	LICENSE
@@ -17,5 +17,5 @@
 Library
   Exposed-Modules:
      Language.Translate.Google
-  Build-depends: base >= 4 && < 5, json >= 0.4.4, download-curl >= 0.1.2, 
-                 containers >= 0.3.0.0, bytestring >= 0.9.1.7, dataenc, text
+  Build-depends: base >= 4 && < 5, AttoJson >= 0.5.3, download-curl >= 0.1.2, 
+                 containers >= 0.3.0.0, bytestring >= 0.9.1.7, dataenc
diff --git a/Language/Translate/Google.hs b/Language/Translate/Google.hs
--- a/Language/Translate/Google.hs
+++ b/Language/Translate/Google.hs
@@ -16,7 +16,7 @@
 -- You should have received a copy of the GNU General Public License
 -- along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-{-# LANGUAGE ViewPatterns #-}
+{-# LANGUAGE OverloadedStrings #-}
 module Language.Translate.Google (
     Language (..),
     translate,
@@ -24,14 +24,12 @@
 ) where
 
 import Data.Map (Map)
-import Data.Text (Text)
 import Network.Curl.Download
-import Text.JSON
+import Text.JSON.AttoJSON
 
 import qualified Codec.Binary.Url as C
 import qualified Data.ByteString as B
 import qualified Data.Map as M
-import qualified Data.Text as T
 
 data Language = 
     Afrikaans
@@ -219,10 +217,10 @@
     ,(Unknown,            "")]
 
 -- | Get translation from Google Translate.
-translate :: B.ByteString        -- ^ @text@ the byte string need to translate
-          -> Maybe Language      -- ^ @sourceLanguage@ source language, or 'Nothing' use automatic language detect
-          -> Language            -- ^ @destinationLanguage@ destination language
-          -> IO (Either String Text) 
+translate :: B.ByteString        -- ^ the byte string need to translate
+          -> Maybe Language      -- ^ source language, or 'Nothing' use automatic language detect
+          -> Language            -- ^ destination language
+          -> IO (Either String B.ByteString) 
 translate text srcLang destLang = do
   let getLangStr :: Language -> String
       getLangStr lang 
@@ -231,20 +229,26 @@
           | otherwise 
               = snd $ M.findMin newMap
                 where newMap = M.filterWithKey (\ l _ -> l == lang) languageMap
+  -- Build url.
   let url = "http://ajax.googleapis.com/ajax/services/language/translate?v=1.0" 
+            -- Request text. 
             ++ ("&q=" ++ C.encode (B.unpack text)) 
+            -- Source language and destination language.
             ++ ("&langpair=" 
                 ++ (maybe "" getLangStr srcLang
                     ++ "|" 
                     ++ getLangStr destLang))
 
-  string <- openURIString url
+  -- Request JSON data.
+  string <- openURI url
   
   return $ 
     case string of
         Left error -> Left error
         Right jsonString -> 
-            case decode jsonString of 
-              Ok ((valFromObj "responseData") -> Ok ((valFromObj "translatedText") -> Ok tr)) -> 
-                  Right $ T.pack $ fromJSString tr
-              Error error -> Left error
+            case parseJSON jsonString of
+              Left error -> Left error
+              Right jsvalue -> 
+                  case getFields ["responseData", "translatedText"] jsvalue of
+                    Just (JSString str) -> Right str
+                    _ -> Left "translate : parse failed."
