--- src/org/openstreetmap/josm/actions/MergeNodesAction.java	(revision 485)
+++ src/org/openstreetmap/josm/actions/MergeNodesAction.java	(working copy)
@@ -37,6 +37,7 @@
 import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.data.osm.TigerUtils;
 import org.openstreetmap.josm.tools.Pair;
 import org.openstreetmap.josm.data.osm.visitor.CollectBackReferencesVisitor;
 import org.openstreetmap.josm.tools.GBC;
@@ -169,7 +170,10 @@
 		Map<String, JComboBox> components = new HashMap<String, JComboBox>();
 		JPanel p = new JPanel(new GridBagLayout());
 		for (Entry<String, Set<String>> e : props.entrySet()) {
-			if (e.getValue().size() > 1) {
+			if (e.getKey().indexOf("tiger:") != -1) {
+				String combined = TigerUtils.combineTags(e.getKey(), e.getValue());
+				newNode.put(e.getKey(), combined);
+			} else if (e.getValue().size() > 1) {
 				JComboBox c = new JComboBox(e.getValue().toArray());
 				c.setEditable(true);
 				p.add(new JLabel(e.getKey()), GBC.std());
		}
Index: src/org/openstreetmap/josm/actions/CombineWayAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/CombineWayAction.java	(revision 485)
+++ src/org/openstreetmap/josm/actions/CombineWayAction.java	(working copy)
@@ -37,6 +37,7 @@
 import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.data.osm.TigerUtils;
 import org.openstreetmap.josm.tools.Pair;
 import org.openstreetmap.josm.tools.GBC;
 
@@ -150,14 +151,17 @@
 		}
 
 		Way newWay = new Way(selectedWays.get(0));
-		newWay.nodes.clear();
-		newWay.nodes.addAll(nodeList);
+		newWay.clearAllNodes();
+		newWay.addNodes(nodeList);
 
 		// display conflict dialog
 		Map<String, JComboBox> components = new HashMap<String, JComboBox>();
 		JPanel p = new JPanel(new GridBagLayout());
 		for (Entry<String, Set<String>> e : props.entrySet()) {
-			if (e.getValue().size() > 1) {
+			if (e.getKey().indexOf("tiger:") != -1) {
+				String combined = TigerUtils.combineTags(e.getKey(), e.getValue());
+				newWay.put(e.getKey(), combined);
+			} else if (e.getValue().size() > 1) {
 				JComboBox c = new JComboBox(e.getValue().toArray());
 				c.setEditable(true);
 				p.add(new JLabel(e.getKey()), GBC.std());
@@ -218,24 +222,9 @@
 		//  4. Profit!
 
 		HashSet<Pair<Node,Node>> chunkSet = new HashSet<Pair<Node,Node>>();
-		for (Way w : ways) {
-			if (w.nodes.size() == 0) continue;
-			Node lastN = null;
-			for (Node n : w.nodes) {
-				if (lastN == null) {
-					lastN = n;
-					continue;
-				}
+		for (Way w : ways)
+			chunkSet.addAll(w.getNodePairs(ignoreDirection));
 
-				Pair<Node,Node> np = new Pair<Node,Node>(lastN, n);
-				if (ignoreDirection) {
-					Pair.sort(np);
-				}
-				chunkSet.add(np);
-
-				lastN = n;
-			}
-		}
 		LinkedList<Pair<Node,Node>> chunks = new LinkedList<Pair<Node,Node>>(chunkSet);
 
 		if (chunks.isEmpty()) {
===================================================================
--- src/org/openstreetmap/josm/data/osm/TigerUtils.java	(revision 0)
+++ src/org/openstreetmap/josm/data/osm/TigerUtils.java	(revision 0)
@@ -0,0 +1,40 @@
+// License: GPL. Copyright 2007 by Immanuel Scholz and others
+package org.openstreetmap.josm.data.osm;
+
+import java.util.Set;
+import java.util.TreeSet;
+
+/** 
+ * A simple class to keep helper functions for merging TIGER data
+ * 
+ * @author daveh
+ *
+ */
+public class TigerUtils {
+	
+	public static boolean tagIsInt(String name) {
+		if (name.equals("tiger:tlid"))
+			return true;
+		return false;
+	}
+	public static Object tagObj(String name) {
+		if (tagIsInt(name))
+			return new Integer(name);
+		return name;
+	}
+	public static String combineTags(String name, Set<String> values) {
+        TreeSet resultSet = new TreeSet();
+        for (String value: values) {
+        	for (String part: value.split(":")) {
+               resultSet.add(tagObj(part));
+            }
+        }
+        String combined = "";
+        for (Object part : resultSet) {
+            if (combined.length() > 0)
+        		combined += ":";
+        	combined += part;
+        }
+		return combined;
+	}
+}
