Index: /applications/editors/josm/plugins/HouseNumberTaggingTool/src/org/openstreetmap/josm/plugins/housenumbertool/Dto.java
===================================================================
--- /applications/editors/josm/plugins/HouseNumberTaggingTool/src/org/openstreetmap/josm/plugins/housenumbertool/Dto.java	(revision 30047)
+++ /applications/editors/josm/plugins/HouseNumberTaggingTool/src/org/openstreetmap/josm/plugins/housenumbertool/Dto.java	(revision 30048)
@@ -8,5 +8,6 @@
 public class Dto implements Serializable
 {
-   private static final long serialVersionUID = -4035800761473241695L;
+
+   private static final long serialVersionUID = 5226513739078369787L;
 
    private boolean saveBuilding = true;
@@ -18,4 +19,6 @@
    private boolean saveHousenumber = true;
 
+   private boolean tagStreet = true; // use tag addr:street or addr:place
+   
    private String building = "yes";
    private String country;
@@ -24,4 +27,5 @@
    private String postcode;
    private String street;
+   private String place;
    private String housenumber;
    private int housenumberChangeValue = 0;
@@ -176,3 +180,23 @@
       this.building = building;
    }
+
+   public boolean isTagStreet()
+   {
+       return tagStreet;
+   }
+
+   public void setTagStreet(boolean tagStreet)
+   {
+       this.tagStreet = tagStreet;
+   }
+
+   public String getPlace()
+   {
+       return place;
+   }
+
+   public void setPlace(String place)
+   {
+       this.place = place;
+   }
 }
Index: /applications/editors/josm/plugins/HouseNumberTaggingTool/src/org/openstreetmap/josm/plugins/housenumbertool/TagDialog.java
===================================================================
--- /applications/editors/josm/plugins/HouseNumberTaggingTool/src/org/openstreetmap/josm/plugins/housenumbertool/TagDialog.java	(revision 30047)
+++ /applications/editors/josm/plugins/HouseNumberTaggingTool/src/org/openstreetmap/josm/plugins/housenumbertool/TagDialog.java	(revision 30048)
@@ -8,4 +8,6 @@
 import java.awt.GridBagLayout;
 import java.awt.event.ActionEvent;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
 import java.io.File;
 import java.io.FileInputStream;
@@ -20,8 +22,10 @@
 import java.util.logging.Logger;
 
+import javax.swing.ButtonGroup;
 import javax.swing.JCheckBox;
 import javax.swing.JComboBox;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
+import javax.swing.JRadioButton;
 import javax.swing.JSlider;
 import javax.swing.JTextField;
@@ -45,4 +49,5 @@
 {
    private static final String APPLY_CHANGES = tr("Apply Changes");
+   private static final String TAG_STREET_OR_PLACE = tr("Use tag 'addr:street' or 'addr:place'");
    
    public static final String TAG_BUILDING = "building";
@@ -53,9 +58,10 @@
    public static final String TAG_ADDR_HOUSENUMBER = "addr:housenumber";
    public static final String TAG_ADDR_STREET = "addr:street";
+   public static final String TAG_ADDR_PLACE = "addr:place";
 
    public static final String[] buildingStrings = {"yes", "apartments", "chapel", "church", "commercial", "dormitory", "hotel", "house", "residential", "terrace",  "industrial", "retail", "warehouse", "cathedral",  "civic", "hospital", "school", "train_station", "transportation", "university", "public", "bridge", "bunker", "cabin", "construction", "farm_auxiliary", "garage", "garages" , "greenhouse", "hangar", "hut", "roof", "shed", "stable" };
    
    private static final int FPS_MIN = -2;
-   private static final int FPS_MAX = 2;
+   private static final int FPS_MAX =  2;
    
    private static final long serialVersionUID = 6414385452106276923L;
@@ -83,5 +89,7 @@
    private JCheckBox housenumberEnabled;
    private JSlider housenumberChangeSequence;
-   private JComboBox building;
+   private JComboBox<String[]> building;
+   private JRadioButton streetRadio;
+   private JRadioButton placeRadio;
 
    public TagDialog(String pluginDir, OsmPrimitive p_selection)
@@ -127,4 +135,5 @@
       c.gridy = 0;
       c.weightx = 0;
+      c.gridwidth = 3;
       editPanel.add(buildingEnabled, c);
 
@@ -133,7 +142,8 @@
       building.setSelectedItem(dto.getBuilding()); 
       building.setMaximumRowCount(50);
-      c.gridx = 1;
+      c.gridx = 3;
       c.gridy = 0;
       c.weightx = 1;
+      c.gridwidth = 1;
       editPanel.add(building, c);
       
@@ -148,4 +158,5 @@
       c.gridy = 1;
       c.weightx = 0;
+      c.gridwidth = 3;
       editPanel.add(countryEnabled, c);
 
@@ -156,7 +167,8 @@
       country.setSelectedItem(dto.getCountry());
       c.fill = GridBagConstraints.HORIZONTAL;
-      c.gridx = 1;
+      c.gridx = 3;
       c.gridy = 1;
       c.weightx = 1;
+      c.gridwidth = 1;
       editPanel.add(country, c);
 
@@ -171,4 +183,5 @@
       c.gridy = 2;
       c.weightx = 0;
+      c.gridwidth = 3;
       editPanel.add(stateEnabled, c);
 
@@ -179,7 +192,8 @@
       state.setSelectedItem(dto.getState());
       c.fill = GridBagConstraints.HORIZONTAL;
-      c.gridx = 1;
+      c.gridx = 3;
       c.gridy = 2;
       c.weightx = 1;
+      c.gridwidth = 1;
       editPanel.add(state, c);
 
@@ -193,4 +207,5 @@
       c.gridy = 3;
       c.weightx = 0;
+      c.gridwidth = 3;
       editPanel.add(cityEnabled, c);
 
@@ -201,7 +216,8 @@
       city.setSelectedItem(dto.getCity());
       c.fill = GridBagConstraints.HORIZONTAL;
-      c.gridx = 1;
+      c.gridx = 3;
       c.gridy = 3;
       c.weightx = 1;
+      c.gridwidth = 1;
       editPanel.add(city, c);
 
@@ -215,4 +231,5 @@
       c.gridy = 4;
       c.weightx = 0;
+      c.gridwidth = 3;
       editPanel.add(zipEnabled, c);
 
@@ -223,11 +240,12 @@
       postcode.setSelectedItem(dto.getPostcode());
       c.fill = GridBagConstraints.HORIZONTAL;
-      c.gridx = 1;
+      c.gridx = 3;
       c.gridy = 4;
       c.weightx = 1;
+      c.gridwidth = 1;
       editPanel.add(postcode, c);
 
       // street
-      streetEnabled = new JCheckBox(TAG_ADDR_STREET);
+      streetEnabled = new JCheckBox();
       streetEnabled.setFocusable(false);
       streetEnabled.setSelected(dto.isSaveStreet());
@@ -237,15 +255,51 @@
       c.gridy = 5;
       c.weightx = 0;
+      c.gridwidth = 1;
       editPanel.add(streetEnabled, c);
 
+      
+      streetRadio = new JRadioButton(TAG_ADDR_STREET);
+      streetRadio.setToolTipText(TAG_STREET_OR_PLACE);
+      streetRadio.setSelected(dto.isTagStreet());
+      streetRadio.addItemListener(new RadioChangeListener());
+      c.fill = GridBagConstraints.HORIZONTAL;
+      c.gridx = 1;
+      c.gridy = 5;
+      c.weightx = 0;
+      c.gridwidth = 1;
+      editPanel.add(streetRadio, c);
+      
+      placeRadio = new JRadioButton("addr:place");
+      placeRadio.setToolTipText(TAG_STREET_OR_PLACE);
+      placeRadio.setSelected(!dto.isTagStreet());
+      placeRadio.addItemListener(new RadioChangeListener());
+      c.fill = GridBagConstraints.HORIZONTAL;
+      c.gridx = 2;
+      c.gridy = 5;
+      c.weightx = 0;
+      c.gridwidth = 1;
+      editPanel.add(placeRadio, c);
+      
+      ButtonGroup g = new ButtonGroup();
+      g.add( streetRadio ); 
+      g.add( placeRadio );
+      
       street = new AutoCompletingComboBox();
-      street.setPossibleItems(getPossibleStreets());
+      if (dto.isTagStreet())
+      {
+          street.setPossibleItems(getPossibleStreets());
+      }
+      else
+      {
+          street.setPossibleACItems(acm.getValues(TAG_ADDR_PLACE));
+      }
       street.setPreferredSize(new Dimension(200, 24));
       street.setEditable(true);
       street.setSelectedItem(dto.getStreet());
       c.fill = GridBagConstraints.HORIZONTAL;
-      c.gridx = 1;
+      c.gridx = 3;
       c.gridy = 5;
       c.weightx = 1;
+      c.gridwidth = 1;
       editPanel.add(street, c);
 
@@ -259,4 +313,5 @@
       c.gridy = 6;
       c.weightx = 0;
+      c.gridwidth = 3;
       editPanel.add(housenumberEnabled, c);
 
@@ -275,7 +330,8 @@
       
       c.fill = GridBagConstraints.HORIZONTAL;
-      c.gridx = 1;
+      c.gridx = 3;
       c.gridy = 6;
       c.weightx = 1;
+      c.gridwidth = 1;
       editPanel.add(housnumber, c);
       
@@ -285,4 +341,5 @@
       c.gridy = 7;
       c.weightx = 0;
+      c.gridwidth = 3;
       editPanel.add(seqLabel, c);
 
@@ -293,7 +350,8 @@
       housenumberChangeSequence.setPaintLabels(true);
       housenumberChangeSequence.setSnapToTicks(true);
-      c.gridx = 1;
+      c.gridx = 3;
       c.gridy = 7;
       c.weightx = 1;
+      c.gridwidth = 1;
       editPanel.add(housenumberChangeSequence, c);
    
@@ -313,5 +371,6 @@
          dto.setSavePostcode(zipEnabled.isSelected());
          dto.setSaveStreet(streetEnabled.isSelected());
-
+         dto.setTagStreet(streetRadio.isSelected());
+         
          dto.setBuilding((String) building.getSelectedItem());
          dto.setCity(getAutoCompletingComboBoxValue(city));
@@ -408,12 +467,39 @@
       }
 
-      if (dto.isSaveStreet()) {
-         String value = selection.get(TagDialog.TAG_ADDR_STREET);
-         if (value == null || (value != null && !value.equals(dto.getStreet())))
-         {
-            ChangePropertyCommand command = new ChangePropertyCommand(selection, TagDialog.TAG_ADDR_STREET, dto.getStreet());
-            commands.add(command);
-         }
-      }
+        if (dto.isSaveStreet())
+        {
+            if (dto.isTagStreet())
+            {
+                String value = selection.get(TagDialog.TAG_ADDR_STREET);
+                if (value == null || (value != null && !value.equals(dto.getStreet())))
+                {
+                    ChangePropertyCommand command = new ChangePropertyCommand(selection, TagDialog.TAG_ADDR_STREET, dto.getStreet());
+                    commands.add(command);
+                    
+                    // remove old place-tag
+                    if (selection.get(TagDialog.TAG_ADDR_PLACE) != null)
+                    {
+                        ChangePropertyCommand command2 = new ChangePropertyCommand(selection, TagDialog.TAG_ADDR_PLACE, null);
+                        commands.add(command2);
+                    }
+                }
+            }
+            else
+            {
+                String value = selection.get(TagDialog.TAG_ADDR_PLACE);
+                if (value == null || (value != null && !value.equals(dto.getStreet())))
+                {
+                    ChangePropertyCommand command = new ChangePropertyCommand(selection, TagDialog.TAG_ADDR_PLACE, dto.getStreet());
+                    commands.add(command);
+                    
+                    // remove old place-tag
+                    if (selection.get(TagDialog.TAG_ADDR_STREET) != null)
+                    {
+                        ChangePropertyCommand command2 = new ChangePropertyCommand(selection, TagDialog.TAG_ADDR_STREET, null);
+                        commands.add(command2);
+                    }
+                }
+            }
+        }
 
       if (dto.isSaveState()) {
@@ -475,3 +561,21 @@
 
    }
+   
+    class RadioChangeListener implements ItemListener
+    {
+
+         @Override
+        public void itemStateChanged(ItemEvent e)
+        {
+            if (streetRadio.isSelected())
+            {
+                street.setPossibleItems(getPossibleStreets());
+            }
+            else
+            {
+                street.setPossibleACItems(acm.getValues(TAG_ADDR_PLACE));
+            }
+        }
+
+    }
 }
