Based on Backbone.js