Index: /src/org/openstreetmap/josm/gui/dialogs/AnnotationPreset.java
===================================================================
--- /src/org/openstreetmap/josm/gui/dialogs/AnnotationPreset.java	(revision 119)
+++ /src/org/openstreetmap/josm/gui/dialogs/AnnotationPreset.java	(revision 120)
@@ -132,4 +132,5 @@
 		List<Item> current;
 		String currentName;
+		Class<?> currentType;
 		private static int unknownCounter = 1;
 
@@ -142,4 +143,14 @@
 				if (currentName == null)
 					currentName = "Unnamed Preset #"+(unknownCounter++);
+				if (a.getValue("type") != null) {
+					String s = a.getValue("type");
+					s = Character.toUpperCase(s.charAt(0))+s.substring(1);
+					try {
+						currentType = Class.forName("org.openstreetmap.josm.data.osm."+s);
+					} catch (ClassNotFoundException e) {
+						e.printStackTrace();
+						throw new SAXException(tr("Unknown type at line {0}", getLineNumber()));
+					}
+				}
 			} else if (qname.equals("text"))
 				current.add(new Text(a.getValue("key"), a.getValue("text"), a.getValue("default")));
@@ -160,7 +171,8 @@
 				throw new SAXException(tr("Unknown annotation object {0} at line {1} column {2}", qname, getLineNumber(), getColumnNumber()));
 		}
+
 		@Override public void endElement(String ns, String lname, String qname) {
 			if (qname.equals("item"))
-				data.add(new AnnotationPreset(current, currentName));
+				data.add(new AnnotationPreset(current, currentName, currentType));
 		}
 	}
@@ -168,8 +180,10 @@
 	private List<Item> data;
 	String name;
-
-	public AnnotationPreset(List<Item> data, String name) {
+	private Class<?> type;
+
+	public AnnotationPreset(List<Item> data, String name, Class<?> currentType) {
 		this.data = data;
 		this.name = name;
+		this.type = currentType;
 	}
 
@@ -209,5 +223,12 @@
 	}
 
-	public Command createCommand(Collection<OsmPrimitive> sel) {
+	public Command createCommand(Collection<OsmPrimitive> participants) {
+		Collection<OsmPrimitive> sel = new LinkedList<OsmPrimitive>();
+		for (OsmPrimitive osm : participants)
+			if (osm.getClass() == type)
+				sel.add(osm);
+		if (sel.isEmpty())
+			return null;
+
 		List<Command> cmds = new LinkedList<Command>();
 		for (Item i : data)
Index: /src/org/openstreetmap/josm/gui/dialogs/AnnotationTester.java
===================================================================
--- /src/org/openstreetmap/josm/gui/dialogs/AnnotationTester.java	(revision 119)
+++ /src/org/openstreetmap/josm/gui/dialogs/AnnotationTester.java	(revision 120)
@@ -46,4 +46,10 @@
 				JOptionPane.showMessageDialog(null, "Error parsing "+source+": "+e.getMessage());
 			}
+
+			try {
+	            if (in != null)
+	            	in.close();
+            } catch (IOException e) {
+            }
 		}
 		annotationPresets.setModel(new DefaultComboBoxModel(allPresets));
Index: /src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java
===================================================================
--- /src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java	(revision 119)
+++ /src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java	(revision 120)
@@ -43,4 +43,5 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.command.ChangePropertyCommand;
+import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.data.SelectionChangedListener;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -224,4 +225,5 @@
 					in = new FileInputStream(source);
 				allPresets.addAll(AnnotationPreset.readAll(in));
+				in.close();
 			} catch (IOException e) {
 				e.printStackTrace();
@@ -250,6 +252,9 @@
 					answer = JOptionPane.showConfirmDialog(Main.parent, p, trn("Change {0} object", "Change {0} objects", sel.size(), sel.size()), JOptionPane.OK_CANCEL_OPTION);
 				if (answer == JOptionPane.OK_OPTION) {
-					Main.main.editLayer().add(preset.createCommand(sel));
-					selectionChanged(sel); // update whole table
+					Command cmd = preset.createCommand(sel);
+					if (cmd != null) {
+						Main.main.editLayer().add(cmd);
+						selectionChanged(sel); // update whole table
+					}
 				}
 				annotationPresets.setSelectedIndex(0);
