private function prepareSave(
        $updateFields = null,
        $forceInsert = false,
        $forceUpdate = false
    ) {
        $model = $this;

        // for proxy models, we use the concreteModel
        if ($model->getMeta()->proxy) {
            $model = $model->getMeta()->getConcreteModel();
        }

        $meta = $model->getMeta();

        // post save signal
        if (!$meta->autoCreated) {
            $this->dispatchSignal('powerorm.model.pre_save', $model);
        }

        $this->saveParent($model, $updateFields);
        $this->saveTable(
            $model,
            $forceInsert,
            $forceUpdate,
            $updateFields
        );

        // presave signal
        if (!$meta->autoCreated) {
            $this->dispatchSignal('powerorm.model.post_save', $model);
        }
    }