diff --git a/src/org/openstreetmap/josm/plugins/todo/TodoDialog.java b/src/org/openstreetmap/josm/plugins/todo/TodoDialog.java
index 73be6f1..0503685 100644
--- a/src/org/openstreetmap/josm/plugins/todo/TodoDialog.java
+++ b/src/org/openstreetmap/josm/plugins/todo/TodoDialog.java
@@ -3,6 +3,8 @@ package org.openstreetmap.josm.plugins.todo;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
 
+import java.awt.Component;
+import java.awt.Rectangle;
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
 import java.awt.event.MouseAdapter;
@@ -18,8 +20,10 @@ import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 import javax.swing.AbstractAction;
+import javax.swing.Action;
 import javax.swing.DefaultListSelectionModel;
 import javax.swing.JList;
+import javax.swing.JPopupMenu;
 import javax.swing.ListSelectionModel;
 import javax.swing.SwingUtilities;
 import javax.swing.event.ListDataEvent;
@@ -29,6 +33,7 @@ import javax.swing.event.ListSelectionListener;
 
 import org.openstreetmap.josm.actions.AutoScaleAction;
 import org.openstreetmap.josm.actions.AutoScaleAction.AutoScaleMode;
+import org.openstreetmap.josm.actions.JosmAction;
 import org.openstreetmap.josm.data.osm.DataSelectionListener;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.event.DatasetEventManager;
@@ -66,6 +71,7 @@ public class TodoDialog extends ToggleDialog implements PropertyChangeListener,
     private final PassAction actPass = new PassAction(model);
     private final MarkAction actMark = new MarkAction(model);
     private final MarkSelectedAction actMarkSelected = new MarkSelectedAction(model);
+    private final ClearAndAddAction actClearAndAdd = new ClearAndAddAction(model);    
     /* The popup must be created AFTER actions */
     private final TodoPopup popupMenu = new TodoPopup(lstPrimitives);
 
@@ -112,6 +118,9 @@ public class TodoDialog extends ToggleDialog implements PropertyChangeListener,
         SideButton addButton = new SideButton(actAdd);
         actAdd.updateEnabledState();
 
+        // the clear and add button
+        addButton.createArrow(l -> showPopupMenu(addButton, actClearAndAdd), true);
+
         // the pass button
         SideButton passButton = new SideButton(actPass);
         lstPrimitives.getSelectionModel().addListSelectionListener(actPass);
@@ -128,6 +137,19 @@ public class TodoDialog extends ToggleDialog implements PropertyChangeListener,
         createLayout(lstPrimitives, true, Arrays.asList(selectButton, addButton, passButton, markButton, markSelectedButton));
     }
 
+    private static void showPopupMenu(Component parent, Object... menuItems) {
+        final JPopupMenu menu = new JPopupMenu();
+        final Rectangle box = parent.getBounds();
+        for (Object item : menuItems) {
+            if (item instanceof Action) {
+                menu.add((Action) item);
+            } else {
+                throw new IllegalArgumentException("We don't currently support " + item.getClass());
+            }
+        }
+        menu.show(parent, 0, box.y + box.height);
+    }
+
     private static void zoom(OsmDataLayer layer) {
         OsmDataLayer prev = MainApplication.getLayerManager().getEditLayer();
 
@@ -178,6 +200,7 @@ public class TodoDialog extends ToggleDialog implements PropertyChangeListener,
     @Override
     public void showNotify() {
         SelectionEventManager.getInstance().addSelectionListenerForEdt(actAdd);
+        SelectionEventManager.getInstance().addSelectionListenerForEdt(actClearAndAdd);
         SelectionEventManager.getInstance().addSelectionListenerForEdt(actMarkSelected);
         actAdd.updateEnabledState();
     }
@@ -317,6 +340,45 @@ public class TodoDialog extends ToggleDialog implements PropertyChangeListener,
         }
     }
 
+    private class ClearAndAddAction extends JosmAction implements DataSelectionListener {
+        private final TodoListModel model;
+
+        ClearAndAddAction(TodoListModel model) {
+            super(
+                tr("Clear and add"),
+                "dialogs/selectionlist",
+                tr("Clear list, add the selected items to the todo list and zoom first item."),
+                Shortcut.registerShortcut("subwindow:todo:clearandadd", tr("Clear and add elements"), KeyEvent.VK_CLOSE_BRACKET, Shortcut.CTRL),
+                false
+                );
+            this.model = model;            
+            updateEnabledState();
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            model.clear();
+            model.addItems(getItems());
+            selectAndZoom(model.getSelected());
+        }
+
+        /**
+         * Update the enabled state of the action
+         */
+        public void updateEnabledState() {
+            if (MainApplication.getLayerManager().getEditLayer() == null) {
+                setEnabled(false);
+            } else {
+                setEnabled(!MainApplication.getLayerManager().getEditLayer().data.selectionEmpty());
+            }
+        }
+
+        @Override
+        public void selectionChanged(SelectionChangeEvent event) {
+            updateEnabledState();
+        }
+    }
+
     private class MarkSelectedAction extends AbstractAction implements DataSelectionListener {
         private final TodoListModel model;
 
@@ -514,6 +576,7 @@ public class TodoDialog extends ToggleDialog implements PropertyChangeListener,
     @Override
     public void propertyChange(PropertyChangeEvent arg0) {
         actAdd.updateEnabledState();
+        actClearAndAdd.updateEnabledState();
     }
 
     @Override
