protected function permitLookupDatasetStorageChanges(DataControllerCallContext $callcontext, DatasetMetaData $originalLogicalDataset, DatasetMetaData $modifiedLogicalDataset) {
        $metamodel = data_controller_get_metamodel();

        $originalPrimaryKeyColumnName = $originalLogicalDataset->getKeyColumn()->name;

        // checking if the primary key changed
        $doesPrimaryKeyMatch = FALSE;
        $modifiedPrimaryKeyColumnNames = $modifiedLogicalDataset->findKeyColumnNames();
        if (count($modifiedPrimaryKeyColumnNames) == 1) {
            $modifiedPrimaryKeyColumnName = reset($modifiedPrimaryKeyColumnNames);
            $doesPrimaryKeyMatch = $originalPrimaryKeyColumnName == $modifiedPrimaryKeyColumnName;
        }
        if ($doesPrimaryKeyMatch) {
            return;
        }

        // checking if this dataset was used as lookup somewhere
        foreach ($metamodel->datasets as $dataset) {
            foreach ($dataset->getColumns(FALSE, TRUE) as $column) {
                if ($column->type->getReferencedDatasetName() == $originalLogicalDataset->name) {
                    throw new IllegalArgumentException(t(
                        '%datasetName dataset is referenced by other datasets. Changes to the primary key is not permitted unless the references are removed first',
                        array('%datasetName' => $modifiedLogicalDataset->publicName)));
                }
            }
        }
    }