Index: trunk/src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java	(revision 1351)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java	(revision 1353)
@@ -59,8 +59,4 @@
 import org.openstreetmap.josm.gui.MapFrame;
 import org.openstreetmap.josm.gui.SideButton;
-import org.openstreetmap.josm.gui.preferences.TaggingPresetPreference;
-import org.openstreetmap.josm.gui.tagging.ForwardActionListener;
-import org.openstreetmap.josm.gui.tagging.TaggingCellRenderer;
-import org.openstreetmap.josm.gui.tagging.TaggingPreset;
 import org.openstreetmap.josm.tools.AutoCompleteComboBox;
 import org.openstreetmap.josm.tools.GBC;
@@ -128,11 +124,10 @@
      */
     void propertyEdit(int row) {
+        Collection<OsmPrimitive> sel = Main.ds.getSelected();
+        if (sel.isEmpty()) return;
+
         String key = propertyData.getValueAt(row, 0).toString();
         objKey=key;
-        Collection<OsmPrimitive> sel = Main.ds.getSelected();
-        if (sel.isEmpty()) {
-            JOptionPane.showMessageDialog(Main.parent, tr("Please select the objects you want to change properties for."));
-            return;
-        }
+
         String msg = "<html>"+trn("This will change up to {0} object.", "This will change up to {0} objects.", sel.size(), sel.size())+"<br><br>("+tr("An empty value deletes the key.", key)+")</html>";
 
@@ -304,8 +299,5 @@
     void add() {
         Collection<OsmPrimitive> sel = Main.ds.getSelected();
-        if (sel.isEmpty()) {
-            JOptionPane.showMessageDialog(Main.parent, tr("Please select objects for which you want to change properties."));
-            return;
-        }
+        if (sel.isEmpty()) return;
 
         JPanel p = new JPanel(new BorderLayout());
@@ -402,5 +394,5 @@
         Main.ds.fireSelectionChanged(sel);
         selectionChanged(sel); // update table
-          
+
         int rowCount = propertyTable.getRowCount();
         propertyTable.changeSelection((row < rowCount ? row : (rowCount-1)), 0, false, false);
@@ -439,4 +431,12 @@
     public JComboBox taggingPresets = new JComboBox();
 
+    /**
+     * The Add/Edit/Delete buttons (needed to be able to disable them)
+     */
+    private final SideButton btnAdd;
+    private final SideButton btnEdit;
+    private final SideButton btnDel;
+
+    private final JLabel selectSth = new JLabel(tr("Please select the objects you want to change properties for."));
 
     /**
@@ -448,34 +448,5 @@
         Shortcut.GROUP_LAYER, Shortcut.SHIFT_DEFAULT), 150);
 
-        // ---------------------------------------
-        // This drop-down is really deprecated but we offer people a chance to
-        // activate it if they really want. Presets should be used from the
-        // menu.
-        if (TaggingPresetPreference.taggingPresets.size() > 0 &&
-                Main.pref.getBoolean("taggingpreset.in-properties-dialog", false)) {
-            Vector<ActionListener> allPresets = new Vector<ActionListener>();
-            for (final TaggingPreset p : TaggingPresetPreference.taggingPresets)
-                allPresets.add(new ForwardActionListener(this, p));
-
-            TaggingPreset empty = new TaggingPreset();
-            // empty.setName("this drop-down will be removed soon");
-            allPresets.add(0, new ForwardActionListener(this, empty));
-            taggingPresets.setModel(new DefaultComboBoxModel(allPresets));
-            JPanel north = new JPanel(new GridBagLayout());
-            north.add(getComponent(0),GBC.eol().fill(GBC.HORIZONTAL));
-            north.add(taggingPresets,GBC.eol().fill(GBC.HORIZONTAL));
-            add(north, BorderLayout.NORTH);
-        }
-        taggingPresets.addActionListener(new ActionListener(){
-            public void actionPerformed(ActionEvent e) {
-                TaggingPreset preset = ((ForwardActionListener)taggingPresets.getSelectedItem()).preset;
-                preset.actionPerformed(e);
-                taggingPresets.setSelectedItem(null);
-            }
-        });
-        taggingPresets.setRenderer(new TaggingCellRenderer());
-
         // setting up the properties table
-
         propertyData.setColumnIdentifiers(new String[]{tr("Key"),tr("Value")});
         propertyTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
@@ -548,4 +519,5 @@
         JPanel bothTables = new JPanel();
         bothTables.setLayout(new GridBagLayout());
+        bothTables.add(selectSth, GBC.eol().fill().insets(10, 10, 10, 10));
         bothTables.add(propertyTable.getTableHeader(), GBC.eol().fill(GBC.HORIZONTAL));
         bothTables.add(propertyTable, GBC.eol().fill(GBC.BOTH));
@@ -601,17 +573,10 @@
                 {
                     int sel = propertyTable.getSelectedRow();
-                    if (e.getActionCommand().equals("Edit")) {
-                        if(propertyTable.getRowCount() == 1)
-                            sel = 0;
-                        if (sel == -1)
-                            JOptionPane.showMessageDialog(Main.parent, tr("Please select the row to edit."));
-                        else
-                            propertyEdit(sel);
-                    } else if (e.getActionCommand().equals("Delete")) {
-                        if (sel == -1)
-                            JOptionPane.showMessageDialog(Main.parent, tr("Please select the row to delete."));
-                        else
-                            delete(sel);
-                    }
+                    // Although we might edit/delete the wrong tag here, chances are still better
+                    // than just displaying an error message (which always "fails").
+                    if (e.getActionCommand().equals("Edit"))
+                        propertyEdit(sel >= 0 ? sel : 0);
+                    else if (e.getActionCommand().equals("Delete"))
+                        delete(sel >= 0 ? sel : 0);
                 }
             }
@@ -620,16 +585,19 @@
         Shortcut s = Shortcut.registerShortcut("properties:add", tr("Add Properties"), KeyEvent.VK_B,
         Shortcut.GROUP_MNEMONIC);
-        buttonPanel.add(new SideButton(marktr("Add"),"add","Properties",
-                tr("Add a new key/value pair to all objects"), s, buttonAction));
+        this.btnAdd = new SideButton(marktr("Add"),"add","Properties",
+                tr("Add a new key/value pair to all objects"), s, buttonAction);
+        buttonPanel.add(this.btnAdd);
 
         s = Shortcut.registerShortcut("properties:edit", tr("Edit Properties"), KeyEvent.VK_I,
         Shortcut.GROUP_MNEMONIC);
-        buttonPanel.add(new SideButton(marktr("Edit"),"edit","Properties",
-                tr("Edit the value of the selected key for all objects"), s, buttonAction));
+        this.btnEdit = new SideButton(marktr("Edit"),"edit","Properties",
+                tr("Edit the value of the selected key for all objects"), s, buttonAction);
+        buttonPanel.add(this.btnEdit);
 
         s = Shortcut.registerShortcut("properties:delete", tr("Delete Properties"), KeyEvent.VK_Q,
         Shortcut.GROUP_MNEMONIC);
-        buttonPanel.add(new SideButton(marktr("Delete"),"delete","Properties",
-                tr("Delete the selected key in all objects"), s, buttonAction));
+        this.btnDel = new SideButton(marktr("Delete"),"delete","Properties",
+                tr("Delete the selected key in all objects"), s, buttonAction);
+        buttonPanel.add(this.btnDel);
         add(buttonPanel, BorderLayout.SOUTH);
 
@@ -652,5 +620,4 @@
 
         // re-load property data
-
         propertyData.setRowCount(0);
 
@@ -681,4 +648,14 @@
         }
 
+        boolean hasTags = !newSelection.isEmpty() && propertyData.getRowCount() > 0;
+        boolean hasSelection = !newSelection.isEmpty();
+        btnAdd.setEnabled(hasSelection);
+        btnEdit.setEnabled(hasTags);
+        btnDel.setEnabled(hasTags);
+        propertyTable.setVisible(hasSelection);
+        propertyTable.getTableHeader().setVisible(hasSelection);
+        selectSth.setVisible(!hasSelection);
+        if(hasTags) propertyTable.changeSelection(0, 0, false, false);
+
         // re-load membership data
         // this is rather expensive since we have to walk through all members of all existing relationships.
@@ -708,12 +685,12 @@
 
         membershipTable.getTableHeader().setVisible(membershipData.getRowCount() > 0);
+        membershipTable.setVisible(membershipData.getRowCount() > 0);
 
         if(propertyData.getRowCount() != 0 || membershipData.getRowCount() != 0) {
-            setTitle(tr("Properties: {0} / Memberships: {1}", 
+            setTitle(tr("Properties: {0} / Memberships: {1}",
                 propertyData.getRowCount(), membershipData.getRowCount()), true);
         } else {
             setTitle(tr("Properties / Memberships"), false);
         }
-
     }
 }
Index: trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 1351)
+++ trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 1353)
@@ -222,19 +222,19 @@
     @Override public void mergeFrom(final Layer from) {
         final MergeVisitor visitor = new MergeVisitor(data,((OsmDataLayer)from).data);
-        int i=0;
+//        int i=0;
         int max = ((OsmDataLayer)from).data.allPrimitives().size();
 
-        System.out.format("Add/Merge data:");
-        
+//        System.out.format("Add/Merge data:");
+
         for (final OsmPrimitive osm : ((OsmDataLayer)from).data.allPrimitives()) {
-            i++;
-            if(i%100 == 0) {
-                double perc = (((double)i) / ((double)max) * 100.0);
-                System.out.format(" " + (int)perc + "%%");
-            }
+//            i++;
+//            if(i%100 == 0) {
+//                double perc = (((double)i) / ((double)max) * 100.0);
+//                System.out.format(" " + (int)perc + "%%");
+//            }
             osm.visit(visitor);
         }
         visitor.fixReferences();
-        System.out.println("");
+//        System.out.println("");
 
         // copy the merged layer's data source info
Index: trunk/src/org/openstreetmap/josm/io/OsmReader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmReader.java	(revision 1351)
+++ trunk/src/org/openstreetmap/josm/io/OsmReader.java	(revision 1353)
@@ -52,9 +52,9 @@
 public class OsmReader {
 
-     static long tagsN = 0;
-     static long nodesN = 0;
-     static long waysN = 0;
-     static long relationsN = 0;
-     static long membersN = 0;
+//     static long tagsN = 0;
+//     static long nodesN = 0;
+//     static long waysN = 0;
+//     static long relationsN = 0;
+//     static long membersN = 0;
 
      static InputStream currSource;
@@ -143,22 +143,22 @@
           private OsmPrimitive current;
           private String generator;
-          int n = 0;
-          
+//          int n = 0;
+
           @Override public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException {
                try {
-                    if(n%100000 == 0) {
-                        try {
-                            FileInputStream fis = (FileInputStream)currSource;
-                            FileChannel channel = fis.getChannel();
-                            double perc = (((double)channel.position()) / ((double)channel.size()) * 100.0);
-                            System.out.format(" " + (int)perc + "%%");
-                        }
-                        catch(java.lang.ClassCastException cce) {
-                        }
-                        catch(IOException e) {
-                            System.out.format("Error reading file position " + e);
-                        }
-                    }
-                    n++;                    
+//                    if(n%100000 == 0) {
+//                        try {
+//                            FileInputStream fis = (FileInputStream)currSource;
+//                            FileChannel channel = fis.getChannel();
+//                            double perc = (((double)channel.position()) / ((double)channel.size()) * 100.0);
+//                            System.out.format(" " + (int)perc + "%%");
+//                        }
+//                        catch(java.lang.ClassCastException cce) {
+//                        }
+//                        catch(IOException e) {
+//                            System.out.format("Error reading file position " + e);
+//                        }
+//                    }
+//                    n++;
 
                     if (qName.equals("osm")) {
@@ -213,10 +213,10 @@
 
                     } else if (qName.equals("node")) {
-                         nodesN++;
+//                         nodesN++;
                          current = new Node(new LatLon(getDouble(atts, "lat"), getDouble(atts, "lon")));
                          readCommon(atts, current);
                          nodes.put(current.id, (Node)current);
                     } else if (qName.equals("way")) {
-                         waysN++;
+//                         waysN++;
                          current = new OsmPrimitiveData();
                          readCommon(atts, current);
@@ -234,10 +234,10 @@
 
                     } else if (qName.equals("relation")) {
-                         relationsN++;
+//                         relationsN++;
                          current = new OsmPrimitiveData();
                          readCommon(atts, current);
                          relations.put((OsmPrimitiveData)current, new LinkedList<RelationMemberData>());
                     } else if (qName.equals("member")) {
-                         membersN++;
+//                         membersN++;
                          Collection<RelationMemberData> list = relations.get(current);
                          if (list == null)
@@ -257,5 +257,5 @@
 
                     } else if (qName.equals("tag")) {
-                         tagsN++;
+//                         tagsN++;
                          current.put(atts.getValue("k"), atts.getValue("v"));
                     }
@@ -439,5 +439,5 @@
           for (Way wy : ds.ways)
             hm.put(wy.id, wy);
-          
+
           // pass 2 - sort out members
           for (Entry<OsmPrimitiveData, Collection<RelationMemberData>> e : relations.entrySet()) {
@@ -490,22 +490,21 @@
           osm.references = ref == null ? new DataSet() : ref;
 
-          
+
           currSource = source;
-          
+
           // phase 1: Parse nodes and read in raw ways
           InputSource inputSource = new InputSource(new InputStreamReader(source, "UTF-8"));
           try {
              SAXParserFactory.newInstance().newSAXParser().parse(inputSource, osm.new Parser());
-        } catch (ParserConfigurationException e1) {
+          } catch (ParserConfigurationException e1) {
              e1.printStackTrace(); // broken SAXException chaining
              throw new SAXException(e1);
-        }
-            
+          }
+
           Main.pleaseWaitDlg.currentAction.setText(tr("Prepare OSM data..."));
           Main.pleaseWaitDlg.setIndeterminate(true); 
 
-          System.out.println("");
-          System.out.println("Parser finished: Tags " + tagsN + " Nodes " + nodesN + " Ways " + waysN + 
-            " Relations " + relationsN + " Members " + membersN);
+//          System.out.println("Parser finished: Tags " + tagsN + " Nodes " + nodesN + " Ways " + waysN +
+//            " Relations " + relationsN + " Members " + membersN);
 
           for (Node n : osm.nodes.values())
@@ -525,8 +524,8 @@
                     o.id = 0;
 
-          System.out.println("Data loaded!");
+//          System.out.println("Data loaded!");
           Main.pleaseWaitDlg.setIndeterminate(false); 
           Main.pleaseWaitDlg.progress.setValue(0); 
-          
+
           return osm;
      }
Index: trunk/src/org/openstreetmap/josm/io/OsmServerReader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmServerReader.java	(revision 1351)
+++ trunk/src/org/openstreetmap/josm/io/OsmServerReader.java	(revision 1353)
@@ -42,5 +42,5 @@
     protected InputStream getInputStreamRaw(String urlStr, PleaseWaitDialog pleaseWaitDlg) throws IOException {
 
-        System.out.println("download: "+urlStr);
+//        System.out.println("download: "+urlStr);
         initAuthentication();
         URL url = new URL(urlStr);
@@ -55,5 +55,5 @@
 
         activeConnection.setConnectTimeout(15000);
-        
+
         try {
             activeConnection.connect();
@@ -62,5 +62,5 @@
             throw new IOException(tr("Couldn't connect to the osm server. Please check your internet connection."));
         }
-        
+
         if (isAuthCancelled() && activeConnection.getResponseCode() == 401)
             return null;
