text: function GetRemote(model, cascade, options)
  {
    this.reset( model, cascade, options );
  }
  
  Class.extend( Operation, GetRemote,
  {
  
    cascading: Cascade.Rest,
  
    interrupts: false,
  
    type: 'GetRemote',
  
    run: function(db, model)
    {
      if ( model.$isDeleted() )
      {
        model.$trigger( Model.Events.RemoteGetFailure, [model] );
  
        this.finish();
      }
      else if ( this.canCascade() )
      {
        batchExecute(function()
        {
          db.rest.get( model, this.options || db.getOptions, this.success(), this.failure() );
  
        }, this );
      }
      else
      {
        model.$trigger( Model.Events.RemoteGet, [model] );
  
        this.finish();
      }
    },
  
    onSuccess: function(response)
    {
      var db = this.db;
      var data = db.resolveModel( response );
      var model = this.model;
  
      if ( isObject( data ) )
      {
        db.putRemoteData( data, model.$key(), model, true );
      }
  
      Rekord.debug( Rekord.Debugs.GET_REMOTE, model, data );
  
      model.$trigger( Model.Events.RemoteGet, [model] );
    },
  
    onFailure: function(response, status)
    {
      var db = this.db;
      var model = this.model;
  
      Rekord.debug( Rekord.Debugs.GET_REMOTE_ERROR, model, response, status );
  
      if ( RestStatus.NotFound[ status ] )
      {
        this.insertNext( RemoveNow );
  
        db.destroyModel( model );
  
        model.$trigger( Model.Events.RemoteGetFailure, [model, response] );
      }
      else if ( RestStatus.Offline[ status ] )
      {
        model.$trigger( Model.Events.RemoteGetOffline, [model, response] );
      }
      else
      {
        model.$trigger( Model.Events.RemoteGetFailure, [model, response] );
      }
    }
  
  });
  