       .combineLatest(listingType, afterObservable, accessTokenObservable, pathObservable) {
       ($0, $1, $2, $3)
       }.take(1)
-      .flatMap {
+      .doOnNext { [weak self] _ in
+        self?._loadingState.value = .Loading
+      }.flatMap {
         (listingType: ListingType, after: String?, accessToken: AccessToken?, path: String) in
         Network.request(RedditAPI.LinkListing(token: accessToken?.token,
           path: path, listingPath: listingType.path, after: after))
-      }.mapObject(LinkListing)
+      }.observeOn(SerialDispatchQueueScheduler(globalConcurrentQueueQOS: .Background))
+      .mapObject(LinkListing)
+      .observeOn(MainScheduler.instance)
   }
 }
 

  private let _viewModels: Variable<[LinkListItemViewModel]> = Variable([])
  private let _listingType: Variable<ListingType> = Variable(.Hot)
  private let disposeBag = DisposeBag()

  // MARK: Initializer
  init(user: User?, accessToken: AccessToken?, title: String, path: String) {


  var viewModels: Observable<[LinkListItemViewModel]> {
    return _viewModels.asObservable()
  }

  var loadingState: Observable<LoadingState> {
    return _loadingState.asObservable()
  }

  var listingType: Observable<ListingType> {
