Index: applications/editors/josm/plugins/tageditor/src/org/openstreetmap/josm/plugins/tageditor/TagEditorDialog.java
===================================================================
--- applications/editors/josm/plugins/tageditor/src/org/openstreetmap/josm/plugins/tageditor/TagEditorDialog.java	(revision 33015)
+++ applications/editors/josm/plugins/tageditor/src/org/openstreetmap/josm/plugins/tageditor/TagEditorDialog.java	(revision 33016)
@@ -30,4 +30,5 @@
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.Tag;
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionList;
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionManager;
@@ -38,5 +39,4 @@
 import org.openstreetmap.josm.plugins.tageditor.preset.ui.IPresetSelectorListener;
 import org.openstreetmap.josm.plugins.tageditor.preset.ui.TabularPresetSelector;
-import org.openstreetmap.josm.plugins.tageditor.tagspec.KeyValuePair;
 import org.openstreetmap.josm.plugins.tageditor.tagspec.ui.ITagSelectorListener;
 import org.openstreetmap.josm.plugins.tageditor.tagspec.ui.TabularTagSelector;
@@ -176,5 +176,5 @@
                 new ITagSelectorListener() {
                     @Override
-                    public void itemSelected(KeyValuePair pair) {
+                    public void itemSelected(Tag pair) {
                         tagEditor.stopEditing();
                         tagEditor.getModel().applyKeyValuePair(pair);
Index: applications/editors/josm/plugins/tageditor/src/org/openstreetmap/josm/plugins/tageditor/editor/TagEditorModel.java
===================================================================
--- applications/editors/josm/plugins/tageditor/src/org/openstreetmap/josm/plugins/tageditor/editor/TagEditorModel.java	(revision 33015)
+++ applications/editors/josm/plugins/tageditor/src/org/openstreetmap/josm/plugins/tageditor/editor/TagEditorModel.java	(revision 33016)
@@ -14,8 +14,8 @@
 import org.openstreetmap.josm.command.SequenceCommand;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.Tag;
 import org.openstreetmap.josm.gui.tagging.TagModel;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPreset;
 import org.openstreetmap.josm.plugins.tageditor.preset.AdvancedTag;
-import org.openstreetmap.josm.plugins.tageditor.tagspec.KeyValuePair;
 
 @SuppressWarnings("serial")
@@ -84,9 +84,9 @@
 
     /**
-     * applies a tag given by a {@see KeyValuePair} to the model
+     * applies a tag given by a {@see Tag} to the model
      *
      * @param pair the key value pair
      */
-    public void applyKeyValuePair(KeyValuePair pair) {
+    public void applyKeyValuePair(Tag pair) {
         TagModel tagModel = get(pair.getKey());
         if (tagModel == null) {
Index: applications/editors/josm/plugins/tageditor/src/org/openstreetmap/josm/plugins/tageditor/tagspec/KeyValuePair.java
===================================================================
--- applications/editors/josm/plugins/tageditor/src/org/openstreetmap/josm/plugins/tageditor/tagspec/KeyValuePair.java	(revision 33015)
+++ 	(revision )
@@ -1,62 +1,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.plugins.tageditor.tagspec;
-
-public class KeyValuePair {
-    private String key = new String("");
-    private String value = new String("");
-
-    public KeyValuePair() {}
-
-    public KeyValuePair(String key, String value) {
-        setKey(key);
-        setValue(value);
-    }
-
-    public String getKey() {
-        return key;
-    }
-
-    public void setKey(String key) {
-        this.key = key == null ? "" : key;
-    }
-
-    public String getValue() {
-        return value;
-    }
-
-    public void setValue(String value) {
-        this.value = value == null ? "" : value;
-    }
-
-    @Override
-    public int hashCode() {
-        final int prime = 31;
-        int result = 1;
-        result = prime * result + ((key == null) ? 0 : key.hashCode());
-        result = prime * result + ((value == null) ? 0 : value.hashCode());
-        return result;
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj)
-            return true;
-        if (obj == null)
-            return false;
-        if (getClass() != obj.getClass())
-            return false;
-        KeyValuePair other = (KeyValuePair) obj;
-        if (key == null) {
-            if (other.key != null)
-                return false;
-        } else if (!key.equals(other.key))
-            return false;
-        if (value == null) {
-            if (other.value != null)
-                return false;
-        } else if (!value.equals(other.value))
-            return false;
-        return true;
-    }
-
-}
Index: applications/editors/josm/plugins/tageditor/src/org/openstreetmap/josm/plugins/tageditor/tagspec/TagSpecifications.java
===================================================================
--- applications/editors/josm/plugins/tageditor/src/org/openstreetmap/josm/plugins/tageditor/tagspec/TagSpecifications.java	(revision 33015)
+++ applications/editors/josm/plugins/tageditor/src/org/openstreetmap/josm/plugins/tageditor/tagspec/TagSpecifications.java	(revision 33016)
@@ -12,4 +12,5 @@
 import java.util.logging.Logger;
 
+import org.openstreetmap.josm.data.osm.Tag;
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionItemPriority;
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionListItem;
@@ -163,10 +164,10 @@
      * @return the list
      */
-    public ArrayList<KeyValuePair> asList() {
-        ArrayList<KeyValuePair> entries = new ArrayList<>();
+    public ArrayList<Tag> asList() {
+        ArrayList<Tag> entries = new ArrayList<>();
 
         for (TagSpecification s : tagSpecifications) {
             for (LabelSpecification l : s.getLables()) {
-                entries.add(new KeyValuePair(s.getKey(), l.getValue()));
+                entries.add(new Tag(s.getKey(), l.getValue()));
             }
         }
Index: applications/editors/josm/plugins/tageditor/src/org/openstreetmap/josm/plugins/tageditor/tagspec/ui/ITagSelectorListener.java
===================================================================
--- applications/editors/josm/plugins/tageditor/src/org/openstreetmap/josm/plugins/tageditor/tagspec/ui/ITagSelectorListener.java	(revision 33015)
+++ applications/editors/josm/plugins/tageditor/src/org/openstreetmap/josm/plugins/tageditor/tagspec/ui/ITagSelectorListener.java	(revision 33016)
@@ -2,7 +2,7 @@
 package org.openstreetmap.josm.plugins.tageditor.tagspec.ui;
 
-import org.openstreetmap.josm.plugins.tageditor.tagspec.KeyValuePair;
+import org.openstreetmap.josm.data.osm.Tag;
 
 public interface ITagSelectorListener {
-    void itemSelected(KeyValuePair pair);
+    void itemSelected(Tag pair);
 }
Index: applications/editors/josm/plugins/tageditor/src/org/openstreetmap/josm/plugins/tageditor/tagspec/ui/TabularTagSelector.java
===================================================================
--- applications/editors/josm/plugins/tageditor/src/org/openstreetmap/josm/plugins/tageditor/tagspec/ui/TabularTagSelector.java	(revision 33015)
+++ applications/editors/josm/plugins/tageditor/src/org/openstreetmap/josm/plugins/tageditor/tagspec/ui/TabularTagSelector.java	(revision 33016)
@@ -30,5 +30,5 @@
 import javax.swing.event.ListSelectionListener;
 
-import org.openstreetmap.josm.plugins.tageditor.tagspec.KeyValuePair;
+import org.openstreetmap.josm.data.osm.Tag;
 
 public class TabularTagSelector extends JPanel {
@@ -97,5 +97,5 @@
                 int rowNum = tagsTable.getSelectedRow();
                 if (rowNum >= 0) {
-                    KeyValuePair item = getModel().getVisibleItem(rowNum);
+                    Tag item = getModel().getVisibleItem(rowNum);
                     fireItemSelected(item);
                 }
@@ -124,5 +124,5 @@
                         int row = tagsTable.getSelectedRow();
                         if (row >= 0) {
-                            KeyValuePair item = getModel().getVisibleItem(row);
+                            Tag item = getModel().getVisibleItem(row);
                             fireItemSelected(item);
                         }
@@ -236,5 +236,5 @@
     }
 
-    protected void fireItemSelected(KeyValuePair pair) {
+    protected void fireItemSelected(Tag pair) {
         synchronized (this.listeners) {
             for (ITagSelectorListener listener: listeners) {
@@ -249,5 +249,5 @@
             if (e.getClickCount() == 2) {
                 int rowNum = tagsTable.rowAtPoint(e.getPoint());
-                KeyValuePair pair = getModel().getVisibleItem(rowNum);
+                Tag pair = getModel().getVisibleItem(rowNum);
                 fireItemSelected(pair);
             }
Index: applications/editors/josm/plugins/tageditor/src/org/openstreetmap/josm/plugins/tageditor/tagspec/ui/TagsTableModel.java
===================================================================
--- applications/editors/josm/plugins/tageditor/src/org/openstreetmap/josm/plugins/tageditor/tagspec/ui/TagsTableModel.java	(revision 33015)
+++ applications/editors/josm/plugins/tageditor/src/org/openstreetmap/josm/plugins/tageditor/tagspec/ui/TagsTableModel.java	(revision 33016)
@@ -12,5 +12,5 @@
 import javax.swing.table.AbstractTableModel;
 
-import org.openstreetmap.josm.plugins.tageditor.tagspec.KeyValuePair;
+import org.openstreetmap.josm.data.osm.Tag;
 import org.openstreetmap.josm.plugins.tageditor.tagspec.TagSpecifications;
 
@@ -19,6 +19,6 @@
     private static Logger logger = Logger.getLogger(TagsTableModel.class.getName());
 
-    private ArrayList<KeyValuePair> items = null;
-    private ArrayList<KeyValuePair> visibleItems = null;
+    private ArrayList<Tag> items = null;
+    private ArrayList<Tag> visibleItems = null;
 
     public TagsTableModel() {
@@ -30,8 +30,7 @@
         Collections.sort(
                 items,
-                new Comparator<KeyValuePair>() {
+                new Comparator<Tag>() {
                     @Override
-                    public int compare(KeyValuePair self,
-                            KeyValuePair other) {
+                    public int compare(Tag self, Tag other) {
                         int ret = self.getKey().compareToIgnoreCase(other.getKey());
 
@@ -63,5 +62,5 @@
         items = spec.asList();
         sort();
-        for (KeyValuePair item : items) {
+        for (Tag item : items) {
             visibleItems.add(item);
         }
@@ -80,5 +79,5 @@
     @Override
     public Object getValueAt(int row, int col) {
-        KeyValuePair pair = visibleItems.get(row);
+        Tag pair = visibleItems.get(row);
         switch(col) {
         case 0: return pair.getKey();
@@ -94,5 +93,5 @@
             if (filter == null || filter.trim().equals("")) {
                 visibleItems.clear();
-                for (KeyValuePair pair: items) {
+                for (Tag pair: items) {
                     visibleItems.add(pair);
                 }
@@ -100,5 +99,5 @@
                 visibleItems.clear();
                 filter = filter.toLowerCase();
-                for (KeyValuePair pair: items) {
+                for (Tag pair: items) {
                     if (pair.getKey().toLowerCase().trim().startsWith(filter)
                             || pair.getValue().toLowerCase().trim().startsWith(filter)) {
@@ -117,5 +116,5 @@
     }
 
-    public KeyValuePair getVisibleItem(int row) {
+    public Tag getVisibleItem(int row) {
         if (row < 0 || row >= visibleItems.size())
             throw new IndexOutOfBoundsException("row is out of bound: row=" + row);
