protected function saveStateAttribute($runValidation)
	{
		/* @var $owner \yii\db\ActiveRecord */
		$owner = $this->owner;

		//catch unchanged state attribute
		if (!$this->hasChangedStateAttribute()) return false;

		//fetch relevant configs
		$curCfg = $this->getStateConfig($owner->getOldAttribute($this->stateAttribute));
		$nextCfg = $this->getStateConfig();

		//call leave state callback on old state
		if (isset($curCfg['leaveStateCallback'])) {
			call_user_func($curCfg['leaveStateCallback'], $owner, $curCfg);
		}

		//save it
		if ($owner->save($runValidation, [$this->stateAttribute])) {
			//call enter state callback on new state
			if (isset($nextCfg['enterStateCallback'])) {
				call_user_func($nextCfg['enterStateCallback'], $owner, $nextCfg);
			}
			return true;
		} else {
			return false;
		}
	}