Index: src/org/openstreetmap/josm/plugins/todo/TodoDialog.java
===================================================================
--- src/org/openstreetmap/josm/plugins/todo/TodoDialog.java	(revision 143)
+++ src/org/openstreetmap/josm/plugins/todo/TodoDialog.java	(working copy)
@@ -66,6 +66,7 @@
     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);
 
@@ -72,6 +73,8 @@
     // CHECKSTYLE.OFF: LineLength
     private final Shortcut sctPass = Shortcut.registerShortcut("subwindow:todo:pass", tr("Pass over element without marking it"), KeyEvent.VK_OPEN_BRACKET, Shortcut.DIRECT);
     private final Shortcut sctMark = Shortcut.registerShortcut("subwindow:todo:mark", tr("Mark element done"), KeyEvent.VK_CLOSE_BRACKET, Shortcut.DIRECT);
+    private final Shortcut sctAdd = Shortcut.registerShortcut("subwindow:todo:add", tr("Add elements"), KeyEvent.VK_OPEN_BRACKET, Shortcut.CTRL);
+    private final Shortcut sctClearAndAdd = Shortcut.registerShortcut("subwindow:todo:clearandadd", tr("Clear and add elements"), KeyEvent.VK_CLOSE_BRACKET, Shortcut.CTRL);
     // CHECKSTYLE.ON: LineLength
 
     /**
@@ -111,7 +114,13 @@
         // the add button
         SideButton addButton = new SideButton(actAdd);
         actAdd.updateEnabledState();
+        MainApplication.registerActionShortcut(actAdd, sctAdd);
 
+        // the clear and add button
+        SideButton clearAndAddButton = new SideButton(actClearAndAdd);
+        actClearAndAdd.updateEnabledState();
+        MainApplication.registerActionShortcut(actClearAndAdd, sctClearAndAdd);
+
         // the pass button
         SideButton passButton = new SideButton(actPass);
         lstPrimitives.getSelectionModel().addListSelectionListener(actPass);
@@ -125,7 +134,7 @@
         // the mark from map button
         SideButton markSelectedButton = new SideButton(actMarkSelected);
 
-        createLayout(lstPrimitives, true, Arrays.asList(selectButton, addButton, passButton, markButton, markSelectedButton));
+        createLayout(lstPrimitives, true, Arrays.asList(selectButton, addButton, clearAndAddButton, passButton, markButton, markSelectedButton));
     }
 
     private static void zoom(OsmDataLayer layer) {
@@ -178,6 +187,7 @@
     @Override
     public void showNotify() {
         SelectionEventManager.getInstance().addSelectionListenerForEdt(actAdd);
+        SelectionEventManager.getInstance().addSelectionListenerForEdt(actClearAndAdd);
         SelectionEventManager.getInstance().addSelectionListenerForEdt(actMarkSelected);
         actAdd.updateEnabledState();
     }
@@ -290,7 +300,7 @@
         AddAction(TodoListModel model) {
             this.model = model;
             putValue(NAME, tr("Add"));
-            putValue(SHORT_DESCRIPTION, tr("Add the selected items to the todo list."));
+            putValue(SHORT_DESCRIPTION, tr("Add the selected items to the todo list. (ctrl + [)."));
             new ImageProvider("dialogs", "add").getResource().attachImageIcon(this, true);
             updateEnabledState();
         }
@@ -317,6 +327,41 @@
         }
     }
 
+    private class ClearAndAddAction extends AbstractAction implements DataSelectionListener {
+        private final TodoListModel model;
+
+        ClearAndAddAction(TodoListModel model) {
+            this.model = model;
+            putValue(NAME, "Clear and add");
+            putValue(SHORT_DESCRIPTION, tr("Clear list, add the selected items to the todo list and zoom first item. (ctrl + ])."));
+            new ImageProvider("dialogs", "selectionlist").getResource().attachImageIcon(this, true);
+            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 +559,7 @@
     @Override
     public void propertyChange(PropertyChangeEvent arg0) {
         actAdd.updateEnabledState();
+        actClearAndAdd.updateEnabledState();
     }
 
     @Override
