     })
 
     models = [george, john, paul, ringo]
-    model.save(->) for model in models
-    model.fetchRelated(->) for model in models
-
-    model_stats = {}
-    model_stats.george = {model: george, event_stats: kb.Statistics.eventsStats(george)}
-    model_stats.john = {model: john, event_stats: kb.Statistics.eventsStats(john)}
-    model_stats.paul = {model: paul, event_stats: kb.Statistics.eventsStats(paul)}
-    model_stats.ringo = {model: ringo, event_stats: kb.Statistics.eventsStats(ringo)}
-
-    john_view_model = new kb.ViewModel(john)
-    assert.equal(john_view_model.name(), 'John', "Name is correct")
-    for friend in john_view_model.friends()
-      assert.ok(_.contains(['Paul', 'George', 'Ringo'], friend.name()), 'Expected name')
-    assert.equal(john_view_model.best_friend().name(), 'George', 'Expected name')
-    assert.equal(john_view_model.best_friends_with_me()[0].name(), 'George', 'Expected name')
-    kb.release(john_view_model); john_view_model = null
-
-    paul_view_model = new kb.ViewModel(paul)
-    assert.equal(paul_view_model.name(), 'Paul', "Name is correct")
-    for friend in paul_view_model.friends()
-      assert.ok(_.contains(['John', 'George', 'Ringo'], friend.name()), 'Expected name')
-    assert.equal(paul_view_model.best_friend().name(), 'George', 'Expected name')
-    assert.equal(paul_view_model.best_friends_with_me().length, 0, 'No best friends with me')
-    kb.release(paul_view_model); paul_view_model = null
-
-    george_view_model = new kb.ViewModel(george)
-    assert.equal(george_view_model.name(), 'George', "Name is correct")
-    for friend in george_view_model.friends()
-      assert.ok(_.contains(['John', 'Paul', 'Ringo'], friend.name()), 'Expected name')
-    assert.equal(george_view_model.best_friend().name(), 'John', 'Expected name')
-    assert.equal(george_view_model.best_friends_with_me()[0].name(), 'John', 'Expected name')
-    assert.equal(george_view_model.best_friends_with_me()[1].name(), 'Paul', 'Expected name')
-    kb.release(george_view_model); george_view_model = null
-
-    for name, stats of model_stats
-      assert.ok(kb.Statistics.eventsStats(stats.model).count is stats.event_stats.count, "All model events cleared to initial state. Expected: #{JSON.stringify(stats.event_stats)}. Actual: #{JSON.stringify(kb.Statistics.eventsStats(stats.model))}")
-    assert.equal(kb.statistics.registeredStatsString('all released'), 'all released', "Cleanup: stats"); kb.statistics = null
-    done()
+    queue = new Queue(1)
+    for model in models
+      do (model) -> queue.defer (callback) -> model.save(callback)
+    for model in models
+      do (model) -> queue.defer (callback) -> model.fetchRelated(callback)
+    queue.await (err) ->
+      return done(err) if err
+
+      model_stats = {}
+      model_stats.george = {model: george, event_stats: kb.Statistics.eventsStats(george)}
+      model_stats.john = {model: john, event_stats: kb.Statistics.eventsStats(john)}
+      model_stats.paul = {model: paul, event_stats: kb.Statistics.eventsStats(paul)}
+      model_stats.ringo = {model: ringo, event_stats: kb.Statistics.eventsStats(ringo)}
+
+      john_view_model = new kb.ViewModel(john)
+      assert.equal(john_view_model.name(), 'John', "Name is correct")
+      for friend in john_view_model.friends()
+        assert.ok(_.contains(['Paul', 'George', 'Ringo'], friend.name()), 'Expected name')
+      assert.equal(john_view_model.best_friend().name(), 'George', 'Expected name')
+      assert.equal(john_view_model.best_friends_with_me()[0].name(), 'George', 'Expected name')
+      kb.release(john_view_model); john_view_model = null
+
+      paul_view_model = new kb.ViewModel(paul)
+      assert.equal(paul_view_model.name(), 'Paul', "Name is correct")
+      for friend in paul_view_model.friends()
+        assert.ok(_.contains(['John', 'George', 'Ringo'], friend.name()), 'Expected name')
+      assert.equal(paul_view_model.best_friend().name(), 'George', 'Expected name')
+      assert.equal(paul_view_model.best_friends_with_me().length, 0, 'No best friends with me')
+      kb.release(paul_view_model); paul_view_model = null
+
+      george_view_model = new kb.ViewModel(george)
+      assert.equal(george_view_model.name(), 'George', "Name is correct")
+      for friend in george_view_model.friends()
+        assert.ok(_.contains(['John', 'Paul', 'Ringo'], friend.name()), 'Expected name')
+      assert.equal(george_view_model.best_friend().name(), 'John', 'Expected name')
+      assert.equal(george_view_model.best_friends_with_me()[0].name(), 'John', 'Expected name')
+      assert.equal(george_view_model.best_friends_with_me()[1].name(), 'Paul', 'Expected name')
+      kb.release(george_view_model); george_view_model = null
+
+      for name, stats of model_stats
+        assert.ok(kb.Statistics.eventsStats(stats.model).count is stats.event_stats.count, "All model events cleared to initial state. Expected: #{JSON.stringify(stats.event_stats)}. Actual: #{JSON.stringify(kb.Statistics.eventsStats(stats.model))}")
+      assert.equal(kb.statistics.registeredStatsString('all released'), 'all released', "Cleanup: stats"); kb.statistics = null
+      done()
 
   it '4. After view model create, add models', (done) ->
     class Occupant extends Backbone.Model

  class Building extends Backbone.Model
    model_name: 'Building'
    schema:
      occupants: -> ['hasMany', Person, as: 'occupies']
    sync: BackboneORM.sync(Building)


    class Book extends Backbone.Model
      model_name: 'Book'
      schema:
        id: [manual: true]
        author: -> ['belongsTo', Author]
      sync: BackboneORM.sync(Book)

