Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 6091)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 6092)
@@ -137,5 +137,5 @@
             @Override
             public void updateTags(List<Tag> tags) {
-                GenericRelationEditor.this.updateTags(tags);
+                tagEditorPanel.getModel().updateTags(tags);
             }
 
@@ -216,4 +216,9 @@
                 }
         );
+        registerCopyPasteAction(tagEditorPanel.getPasteAction(), 
+                "PASTE_TAGS",
+                Shortcut.registerShortcut("system:pastestyle", tr("Edit: {0}", tr("Paste Tags")), KeyEvent.VK_V, Shortcut.CTRL_SHIFT).getKeyStroke());
+        registerCopyPasteAction(new PasteMembersAction(), "PASTE_MEMBERS", Shortcut.getPasteKeyStroke());
+        registerCopyPasteAction(new CopyMembersAction(), "COPY_MEMBERS", Shortcut.getCopyKeyStroke());
 
         tagEditorPanel.setNextFocusComponent(memberTable);
@@ -427,8 +432,4 @@
         pnl3.add(splitPane, BorderLayout.CENTER);
 
-        new PasteMembersAction();
-        new CopyMembersAction();
-        new PasteTagsAction();
-
         return pnl3;
     }
@@ -696,32 +697,4 @@
     }
 
-    protected void updateTags(List<Tag> tags) {
-
-        if (tags.isEmpty())
-            return;
-
-        Map<String, TagModel> modelTags = new HashMap<String, TagModel>();
-        for (int i=0; i<tagEditorPanel.getModel().getRowCount(); i++) {
-            TagModel tagModel = tagEditorPanel.getModel().get(i);
-            modelTags.put(tagModel.getName(), tagModel);
-        }
-        for (Tag tag: tags) {
-            TagModel existing = modelTags.get(tag.getKey());
-
-            if (tag.getValue().isEmpty()) {
-                if (existing != null) {
-                    tagEditorPanel.getModel().delete(tag.getKey());
-                }
-            } else {
-                if (existing != null) {
-                    tagEditorPanel.getModel().updateTagValue(existing, tag.getValue());
-                } else {
-                    tagEditorPanel.getModel().add(tag.getKey(), tag.getValue());
-                }
-            }
-
-        }
-    }
-
     static class AddAbortException extends Exception {
     }
@@ -1718,8 +1691,4 @@
     class PasteMembersAction extends AddFromSelectionAction {
 
-        public PasteMembersAction() {
-            registerCopyPasteAction(this, "PASTE_MEMBERS", Shortcut.getPasteKeyStroke());
-        }
-
         @Override
         public void actionPerformed(ActionEvent e) {
@@ -1765,9 +1734,4 @@
 
     class CopyMembersAction extends AbstractAction {
-
-        public CopyMembersAction() {
-            registerCopyPasteAction(this, "COPY_MEMBERS", Shortcut.getCopyKeyStroke());
-        }
-
         @Override
         public void actionPerformed(ActionEvent e) {
@@ -1783,20 +1747,4 @@
     }
 
-    class PasteTagsAction extends AbstractAction {
-
-        public PasteTagsAction() {
-            registerCopyPasteAction(this, "PASTE_TAGS", Shortcut.registerShortcut("system:pastestyle", tr("Edit: {0}", tr("Paste Tags")), KeyEvent.VK_V, Shortcut.CTRL_SHIFT).getKeyStroke());
-        }
-
-        @Override
-        public void actionPerformed(ActionEvent e) {
-            Relation relation = new Relation();
-            tagEditorPanel.getModel().applyToPrimitive(relation);
-            TagPaster tagPaster = new TagPaster(Main.pasteBuffer.getDirectlyAdded(), Collections.<OsmPrimitive>singletonList(relation));
-            updateTags(tagPaster.execute());
-        }
-
-    }
-
     class MemberTableDblClickAdapter extends MouseAdapter {
         @Override
Index: /trunk/src/org/openstreetmap/josm/gui/tagging/TagEditorModel.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/tagging/TagEditorModel.java	(revision 6091)
+++ /trunk/src/org/openstreetmap/josm/gui/tagging/TagEditorModel.java	(revision 6092)
@@ -21,4 +21,5 @@
 import org.openstreetmap.josm.command.SequenceCommand;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.Tag;
 import org.openstreetmap.josm.data.osm.TagCollection;
 import org.openstreetmap.josm.data.osm.Tagged;
@@ -576,4 +577,34 @@
 
     /**
+     * Load tags from given list
+     * @param tags - the list
+     */
+    public void updateTags(List<Tag> tags) {
+         if (tags.isEmpty())
+            return;
+
+        Map<String, TagModel> modelTags = new HashMap<String, TagModel>();
+        for (int i=0; i<getRowCount(); i++) {
+            TagModel tagModel = get(i);
+            modelTags.put(tagModel.getName(), tagModel);
+        }
+        for (Tag tag: tags) {
+            TagModel existing = modelTags.get(tag.getKey());
+
+            if (tag.getValue().isEmpty()) {
+                if (existing != null) {
+                    delete(tag.getKey());
+                }
+            } else {
+                if (existing != null) {
+                    updateTagValue(existing, tag.getValue());
+                } else {
+                    add(tag.getKey(), tag.getValue());
+                }
+            }
+        }
+    }
+
+    /**
      * replies true, if this model has been updated
      *
Index: /trunk/src/org/openstreetmap/josm/gui/tagging/TagEditorPanel.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/tagging/TagEditorPanel.java	(revision 6091)
+++ /trunk/src/org/openstreetmap/josm/gui/tagging/TagEditorPanel.java	(revision 6092)
@@ -10,4 +10,5 @@
 import java.awt.event.FocusEvent;
 import java.util.EnumSet;
+import javax.swing.AbstractAction;
 
 import javax.swing.BoxLayout;
@@ -85,5 +86,14 @@
         btn.setMargin(new Insets(0,0,0,0));
         tagTable.addComponentNotStoppingCellEditing(btn);
+        
+        // paste action
+        pnl.add(btn = new JButton(tagTable.getPasteAction()));
+        btn.setMargin(new Insets(0,0,0,0));
+        tagTable.addComponentNotStoppingCellEditing(btn);
         return pnl;
+    }
+
+    public AbstractAction getPasteAction() {
+        return tagTable.getPasteAction();
     }
 
Index: /trunk/src/org/openstreetmap/josm/gui/tagging/TagTable.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/tagging/TagTable.java	(revision 6091)
+++ /trunk/src/org/openstreetmap/josm/gui/tagging/TagTable.java	(revision 6092)
@@ -15,8 +15,14 @@
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
+import java.util.Collections;
 import java.util.EventObject;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.concurrent.CopyOnWriteArrayList;
 
 import javax.swing.AbstractAction;
+import static javax.swing.Action.SHORT_DESCRIPTION;
+import static javax.swing.Action.SMALL_ICON;
 import javax.swing.CellEditor;
 import javax.swing.DefaultListSelectionModel;
@@ -32,4 +38,8 @@
 import javax.swing.table.TableColumn;
 import javax.swing.text.JTextComponent;
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.actions.PasteTagsAction.TagPaster;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.Relation;
 
 import org.openstreetmap.josm.gui.dialogs.relation.RunnableAction;
@@ -304,4 +314,33 @@
     }
 
+     /**
+     * Action to be run when the user wants to paste tags from buffer
+     */
+    class PasteAction extends RunnableAction implements PropertyChangeListener{
+        public PasteAction() {
+            putValue(SMALL_ICON, ImageProvider.get("","pastetags"));
+            putValue(SHORT_DESCRIPTION, tr("Paste tags from buffer"));
+            TagTable.this.addPropertyChangeListener(this);
+            updateEnabledState();
+        }
+
+        @Override
+        public void run() {
+            Relation relation = new Relation();
+            model.applyToPrimitive(relation);
+            TagPaster tagPaster = new TagPaster(Main.pasteBuffer.getDirectlyAdded(), Collections.<OsmPrimitive>singletonList(relation));
+            model.updateTags(tagPaster.execute());
+        }
+
+        protected void updateEnabledState() {
+            setEnabled(TagTable.this.isEnabled());
+        }
+
+        @Override
+        public void propertyChange(PropertyChangeEvent evt) {
+            updateEnabledState();
+        }
+    }
+    
     /** the delete action */
     private RunnableAction deleteAction = null;
@@ -310,4 +349,7 @@
     private RunnableAction addAction = null;
 
+    /** the tag paste action */
+    private RunnableAction pasteAction = null;
+
     /**
      *
@@ -320,4 +362,8 @@
     public RunnableAction getAddAction() {
         return addAction;
+    }
+
+    public RunnableAction getPasteAction() {
+        return pasteAction;
     }
 
@@ -353,4 +399,6 @@
         .put(KeyStroke.getKeyStroke(KeyEvent.VK_ADD, KeyEvent.CTRL_MASK), "addTag");
         getActionMap().put("addTag", addAction);
+
+        pasteAction = new PasteAction();
 
         // create the table cell editor and set it to key and value columns
