docs: function(location) {
              var instance = this,
                  state = location.state,
                  view = state.view,
                  title = state.title,
                  staticView = state.staticView,
                  componentId = state.componentId,
                  requireId = state.requireId,
                  lang = state.lang,
                  pathname = location.pathname,
                  search = location.search,
                  origin = WINDOW.location.origin,
                  viewObject, keys;
  
              instance.lastLocation = location.itsa_deepClone(); // for usage when valling `reload`
  
              // first: currently loading another io-promise: then abort!
              // this way we prevent delay
              if (instance._viewCompIO && instance._viewCompIO.abort) {
                  instance._viewCompIO.abort();
              }
              if (instance._viewCssIO && instance._viewCssIO.abort) {
                  instance._viewCssIO.abort();
              }
              if (instance._viewPropIO && instance._viewPropIO.abort) {
                  instance._viewPropIO.abort();
              }
  
              viewObject = instance.viewComponents[view];
              if (!viewObject) {
                  // create new viewobject and register
                  viewObject = {};
                  instance.registerViewComponent(view, viewObject);
              }
  
              if (!viewObject.ioComponentPromise) {
                  instance._viewCompIO = io.get(origin+pathname, {headers: {'x-comp': true}});
                  viewObject.ioComponentPromise = instance._viewCompIO.then(
                      function(data) {
                          var BodyComponent;
                          // save the requireId that we want to load
                          // only if the server decides to redirect to another view,
                          // then during evaluating `data`, it will be reset to another requireId;
                          WINDOW.itsa_requireId = requireId;
                          eval(data);
                          BodyComponent = webpackRequire(WINDOW.itsa_requireId);
                          return BodyComponent;
                      }
                  );
              }
  
              if (!viewObject.ioCssPromise) {
                  instance._viewCssIO = io.get(origin+pathname, {headers: {'x-css': true}});
                  viewObject.ioCssPromise = instance._viewCssIO
              }
  
              if (controller.getLang()!==lang) {
                  // force reload of properties of ALL viewObjects!
                  keys = Object.keys(instance.viewComponents);
                  keys.forEach(function(key) {delete instance.viewComponents[key].ioPropsPromise;});
              }
              if (!viewObject.ioPropsPromise) {
                  instance._viewPropIO = io.read(origin+pathname+search, null, {headers: {'x-props': true, 'x-lang': lang}, preventCache: !staticView});
                  viewObject.ioPropsPromise = instance._viewPropIO
              }
  
              return Promise.all([
                  viewObject.ioComponentPromise,
                  viewObject.ioCssPromise,
                  viewObject.ioPropsPromise
              ])
              .then(
                  function(responseArray) {
                      var BodyComponent = responseArray[0],
                          css = responseArray[1],
                          props = responseArray[2],
                          langSwitch = (controller.getLang()!==lang),
                          sameView = (view===controller.getView());
                      if (!staticView) {
                          // make sure the props are reloaded again:
                          delete viewObject.ioPropsPromise;
                      }
                      return controller.setPage({
                          view: view,
                          BodyComponent: BodyComponent,
                          title: title,
                          props: props,
                          css: css,
                          staticView: staticView,
                          componentId: componentId,
                          requireId: requireId,
                          lang: lang
                      }).then(function() {
                          sameView || instance.emit('pagechanged', {langSwitch: langSwitch});
                      });
                  },
                  function() {
                      delete viewObject.ioComponentPromise;
                      delete viewObject.ioCssPromise;
                      delete viewObject.ioPropsPromise;
                  }
              );
  
          }