diff --git a/Plotserver/Api.hs b/Plotserver/Api.hs
--- a/Plotserver/Api.hs
+++ b/Plotserver/Api.hs
@@ -15,36 +15,48 @@
 plotUrl (PlotConfig {server}) dataset = server ++ "/" ++ dataset
 
 plotCat :: PlotConfig -> String -> IO (Either String PlotData)
-plotCat config dataset = response2either <$> curlGetResponse_ url_ opts where
+plotCat config dataset = parseResponse <$> curlGetResponse_ url_ opts where
 	url_ = actionUrl config dataset "download"
 	opts = defaultOpts config
+	-- TODO write real Maybe!
+	parseResponse = response2either $ Just . (read :: (String -> PlotData))
 
 plotUpdate :: PlotConfig -> String -> PlotDataRow -> IO (Either String PlotData)
-plotUpdate config dataset row = response2either <$> curlGetResponse_ url_ opts where
+plotUpdate config dataset row = parseResponse <$> curlGetResponse_ url_ opts where
 	postData = show $ PlotData [row]
 	url_ = actionUrl config dataset "update"
 	opts = defaultOpts config ++ [
 		CurlPost True,
 		CurlPostFields [postData]
 		]
+	parseResponse = response2either $ matchString2MaybePlotdata "File written."
 
 plotDelete :: PlotConfig -> String -> IO (Either String PlotData)
-plotDelete config dataset = response2either <$> curlGetResponse_ url_ opts where
+plotDelete config dataset = parseResponse <$> curlGetResponse_ url_ opts where
 	url_ = actionUrl config dataset "delete"
 	opts = defaultOpts config
+	parseResponse = response2either $ matchString2MaybePlotdata "File deleted."
 
 ------ helpers ------
 
+matchString2MaybePlotdata :: String -> String -> Maybe PlotData
+matchString2MaybePlotdata expected real = if real == expected
+									 then Just $ PlotData []
+									 else Nothing
+
 defaultOpts :: PlotConfig -> [CurlOption]
 defaultOpts PlotConfig {username, password} = [
-		CurlUserPwd (username ++ ":" ++ password)
+		CurlUserPwd (username ++ ":" ++ password),
+		CurlFollowLocation True
 	]
 
 actionUrl :: PlotConfig -> String -> String -> String
 actionUrl config dataset action = plotUrl config dataset ++ "?" ++ action
 
-response2either :: CurlResponse_ [(String, String)] String -> Either String PlotData
-response2either response 
-	| respStatus response == 200 = Right $ (read (respBody response) :: PlotData)
+response2either :: (String -> Maybe PlotData) -> CurlResponse_ [(String, String)] String -> Either String PlotData
+response2either parser response
+	| respStatus response == 200 = case parser (respBody response) of
+										Just res -> Right res
+										Nothing  -> Left $ "Parse error: " ++ (respBody response)
 	| otherwise = Left err where
-		err = "Error: " ++ show (respStatus response)
+		err = "Curl error: " ++ show (respStatus response) ++ " " ++ (respStatusLine response)
diff --git a/plotserver-api.cabal b/plotserver-api.cabal
--- a/plotserver-api.cabal
+++ b/plotserver-api.cabal
@@ -1,5 +1,5 @@
 Name:              plotserver-api
-Version:           0.21
+Version:           0.22
 Synopsis:          Plotserver API
 Description:       A lightweight API for Prezi's opensourced Plotserver (https:\/\/github.com\/prezi\/plotserver)
 License:           MIT
@@ -15,7 +15,7 @@
   Location:        https://github.com/dtorok/plotserver-hsapi
 
 Library
-  Build-Depends:   base >= 3 && < 5,
+  Build-Depends:   base >= 4 && < 5,
                    curl,
                    split
   Exposed-modules: Plotserver.Api, Plotserver.Types
