                     observer.sendCompleted()
                 }
             }
-            self.fetch(route, callback: callback)
+            disposable.observeEnded {
+                req.cancel()
+            }
         }
     }
 
     func fetchItems<T: JSONInitializable>(_ route: Router) -> SignalProducer<[T], NSError> {
         return SignalProducer { observer, disposable in
-            let callback: OAuth2ClientDelegate.RequestCallback = {(response: DataResponse<Any
-                >) -> Void in
+            let req = self.manager.request(route).validate(statusCode: 200..<300).responseJSON(options: .allowFragments) {(response: DataResponse<Any>) -> Void in
                 if let e = response.result.error as NSError? {
                     if let r = response.response {
                         observer.send(error: NSError(domain: e.domain, code: e.code, userInfo: [APIClient.errorResponseKey:r]))

                    observer.sendCompleted()
                }
            }
            self.fetch(route, callback: callback)
        }
    }


import NXOAuth2Client
import ReactiveSwift
import Alamofire
import OAuthSwift
import Prephirences

open class SoundCloudOAuthRequestRetrier: OAuthRequestRetrier {
    public override func refreshed(_ succeeded: Bool) {
        if succeeded {
            APIClient.credential = oauth.client.credential
            APIClient.accessToken = oauth.client.credential.oauthToken
        } else {
            APIClient.credential = nil
            APIClient.accessToken = nil
        }
    }
}

