Index: /applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/Address.java
===================================================================
--- /applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/Address.java	(revision 22187)
+++ /applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/Address.java	(revision 22188)
@@ -90,7 +90,6 @@
     private Way selectedWay;
     private Relation selectedRelation;
-    
-    MapFrame mapFrame;
-    
+    private boolean shift;
+
     public Address(MapFrame mapFrame) {
         super(tr("Add address"), "buildings", 
@@ -98,5 +97,4 @@
                 Shortcut.registerShortcut("mapmode:buildings", tr("Mode: {0}", tr("Buildings")), KeyEvent.VK_E, Shortcut.GROUP_EDIT),
                 mapFrame, getCursor());
-        this.mapFrame = mapFrame;
     }
 
@@ -111,6 +109,8 @@
 
     @Override public void exitMode() {
-        super.exitMode();
-        Main.map.mapView.removeMouseListener(this);
+        if (Main.map.mapView != null) {
+            super.exitMode();
+            Main.map.mapView.removeMouseListener(this);
+        }
         dialog.setVisible(false);
     }
@@ -120,5 +120,5 @@
         if (e.getButton() != MouseEvent.BUTTON1)
             return;
-
+        shift = (e.getModifiers() & ActionEvent.SHIFT_MASK) != 0;
         MapView mv = Main.map.mapView;
         Point mousePos = e.getPoint();
@@ -142,5 +142,5 @@
             }
             if (currentMouseNode.get(tagHouseStreet) != null) {
-                inputStreet.setText(currentMouseNode.get(tagHouseNumber));
+                inputStreet.setText(currentMouseNode.get(tagHouseStreet));
                 setSelectedWay((Way)null);
             } else {
@@ -203,5 +203,4 @@
     private void addAddrToPolygon(List<Way> mouseOnExistingBuildingWays, Collection<Command> cmds) {
         for (Way w:mouseOnExistingBuildingWays) {
-            cmds.add(new ChangePropertyCommand(w, tagHouseNumber, inputNumber.getText()));
             addAddrToPrimitive(w, cmds);
         }
@@ -210,4 +209,12 @@
     private void addAddrToPrimitive(OsmPrimitive osm, Collection<Command> cmds) {
         // add the current tag addr:housenumber in node and member in relation
+        if (shift) {
+            try {
+                revertInputNumberChange();
+            } catch (NumberFormatException en) {
+                System.out.println("Unable to parse house number \"" + inputNumber.getText() + "\"");
+            }
+
+        }
         cmds.add(new ChangePropertyCommand(osm, tagHouseNumber, inputNumber.getText()));            
         if (Main.pref.getBoolean("cadastrewms.addr.dontUseRelation", false)) {
@@ -373,4 +380,17 @@
         if (minus_two.isSelected() && num > 2)
             num = num - 2;
+        inputNumber.setText(num.toString());
+    }
+    
+    private void revertInputNumberChange() {
+        Integer num = Integer.parseInt(inputNumber.getText());
+        if (plus_one.isSelected())
+            num = num - 1;
+        if (plus_two.isSelected())
+            num = num - 2;
+        if (minus_one.isSelected() && num > 1)
+            num = num + 1;
+        if (minus_two.isSelected() && num > 2)
+            num = num + 2;
         inputNumber.setText(num.toString());
     }
