public function sync($removeRedundantColumns = true) {
        $target = $this->getTarget();
        $keysInSync = true;

        $configuredKeys = $this->_getConfiguredKeys();
        $keySyncer = new Garp_Spawn_MySql_Key_Set_Synchronizer(
            $configuredKeys,
            $target->keys,
            $this->getFeedback()
        );

        if (!$keySyncer->removeKeys()) {
            $keysInSync = false;
        }

        $colsInSync = $this->_syncColumns($target);

        $i18nTableFork = $this->_detectI18nTableFork();

        if ($i18nTableFork) {
            $dbManager = Garp_Spawn_MySql_Manager::getInstance($this->_feedback);
            $dbManager->onI18nTableFork($this->getModel());
        }

        if ($removeRedundantColumns) {
            $this->_deleteRedundantColumns();
        }

        if (!$keySyncer->addKeys() || !$keySyncer->modifyKeys()) {
            $keysInSync = false;
        }
        return $colsInSync && $keysInSync;
    }