refreshData: function() {
      var self = this;

      var configModel = new EditorConfigModel({_courseId: this.model.get('_id')});
      // Ensure that the latest config model is always up-to-date when entering this screen
      configModel.fetch({
        success: function(model, response, options) {
          Origin.editor.data.config =  model;

          Origin.trigger('scaffold:updateSchemas', function() {
            self.setupExtensions();
          }, this);
        }
      });
    },
  function routeAfterDataIsLoaded(route1, route2, route3, route4) {
    
    if (route2 === 'article' && route4 === 'edit') {
      var articleModel = new EditorArticleModel({_id: route3});
      articleModel.fetch({
        success: function() {
          var form = Origin.scaffold.buildForm({
            model: articleModel
          });
          Origin.trigger('location:title:update', {title: 'Editing article - ' + articleModel.get('title')});
          Origin.sidebar.addView(new EditorArticleEditSidebarView({model: articleModel, form: form}).$el);
          Origin.editingOverlay.addView(new EditorArticleEditView({model: articleModel, form: form}).$el);
        }
      });
      return;
    }

    if (route2 === 'block' && route4 === 'edit') {
      var blockModel = new EditorBlockModel({_id: route3});
      blockModel.fetch({
        success: function() {
          var form = Origin.scaffold.buildForm({
            model: blockModel
          });
          Origin.trigger('location:title:update', {title: 'Editing block - ' + blockModel.get('title')});
          Origin.sidebar.addView(new EditorBlockEditSidebarView({model: blockModel, form: form}).$el);
          Origin.editingOverlay.addView(new EditorBlockEditView({model: blockModel, form: form}).$el);
        }
      });
      return;
    }

    if (route2 === 'block' && route4 === 'add') {
      // If adding a new component
      // Find block so we can get layout options
      var containingBlock = Origin.editor.data.blocks.findWhere({_id: route3});

      var layoutOptions = containingBlock.get('layoutOptions');

      var componentSelectModel = new Backbone.Model({
        title: window.polyglot.t('app.addcomponent'),
        body: window.polyglot.t('app.pleaseselectcomponent'),
        _parentId: route3,
        componentTypes: Origin.editor.data.componentTypes.toJSON(),
        layoutOptions: layoutOptions
      });

      Origin.sidebar.addView(new EditorComponentListSidebarView({
        model: componentSelectModel
      }).$el);
      Origin.editingOverlay.addView(new EditorComponentListView({
        model: componentSelectModel
      }).$el);

      return;
    }

    if (route2 === 'component') {
      // Display editing a component
      var componentModel = new EditorComponentModel({_id: route3});
      componentModel.fetch({
        success: function() {
          var form = Origin.scaffold.buildForm({
            model: componentModel
          });

          var componentType = _.find(Origin.editor.data.componentTypes.models, function(componentTypeModel) {
            return componentTypeModel.get('_id') == componentModel.get('_componentType');
          });

          var componentDisplayName = (componentType) ? componentType.get('displayName').toLowerCase() : '';

          Origin.trigger('location:title:update', {title: 'Editing ' + componentDisplayName + ' component - ' + componentModel.get('title')});
          Origin.sidebar.addView(new EditorComponentEditSidebarView({model: componentModel, form:form}).$el);
          Origin.editingOverlay.addView(new EditorComponentEditView({model: componentModel, form:form}).$el);
        }
      });
      return;
    }

    switch (route2) {
      case 'settings':
        var project = new ProjectModel({_id: route1});

        project.fetch({
          success: function() {
            var form = Origin.scaffold.buildForm({
              model: project
            });
            Origin.trigger('location:title:update', {title: 'Edit course'});
            Origin.editingOverlay.addView(new ProjectDetailView({model: project, form: form}).$el);
            Origin.sidebar.addView(new ProjectDetailEditSidebarView({form: form}).$el);
          }
        });
        break;

      case 'config':
        // route2 is the courseid
        // var collection = new EditorConfigCollection();
        // collection.findWhere({_courseId: location});

        var configModel = new EditorConfigModel({_courseId: route1});

        configModel.fetch({
          success: function() {
            var form = Origin.scaffold.buildForm({
              model: configModel
            });

            Origin.trigger('location:title:update', {title: 'Edit configuration'});
            Origin.sidebar.addView(new EditorConfigEditSidebarView({form: form}).$el);
            Origin.editingOverlay.addView(new EditorConfigEditView({model: configModel, form: form}).$el);
          }
        });
        break;

      case 'selecttheme':
        var configModel = new EditorConfigModel({_courseId: route1});

        configModel.fetch({
          success: function() {
            Origin.trigger('location:title:update', {title: 'Select theme'});
            Origin.sidebar.addView(new EditorThemeCollectionSidebarView().$el);
            Origin.editingOverlay.addView(new EditorThemeCollectionView({model: configModel}).$el);
          }
        });
        break;

      case 'extensions':
        Origin.trigger('location:title:update', {title: 'Manage extensions'});

        var extensionsModel = new Backbone.Model({_id: route1});

        // Setup back button breadcrumb

        // Check whether the user came from the page editor or menu editor
        var backButtonRoute = "/#/editor/" + route1 + "/menu";
        var backButtonText = "Back to menu";

        if (Origin.previousLocation.route2 === "page") {
            backButtonRoute = "/#/editor/" + route1 + "/page/" + Origin.previousLocation.route3;
            backButtonText = "Back to page";
        }

        var optionsObject = {
            "backButtonText": backButtonText,
            "backButtonRoute": backButtonRoute
        };

        Origin.sidebar.addView(new EditorExtensionsEditSidebarView().$el, optionsObject);
        Origin.editingOverlay.addView(new EditorExtensionsEditView({model: extensionsModel}).$el);

        break;

      case 'menusettings':
        var configModel = new EditorConfigModel({_courseId: route1});

        configModel.fetch({
          success: function() {
            Origin.trigger('location:title:update', {title: 'Select menu'});
            Origin.sidebar.addView(new EditorMenuSettingsEditSidebarView().$el);
            Origin.editingOverlay.addView(new EditorMenuSettingsEditView({model: configModel}).$el);
          }
        });
        break;

      case 'menu':

        // Edit the menu item
        if (route4 === "edit") {
          var contentObjectModel = new EditorContentObjectModel({_id: route3});
          contentObjectModel.fetch({
            success: function() {
              
              var form = Origin.scaffold.buildForm({
                model: contentObjectModel
              });
              
              Origin.trigger('location:title:update', {title: 'Editing menu - ' + contentObjectModel.get('title')});
              Origin.sidebar.addView(new EditorPageEditSidebarView().$el);
              Origin.editingOverlay.addView(new EditorPageEditView({model: contentObjectModel, form: form}).$el);
            }
          });
        } else {
          // If route3 is an id set it to the currentContentObjectId
          Origin.editor.currentContentObjectId = (route3) ? route3 : undefined;

          // Update page title
          Origin.trigger('location:title:update', {title: 'Menu editor'});

          Origin.editor.scrollTo = 0;
          // Create Editor menu view
          Origin.router.createView(EditorView, {
            currentCourseId: route1,
            currentView: 'menu',
            currentPageId: (route3 || null)
          });

          // update sidebar view
          Origin.sidebar.addView(new EditorMenuSidebarView().$el, {
            "backButtonText": "Back to courses",
            "backButtonRoute": Origin.dashboardRoute
          });
        }
        break;
        
      case 'page':

        // Edit the page item
        if (route4 === "edit") {
          var contentObjectModel = new EditorContentObjectModel({_id: route3});
          contentObjectModel.fetch({
            success: function() {
              var form = Origin.scaffold.buildForm({
                model: contentObjectModel
              });
              Origin.trigger('location:title:update', {title: 'Editing page - ' + contentObjectModel.get('title')});
              Origin.sidebar.addView(new EditorPageEditSidebarView().$el);
              Origin.editingOverlay.addView(new EditorPageEditView({model: contentObjectModel, form: form}).$el);
            }
          });
        } else {
          // Update page title
          Origin.trigger('location:title:update', {title: 'Page editor'});

          // Create Editor page view
          // Origin.editor.scrollTo = 0;
          Origin.router.createView(EditorView, {
            currentCourseId: route1,
            currentView: 'page',
            currentPageId: (route3 || null)
          });
          // update sidebar view
          Origin.sidebar.addView(new EditorPageSidebarView().$el, {
            "backButtonText": "Back to course structure",
            "backButtonRoute": "/#/editor/" + route1 + "/menu"
          });   
        }
        break;
    }

  }