Index: applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/CzechAddressPlugin.java
===================================================================
--- applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/CzechAddressPlugin.java	(revision 15585)
+++ applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/CzechAddressPlugin.java	(revision 15649)
@@ -21,4 +21,5 @@
 import org.openstreetmap.josm.gui.MainMenu;
 import org.openstreetmap.josm.gui.MapFrame;
+import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
 import org.openstreetmap.josm.plugins.Plugin;
 import org.openstreetmap.josm.plugins.czechaddress.actions.ConflictResolveAction;
@@ -190,3 +191,11 @@
         }
     }
+
+    @Override
+    public PreferenceSetting getPreferenceSetting() {
+        return Preferences.getInstance();
+    }
+
+
+
 }
Index: applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/Preferences.form
===================================================================
--- applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/Preferences.form	(revision 15649)
+++ applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/Preferences.form	(revision 15649)
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.3" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+  <AuxValues>
+    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
+    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
+    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
+    <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,44,0,0,1,-112"/>
+  </AuxValues>
+
+  <Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridLayout">
+    <Property name="columns" type="int" value="0"/>
+    <Property name="rows" type="int" value="1"/>
+  </Layout>
+  <SubComponents>
+    <Container class="javax.swing.JPanel" name="mainPanel">
+
+      <Layout>
+        <DimensionLayout dim="0">
+          <Group type="103" groupAlignment="0" attributes="0">
+              <Group type="102" attributes="0">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <Group type="102" alignment="0" attributes="0">
+                          <EmptySpace min="-2" pref="12" max="-2" attributes="0"/>
+                          <Component id="optimizeComboBox" min="-2" max="-2" attributes="1"/>
+                      </Group>
+                      <Component id="jLabel2" alignment="0" min="-2" max="-2" attributes="0"/>
+                      <Component id="addNewTagCheckBox" alignment="0" pref="400" max="32767" attributes="0"/>
+                      <Group type="102" alignment="0" attributes="0">
+                          <EmptySpace min="-2" pref="12" max="-2" attributes="0"/>
+                          <Component id="addNewTagKeyField" min="-2" pref="120" max="-2" attributes="0"/>
+                          <EmptySpace max="-2" attributes="0"/>
+                          <Component id="jLabel1" min="-2" max="-2" attributes="0"/>
+                          <EmptySpace max="-2" attributes="0"/>
+                          <Component id="addNewTagValueField" min="-2" pref="125" max="-2" attributes="0"/>
+                          <EmptySpace pref="108" max="-2" attributes="0"/>
+                      </Group>
+                  </Group>
+                  <EmptySpace max="-2" attributes="0"/>
+              </Group>
+          </Group>
+        </DimensionLayout>
+        <DimensionLayout dim="1">
+          <Group type="103" groupAlignment="0" attributes="0">
+              <Group type="102" alignment="0" attributes="0">
+                  <Component id="jLabel2" min="-2" max="-2" attributes="0"/>
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Component id="optimizeComboBox" min="-2" max="-2" attributes="0"/>
+                  <EmptySpace type="separate" max="-2" attributes="0"/>
+                  <Component id="addNewTagCheckBox" min="-2" max="-2" attributes="0"/>
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Group type="103" groupAlignment="3" attributes="0">
+                      <Component id="addNewTagKeyField" alignment="3" min="-2" max="-2" attributes="0"/>
+                      <Component id="jLabel1" alignment="3" min="-2" max="-2" attributes="0"/>
+                      <Component id="addNewTagValueField" alignment="3" min="-2" max="-2" attributes="0"/>
+                  </Group>
+                  <EmptySpace pref="183" max="32767" attributes="0"/>
+              </Group>
+          </Group>
+        </DimensionLayout>
+      </Layout>
+      <SubComponents>
+        <Component class="javax.swing.JCheckBox" name="addNewTagCheckBox">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="P&#x159;id&#xe1;vat n&#xe1;sleduj&#xed;c&#xed; tag p&#x159;i vytv&#xe1;&#x159;en&#xed; adresn&#xed;ho bodu"/>
+          </Properties>
+          <Events>
+            <EventHandler event="stateChanged" listener="javax.swing.event.ChangeListener" parameters="javax.swing.event.ChangeEvent" handler="addNewTagChanged"/>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="addNewTagCheckBoxActionPerformed"/>
+          </Events>
+        </Component>
+        <Component class="javax.swing.JTextField" name="addNewTagKeyField">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="source:position"/>
+            <Property name="enabled" type="boolean" value="false"/>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JLabel" name="jLabel1">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="="/>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JTextField" name="addNewTagValueField">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="cuzk:km"/>
+            <Property name="enabled" type="boolean" value="false"/>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JLabel" name="jLabel2">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Optimalizovat algoritmus p&#x159;i&#x159;azov&#xe1;n&#xed;:"/>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JComboBox" name="optimizeComboBox">
+          <Properties>
+            <Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
+              <StringArray count="2">
+                <StringItem index="0" value="pro rychlej&#x161;&#xed; odezvu"/>
+                <StringItem index="1" value="men&#x161;&#xed; spot&#x159;ebu pam&#x11b;ti"/>
+              </StringArray>
+            </Property>
+            <Property name="selectedIndex" type="int" value="1"/>
+            <Property name="enabled" type="boolean" value="false"/>
+          </Properties>
+        </Component>
+      </SubComponents>
+    </Container>
+  </SubComponents>
+</Form>
Index: applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/Preferences.java
===================================================================
--- applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/Preferences.java	(revision 15649)
+++ applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/Preferences.java	(revision 15649)
@@ -0,0 +1,179 @@
+package org.openstreetmap.josm.plugins.czechaddress;
+
+
+import javax.swing.JPanel;
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.gui.preferences.PreferenceDialog;
+import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
+/**
+ *
+ * @author radek
+ */
+public class Preferences extends javax.swing.JPanel implements PreferenceSetting {
+
+    public int optimize;
+
+    private String KEY_OPTIMIZE = "czechaddress.opzimize";
+
+    public boolean addNewTag;
+    public String addNewTagKey;
+    public String addNewTagValue;
+
+    private String KEY_ADDNEWTAG = "czechaddress.newtag";
+    private String KEY_ADDNEWTAGKEY = "czechaddress.newtagkey";
+    private String KEY_ADDNEWTAGVALUE = "czechaddress.newtagvalue";
+
+    private static Preferences singleton = null;
+    public static Preferences getInstance() {
+        if (singleton == null)
+            singleton = new Preferences();
+        return singleton;
+    }
+
+    /** Creates new form Preferences */
+    private Preferences() {
+        initComponents();
+        addNewTag = Main.pref.getBoolean(KEY_ADDNEWTAG, addNewTagCheckBox.isSelected());
+        addNewTagKey = Main.pref.get(KEY_ADDNEWTAGKEY, addNewTagKeyField.getText());
+        addNewTagValue = Main.pref.get(KEY_ADDNEWTAGVALUE, addNewTagValueField.getText());
+        optimize = Main.pref.getInteger(KEY_OPTIMIZE, optimizeComboBox.getSelectedIndex());
+    }
+
+    public void reloadSettings() {
+        addNewTagCheckBox.setSelected(addNewTag);
+        addNewTagKeyField.setText(addNewTagKey);
+        addNewTagValueField.setText(addNewTagValue);
+
+        optimizeComboBox.setSelectedIndex(optimizeComboBox.getSelectedIndex());
+    }
+
+    /** This method is called from within the constructor to
+     * initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is
+     * always regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents() {
+
+        mainPanel = new javax.swing.JPanel();
+        addNewTagCheckBox = new javax.swing.JCheckBox();
+        addNewTagKeyField = new javax.swing.JTextField();
+        jLabel1 = new javax.swing.JLabel();
+        addNewTagValueField = new javax.swing.JTextField();
+        jLabel2 = new javax.swing.JLabel();
+        optimizeComboBox = new javax.swing.JComboBox();
+
+        setLayout(new java.awt.GridLayout(1, 0));
+
+        addNewTagCheckBox.setText("Přidávat následující tag při vytváření adresního bodu");
+        addNewTagCheckBox.addChangeListener(new javax.swing.event.ChangeListener() {
+            public void stateChanged(javax.swing.event.ChangeEvent evt) {
+                addNewTagChanged(evt);
+            }
+        });
+        addNewTagCheckBox.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                addNewTagCheckBoxActionPerformed(evt);
+            }
+        });
+
+        addNewTagKeyField.setText("source:position");
+        addNewTagKeyField.setEnabled(false);
+
+        jLabel1.setText("=");
+
+        addNewTagValueField.setText("cuzk:km");
+        addNewTagValueField.setEnabled(false);
+
+        jLabel2.setText("Optimalizovat algoritmus přiřazování:");
+
+        optimizeComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "pro rychlejší odezvu", "menší spotřebu paměti" }));
+        optimizeComboBox.setSelectedIndex(1);
+        optimizeComboBox.setEnabled(false);
+
+        javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(mainPanel);
+        mainPanel.setLayout(mainPanelLayout);
+        mainPanelLayout.setHorizontalGroup(
+            mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(mainPanelLayout.createSequentialGroup()
+                .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(mainPanelLayout.createSequentialGroup()
+                        .addGap(12, 12, 12)
+                        .addComponent(optimizeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                    .addComponent(jLabel2)
+                    .addComponent(addNewTagCheckBox, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE)
+                    .addGroup(mainPanelLayout.createSequentialGroup()
+                        .addGap(12, 12, 12)
+                        .addComponent(addNewTagKeyField, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(jLabel1)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(addNewTagValueField, javax.swing.GroupLayout.PREFERRED_SIZE, 125, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 108, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                .addContainerGap())
+        );
+        mainPanelLayout.setVerticalGroup(
+            mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(mainPanelLayout.createSequentialGroup()
+                .addComponent(jLabel2)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(optimizeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addGap(18, 18, 18)
+                .addComponent(addNewTagCheckBox)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(addNewTagKeyField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(jLabel1)
+                    .addComponent(addNewTagValueField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addContainerGap(183, Short.MAX_VALUE))
+        );
+
+        add(mainPanel);
+    }// </editor-fold>//GEN-END:initComponents
+
+    private void addNewTagChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_addNewTagChanged
+        addNewTagKeyField.setEnabled(addNewTagCheckBox.isSelected());
+        addNewTagValueField.setEnabled(addNewTagCheckBox.isSelected());
+    }//GEN-LAST:event_addNewTagChanged
+
+    private void addNewTagCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addNewTagCheckBoxActionPerformed
+        // TODO add your handling code here:
+    }//GEN-LAST:event_addNewTagCheckBoxActionPerformed
+
+    public void addGui(PreferenceDialog gui) {
+        JPanel p = gui.createPreferenceTab("czech_flag",
+                "Nastavení CzechAddressPlugin",
+                "Nastavení pluginu pro úpravu a zadávání adres na území ČR.");
+        p.add(mainPanel);
+        reloadSettings();
+    }
+
+    public boolean ok() {
+        addNewTag = addNewTagCheckBox.isSelected();
+        Main.pref.put(KEY_ADDNEWTAG, addNewTag);
+
+        addNewTagKey = addNewTagKeyField.getText();
+        Main.pref.put(KEY_ADDNEWTAGKEY, addNewTagKey);
+
+        addNewTagValue = addNewTagValueField.getText();
+        Main.pref.put(KEY_ADDNEWTAGVALUE, addNewTagValue);
+
+        optimize = optimizeComboBox.getSelectedIndex();
+        Main.pref.putInteger(KEY_OPTIMIZE, optimize);
+
+        return false;
+    }
+
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JCheckBox addNewTagCheckBox;
+    private javax.swing.JTextField addNewTagKeyField;
+    private javax.swing.JTextField addNewTagValueField;
+    private javax.swing.JLabel jLabel1;
+    private javax.swing.JLabel jLabel2;
+    private javax.swing.JPanel mainPanel;
+    private javax.swing.JComboBox optimizeComboBox;
+    // End of variables declaration//GEN-END:variables
+
+}
Index: applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/actions/FactoryAction.java
===================================================================
--- applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/actions/FactoryAction.java	(revision 15585)
+++ applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/actions/FactoryAction.java	(revision 15649)
@@ -9,6 +9,8 @@
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.gui.MapFrame;
+import org.openstreetmap.josm.plugins.czechaddress.Preferences;
 import org.openstreetmap.josm.plugins.czechaddress.addressdatabase.House;
 import org.openstreetmap.josm.plugins.czechaddress.intelligence.Reasoner;
+import org.openstreetmap.josm.plugins.czechaddress.proposal.AddKeyValueProposal;
 import org.openstreetmap.josm.plugins.czechaddress.proposal.ProposalContainer;
 import org.openstreetmap.josm.tools.ImageProvider;
@@ -79,4 +81,5 @@
     public void mouseClicked(MouseEvent e) {
         super.mouseClicked(e);
+        Preferences p = Preferences.getInstance();
 
         // Get the currently selected House in the FactoryDialog.
@@ -90,4 +93,6 @@
         ProposalContainer container = new ProposalContainer(newNode);
         container.setProposals(house.getDiff(newNode));
+        if (p.addNewTag)
+            container.addProposal(new AddKeyValueProposal(p.addNewTagKey, p.addNewTagValue));
         container.applyAll();
 
Index: applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/addressdatabase/House.java
===================================================================
--- applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/addressdatabase/House.java	(revision 15585)
+++ applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/addressdatabase/House.java	(revision 15649)
@@ -64,4 +64,20 @@
 
     /**
+     * Returns the number unique in a suburb (číslo popisné)
+     */
+    public void setCP(String cp) {
+        this.cp = cp;
+        this.name = generateName(this.cp, this.co);
+    }
+
+    /**
+     * Returns the number unique in a street (číslo orientační)
+     */
+    public void setCO(String co) {
+        this.co = co;
+        this.name = generateName(this.cp, this.co);
+    }
+
+    /**
      * Generates a name from house numbers.
      *
Index: applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/gui/LocationSelector.java
===================================================================
--- applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/gui/LocationSelector.java	(revision 15585)
+++ applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/gui/LocationSelector.java	(revision 15649)
@@ -293,7 +293,7 @@
         if (obec.getSuburbs().size() > 0) {
             Object[] suburbs = new Object[obec.getSuburbs().size() + 1];
-            suburbs[0] = obec;
             for (int i=0; i<obec.getSuburbs().size(); i++)
-                suburbs[i+1] = obec.getSuburbs().get(i);
+                suburbs[i] = obec.getSuburbs().get(i);
+            suburbs[obec.getSuburbs().size()] = obec;
             suburbComboBox.setModel(new DefaultComboBoxModel(suburbs));
         } else
@@ -361,5 +361,6 @@
             if (value instanceof ViToCi) {
                 setFont(getFont().deriveFont(Font.BOLD));
-                setText(((ViToCi) value).getName() + ", všechny části obce");
+//                setText(((ViToCi) value).getName() + ", všechny části [experimentální]");
+                setText("všechny části obce [experimentální]");
             } else
                 setFont(getFont().deriveFont(Font.PLAIN));
Index: applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/gui/ManagerDialog.java
===================================================================
--- applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/gui/ManagerDialog.java	(revision 15585)
+++ applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/gui/ManagerDialog.java	(revision 15649)
@@ -17,8 +17,9 @@
 import org.openstreetmap.josm.plugins.czechaddress.addressdatabase.Suburb;
 import org.openstreetmap.josm.plugins.czechaddress.addressdatabase.ViToCi;
-import org.openstreetmap.josm.plugins.czechaddress.gui.databaseeditors.StreetEditor;
+import org.openstreetmap.josm.plugins.czechaddress.gui.databaseeditors.EditorFactory;
 import org.openstreetmap.josm.plugins.czechaddress.gui.utils.UniversalTreeRenderer;
 import org.openstreetmap.josm.plugins.czechaddress.intelligence.Capitalizator;
 import org.openstreetmap.josm.plugins.czechaddress.intelligence.Reasoner;
+import org.openstreetmap.josm.tools.ImageProvider;
 
 /**
@@ -40,4 +41,6 @@
         dbTree.setModel(new DatabaseModel());
         dbTree.setCellRenderer(new UniversalTreeRenderer());
+
+        dbEditButton.setIcon(ImageProvider.get("actions", "edit.png"));
 
         Capitalizator cap = new Capitalizator(
@@ -325,11 +328,13 @@
     private void dbTreeValueChanged(javax.swing.event.TreeSelectionEvent evt) {//GEN-FIRST:event_dbTreeValueChanged
         dbTreeValue = (AddressElement) dbTree.getSelectionPath().getLastPathComponent();
-        dbEditButton.setEnabled(dbTreeValue instanceof Street);
+        dbEditButton.setEnabled( EditorFactory.isEditable(dbTreeValue) );
     }//GEN-LAST:event_dbTreeValueChanged
 
     private void dbEditButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_dbEditButtonActionPerformed
-        if (dbTreeValue instanceof Street)
-            if (StreetEditor.editStreet((Street) dbTreeValue))
+        if (EditorFactory.isEditable(dbTreeValue)) {
+            if (EditorFactory.edit((AddressElement) dbTreeValue))
                 dbTree.repaint();
+        } else
+            dbEditButton.setEnabled(false);
     }//GEN-LAST:event_dbEditButtonActionPerformed
 
Index: applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/gui/PointManipulatorDialog.java
===================================================================
--- applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/gui/PointManipulatorDialog.java	(revision 15585)
+++ applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/gui/PointManipulatorDialog.java	(revision 15649)
@@ -15,4 +15,5 @@
 import org.openstreetmap.josm.plugins.czechaddress.CzechAddressPlugin;
 import org.openstreetmap.josm.plugins.czechaddress.NotNullList;
+import org.openstreetmap.josm.plugins.czechaddress.Preferences;
 import org.openstreetmap.josm.plugins.czechaddress.PrimUtils;
 import org.openstreetmap.josm.plugins.czechaddress.StatusListener;
@@ -21,4 +22,5 @@
 import org.openstreetmap.josm.plugins.czechaddress.gui.utils.UniversalListRenderer;
 import org.openstreetmap.josm.plugins.czechaddress.intelligence.Reasoner;
+import org.openstreetmap.josm.plugins.czechaddress.proposal.AddKeyValueProposal;
 import org.openstreetmap.josm.plugins.czechaddress.proposal.Proposal;
 import org.openstreetmap.josm.plugins.czechaddress.proposal.ProposalContainer;
@@ -302,9 +304,12 @@
 
         if (matchesComboBox.getSelectedItem() == null) return;        
-        AddressElement selectedElement
-                           = (AddressElement) matchesComboBox.getSelectedItem();
-
-        proposalContainer.setProposals(selectedElement.getDiff(
-                                                proposalContainer.getTarget()));
+        AddressElement selectedElement = (AddressElement) matchesComboBox.getSelectedItem();
+        proposalContainer.setProposals(selectedElement.getDiff(proposalContainer.getTarget()));
+
+        Preferences p = Preferences.getInstance();
+        if (p.addNewTag && proposalContainer.getTarget().keySet().size() == 0)
+            proposalContainer.addProposal(new AddKeyValueProposal(
+                                               p.addNewTagKey, p.addNewTagValue));
+
     }//GEN-LAST:event_matchChanged
 
Index: applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/gui/databaseeditors/EditorFactory.java
===================================================================
--- applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/gui/databaseeditors/EditorFactory.java	(revision 15649)
+++ applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/gui/databaseeditors/EditorFactory.java	(revision 15649)
@@ -0,0 +1,76 @@
+package org.openstreetmap.josm.plugins.czechaddress.gui.databaseeditors;
+
+import org.openstreetmap.josm.plugins.czechaddress.addressdatabase.AddressElement;
+import org.openstreetmap.josm.plugins.czechaddress.addressdatabase.House;
+import org.openstreetmap.josm.plugins.czechaddress.addressdatabase.Street;
+import org.openstreetmap.josm.plugins.czechaddress.addressdatabase.Suburb;
+import org.openstreetmap.josm.plugins.czechaddress.intelligence.Reasoner;
+
+/**
+ * Utitilies for editing the database
+ *
+ * @author Radomír Ćernoch
+ */
+public abstract class EditorFactory {
+
+    public static boolean isEditable(AddressElement elem) {
+        return (elem instanceof House) ||
+               (elem instanceof Street) ||
+               (elem instanceof Suburb);
+    }
+
+    public static boolean edit(AddressElement elem) {
+        if (elem instanceof House)
+            return editHouse((House) elem);
+
+        if (elem instanceof Street)
+            return editStreet((Street) elem);
+
+        return false;
+    }
+
+    public static boolean editStreet(Street street) {
+        StreetEditor dialog = new StreetEditor(street);
+        dialog.setVisible(true);
+        if (dialog.getValue() == 1) {
+            Reasoner r = Reasoner.getInstance();
+            synchronized (r) {
+                r.openTransaction();
+                street.setName(dialog.getStreetName());
+                for (House house : street.getHouses())
+                    r.update(house);
+                r.update(street);
+                r.closeTransaction();
+            }
+            return true;
+        }
+        return false;
+    }
+
+    public static boolean editHouse(House house) {
+        HouseEditor dialog = new HouseEditor(house);
+        dialog.setVisible(true);
+        if (dialog.getValue() == 1) {
+            Reasoner r = Reasoner.getInstance();
+            synchronized (r) {
+                r.openTransaction();
+                house.setCP(dialog.getCP());
+                house.setCO(dialog.getCO());
+                r.update(house);
+                r.closeTransaction();
+            }
+            return true;
+        }
+        return false;
+    }
+
+    public static boolean editSuburb(Suburb suburb) {
+        SuburbEditor dialog = new SuburbEditor(suburb);
+        dialog.setVisible(true);
+        if (dialog.getValue() == 1) {
+            suburb.setName(dialog.getSuburbName());
+            return true;
+        }
+        return false;
+    }
+}
Index: applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/gui/databaseeditors/HouseEditor.form
===================================================================
--- applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/gui/databaseeditors/HouseEditor.form	(revision 15649)
+++ applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/gui/databaseeditors/HouseEditor.form	(revision 15649)
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.3" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+  <AuxValues>
+    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
+    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
+    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
+    <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,0,70,0,0,0,-23"/>
+  </AuxValues>
+
+  <Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridLayout">
+    <Property name="columns" type="int" value="0"/>
+    <Property name="rows" type="int" value="1"/>
+  </Layout>
+  <SubComponents>
+    <Container class="javax.swing.JPanel" name="mainPanel">
+
+      <Layout>
+        <DimensionLayout dim="0">
+          <Group type="103" groupAlignment="0" attributes="0">
+              <Group type="102" alignment="0" attributes="0">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <Component id="jLabel1" min="-2" max="-2" attributes="0"/>
+                      <Component id="jLabel2" min="-2" max="-2" attributes="0"/>
+                  </Group>
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <Group type="102" alignment="1" attributes="0">
+                          <Component id="parentField" pref="149" max="32767" attributes="0"/>
+                          <EmptySpace max="-2" attributes="0"/>
+                          <Component id="parentEditButton" min="-2" max="-2" attributes="0"/>
+                      </Group>
+                      <Group type="102" alignment="0" attributes="0">
+                          <Component id="cpField" min="-2" pref="74" max="-2" attributes="0"/>
+                          <EmptySpace max="-2" attributes="0"/>
+                          <Component id="jLabel3" min="-2" max="-2" attributes="0"/>
+                          <EmptySpace max="-2" attributes="0"/>
+                          <Component id="coField" pref="58" max="32767" attributes="0"/>
+                      </Group>
+                  </Group>
+              </Group>
+          </Group>
+        </DimensionLayout>
+        <DimensionLayout dim="1">
+          <Group type="103" groupAlignment="0" attributes="0">
+              <Group type="102" attributes="0">
+                  <Group type="103" groupAlignment="3" attributes="0">
+                      <Component id="jLabel1" alignment="3" min="-2" max="-2" attributes="0"/>
+                      <Component id="parentField" alignment="3" min="-2" max="-2" attributes="0"/>
+                      <Component id="parentEditButton" alignment="3" min="-2" max="-2" attributes="0"/>
+                  </Group>
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Group type="103" groupAlignment="3" attributes="0">
+                      <Component id="jLabel2" alignment="3" min="-2" max="-2" attributes="0"/>
+                      <Component id="cpField" alignment="3" min="-2" max="-2" attributes="0"/>
+                      <Component id="jLabel3" alignment="3" min="-2" max="-2" attributes="0"/>
+                      <Component id="coField" alignment="3" min="-2" max="-2" attributes="0"/>
+                  </Group>
+                  <EmptySpace max="32767" attributes="0"/>
+              </Group>
+          </Group>
+        </DimensionLayout>
+      </Layout>
+      <SubComponents>
+        <Component class="javax.swing.JLabel" name="jLabel1">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Rodi&#x10d;:"/>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JTextField" name="jTextField1">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="jTextField1"/>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JTextField" name="parentField">
+          <Properties>
+            <Property name="editable" type="boolean" value="false"/>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JLabel" name="jLabel2">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="&#x10d;.p.:"/>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JTextField" name="cpField">
+        </Component>
+        <Component class="javax.swing.JTextField" name="coField">
+        </Component>
+        <Component class="javax.swing.JLabel" name="jLabel3">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="&#x10d;.o.:"/>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JButton" name="parentEditButton">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="    "/>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="parentEditButtonActionPerformed"/>
+          </Events>
+        </Component>
+      </SubComponents>
+    </Container>
+  </SubComponents>
+</Form>
Index: applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/gui/databaseeditors/HouseEditor.java
===================================================================
--- applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/gui/databaseeditors/HouseEditor.java	(revision 15649)
+++ applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/gui/databaseeditors/HouseEditor.java	(revision 15649)
@@ -0,0 +1,143 @@
+package org.openstreetmap.josm.plugins.czechaddress.gui.databaseeditors;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.gui.ExtendedDialog;
+import org.openstreetmap.josm.plugins.czechaddress.addressdatabase.AddressElement;
+import org.openstreetmap.josm.plugins.czechaddress.addressdatabase.House;
+import org.openstreetmap.josm.tools.ImageProvider;
+
+/**
+ * Dialog for editing a {@link House}.
+ *
+ * @author Radomír Ćernoch
+ */
+public class HouseEditor extends ExtendedDialog {
+
+    AddressElement parent = null;
+
+    public HouseEditor(House house) {
+        super(Main.parent, "Upravit dům", new String[] {"OK", "Zrušit"}, true);
+        initComponents();
+
+        parent = house.getParent();
+        if (parent != null)
+            parentField.setText(parent.getName());
+        else
+            parentField.setEnabled(false);
+
+        parentEditButton.setIcon(ImageProvider.get("actions", "edit.png"));
+        parentEditButton.setText("");
+        parentEditButton.setEnabled(EditorFactory.isEditable(parent));
+
+        coField.setText(house.getCO());
+        cpField.setText(house.getCP());
+
+        // And finalize initializing the form.
+        setupDialog(mainPanel, new String[] {"ok.png", "cancel.png"});
+    }
+
+    public String getCO() {
+        return coField.getText();
+    }
+    public String getCP() {
+        return cpField.getText();
+    }
+
+    /** This method is called from within the constructor to
+     * initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is
+     * always regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents() {
+
+        mainPanel = new javax.swing.JPanel();
+        jLabel1 = new javax.swing.JLabel();
+        jTextField1 = new javax.swing.JTextField();
+        parentField = new javax.swing.JTextField();
+        jLabel2 = new javax.swing.JLabel();
+        cpField = new javax.swing.JTextField();
+        coField = new javax.swing.JTextField();
+        jLabel3 = new javax.swing.JLabel();
+        parentEditButton = new javax.swing.JButton();
+
+        setLayout(new java.awt.GridLayout());
+
+        jLabel1.setText("Rodič:");
+
+        jTextField1.setText("jTextField1");
+
+        parentField.setEditable(false);
+
+        jLabel2.setText("č.p.:");
+
+        jLabel3.setText("č.o.:");
+
+        parentEditButton.setText("    ");
+        parentEditButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                parentEditButtonActionPerformed(evt);
+            }
+        });
+
+        javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(mainPanel);
+        mainPanel.setLayout(mainPanelLayout);
+        mainPanelLayout.setHorizontalGroup(
+            mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(mainPanelLayout.createSequentialGroup()
+                .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(jLabel1)
+                    .addComponent(jLabel2))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, mainPanelLayout.createSequentialGroup()
+                        .addComponent(parentField, javax.swing.GroupLayout.DEFAULT_SIZE, 149, Short.MAX_VALUE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(parentEditButton))
+                    .addGroup(mainPanelLayout.createSequentialGroup()
+                        .addComponent(cpField, javax.swing.GroupLayout.PREFERRED_SIZE, 74, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(jLabel3)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(coField, javax.swing.GroupLayout.DEFAULT_SIZE, 58, Short.MAX_VALUE))))
+        );
+        mainPanelLayout.setVerticalGroup(
+            mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(mainPanelLayout.createSequentialGroup()
+                .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(jLabel1)
+                    .addComponent(parentField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(parentEditButton))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(jLabel2)
+                    .addComponent(cpField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(jLabel3)
+                    .addComponent(coField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+
+        add(mainPanel);
+    }// </editor-fold>//GEN-END:initComponents
+
+    private void parentEditButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_parentEditButtonActionPerformed
+        assert parent != null;
+        if (EditorFactory.edit(parent))
+            parentField.setText(parent.getName());
+    }//GEN-LAST:event_parentEditButtonActionPerformed
+
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JTextField coField;
+    private javax.swing.JTextField cpField;
+    private javax.swing.JLabel jLabel1;
+    private javax.swing.JLabel jLabel2;
+    private javax.swing.JLabel jLabel3;
+    private javax.swing.JTextField jTextField1;
+    private javax.swing.JPanel mainPanel;
+    private javax.swing.JButton parentEditButton;
+    private javax.swing.JTextField parentField;
+    // End of variables declaration//GEN-END:variables
+
+}
Index: applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/gui/databaseeditors/StreetEditor.form
===================================================================
--- applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/gui/databaseeditors/StreetEditor.form	(revision 15585)
+++ applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/gui/databaseeditors/StreetEditor.form	(revision 15649)
@@ -15,5 +15,5 @@
     <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
     <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
-    <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,0,-105,0,0,1,-112"/>
+    <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,0,-103,0,0,1,-112"/>
   </AuxValues>
 
@@ -36,7 +36,16 @@
                   <EmptySpace max="-2" attributes="0"/>
                   <Group type="103" groupAlignment="1" attributes="0">
-                      <Component id="jScrollPane1" pref="344" max="32767" attributes="0"/>
                       <Component id="nameField" alignment="0" pref="344" max="32767" attributes="0"/>
-                      <Component id="parentField" alignment="0" pref="344" max="32767" attributes="0"/>
+                      <Group type="102" alignment="0" attributes="0">
+                          <Component id="parentField" pref="310" max="32767" attributes="0"/>
+                          <EmptySpace max="-2" attributes="0"/>
+                          <Component id="parentEditButton" min="-2" max="-2" attributes="0"/>
+                      </Group>
+                      <Group type="102" alignment="0" attributes="0">
+                          <Component id="jScrollPane1" min="-2" pref="308" max="-2" attributes="0"/>
+                          <EmptySpace max="-2" attributes="0"/>
+                          <Component id="houseEditButton" min="-2" max="-2" attributes="0"/>
+                          <EmptySpace min="-2" pref="2" max="-2" attributes="0"/>
+                      </Group>
                   </Group>
               </Group>
@@ -49,4 +58,5 @@
                       <Component id="jLabel1" alignment="3" min="-2" max="-2" attributes="0"/>
                       <Component id="parentField" alignment="3" min="-2" max="-2" attributes="0"/>
+                      <Component id="parentEditButton" alignment="3" min="-2" max="-2" attributes="0"/>
                   </Group>
                   <EmptySpace max="-2" attributes="0"/>
@@ -58,4 +68,5 @@
                   <Group type="103" groupAlignment="0" attributes="0">
                       <Component id="jLabel3" min="-2" max="-2" attributes="0"/>
+                      <Component id="houseEditButton" min="-2" max="-2" attributes="0"/>
                       <Component id="jScrollPane1" min="-2" pref="77" max="-2" attributes="0"/>
                   </Group>
@@ -79,5 +90,4 @@
           <Properties>
             <Property name="editable" type="boolean" value="false"/>
-            <Property name="text" type="java.lang.String" value="jTextField2"/>
           </Properties>
         </Component>
@@ -88,7 +98,4 @@
         </Component>
         <Component class="javax.swing.JTextField" name="nameField">
-          <Properties>
-            <Property name="text" type="java.lang.String" value="jTextField3"/>
-          </Properties>
         </Component>
         <Component class="javax.swing.JLabel" name="jLabel3">
@@ -107,16 +114,29 @@
               <Properties>
                 <Property name="model" type="javax.swing.ListModel" editor="org.netbeans.modules.form.editors2.ListModelEditor">
-                  <StringArray count="5">
-                    <StringItem index="0" value="Item 1"/>
-                    <StringItem index="1" value="Item 2"/>
-                    <StringItem index="2" value="Item 3"/>
-                    <StringItem index="3" value="Item 4"/>
-                    <StringItem index="4" value="Item 5"/>
-                  </StringArray>
+                  <StringArray count="0"/>
                 </Property>
               </Properties>
+              <Events>
+                <EventHandler event="valueChanged" listener="javax.swing.event.ListSelectionListener" parameters="javax.swing.event.ListSelectionEvent" handler="houseListChanged"/>
+              </Events>
             </Component>
           </SubComponents>
         </Container>
+        <Component class="javax.swing.JButton" name="parentEditButton">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="    "/>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="parentEditButtonActionPerformed"/>
+          </Events>
+        </Component>
+        <Component class="javax.swing.JButton" name="houseEditButton">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="    "/>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="houseEditButtonActionPerformed"/>
+          </Events>
+        </Component>
       </SubComponents>
     </Container>
Index: applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/gui/databaseeditors/StreetEditor.java
===================================================================
--- applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/gui/databaseeditors/StreetEditor.java	(revision 15585)
+++ applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/gui/databaseeditors/StreetEditor.java	(revision 15649)
@@ -4,7 +4,10 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.ExtendedDialog;
+import org.openstreetmap.josm.gui.preferences.PreferenceDialog;
+import org.openstreetmap.josm.plugins.czechaddress.addressdatabase.AddressElement;
+import org.openstreetmap.josm.plugins.czechaddress.addressdatabase.House;
 import org.openstreetmap.josm.plugins.czechaddress.addressdatabase.Street;
 import org.openstreetmap.josm.plugins.czechaddress.gui.utils.UniversalListRenderer;
-import org.openstreetmap.josm.plugins.czechaddress.intelligence.Reasoner;
+import org.openstreetmap.josm.tools.ImageProvider;
 
 /**
@@ -15,22 +18,21 @@
 public class StreetEditor extends ExtendedDialog {
 
-    public static boolean editStreet(Street street) {
-        StreetEditor dialog = new StreetEditor(street);
-        dialog.setVisible(true);
-        if (dialog.getValue() == 1) {
-            street.setName(dialog.nameField.getText());
-            Reasoner.getInstance().update(street);
-            return true;
-        }
-        return false;
-    }
+    Street street = null;
+    AddressElement parent = null;
 
-    /** Creates new form StreetEditor */
-    private StreetEditor(Street street) {
+    public StreetEditor(Street street) {
         super(Main.parent, "Upravit ulici", new String[] {"OK", "Zrušit"}, true);
         initComponents();
 
-        if (street.getParent() != null)
-            parentField.setText(street.getParent().getName());
+        this.street = street;
+        this.parent = street.getParent();
+        if (parent != null)
+            parentField.setText(parent.getName());
+        else
+            parentField.setEnabled(false);
+
+        parentEditButton.setIcon(ImageProvider.get("actions", "edit.png"));
+        parentEditButton.setText("");
+        parentEditButton.setEnabled(EditorFactory.isEditable(parent));
 
         nameField.setText(street.getName());
@@ -38,6 +40,14 @@
         houseList.setCellRenderer(new UniversalListRenderer());
 
+        houseEditButton.setIcon(ImageProvider.get("actions", "edit.png"));
+        houseEditButton.setText("");
+        houseListChanged(null);
+
         // And finalize initializing the form.
         setupDialog(mainPanel, new String[] {"ok.png", "cancel.png"});
+    }
+
+    public String getStreetName() {
+        return nameField.getText();
     }
 
@@ -60,6 +70,8 @@
         jScrollPane1 = new javax.swing.JScrollPane();
         houseList = new javax.swing.JList();
+        parentEditButton = new javax.swing.JButton();
+        houseEditButton = new javax.swing.JButton();
 
-        setLayout(new java.awt.GridLayout(1, 0));
+        getContentPane().setLayout(new java.awt.GridLayout(1, 0));
 
         jLabel1.setText("Rodič:");
@@ -68,18 +80,29 @@
 
         parentField.setEditable(false);
-        parentField.setText("jTextField2");
 
         jLabel2.setText("Jméno:");
 
-        nameField.setText("jTextField3");
-
         jLabel3.setText("Domy:");
 
-        houseList.setModel(new javax.swing.AbstractListModel() {
-            String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
-            public int getSize() { return strings.length; }
-            public Object getElementAt(int i) { return strings[i]; }
+        houseList.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
+            public void valueChanged(javax.swing.event.ListSelectionEvent evt) {
+                houseListChanged(evt);
+            }
         });
         jScrollPane1.setViewportView(houseList);
+
+        parentEditButton.setText("    ");
+        parentEditButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                parentEditButtonActionPerformed(evt);
+            }
+        });
+
+        houseEditButton.setText("    ");
+        houseEditButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                houseEditButtonActionPerformed(evt);
+            }
+        });
 
         javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(mainPanel);
@@ -94,7 +117,14 @@
                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                 .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
-                    .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 344, Short.MAX_VALUE)
                     .addComponent(nameField, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 344, Short.MAX_VALUE)
-                    .addComponent(parentField, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 344, Short.MAX_VALUE)))
+                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, mainPanelLayout.createSequentialGroup()
+                        .addComponent(parentField, javax.swing.GroupLayout.DEFAULT_SIZE, 310, Short.MAX_VALUE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(parentEditButton))
+                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, mainPanelLayout.createSequentialGroup()
+                        .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 308, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(houseEditButton)
+                        .addGap(2, 2, 2))))
         );
         mainPanelLayout.setVerticalGroup(
@@ -103,5 +133,6 @@
                 .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                     .addComponent(jLabel1)
-                    .addComponent(parentField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                    .addComponent(parentField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(parentEditButton))
                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                 .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
@@ -111,13 +142,34 @@
                 .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                     .addComponent(jLabel3)
+                    .addComponent(houseEditButton)
                     .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 77, javax.swing.GroupLayout.PREFERRED_SIZE))
                 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
         );
 
-        add(mainPanel);
+        getContentPane().add(mainPanel);
     }// </editor-fold>//GEN-END:initComponents
+
+    private House selectedHouse = null;
+
+    private void houseListChanged(javax.swing.event.ListSelectionEvent evt) {//GEN-FIRST:event_houseListChanged
+        selectedHouse = (House) houseList.getSelectedValue();
+        houseEditButton.setEnabled(EditorFactory.isEditable(selectedHouse));
+    }//GEN-LAST:event_houseListChanged
+
+    private void houseEditButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_houseEditButtonActionPerformed
+        assert selectedHouse != null;
+        if (EditorFactory.editHouse(selectedHouse))
+            houseList.setModel(new DefaultComboBoxModel(street.getHouses().toArray()));
+    }//GEN-LAST:event_houseEditButtonActionPerformed
+
+    private void parentEditButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_parentEditButtonActionPerformed
+        assert parent != null;
+        if (EditorFactory.edit(parent))
+            parentField.setText(parent.getName());
+    }//GEN-LAST:event_parentEditButtonActionPerformed
 
 
     // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JButton houseEditButton;
     private javax.swing.JList houseList;
     private javax.swing.JLabel jLabel1;
@@ -128,4 +180,5 @@
     private javax.swing.JPanel mainPanel;
     private javax.swing.JTextField nameField;
+    private javax.swing.JButton parentEditButton;
     private javax.swing.JTextField parentField;
     // End of variables declaration//GEN-END:variables
Index: applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/gui/databaseeditors/SuburbEditor.form
===================================================================
--- applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/gui/databaseeditors/SuburbEditor.form	(revision 15649)
+++ applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/gui/databaseeditors/SuburbEditor.form	(revision 15649)
@@ -0,0 +1,191 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.3" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+  <AuxValues>
+    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
+    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
+    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
+    <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,0,-20,0,0,1,-92"/>
+  </AuxValues>
+
+  <Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridLayout">
+    <Property name="columns" type="int" value="0"/>
+    <Property name="rows" type="int" value="1"/>
+  </Layout>
+  <SubComponents>
+    <Container class="javax.swing.JPanel" name="mainPanel">
+
+      <Layout>
+        <DimensionLayout dim="0">
+          <Group type="103" groupAlignment="0" attributes="0">
+              <Group type="102" alignment="0" attributes="0">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <Component id="jLabel4" min="-2" max="-2" attributes="0"/>
+                      <Component id="jLabel3" min="-2" max="-2" attributes="0"/>
+                      <Component id="jLabel2" min="-2" max="-2" attributes="0"/>
+                      <Component id="jLabel1" min="-2" max="-2" attributes="0"/>
+                  </Group>
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <Group type="102" alignment="0" attributes="0">
+                          <Component id="jScrollPane2" pref="330" max="32767" attributes="0"/>
+                          <EmptySpace max="-2" attributes="0"/>
+                          <Component id="streetEditButton" min="-2" max="-2" attributes="0"/>
+                      </Group>
+                      <Group type="102" alignment="0" attributes="0">
+                          <Component id="parentField" pref="330" max="32767" attributes="0"/>
+                          <EmptySpace max="-2" attributes="0"/>
+                          <Component id="parentEditButton" min="-2" max="-2" attributes="0"/>
+                      </Group>
+                      <Group type="102" alignment="1" attributes="0">
+                          <Component id="jScrollPane1" pref="330" max="32767" attributes="0"/>
+                          <EmptySpace max="-2" attributes="0"/>
+                          <Component id="houseEditButton" min="-2" max="-2" attributes="0"/>
+                      </Group>
+                      <Component id="nameField" alignment="1" pref="364" max="32767" attributes="0"/>
+                  </Group>
+              </Group>
+          </Group>
+        </DimensionLayout>
+        <DimensionLayout dim="1">
+          <Group type="103" groupAlignment="0" attributes="0">
+              <Group type="102" attributes="0">
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <Group type="102" alignment="0" attributes="0">
+                          <Group type="103" groupAlignment="3" attributes="0">
+                              <Component id="parentField" alignment="3" min="-2" max="-2" attributes="0"/>
+                              <Component id="parentEditButton" alignment="3" min="-2" max="-2" attributes="0"/>
+                              <Component id="jLabel1" alignment="3" min="-2" max="-2" attributes="0"/>
+                          </Group>
+                          <EmptySpace max="-2" attributes="0"/>
+                          <Group type="103" groupAlignment="3" attributes="0">
+                              <Component id="nameField" alignment="3" min="-2" max="-2" attributes="0"/>
+                              <Component id="jLabel2" alignment="3" min="-2" max="-2" attributes="0"/>
+                          </Group>
+                          <EmptySpace max="-2" attributes="0"/>
+                          <Group type="103" groupAlignment="0" attributes="0">
+                              <Component id="houseEditButton" min="-2" max="-2" attributes="0"/>
+                              <Component id="jScrollPane1" min="-2" pref="77" max="-2" attributes="0"/>
+                          </Group>
+                      </Group>
+                      <Group type="102" alignment="0" attributes="0">
+                          <EmptySpace min="-2" pref="66" max="-2" attributes="0"/>
+                          <Component id="jLabel3" min="-2" max="-2" attributes="0"/>
+                      </Group>
+                  </Group>
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <Component id="jLabel4" alignment="0" min="-2" max="-2" attributes="0"/>
+                      <Component id="streetEditButton" min="-2" max="-2" attributes="0"/>
+                      <Component id="jScrollPane2" min="-2" pref="77" max="-2" attributes="0"/>
+                  </Group>
+                  <EmptySpace max="32767" attributes="0"/>
+              </Group>
+          </Group>
+        </DimensionLayout>
+      </Layout>
+      <SubComponents>
+        <Component class="javax.swing.JLabel" name="jLabel1">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Rodi&#x10d;:"/>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JTextField" name="jTextField1">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="jTextField1"/>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JTextField" name="parentField">
+          <Properties>
+            <Property name="editable" type="boolean" value="false"/>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JLabel" name="jLabel2">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Jm&#xe9;no:"/>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JTextField" name="nameField">
+        </Component>
+        <Component class="javax.swing.JLabel" name="jLabel3">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Domy:"/>
+          </Properties>
+        </Component>
+        <Container class="javax.swing.JScrollPane" name="jScrollPane1">
+          <AuxValues>
+            <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
+          </AuxValues>
+
+          <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+          <SubComponents>
+            <Component class="javax.swing.JList" name="houseList">
+              <Properties>
+                <Property name="model" type="javax.swing.ListModel" editor="org.netbeans.modules.form.editors2.ListModelEditor">
+                  <StringArray count="0"/>
+                </Property>
+              </Properties>
+              <Events>
+                <EventHandler event="valueChanged" listener="javax.swing.event.ListSelectionListener" parameters="javax.swing.event.ListSelectionEvent" handler="houseListChanged"/>
+              </Events>
+            </Component>
+          </SubComponents>
+        </Container>
+        <Component class="javax.swing.JButton" name="parentEditButton">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="    "/>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="parentEditButtonActionPerformed"/>
+          </Events>
+        </Component>
+        <Component class="javax.swing.JButton" name="houseEditButton">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="    "/>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="houseEditButtonActionPerformed"/>
+          </Events>
+        </Component>
+        <Container class="javax.swing.JScrollPane" name="jScrollPane2">
+          <AuxValues>
+            <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
+          </AuxValues>
+
+          <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+          <SubComponents>
+            <Component class="javax.swing.JList" name="streetList">
+              <Properties>
+                <Property name="model" type="javax.swing.ListModel" editor="org.netbeans.modules.form.editors2.ListModelEditor">
+                  <StringArray count="0"/>
+                </Property>
+              </Properties>
+              <Events>
+                <EventHandler event="valueChanged" listener="javax.swing.event.ListSelectionListener" parameters="javax.swing.event.ListSelectionEvent" handler="streetListChanged"/>
+              </Events>
+            </Component>
+          </SubComponents>
+        </Container>
+        <Component class="javax.swing.JButton" name="streetEditButton">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="    "/>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="streetEditButtonActionPerformed"/>
+          </Events>
+        </Component>
+        <Component class="javax.swing.JLabel" name="jLabel4">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Ulice:"/>
+          </Properties>
+        </Component>
+      </SubComponents>
+    </Container>
+  </SubComponents>
+</Form>
Index: applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/gui/databaseeditors/SuburbEditor.java
===================================================================
--- applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/gui/databaseeditors/SuburbEditor.java	(revision 15649)
+++ applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/gui/databaseeditors/SuburbEditor.java	(revision 15649)
@@ -0,0 +1,243 @@
+package org.openstreetmap.josm.plugins.czechaddress.gui.databaseeditors;
+
+import javax.swing.DefaultComboBoxModel;
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.gui.ExtendedDialog;
+import org.openstreetmap.josm.plugins.czechaddress.addressdatabase.AddressElement;
+import org.openstreetmap.josm.plugins.czechaddress.addressdatabase.House;
+import org.openstreetmap.josm.plugins.czechaddress.addressdatabase.Street;
+import org.openstreetmap.josm.plugins.czechaddress.addressdatabase.Suburb;
+import org.openstreetmap.josm.plugins.czechaddress.gui.utils.UniversalListRenderer;
+import org.openstreetmap.josm.tools.ImageProvider;
+
+/**
+ *
+ * @author radek
+ */
+public class SuburbEditor extends ExtendedDialog {
+
+    private Suburb suburb = null;
+    private AddressElement parent = null;
+
+    public SuburbEditor(Suburb suburb) {
+        super(Main.parent, "Upravit městskou čtvrť",
+                new String[] {"OK", "Zrušit"}, true);
+        initComponents();
+
+        this.suburb = suburb;
+        this.parent = suburb.getParent();
+        nameField.setText(suburb.getName());
+        
+        if (parent != null)
+            parentField.setText(parent.getName());
+        else
+            parentField.setEnabled(false);
+
+        parentEditButton.setIcon(ImageProvider.get("actions", "edit.png"));
+        parentEditButton.setText("");
+        parentEditButton.setEnabled(EditorFactory.isEditable(parent));
+
+        houseList.setModel(new DefaultComboBoxModel(suburb.getHouses().toArray()));
+        houseList.setCellRenderer(new UniversalListRenderer());
+
+        houseEditButton.setIcon(ImageProvider.get("actions", "edit.png"));
+        houseEditButton.setText("");
+        houseListChanged(null);
+
+        streetList.setModel(new DefaultComboBoxModel(suburb.getStreets().toArray()));
+        streetList.setCellRenderer(new UniversalListRenderer());
+
+        streetEditButton.setIcon(ImageProvider.get("actions", "edit.png"));
+        streetEditButton.setText("");
+        streetListChanged(null);
+
+        // And finalize initializing the form.
+        setupDialog(mainPanel, new String[] {"ok.png", "cancel.png"});
+    }
+
+    public String getSuburbName() {
+        return nameField.getText();
+    }
+
+    /** This method is called from within the constructor to
+     * initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is
+     * always regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents() {
+
+        mainPanel = new javax.swing.JPanel();
+        jLabel1 = new javax.swing.JLabel();
+        jTextField1 = new javax.swing.JTextField();
+        parentField = new javax.swing.JTextField();
+        jLabel2 = new javax.swing.JLabel();
+        nameField = new javax.swing.JTextField();
+        jLabel3 = new javax.swing.JLabel();
+        jScrollPane1 = new javax.swing.JScrollPane();
+        houseList = new javax.swing.JList();
+        parentEditButton = new javax.swing.JButton();
+        houseEditButton = new javax.swing.JButton();
+        jScrollPane2 = new javax.swing.JScrollPane();
+        streetList = new javax.swing.JList();
+        streetEditButton = new javax.swing.JButton();
+        jLabel4 = new javax.swing.JLabel();
+
+        setLayout(new java.awt.GridLayout());
+
+        jLabel1.setText("Rodič:");
+
+        jTextField1.setText("jTextField1");
+
+        parentField.setEditable(false);
+
+        jLabel2.setText("Jméno:");
+
+        jLabel3.setText("Domy:");
+
+        houseList.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
+            public void valueChanged(javax.swing.event.ListSelectionEvent evt) {
+                houseListChanged(evt);
+            }
+        });
+        jScrollPane1.setViewportView(houseList);
+
+        parentEditButton.setText("    ");
+        parentEditButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                parentEditButtonActionPerformed(evt);
+            }
+        });
+
+        houseEditButton.setText("    ");
+        houseEditButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                houseEditButtonActionPerformed(evt);
+            }
+        });
+
+        streetList.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
+            public void valueChanged(javax.swing.event.ListSelectionEvent evt) {
+                streetListChanged(evt);
+            }
+        });
+        jScrollPane2.setViewportView(streetList);
+
+        streetEditButton.setText("    ");
+        streetEditButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                streetEditButtonActionPerformed(evt);
+            }
+        });
+
+        jLabel4.setText("Ulice:");
+
+        javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(mainPanel);
+        mainPanel.setLayout(mainPanelLayout);
+        mainPanelLayout.setHorizontalGroup(
+            mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(mainPanelLayout.createSequentialGroup()
+                .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(jLabel4)
+                    .addComponent(jLabel3)
+                    .addComponent(jLabel2)
+                    .addComponent(jLabel1))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(mainPanelLayout.createSequentialGroup()
+                        .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 330, Short.MAX_VALUE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(streetEditButton))
+                    .addGroup(mainPanelLayout.createSequentialGroup()
+                        .addComponent(parentField, javax.swing.GroupLayout.DEFAULT_SIZE, 330, Short.MAX_VALUE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(parentEditButton))
+                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, mainPanelLayout.createSequentialGroup()
+                        .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 330, Short.MAX_VALUE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(houseEditButton))
+                    .addComponent(nameField, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 364, Short.MAX_VALUE)))
+        );
+        mainPanelLayout.setVerticalGroup(
+            mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(mainPanelLayout.createSequentialGroup()
+                .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(mainPanelLayout.createSequentialGroup()
+                        .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                            .addComponent(parentField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addComponent(parentEditButton)
+                            .addComponent(jLabel1))
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                            .addComponent(nameField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addComponent(jLabel2))
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addComponent(houseEditButton)
+                            .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 77, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                    .addGroup(mainPanelLayout.createSequentialGroup()
+                        .addGap(66, 66, 66)
+                        .addComponent(jLabel3)))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(jLabel4)
+                    .addComponent(streetEditButton)
+                    .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 77, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+
+        add(mainPanel);
+    }// </editor-fold>//GEN-END:initComponents
+
+    private House selectedHouse = null;
+    private Street selectedStreet = null;
+
+    private void houseListChanged(javax.swing.event.ListSelectionEvent evt) {//GEN-FIRST:event_houseListChanged
+        selectedHouse = (House) houseList.getSelectedValue();
+        houseEditButton.setEnabled(EditorFactory.isEditable(selectedHouse));
+}//GEN-LAST:event_houseListChanged
+
+    private void parentEditButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_parentEditButtonActionPerformed
+        assert parent != null;
+        if (EditorFactory.edit(parent))
+            parentField.setText(parent.getName());
+}//GEN-LAST:event_parentEditButtonActionPerformed
+
+    private void houseEditButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_houseEditButtonActionPerformed
+        assert selectedHouse != null;
+        if (EditorFactory.editHouse(selectedHouse))
+            houseList.setModel(new DefaultComboBoxModel(suburb.getHouses().toArray()));
+}//GEN-LAST:event_houseEditButtonActionPerformed
+
+    private void streetListChanged(javax.swing.event.ListSelectionEvent evt) {//GEN-FIRST:event_streetListChanged
+        selectedStreet = (Street) streetList.getSelectedValue();
+        streetEditButton.setEnabled(EditorFactory.isEditable(selectedStreet));
+    }//GEN-LAST:event_streetListChanged
+
+    private void streetEditButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_streetEditButtonActionPerformed
+        assert selectedStreet != null;
+        if (EditorFactory.editStreet(selectedStreet))
+            streetList.setModel(new DefaultComboBoxModel(suburb.getStreets().toArray()));
+    }//GEN-LAST:event_streetEditButtonActionPerformed
+
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JButton houseEditButton;
+    private javax.swing.JList houseList;
+    private javax.swing.JLabel jLabel1;
+    private javax.swing.JLabel jLabel2;
+    private javax.swing.JLabel jLabel3;
+    private javax.swing.JLabel jLabel4;
+    private javax.swing.JScrollPane jScrollPane1;
+    private javax.swing.JScrollPane jScrollPane2;
+    private javax.swing.JTextField jTextField1;
+    private javax.swing.JPanel mainPanel;
+    private javax.swing.JTextField nameField;
+    private javax.swing.JButton parentEditButton;
+    private javax.swing.JTextField parentField;
+    private javax.swing.JButton streetEditButton;
+    private javax.swing.JList streetList;
+    // End of variables declaration//GEN-END:variables
+
+}
Index: applications/editors/josm/plugins/wmsplugin/src/wmsplugin/WMSPreferenceEditor.java
===================================================================
--- applications/editors/josm/plugins/wmsplugin/src/wmsplugin/WMSPreferenceEditor.java	(revision 15585)
+++ applications/editors/josm/plugins/wmsplugin/src/wmsplugin/WMSPreferenceEditor.java	(revision 15649)
@@ -1,5 +1,4 @@
 package wmsplugin;
 
-import java.awt.BorderLayout;
 import java.awt.FlowLayout;
 import javax.swing.JCheckBox;
