private static void polthierAndRumpf(Component4D component,
			Map<Integer, Point3D> newPoints, Date date) {

		Map<Integer, List<Point3D>> pointTubes = component.getPointTubes();

		LinkedList<Date> timesteps = component.getTimesteps();

		timesteps.add(date);

		Iterator<Integer> it = newPoints.keySet().iterator();

		Map<Integer, Point3D> correlation = new TreeMap<Integer, Point3D>();

		// TODO: Code for the Deltaspeicherung:

		// HashSet<Point3D> oldPoints = new HashSet<Point3D>();
		//
		// Iterator<Integer> it2 = pointTubes.keySet().iterator();
		//
		// while (it2.hasNext()) {
		// oldPoints.add(pointTubes.get(it2.next()).get(timesteps.size() - 2));
		// }
		//
		// double time = System.currentTimeMillis();
		//
		// quite expansive...
		// while(it.hasNext()) {
		// int id = it.next();
		// if(oldPoints.contains(newPoints.get(id))) {
		// Iterator<Point3D> itOldPoints = oldPoints.iterator();
		// while(itOldPoints.hasNext()) {
		// Point3D tmp = itOldPoints.next();
		// if(tmp.equals(newPoints.get(id))) {
		// correlation.put(id, tmp);
		// break;
		// }
		// }
		// }
		// }

		// System.out.println();
		// System.out.println("Zeitverbrauch: " + (System.currentTimeMillis() -
		// time));
		// System.out.println();

		// System.out.println(oldPoints.size());
		// System.out.println(newPoints.size());
		// System.out.println(correlation.size());

		// TODO: End of Deltaspeicherung

		// add all Points with their ID to the pointTube Map
		// reset iterator
		it = newPoints.keySet().iterator();

		while (it.hasNext()) {

			Integer id = it.next();

			// It is the initial step of a new interval defined by the
			// Postobject and the next Preobject/Lastobject, so we have
			// to create a new HashMap for every not already existing
			// Point.
			if (!pointTubes.containsKey(id)) {

				List<Point3D> newTube = new LinkedList<Point3D>();

				// Deltaspeicherung:
				if (correlation.containsKey(id)) {
					newTube.add(correlation.get(id));
				} else {
					newTube.add(newPoints.get(id));
				}

				pointTubes.put(id, newTube);
			} else {
				// If the id already exists in the PointTubes extend its
				// timeinterval by the new point.

				// Deltaspeicherung:
				if (correlation.containsKey(id)) {
					pointTubes.get(id).add(correlation.get(id));
				} else {
					pointTubes.get(id).add(newPoints.get(id));
				}
			}
		}

		// Boundary Elements
		if (component.getNet().getType() == ComplexGeoObj.TRIANGLE_NET_4D) {
			TriangleNet4D net = (TriangleNet4D) component.getNet();

			if (net.isBoundaryElements()) {
				TriangleServices services = new TriangleServices();
				services.createBoundaryElements(net, newPoints, date);
			}
		}

		// Boundary Elements for Tetrahedrons
		if (component.getNet().getType() == ComplexGeoObj.TETRAHEDRON_NET_4D) {
			TetrahedronNet4D net = (TetrahedronNet4D) component.getNet();

			if (net.isBoundaryElements()) {
				TetrahedronServices services = new TetrahedronServices();
				services.createBoundaryElements(net, newPoints, date);
			}
		}
	}