Index: src/org/openstreetmap/josm/tools/PresetTextComparator.java
===================================================================
--- src/org/openstreetmap/josm/tools/PresetTextComparator.java	(revision 0)
+++ src/org/openstreetmap/josm/tools/PresetTextComparator.java	(revision 0)
@@ -0,0 +1,14 @@
+package org.openstreetmap.josm.tools;
+
+import java.util.Comparator;
+
+import javax.swing.JMenuItem;
+
+public class PresetTextComparator implements Comparator {
+	//TODO add error checking and stuff
+	public int compare(Object arg0, Object arg1) {
+		return ((JMenuItem)arg0).getText().compareTo(((JMenuItem)arg1).getText());
+	}
+
+
+}
Index: src/org/openstreetmap/josm/gui/tagging/TaggingPresetMenu.java
===================================================================
--- src/org/openstreetmap/josm/gui/tagging/TaggingPresetMenu.java	(revision 1387)
+++ src/org/openstreetmap/josm/gui/tagging/TaggingPresetMenu.java	(arbetskopia)
@@ -5,6 +5,8 @@
 
 import java.awt.event.ActionEvent;
 import java.awt.Component;
+import java.util.ArrayList;
+import java.util.Collections;
 
 import javax.swing.Action;
 import javax.swing.JMenu;
@@ -13,6 +15,7 @@
 import javax.swing.JSeparator;
 
 import org.openstreetmap.josm.gui.tagging.TaggingPreset;
+import org.openstreetmap.josm.tools.PresetTextComparator;
 
 public class TaggingPresetMenu extends TaggingPreset {
     public JMenu menu = null; // set by TaggingPresetPreferences
@@ -45,4 +48,60 @@
             pm.show(co, co.getWidth()/2, co.getHeight()/2);
         }
     }
+	/**
+	 * Sorts the menu items using the translated item text
+	 */
+	public void sortMenu(){
+		TaggingPresetMenu.sortMenu(this.menu);
+	}
+
+	/**
+	 * Sorts the menu items using the translated item text
+	 */
+	public static void sortMenu(JMenu menu){
+		Component[] items = menu.getMenuComponents();
+		PresetTextComparator comp = new PresetTextComparator();
+		ArrayList<JMenuItem> sortarray = new ArrayList<JMenuItem>();
+		int lastSeperator = 0;
+		for (int i = 0; i < items.length; i++) {
+			Object item = items[i];
+			if (item instanceof JMenu){
+				sortMenu((JMenu)item);
+			}			
+			if (item instanceof JMenuItem){
+				sortarray.add((JMenuItem)item);
+				if (i == items.length-1){
+					Collections.sort(sortarray, comp);
+					int pos = 0;
+					for (JMenuItem menuItem : sortarray) {
+						int oldPos;
+						if(lastSeperator == 0){
+							oldPos=pos;
+						}else {
+							oldPos = pos+lastSeperator+1;
+						}
+						menu.add(menuItem, oldPos);
+						pos++;
+					}
+					sortarray = new ArrayList<JMenuItem>();
+					lastSeperator = 0;
+				}
+			}else if (item instanceof JSeparator){
+				Collections.sort(sortarray, comp);
+				int pos = 0;
+				for (JMenuItem menuItem : sortarray) {
+					int oldPos;
+					if(lastSeperator == 0){
+						oldPos=pos;
+					}else {
+						oldPos = pos+lastSeperator+1;
+					}
+					menu.add(menuItem, oldPos);
+					pos++;
+				}
+				sortarray = new ArrayList<JMenuItem>();
+				lastSeperator = i;
+			}
+		}
+	}
 }
Index: src/org/openstreetmap/josm/gui/preferences/TaggingPresetPreference.java
===================================================================
--- src/org/openstreetmap/josm/gui/preferences/TaggingPresetPreference.java	(revision 1387)
+++ src/org/openstreetmap/josm/gui/preferences/TaggingPresetPreference.java	(arbetskopia)
@@ -149,5 +149,6 @@
                 }
             }
         }
+        TaggingPresetMenu.sortMenu(Main.main.menu.presetsMenu);
     }
 }