diff --git a/index.html b/index.html
index c88bace38..dae31a0fd 100644
--- a/index.html
+++ b/index.html
@@ -37,6 +37,7 @@
+
diff --git a/js/id/ui/commit.js b/js/id/ui/commit.js
index 49b8b649f..c9b02a875 100644
--- a/js/id/ui/commit.js
+++ b/js/id/ui/commit.js
@@ -131,7 +131,7 @@ iD.ui.Commit = function(context) {
var li = section.append('ul')
.attr('class', 'changeset-list')
.selectAll('li')
- .data(function(d) { return changes[d]; })
+ .data(function(d) { return iD.util.relevantChanges(context.graph(), changes[d]); })
.enter()
.append('li');
diff --git a/js/id/util/relevant_changes.js b/js/id/util/relevant_changes.js
new file mode 100644
index 000000000..c2e4bce80
--- /dev/null
+++ b/js/id/util/relevant_changes.js
@@ -0,0 +1,18 @@
+// filters out verticies where the parent entity is already present
+// for simpler changeset listing
+iD.util.relevantChanges = function(graph, entities) {
+ var relevant = {};
+ for (var i = entities.length - 1; i >= 0; i--) {
+ var entity = entities[i];
+ if (entity.geometry(graph) === 'vertex') {
+ var parents = graph.parentWays(entity);
+ for (var j = parents.length - 1; j >= 0; j--) {
+ var parent = parents[j];
+ relevant[parent.id] = parent;
+ }
+ } else {
+ relevant[entity.id] = entity;
+ }
+ }
+ return d3.values(relevant);
+};
diff --git a/test/index.html b/test/index.html
index 14fb4087e..170cc5ea4 100644
--- a/test/index.html
+++ b/test/index.html
@@ -192,6 +192,7 @@
+
@@ -273,6 +274,7 @@
+
diff --git a/test/index_packaged.html b/test/index_packaged.html
index 356e4b687..650a0b886 100644
--- a/test/index_packaged.html
+++ b/test/index_packaged.html
@@ -91,6 +91,7 @@
+
diff --git a/test/spec/util/relevant_changes.js b/test/spec/util/relevant_changes.js
new file mode 100644
index 000000000..2a5432bd9
--- /dev/null
+++ b/test/spec/util/relevant_changes.js
@@ -0,0 +1,29 @@
+describe("iD.util.relevantChanges", function() {
+ var graph = iD.Graph({
+ 'a': iD.Node({id: 'a', loc: [0, 0]}),
+ 'b': iD.Node({id: 'b', loc: [2, 0]}),
+ 'c': iD.Node({id: 'c', loc: [2, 2]}),
+ 'd': iD.Node({id: 'd', loc: [0, 2]}),
+ 'e': iD.Node({id: 'e', loc: [0, 2]}),
+ '-': iD.Way({id: '-', nodes: ['a', 'b', 'c', 'd', 'e', 'a']})
+ });
+
+ it("returns a way that changed", function() {
+ var entities = [graph.entity('-')],
+ a = iD.util.relevantChanges(graph, entities);
+ expect(a).to.eql(entities);
+ });
+
+ it("just returns the way that changed, leaving out the verticies", function() {
+ var entities = [
+ graph.entity('a'),
+ graph.entity('b'),
+ graph.entity('c'),
+ graph.entity('d'),
+ graph.entity('e'),
+ graph.entity('-')],
+ a = iD.util.relevantChanges(graph, entities),
+ way = [graph.entity('-')];
+ expect(a).to.eql(way);
+ });
+});