public void performUndo(TrackInfo inTrackInfo) throws UndoException
	{
		// restore point into track
		if (!inTrackInfo.getTrack().insertPoint(_point, _pointIndex))
		{
			throw new UndoException(getDescription());
		}
		// Re-attach / Re-insert photo into list if necessary
		if (_point.getPhoto() != null && _photoIndex > -1)
		{
			// Check if photo is still in list
			if (!inTrackInfo.getPhotoList().contains(_point.getPhoto()))
			{
				// photo has been removed - need to reinsert
				inTrackInfo.getPhotoList().addPhoto(_point.getPhoto(), _photoIndex);
			}
			// Ensure that photo is associated with point
			if (_point.getPhoto().getDataPoint() != _point) {
				_point.getPhoto().setDataPoint(_point);
			}
		}
		// Restore previous status of following track point if necessary
		if (!_segmentStart)
		{
			// Deletion of point can only set following point to true, so only need to set it back to false
			DataPoint nextTrackPoint = inTrackInfo.getTrack().getNextTrackPoint(_pointIndex + 1);
			if (nextTrackPoint != null) {
				nextTrackPoint.setSegmentStart(false);
			}
		}
	}