     }
 }
 
-extension String : CustomStringConvertible {
-    public var description: String {
-        return self
-    }
-}
-
-extension Dictionary where Key: CustomStringConvertible, Value: CustomStringConvertible {
-    func toJson() -> String {
-        // What a hack to get toJson() only on Dictionary<String, String>. WTF, Apple.
-        var dict: [NSString : NSString] = [:]
-        for (name, value) in self {
-            dict[NSString(string: name.description)] = NSString(string: value.description)
-        }
-        let data = try! NSJSONSerialization.dataWithJSONObject(dict, options: NSJSONWritingOptions(rawValue: 0))
-        return NSString(data: data, encoding: NSUTF8StringEncoding) as! String
-    }
+protocol NSStringConvertible {
+    var nsString : NSString { get }
 }
 
 typealias OAuthRequestCompleted = () -> Void

        callback(expectation.fulfill)
        waitForExpectationsWithTimeout(timeout, handler: nil)
   }
}
    
    func testClientCredentialsSuccessfulAuth() {
        let url = "http://nonexistent.com/authorization"
        let processor = processorForResponse(200, url: url, body: ["access_token" : accessToken].toJSONString())
        
        let request = ClientCredentialsRequest(url: url , clientId: clientId, clientSecret: clientSecret)!
        var response: Response!
