private void removePoint(GeoElement oldPoint) {

    // remove dependent algorithms (e.g. segments) from update sets of
    // objects further up (e.g. polygon) the tree
    ArrayList<AlgoElement> algoList = oldPoint.getAlgorithmList();
    for (int k = 0; k < algoList.size(); k++) {
      AlgoElement algo = 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
    GeoPolygon poly = getPoly();
    for (int k = 0; k < algoList.size(); k++) {
      AlgoElement algo = algoList.get(k);
      // make sure we don't remove the polygon as well
      if (algo instanceof AlgoJoinPointsSegmentInterface
          && ((AlgoJoinPointsSegmentInterface) algo).getPoly() == poly) {
        continue;
      }
      algo.remove();
    }

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