private void removePoint(GeoPoint oldPoint) {

    // remove dependent algorithms (e.g. segments) from update sets of
    // objects further up (e.g. polygon) the tree
    ArrayList algoList = oldPoint.getAlgorithmList();
    for (int k = 0; k < algoList.size(); k++) {
      AlgoElement algo = (AlgoElement) algoList.get(k);
      for (int j = 0; j < input.length; j++) input[j].removeFromUpdateSets(algo);
    }

    // remove old point
    oldPoint.setParentAlgorithm(null);

    // remove dependent segment algorithm that are part of this polygon
    // to make sure we don't remove the polygon as well
    for (int k = 0; k < algoList.size(); k++) {
      AlgoElement algo = (AlgoElement) algoList.get(k);
      // make sure we don't remove the polygon as well
      if (algo instanceof AlgoJoinPointsSegment
          && ((AlgoJoinPointsSegment) algo).getPoly() == poly) {
      } else {
        algo.remove();
      }
    }

    algoList.clear();
    // remove point
    oldPoint.doRemove();
  }