         guard let httpResponse = response as? NSHTTPURLResponse else {
             return JSONResult.Failure(error: JSONError.NonHTTPResponse, response: nil, body: nil)
         }
-        guard data != nil && data!.length > 0 else {
+        guard let data = data where data.length > 0 else {
             return JSONResult.Success(data: nil, response: httpResponse)
         }
-        let json = try? NSJSONSerialization.JSONObjectWithData(data!, options: [.AllowFragments])
-        guard json != nil else {
+        guard let json = JSONToObject(data) else {
             return JSONResult.Failure(error: JSONError.ResponseDeserialization,
                                       response: httpResponse,
-                                      body: String(data: data!, encoding: NSUTF8StringEncoding))
-        }
-        return JSONResult.Success(data: json!, response: httpResponse)
+                                      body: dataToUTFString(data))
+        }
+        return JSONResult.Success(data: json, response: httpResponse)
     }
 
     func bodyStringFromData(data: NSData?) -> String? {

        guard let payload = payload else {
            return
        }
        if NSJSONSerialization.isValidJSONObject(payload) {
            request?.HTTPBody = try? NSJSONSerialization.dataWithJSONObject(payload, options: [])
        }
    }

    func createURL(urlString: String, queryParams: JSONObject?) -> NSURL? {

        updateRequestHeaders(headers)
        updateRequestPayload(payload)

        let task: NSURLSessionDataTask
        task = networkSession().dataTaskWithRequest(request!) { (data, response, error) in
            self.traceResponse(data, httpResponse: response as? NSHTTPURLResponse, error: error)
            if let error = error {
                let result = JSONResult.Failure(error: JSONError.RequestFailed(error: error),
                                                response: response as? NSHTTPURLResponse,
