Index: trunk/.settings/org.eclipse.jdt.core.prefs
===================================================================
--- trunk/.settings/org.eclipse.jdt.core.prefs	(revision 613)
+++ trunk/.settings/org.eclipse.jdt.core.prefs	(revision 614)
@@ -1,3 +1,3 @@
-#Thu Nov 01 00:40:05 CET 2007
+#Sat Apr 19 17:30:55 CEST 2008
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
@@ -21,5 +21,5 @@
 org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
 org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=error
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
 org.eclipse.jdt.core.compiler.problem.missingSerialVersion=ignore
 org.eclipse.jdt.core.compiler.problem.noEffectAssignment=error
Index: trunk/presets/presets.xml
===================================================================
--- trunk/presets/presets.xml	(revision 613)
+++ trunk/presets/presets.xml	(revision 614)
@@ -7,5 +7,4 @@
 
 <annotations>
-
 	<item name="Road" icon="presets/ways.png">
     <label text="Road" />
@@ -118,4 +117,16 @@
 	</item>
 
+    <item name="Addresses" icon="presets/addresses.png">
+    <label text="These attributes are used for nodes:" />
+       <text key="addr:street" text="Street name" use_last_as_default="true" delete_if_empty="true" />
+       <text key="addr:housenumber" text="House number" default="" delete_if_empty="true" />
+       <text key="addr:housename" text="House name" default="" delete_if_empty="true" />
+       <text key="addr:postcode" text="Post code" use_last_as_default="true" delete_if_empty="true" />
+       <text key="addr:city" text="City" use_last_as_default="true" delete_if_empty="true" />
+    <label text=" " />
+    <label text="These attributes are used for ways:" />
+       <combo key="addr:interpolation" text="Numbering scheme:" values="odd,even,all" default="odd" />
+    </item>   
+    
 	<item name="Boundaries" icon="presets/boundaries.png">
 		<label text="Boundaries" />
@@ -123,4 +134,6 @@
 		<text key="name" text="Name:" default="" delete_if_empty="true" />
  </item>
+ 
+ 
 
 	<item name="Landuse" icon="presets/landuse.png">
Index: trunk/src/org/openstreetmap/josm/gui/preferences/TaggingPresetPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/TaggingPresetPreference.java	(revision 613)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/TaggingPresetPreference.java	(revision 614)
@@ -9,4 +9,5 @@
 import java.awt.event.ActionListener;
 import java.util.Collection;
+import java.util.HashMap;
 import java.util.StringTokenizer;
 
@@ -19,4 +20,5 @@
 import javax.swing.JLabel;
 import javax.swing.JList;
+import javax.swing.JMenu;
 import javax.swing.JMenuItem;
 import javax.swing.JOptionPane;
@@ -125,9 +127,23 @@
 		else
 		{
+			HashMap<String,JMenu> submenus = new HashMap<String,JMenu>();
 			for (final TaggingPreset p : taggingPresets) {
 				if (p.getValue(Action.NAME).equals(" ")) {
 					Main.main.menu.presetsMenu.add(new JSeparator());
 				} else {
-					Main.main.menu.presetsMenu.add(new JMenuItem(p));
+					String name = (String) p.getValue(Action.NAME);
+					String[] sp = name.split("/");
+					if (sp.length <= 1) {
+						Main.main.menu.presetsMenu.add(new JMenuItem(p));
+					} else {
+						p.setName(sp[1]);
+						JMenu submenu = submenus.get(sp[0]);
+						if (submenu == null) {
+							submenu = new JMenu(sp[0]);
+							submenus.put(sp[0], submenu);
+							Main.main.menu.presetsMenu.add(submenu);
+						}
+						submenu.add(new JMenuItem(p));
+					}
 				}
 			}		
Index: trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java	(revision 613)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java	(revision 614)
@@ -16,4 +16,5 @@
 import java.net.URL;
 import java.util.Collection;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.LinkedHashMap;
@@ -44,5 +45,4 @@
 import org.xml.sax.SAXException;
 
-
 /**
  * This class read encapsulate one tagging preset. A class method can
@@ -53,5 +53,5 @@
  */
 public class TaggingPreset extends AbstractAction {
-
+	
 	public static abstract class Item {
 		public boolean focus = false;
@@ -71,5 +71,6 @@
 		returnValue.values = new HashSet<String>();
 		for (OsmPrimitive s : sel) {
-			returnValue.values.add(s.get(key));
+			String v = s.get(key);
+			/* if (v != null) */ returnValue.values.add(v);
 		}
 		return returnValue;
@@ -94,8 +95,10 @@
 	
 	public static class Text extends Item {
+		
 		public String key;
 		public String text;
 		public String default_;
 		public String originalValue;
+		public boolean use_last_as_default = false;
 		public boolean delete_if_empty = false;
 
@@ -106,6 +109,12 @@
 			// find out if our key is already used in the selection.
 			Usage usage = determineTextUsage(sel, key);
-			
-			if (usage.values.size() == 1) {
+			if (usage.values.size() == 1 && usage.values.toArray()[0] == null) {
+				value = new JTextField();
+				if (use_last_as_default && lastValue.containsKey(key)) {
+					((JTextField)value).setText(lastValue.get(key));
+				} else {
+					((JTextField)value).setText(default_);
+				}
+			} else if (usage.values.size() == 1) {
 				// all objects use the same value
 				value = new JTextField();
@@ -130,4 +139,5 @@
 				((JTextField)value).getText();
 
+			if (use_last_as_default) lastValue.put(key, v);
 			if (v.equals(originalValue) || (originalValue == null && v.length() == 0)) return;
 
@@ -144,4 +154,5 @@
 		public String text;
 		public boolean default_ = false; // not used!
+		public boolean use_last_as_default = false;
 
 		private QuadStateCheckBox check;
@@ -205,4 +216,5 @@
 		public boolean delete_if_empty = false;
 		public boolean editable = true;
+		public boolean use_last_as_default = false;
 
 		private JComboBox combo;
@@ -285,4 +297,5 @@
 	public Collection<Class<?>> types;
 	private List<Item> data = new LinkedList<Item>();
+	private static HashMap<String,String> lastValue = new HashMap<String,String>();
 
 	/**
