public function init(Entity $entity, Closure $adder = NULL, Closure $remover = NULL) {
    parent::init($entity);
    
    list($add, $remove) = $this->getRelationInterface();
    
    if (!$adder) {
      $adder = function ($entity, $toEntity, $repository) use ($add) {
        $repository->persist($toEntity);
        $entity->$add($toEntity);
      };
    }
    
    if (!$remover) {
      $remover = function ($entity, $fromEntity, $repository) use ($remove) {
        $repository->persist($fromEntity);
        $entity->$remove($fromEntity);
      };
    }
    
    $repository = $this->collectionRepository;
    
    // insert: in $toCollection gibt es ein $toEntity, welches noch nicht in $fromCollection war
    $this->innerSynchronizer->onInsert(function ($toEntity) use ($repository, $entity, $adder) {
      $adder($entity, $toEntity, $repository);
    });
    
    // update bzw merge: das $toEntity war bereits in der $fromCollection und ist in der $toCollection
    $this->innerSynchronizer->onUpdate(function ($toEntity) use ($repository, $entity, $adder) {
      $adder($entity, $toEntity, $repository, $isUpdate = TRUE);
    });
    
    // delete: das $fromEntity war vorher in der $fromCollection und ist nicht mehr in der $toCollection
    $this->innerSynchronizer->onDelete(function (Entity $fromEntity) use ($entity, $remover, $repository) {
      $remover($entity, $fromEntity, $repository);
      // wenn $fromEntity 0 verknüpfungen hat, könnte man es hier auch löschen, dies macht aber das relationinterface
    });
    
    return $this;
  }