diff --git a/geography/org.eclipse.stem.internal.data.geography.infrastructure.transportation/src/org/eclipse/stem/internal/data/geography/infrastructure/transportation/specifications/AirTransportationGeographicRelationshipPropertyFileSpecification.java b/geography/org.eclipse.stem.internal.data.geography.infrastructure.transportation/src/org/eclipse/stem/internal/data/geography/infrastructure/transportation/specifications/AirTransportationGeographicRelationshipPropertyFileSpecification.java
index 5a83852..b267a5e 100644
--- a/geography/org.eclipse.stem.internal.data.geography.infrastructure.transportation/src/org/eclipse/stem/internal/data/geography/infrastructure/transportation/specifications/AirTransportationGeographicRelationshipPropertyFileSpecification.java
+++ b/geography/org.eclipse.stem.internal.data.geography.infrastructure.transportation/src/org/eclipse/stem/internal/data/geography/infrastructure/transportation/specifications/AirTransportationGeographicRelationshipPropertyFileSpecification.java
@@ -39,6 +39,7 @@
 import org.eclipse.stem.definitions.transport.PipeTransportEdgeLabelValue;
 import org.eclipse.stem.definitions.transport.TransportFactory;
 import org.eclipse.stem.internal.data.geography.infrastructure.transportation.propertydata.AirTransportGeographicRelationshipPropertyData;
+import org.eclipse.stem.internal.data.geography.propertydata.GeographicRelationshipPropertyData;
 import org.eclipse.stem.internal.data.propertydata.PropertyData;
 import org.eclipse.stem.internal.data.propertydata.RelationshipPropertyData;
 
@@ -49,6 +50,9 @@
 public class AirTransportationGeographicRelationshipPropertyFileSpecification
 		extends TransportationGeographicRelationshipPropertyFileSpecification {
 
+	
+	public final static String AIR_TRANSPORT_PATTERN = "transport/pipe";
+	public final static String AIR_TRANSPORT_SYSTEM = "(S)";
 	/**
 	 * This is the name used to identify "air" edges.
 	 */
@@ -127,7 +131,7 @@
 		final TransportRelationshipLabel retValue = LabelsFactory.eINSTANCE
 				.createTransportRelationshipLabel();
 
-		// retValue.setURI(null);
+		retValue.setURI(createRelationshipEdgeLabelURI(relationshipGraphData));
 		final TransportRelationshipLabelValue currentValue = LabelsFactory.eINSTANCE
 				.createTransportRelationshipLabelValue();
 		currentValue.setAvailableDepartureCapacityProportion(airData.getArrivalRate()); // TODo, what is this?
@@ -144,6 +148,7 @@
 		return AIR_TRANSPORTATION_EDGE_NAME;
 	}
 
+   
 	/**
 	 * @see org.eclipse.stem.internal.data.specifications.IdentifiablePropertyFileSpecification#createPropertyDataInstanceFromProperty(java.lang.String,
 	 *      java.lang.String)
@@ -231,13 +236,13 @@
 			// The migration edge from the region to the transportation system
 			PipeTransportEdge fromEdge = createPipeTransportEdge(
 					regionNodeURI, transportSystem.getURI(),
-					fromNodeMaxFlow);
+					fromNodeMaxFlow, pipeTransportData);
 			graph.putEdge(fromEdge);
 			
 			// The migration edge to the region from the transportation system
 			PipeTransportEdge toEdge = createPipeTransportEdge(
 					transportSystem.getURI(), regionNodeURI,
-					toNodeMaxFlow);
+					toNodeMaxFlow, pipeTransportData);
 			graph.putEdge(toEdge);
 			
 			// Now create edges to the lower level transportation system. It might now
@@ -246,12 +251,12 @@
 			final org.eclipse.emf.common.util.URI transportNodeURI = createTransportSystemURI(pipeTransportData.getRegionISOKey());
 			fromEdge = createPipeTransportEdge(
 					transportNodeURI, transportSystem.getURI(),
-					fromNodeMaxFlow);
+					fromNodeMaxFlow, pipeTransportData);
 			graph.putEdge(fromEdge);
 			
 			toEdge = createPipeTransportEdge(
 					transportSystem.getURI(), transportNodeURI,
-					toNodeMaxFlow);
+					toNodeMaxFlow, pipeTransportData);
 			graph.putEdge(toEdge);
 		} // for each data set record
 	} // populateFromNonDataProperties
@@ -316,13 +321,15 @@
 
 	
 	private PipeTransportEdge createPipeTransportEdge(final org.eclipse.emf.common.util.URI fromURI,
-			final org.eclipse.emf.common.util.URI toURI, final double maxFlow) {
+			final org.eclipse.emf.common.util.URI toURI, final double maxFlow, AirTransportGeographicRelationshipPropertyData propertyData) {
 		final PipeTransportEdge edge = TransportFactory.eINSTANCE.createPipeTransportEdge();
 		edge.setNodeAURI(fromURI);
 		edge.setNodeBURI(toURI);
 
+		edge.setURI(createRelationshipEdgeURI(propertyData, fromURI, toURI));
 		PipeTransportEdgeLabel label =  TransportFactory.eINSTANCE.createPipeTransportEdgeLabel();
 		PipeTransportEdgeLabelValue labelval =  TransportFactory.eINSTANCE.createPipeTransportEdgeLabelValue();
+		label.setURI(createRelationshipEdgeLabelURI(propertyData, fromURI, toURI));
 		labelval.setMaxFlow(maxFlow);
 		labelval.setTimePeriod(this.rateTimePeriod);
 		label.setCurrentValue(labelval);
@@ -331,6 +338,36 @@
 		return edge;
 	} // createMigrationEdge
 	
+	private URI createRelationshipURI(String segment,
+			AirTransportGeographicRelationshipPropertyData propertyData,
+			URI fromURI, URI toURI) {
+		final GeographicRelationshipPropertyData geoRelationshipPropertyData = (GeographicRelationshipPropertyData) propertyData;
+		final StringBuilder sb = new StringBuilder(segment);
+		sb.append("/"); //$NON-NLS-1$
+		sb.append("relationship"); //$NON-NLS-1$
+		sb.append("/"); //$NON-NLS-1$
+		sb.append(getRelationshipName());
+		sb.append("/"); //$NON-NLS-1$
+		String first = fromURI.toString().contains(AIR_TRANSPORT_PATTERN) ? AIR_TRANSPORT_SYSTEM+fromURI.lastSegment() : fromURI.lastSegment();
+		sb.append(first);
+		sb.append("_"); //$NON-NLS-1$
+		String second = toURI.toString().contains(AIR_TRANSPORT_PATTERN) ? AIR_TRANSPORT_SYSTEM+toURI.lastSegment() : toURI.lastSegment();
+		sb.append(second);
+		sb.append(getRelationshipSpecifier(propertyData));
+
+		return STEMURI.createURI(sb.toString());
+	}
+
+	private URI createRelationshipEdgeLabelURI(	AirTransportGeographicRelationshipPropertyData propertyData,
+			URI fromURI, URI toURI) {
+		return createRelationshipURI("label", propertyData, fromURI, toURI);
+	}
+	private URI createRelationshipEdgeURI(
+			AirTransportGeographicRelationshipPropertyData propertyData,
+			URI fromURI, URI toURI) {
+		return createRelationshipURI("edge", propertyData, fromURI, toURI);
+	}
+
 	private Edge createContainmentEdge(
 			final AirTransportGeographicRelationshipPropertyData pipeTransportData,
 			final PipeStyleTransportSystem transportSystem) {
