public function preSave()
    {
        $this->originalData = $this->original;
        $this->updatedData = $this->attributes;

        // we can only safely compare basic items, so for now we drop any object based
        // items apart from DateTime objects where we compare them specially
        foreach ($this->updatedData as $key => $val) {
            if (is_object($val)) {
                if (!($val instanceof DateTime)) {
                    unset($this->originalData[$key]);
                    unset($this->updatedData[$key]);
                }
            }
        }

        // the below is ugly, for sure, but it's required so we can save the standard model
        // then use the keep / dontkeep values for later, in the isRevisionable method
        $this->dontKeep = isset($this->dontKeepRevisionOf) ?
            $this->dontKeepRevisionOf + $this->dontKeep
            : $this->dontKeep;

        $this->doKeep = isset($this->keepRevisionOf) ?
            $this->keepRevisionOf + $this->doKeep
            : $this->doKeep;

        unset($this->attributes['dontKeepRevisionOf']);
        unset($this->attributes['keepRevisionOf']);

        $this->dirtyData = $this->getDirty();
        $this->updating = $this->exists;
    }