Index: src/org/openstreetmap/josm/Main.java
===================================================================
--- src/org/openstreetmap/josm/Main.java	(revision 109)
+++ src/org/openstreetmap/josm/Main.java	(revision 110)
@@ -272,5 +272,5 @@
 		} catch (final IOException e1) {
 			e1.printStackTrace();
-			errMsg = tr("Preferences could not be loaded. Write default preference file to '{0}'.",
+			errMsg = tr("Preferences could not be loaded. Write default preference file to \"{0}\".",
                     pref.getPreferencesDir() + "preferences");
 			Main.pref.resetToDefault();
@@ -339,5 +339,5 @@
 			final Bounds b = DownloadAction.osmurl2bounds(s);
 			if (b == null)
-				JOptionPane.showMessageDialog(Main.parent, tr("Ignoring malformed url: '{0}'", s));
+				JOptionPane.showMessageDialog(Main.parent, tr("Ignoring malformed url: \"{0}\"", s));
 			else
 				main.downloadAction.download(false, b.min.lat(), b.min.lon(), b.max.lat(), b.max.lon());
@@ -349,5 +349,5 @@
 				main.openAction.openFile(new File(new URI(s)));
 			} catch (URISyntaxException e) {
-				JOptionPane.showMessageDialog(Main.parent, tr("Ignoring malformed file url: '{0}", s));
+				JOptionPane.showMessageDialog(Main.parent, tr("Ignoring malformed file url: \"{0}\"", s));
 			}
 			return;
Index: src/org/openstreetmap/josm/actions/OpenAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/OpenAction.java	(revision 109)
+++ src/org/openstreetmap/josm/actions/OpenAction.java	(revision 110)
@@ -85,5 +85,5 @@
 		} catch (IOException x) {
 			x.printStackTrace();
-			JOptionPane.showMessageDialog(Main.parent, tr("Could not read '{0}'",fn)+"\n"+x.getMessage());
+			JOptionPane.showMessageDialog(Main.parent, tr("Could not read \"{0}\"",fn)+"\n"+x.getMessage());
 		}
 	}
Index: src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java
===================================================================
--- src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java	(revision 109)
+++ src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java	(revision 110)
@@ -86,5 +86,5 @@
 		String key = data.getValueAt(row, 0).toString();
 		Collection<OsmPrimitive> sel = Main.ds.getSelected();
-		String msg = "<html>"+trn("This will change {0} object.", "This will change {0} objects.", sel.size(), sel.size())+"<br><br> "+tr("Please select a new value for '{0}'.<br>(Empty string deletes the key.)</html>)", key);
+		String msg = "<html>"+trn("This will change {0} object.", "This will change {0} objects.", sel.size(), sel.size())+"<br><br> "+tr("Please select a new value for \"{0}\".<br>(Empty string deletes the key.)</html>)", key);
 		final JComboBox combo = (JComboBox)data.getValueAt(row, 1);
 		JPanel p = new JPanel(new BorderLayout());
Index: src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java
===================================================================
--- src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(revision 109)
+++ src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(revision 110)
@@ -87,8 +87,8 @@
 	        } catch (IOException e) {
 		        e.printStackTrace();
-		        JOptionPane.showMessageDialog(Main.parent, tr("Could not read from url: '{0}'",url));
+		        JOptionPane.showMessageDialog(Main.parent, tr("Could not read from url: \"{0}\"",url));
 	        } catch (SAXException e) {
 		        e.printStackTrace();
-		        JOptionPane.showMessageDialog(Main.parent,tr("Parsing error in url: '{0}'",url));
+		        JOptionPane.showMessageDialog(Main.parent,tr("Parsing error in url: \"{0}\"",url));
 	        }
         }
Index: src/org/openstreetmap/josm/io/OsmReader.java
===================================================================
--- src/org/openstreetmap/josm/io/OsmReader.java	(revision 109)
+++ src/org/openstreetmap/josm/io/OsmReader.java	(revision 110)
@@ -26,4 +26,5 @@
 import org.openstreetmap.josm.data.osm.visitor.AddVisitor;
 import org.openstreetmap.josm.data.osm.visitor.Visitor;
+import org.openstreetmap.josm.tools.DateParser;
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
@@ -145,9 +146,8 @@
 		if (time != null && time.length() != 0) {
 			try {
-				DateFormat df = new SimpleDateFormat("y-M-d H:m:s");
-				current.timestamp = df.parse(time);
+				current.timestamp = DateParser.parse(time);
 			} catch (ParseException e) {
 				e.printStackTrace();
-				throw new SAXException(tr("Couldn't read time format '{0}'.",time));
+				throw new SAXException(tr("Couldn''t read time format \"{0}\".",time));
 			}
 		}
@@ -164,5 +164,5 @@
 		String s = atts.getValue(value);
 		if (s == null)
-			throw new SAXException(tr("Missing required attirbute '{0}'.",value));
+			throw new SAXException(tr("Missing required attirbute \"{0}\".",value));
 		return Long.parseLong(s);
 	}
Index: src/org/openstreetmap/josm/io/RawCsvReader.java
===================================================================
--- src/org/openstreetmap/josm/io/RawCsvReader.java	(revision 109)
+++ src/org/openstreetmap/josm/io/RawCsvReader.java	(revision 110)
@@ -81,5 +81,5 @@
 						st.nextToken();
 					else
-						throw new SAXException(tr("Unknown data type: '{0}'.{1}",token,(Main.pref.get("csv.importstring").equals("") ? (" "+tr("Maybe add an format string in preferences.")) : "")));
+						throw new SAXException(tr("Unknown data type: \"{0}\".{1}",token,(Main.pref.get("csv.importstring").equals("") ? (" "+tr("Maybe add an format string in preferences.")) : "")));
 				}
 				data.add(new GpsPoint(new LatLon(lat, lon), time));
Index: src/org/openstreetmap/josm/io/RawGpsReader.java
===================================================================
--- src/org/openstreetmap/josm/io/RawGpsReader.java	(revision 109)
+++ src/org/openstreetmap/josm/io/RawGpsReader.java	(revision 110)
@@ -41,7 +41,7 @@
 	                double lon = Double.parseDouble(atts.getValue("lon"));
 	        		if (Math.abs(lat) > 90)
-	        			throw new SAXException(tr("Data error: lat value '{0}' is out of bound.", lat));
+	        			throw new SAXException(tr("Data error: lat value \"{0}\" is out of bound.", lat));
 	        		if (Math.abs(lon) > 180)
-	        			throw new SAXException(tr("Data error: lon value '{0}' is out of bound.", lon));
+	        			throw new SAXException(tr("Data error: lon value \"{0}\" is out of bound.", lon));
 	                currentLatLon = new LatLon(lat, lon);
                 } catch (NumberFormatException e) {
Index: src/org/openstreetmap/josm/test/DateParserTest.java
===================================================================
--- src/org/openstreetmap/josm/test/DateParserTest.java	(revision 109)
+++ src/org/openstreetmap/josm/test/DateParserTest.java	(revision 110)
@@ -25,4 +25,5 @@
 		assertEquals(d2, DateParser.parse("11/23/2001T23:05:42"));
 		assertEquals(d2, DateParser.parse("11/23/2001T23:05:42+001"));
+		assertEquals(d2, DateParser.parse("2001-11-23T23:05:42+01:00"));
         assertEquals(d, DateParser.parse("11/23/2001T23:05:42.123"));
 		assertEquals(d, DateParser.parse("11/23/2001T23:05:42.123+001"));
Index: src/org/openstreetmap/josm/tools/DateParser.java
===================================================================
--- src/org/openstreetmap/josm/tools/DateParser.java	(revision 109)
+++ src/org/openstreetmap/josm/tools/DateParser.java	(revision 110)
@@ -6,4 +6,6 @@
 import java.text.SimpleDateFormat;
 import java.util.Date;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /**
@@ -17,10 +19,11 @@
 		"yyyy-MM-dd'T'HH:mm:ss'Z'",
 		"yyyy-MM-dd'T'HH:mm:ssZ",
+		"yyyy-MM-dd'T'HH:mm:ss",
+		"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",
 		"yyyy-MM-dd'T'HH:mm:ss.SSSZ",
-		"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",
 		"yyyy-MM-dd HH:mm:ss",
 		"MM/dd/yyyy HH:mm:ss",
+		"MM/dd/yyyy'T'HH:mm:ss.SSS'Z'",
 		"MM/dd/yyyy'T'HH:mm:ss.SSSZ",
-		"MM/dd/yyyy'T'HH:mm:ss.SSS'Z'",
 		"MM/dd/yyyy'T'HH:mm:ss.SSS",
 		"MM/dd/yyyy'T'HH:mm:ssZ",
@@ -30,4 +33,9 @@
 	
 	public static Date parse(String d) throws ParseException {
+		// first try to fix ruby's broken xmlschema - format
+		Matcher m = Pattern.compile("(....-..-..T..:..:..[+-]..):(..)").matcher(d);
+		if (m.matches())
+			d = m.group(1) + m.group(2);
+
 		for (String parse : formats) {
 			SimpleDateFormat sdf = new SimpleDateFormat(parse);
