Index: applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/graph/ConnectorEvaluationGroup.java
===================================================================
--- applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/graph/ConnectorEvaluationGroup.java	(revision 17538)
+++ applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/graph/ConnectorEvaluationGroup.java	(revision 18130)
@@ -14,5 +14,5 @@
  * {@link JunctionEvaluationGroup}s.
  */
-class ConnectorEvaluationGroup extends EvaluationGroup {
+public class ConnectorEvaluationGroup extends EvaluationGroup {
 
 	private final Set<Segment> segments;
Index: applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/graph/GraphEdge.java
===================================================================
--- applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/graph/GraphEdge.java	(revision 17538)
+++ applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/graph/GraphEdge.java	(revision 18130)
@@ -1,6 +1,8 @@
 package org.openstreetmap.josm.plugins.graphview.core.graph;
 
+import java.util.Collection;
 import java.util.List;
 
+import org.openstreetmap.josm.plugins.graphview.core.property.GraphEdgePropertyType;
 import org.openstreetmap.josm.plugins.graphview.core.transition.Segment;
 
@@ -16,6 +18,9 @@
 	GraphNode getTargetNode();
 
-	/** returns the series of segments that are represented by this edge; != null */
-	List<Segment> getSegments();
-
+	/** returns all property types for which property values are available */
+	Collection<GraphEdgePropertyType<?>> getAvailableProperties();
+	
+	/** TODO */
+	<V> V getPropertyValue(GraphEdgePropertyType<V> property);
+	
 }
Index: applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/graph/JunctionEvaluationGroup.java
===================================================================
--- applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/graph/JunctionEvaluationGroup.java	(revision 17538)
+++ applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/graph/JunctionEvaluationGroup.java	(revision 18130)
@@ -13,5 +13,5 @@
  * group of nodes that will be evaluated independently from other groups
  */
-class JunctionEvaluationGroup extends EvaluationGroup {
+public class JunctionEvaluationGroup extends EvaluationGroup {
 
 	private final Set<SegmentNode> segmentNodes;
Index: applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/graph/TSBasedWayGraph.java
===================================================================
--- applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/graph/TSBasedWayGraph.java	(revision 17538)
+++ applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/graph/TSBasedWayGraph.java	(revision 18130)
@@ -10,4 +10,6 @@
 import java.util.Set;
 
+import org.openstreetmap.josm.plugins.graphview.core.property.GraphEdgePropertyType;
+import org.openstreetmap.josm.plugins.graphview.core.property.GraphEdgeSegments;
 import org.openstreetmap.josm.plugins.graphview.core.transition.Restriction;
 import org.openstreetmap.josm.plugins.graphview.core.transition.Segment;
@@ -21,4 +23,8 @@
 public class TSBasedWayGraph implements WayGraph, TransitionStructureObserver {
 
+	private static final GraphEdgePropertyType<?>[] PROPERTY_TYPES =
+		{GraphEdgeSegments.PROPERTY};
+		//TODO: -> parameter
+	
 	private static class GraphNodeImpl implements GraphNode {
 		private final SegmentNode node;
@@ -59,13 +65,17 @@
 
 	private static class GraphEdgeImpl implements GraphEdge {
+		
 		private final GraphNode startNode;
 		private final GraphNode targetNode;
-		private final List<Segment> segments;
-		public GraphEdgeImpl(GraphNode startNode, GraphNode targetNode, List<Segment> segments) {
-			assert startNode != null && targetNode != null && segments != null;
+		private final Map<GraphEdgePropertyType<?>, Object> properties;
+		
+		public GraphEdgeImpl(GraphNode startNode, GraphNode targetNode,
+				Map<GraphEdgePropertyType<?>, Object> properties) {
+			assert startNode != null && targetNode != null && properties != null;
 			this.startNode = startNode;
 			this.targetNode = targetNode;
-			this.segments = segments;
-		}
+			this.properties = properties;
+		}
+		
 		public GraphNode getStartNode() {
 			return startNode;
@@ -74,11 +84,18 @@
 			return targetNode;
 		}
-		public List<Segment> getSegments() {
-			return segments;
-		}
+		
+		public Collection<GraphEdgePropertyType<?>> getAvailableProperties() {
+			return properties.keySet();
+		}
+		public <V> V getPropertyValue(GraphEdgePropertyType<V> property) {
+			V result = (V) properties.get(property);
+			return result;
+		}
+		
 		@Override
 		public String toString() {
 			return "(" + startNode + "-->" + targetNode + ")";
 		}
+		
 	};
 
@@ -285,5 +302,6 @@
 									segment2GNMap_approaching.get(inboundSegment),
 									segment2GNMap_leaving.get(outboundSegment),
-									segmentSequence);
+									segmentSequence,
+									junctionEG);
 
 						}
@@ -323,5 +341,6 @@
 													startGraphNode,
 													targetGraphNode,
-													segmentSequence);
+													segmentSequence,
+													connectorEG);
 										}
 
@@ -338,4 +357,36 @@
 			}
 		}
+
+	}
+
+	private void createGraphEdge(
+			GraphNodeImpl startNode, GraphNodeImpl targetNode, 
+			List<Segment> segments, ConnectorEvaluationGroup evaluationGroup) {
+
+		Map<GraphEdgePropertyType<?>, Object> properties = 
+			new HashMap<GraphEdgePropertyType<?>, Object>(); //TODO: replace HashMap with List-based solution
+		
+		for (GraphEdgePropertyType<?> propertyType : PROPERTY_TYPES) {
+			Object value = propertyType.evaluate(evaluationGroup, segments, transitionStructure);
+			properties.put(propertyType, value);
+		}
+		
+		createGraphEdge(startNode, targetNode, properties);
+
+	}
+
+	private void createGraphEdge(
+			GraphNodeImpl startNode, GraphNodeImpl targetNode, 
+			List<Segment> segments, JunctionEvaluationGroup evaluationGroup) {
+
+		Map<GraphEdgePropertyType<?>, Object> properties = 
+			new HashMap<GraphEdgePropertyType<?>, Object>(); //TODO: replace HashMap with List-based solution
+		
+		for (GraphEdgePropertyType<?> propertyType : PROPERTY_TYPES) {
+			Object value = propertyType.evaluate(evaluationGroup, segments, transitionStructure);
+			properties.put(propertyType, value);
+		}
+		
+		createGraphEdge(startNode, targetNode, properties);
 
 	}
@@ -345,8 +396,8 @@
 	 * adds it to its nodes' collections and {@link #edges} collection.
 	 */
-	private void createGraphEdge(
-			GraphNodeImpl startNode, GraphNodeImpl targetNode, List<Segment> segments) {
-
-		GraphEdge newEdge = new GraphEdgeImpl(startNode, targetNode, segments);
+	private void createGraphEdge(GraphNodeImpl startNode, GraphNodeImpl targetNode, 
+			Map<GraphEdgePropertyType<?>, Object> properties) {
+
+		GraphEdge newEdge = new GraphEdgeImpl(startNode, targetNode, properties);
 
 		startNode.addOutgoingEdge(newEdge);
@@ -356,5 +407,5 @@
 
 	}
-
+	
 	private static boolean isConnectedWithExactly2Nodes(SegmentNode node) {
 
Index: applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/property/GraphEdgePropertyType.java
===================================================================
--- applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/property/GraphEdgePropertyType.java	(revision 18130)
+++ applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/property/GraphEdgePropertyType.java	(revision 18130)
@@ -0,0 +1,34 @@
+package org.openstreetmap.josm.plugins.graphview.core.property;
+
+import java.util.List;
+
+import org.openstreetmap.josm.plugins.graphview.core.graph.ConnectorEvaluationGroup;
+import org.openstreetmap.josm.plugins.graphview.core.graph.GraphEdge;
+import org.openstreetmap.josm.plugins.graphview.core.graph.JunctionEvaluationGroup;
+import org.openstreetmap.josm.plugins.graphview.core.transition.Segment;
+import org.openstreetmap.josm.plugins.graphview.core.transition.TransitionStructure;
+
+/**
+ * type of a {@link GraphEdge} property
+ *
+ * GraphEdgePropertyType objects should be stateless (except for performance speedups).
+ *
+ * @param <V>  property value type
+ */
+public interface GraphEdgePropertyType<V> {
+	
+	/**
+	 * determines the property value for segments created from junction groups
+	 */
+	public V evaluate(JunctionEvaluationGroup junctionGroup,
+			List<Segment> segmentSequence,
+			TransitionStructure transitionStructure);
+
+	/**
+	 * determines the property value for segments created from connector groups
+	 */
+	public V evaluate(ConnectorEvaluationGroup connectorGroup,
+			List<Segment> segmentSequence,
+			TransitionStructure transitionStructure);
+	
+}
Index: applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/property/GraphEdgeSegments.java
===================================================================
--- applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/property/GraphEdgeSegments.java	(revision 18130)
+++ applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/property/GraphEdgeSegments.java	(revision 18130)
@@ -0,0 +1,37 @@
+package org.openstreetmap.josm.plugins.graphview.core.property;
+
+import java.util.List;
+
+import org.openstreetmap.josm.plugins.graphview.core.graph.ConnectorEvaluationGroup;
+import org.openstreetmap.josm.plugins.graphview.core.graph.JunctionEvaluationGroup;
+import org.openstreetmap.josm.plugins.graphview.core.transition.Segment;
+import org.openstreetmap.josm.plugins.graphview.core.transition.TransitionStructure;
+
+/**
+ * the series of segments that are represented by a GraphEdge. Requesting this
+ * property for the graph that is being constructed will preserve information
+ * from the {@link TransitionStructure}.
+ * 
+ * TODO: for some purposes, segments are not needed (only coordinate lists;
+ * without properties etc.)
+ */
+public final class GraphEdgeSegments implements GraphEdgePropertyType<List<Segment>> {
+	
+	public static final GraphEdgeSegments PROPERTY = new GraphEdgeSegments();
+	
+	/**
+	 * private constructor to make sure that {@link #INSTANCE} is the only instance
+	 */
+	private GraphEdgeSegments() { }
+	
+	public List<Segment> evaluate(JunctionEvaluationGroup junctionGroup,
+			List<Segment> segmentSequence, TransitionStructure transitionStructure) {
+		return segmentSequence;
+	}
+	
+	public List<Segment> evaluate(ConnectorEvaluationGroup connectorGroup,
+			List<Segment> segmentSequence, TransitionStructure transitionStructure) {
+		return segmentSequence;
+	}
+	
+}
Index: applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/visualisation/FloatPropertyColorScheme.java
===================================================================
--- applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/visualisation/FloatPropertyColorScheme.java	(revision 17538)
+++ applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/core/visualisation/FloatPropertyColorScheme.java	(revision 18130)
@@ -12,4 +12,5 @@
 import org.openstreetmap.josm.plugins.graphview.core.graph.GraphEdge;
 import org.openstreetmap.josm.plugins.graphview.core.graph.GraphNode;
+import org.openstreetmap.josm.plugins.graphview.core.property.GraphEdgeSegments;
 import org.openstreetmap.josm.plugins.graphview.core.property.RoadPropertyType;
 import org.openstreetmap.josm.plugins.graphview.core.transition.Segment;
@@ -66,13 +67,17 @@
 		List<Color> segmentColors = new ArrayList<Color>();
 
+		
+		
 		for (GraphEdge edge : node.getInboundEdges()) {
-			if (edge.getSegments().size() > 0) {
-				Segment firstSegment = edge.getSegments().get(0);
+			List<Segment> edgeSegments = edge.getPropertyValue(GraphEdgeSegments.PROPERTY);
+			if (edgeSegments.size() > 0) {
+				Segment firstSegment = edgeSegments.get(0);
 				segmentColors.add(getSegmentColor(firstSegment));
 			}
 		}
 		for (GraphEdge edge : node.getOutboundEdges()) {
-			if (edge.getSegments().size() > 0) {
-				Segment lastSegment = edge.getSegments().get(edge.getSegments().size()-1);
+			List<Segment> edgeSegments = edge.getPropertyValue(GraphEdgeSegments.PROPERTY);
+			if (edgeSegments.size() > 0) {
+				Segment lastSegment = edgeSegments.get(edgeSegments.size()-1);
 				segmentColors.add(getSegmentColor(lastSegment));
 			}
Index: applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/plugin/layer/GraphViewLayer.java
===================================================================
--- applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/plugin/layer/GraphViewLayer.java	(revision 17538)
+++ applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/plugin/layer/GraphViewLayer.java	(revision 18130)
@@ -11,4 +11,5 @@
 import java.awt.geom.AffineTransform;
 import java.awt.geom.Line2D;
+import java.util.List;
 
 import javax.swing.Icon;
@@ -30,4 +31,5 @@
 import org.openstreetmap.josm.plugins.graphview.core.graph.WayGraph;
 import org.openstreetmap.josm.plugins.graphview.core.graph.WayGraphObserver;
+import org.openstreetmap.josm.plugins.graphview.core.property.GraphEdgeSegments;
 import org.openstreetmap.josm.plugins.graphview.core.transition.Segment;
 import org.openstreetmap.josm.plugins.graphview.core.transition.SegmentNode;
@@ -145,12 +147,14 @@
 		g2D.setStroke(new BasicStroke(3, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
 
-		if (e.getSegments().size() > 0) {
-
-			Segment firstSegment = e.getSegments().get(0);
-			Segment lastSegment = e.getSegments().get(e.getSegments().size() - 1);
+		List<Segment> edgeSegments = e.getPropertyValue(GraphEdgeSegments.PROPERTY);
+		
+		if (edgeSegments.size() > 0) {
+
+			Segment firstSegment = edgeSegments.get(0);
+			Segment lastSegment = edgeSegments.get(edgeSegments.size() - 1);
 
 			//draw segments
 
-			for (Segment segment : e.getSegments()) {
+			for (Segment segment : edgeSegments) {
 
 				Color color = Color.WHITE;
@@ -191,6 +195,6 @@
 			Point p2 = getNodePoint(e.getTargetNode(), mv);
 
-			if (e.getSegments().size() > 0) {
-				Segment lastSegment = e.getSegments().get(e.getSegments().size() - 1);
+			if (edgeSegments.size() > 0) {
+				Segment lastSegment = edgeSegments.get(edgeSegments.size() - 1);
 				p1 = getNodePoint(lastSegment.getNode1(), mv);
 			}
