private void importIdentity(
      boolean ownIdentity,
      String identityID,
      String requestURI,
      String insertURI,
      String nickname) {
    synchronized (mFreetalk.getTaskManager()) {
      synchronized (db.lock()) {
        try {
          Logger.normal(this, "Importing identity from WoT: " + requestURI);
          final WoTIdentity id =
              ownIdentity
                  ? new WoTOwnIdentity(
                      identityID, new FreenetURI(requestURI), new FreenetURI(insertURI), nickname)
                  : new WoTIdentity(identityID, new FreenetURI(requestURI), nickname);

          id.initializeTransient(mFreetalk);
          id.storeWithoutCommit();

          onNewIdentityAdded(id);

          if (ownIdentity) onNewOwnIdentityAdded((WoTOwnIdentity) id);

          id.checkedCommit(this);
        } catch (Exception e) {
          Persistent.checkedRollbackAndThrow(db, this, new RuntimeException(e));
        }
      }
    }
  }
  public synchronized WoTOwnIdentity createOwnIdentity(
      String newNickname,
      boolean publishesTrustList,
      boolean publishesIntroductionPuzzles,
      boolean autoSubscribeToNewBoards,
      boolean displayImages)
      throws Exception {

    Logger.normal(this, "Creating new own identity via FCP, nickname: " + newNickname);

    SimpleFieldSet params = new SimpleFieldSet(true);
    params.putOverwrite("Message", "CreateIdentity");
    params.putOverwrite("Nickname", newNickname);
    params.putOverwrite("PublishTrustList", publishesTrustList ? "true" : "false");
    params.putOverwrite(
        "PublishIntroductionPuzzles", publishesIntroductionPuzzles ? "true" : "false");
    params.putOverwrite("Context", Freetalk.WOT_CONTEXT);
    PluginTalkerBlocking.Result result = sendFCPMessageBlocking(params, null, "IdentityCreated");

    WoTOwnIdentity identity =
        new WoTOwnIdentity(
            result.params.get("ID"),
            new FreenetURI(result.params.get("RequestURI")),
            new FreenetURI(result.params.get("InsertURI")),
            newNickname,
            autoSubscribeToNewBoards,
            displayImages);

    identity.initializeTransient(mFreetalk);

    Logger.normal(this, "Created WoTOwnidentity via FCP, now storing... " + identity);

    synchronized (mFreetalk.getTaskManager()) { // Required by onNewOwnidentityAdded
      synchronized (db.lock()) {
        try {
          identity.initializeTransient(mFreetalk);
          identity.storeWithoutCommit();
          onNewOwnIdentityAdded(identity);
          identity.checkedCommit(this);
          Logger.normal(this, "Stored new WoTOwnIdentity " + identity);

        } catch (RuntimeException e) {
          Persistent.checkedRollbackAndThrow(db, this, e);
        }
      }
    }

    return identity;
  }
  private synchronized void deleteIdentity(
      WoTIdentity identity, MessageManager messageManager, PersistentTaskManager taskManager) {
    identity.initializeTransient(mFreetalk);

    beforeIdentityDeletion(identity);

    if (identity instanceof WoTOwnIdentity) beforeOwnIdentityDeletion((WoTOwnIdentity) identity);

    synchronized (identity) {
      synchronized (db.lock()) {
        try {
          identity.deleteWithoutCommit();

          Logger.normal(this, "Identity deleted: " + identity);
          identity.checkedCommit(this);
        } catch (RuntimeException e) {
          Persistent.checkedRollbackAndThrow(db, this, e);
        }
      }
    }

    mShortestUniqueNicknameCacheNeedsUpdate = true;
  }