Index: /trunk/src/org/openstreetmap/josm/io/OsmHistoryReader.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/OsmHistoryReader.java	(revision 2243)
+++ /trunk/src/org/openstreetmap/josm/io/OsmHistoryReader.java	(revision 2244)
@@ -81,4 +81,20 @@
         }
 
+        protected long getAttributeLong(Attributes attr, String name, long defaultValue) throws SAXException{
+            String v = attr.getValue(name);
+            if (v == null)
+                return defaultValue;
+            Long l = 0l;
+            try {
+                l = Long.parseLong(v);
+            } catch(NumberFormatException e) {
+                throwException(tr("Illegal value for mandatory attribute ''{0}'' of type long. Got ''{1}''.", name, v));
+            }
+            if (l < 0) {
+                throwException(tr("Illegal value for mandatory attribute ''{0}'' of type long (>=0). Got ''{1}''.", name, v));
+            }
+            return l;
+        }
+
         protected Double getMandatoryAttributeDouble(Attributes attr, String name) throws SAXException{
             String v = attr.getValue(name);
@@ -86,5 +102,5 @@
                 throwException(tr("Missing mandatory attribute ''{0}''.", name));
             }
-            double d = 0;
+            double d = 0.0;
             try {
                 d = Double.parseDouble(v);
@@ -92,7 +108,4 @@
                 throwException(tr("Illegal value for mandatory attribute ''{0}'' of type double. Got ''{1}''.", name, v));
             }
-            if (d < 0) {
-                throwException(tr("Illegal value for mandatory attribute ''{0}'' of type double (>=0). Got ''{1}''.", name, v));
-            }
             return d;
         }
@@ -103,4 +116,11 @@
                 throwException(tr("Missing mandatory attribute ''{0}''.", name));
             }
+            return v;
+        }
+
+        protected String getAttributeString(Attributes attr, String name, String defaultValue) {
+            String v = attr.getValue(name);
+            if (v == null)
+                return defaultValue;
             return v;
         }
@@ -123,6 +143,6 @@
             long changesetId = getMandatoryAttributeLong(atts,"changeset");
             boolean visible= getMandatoryAttributeBoolean(atts, "visible");
-            long uid = getMandatoryAttributeLong(atts, "uid");
-            String user = getMandatoryAttributeString(atts, "user");
+            long uid = getAttributeLong(atts, "uid",-1);
+            String user = getAttributeString(atts, "user", tr("<anonymous>"));
             String v = getMandatoryAttributeString(atts, "timestamp");
             Date timestamp = DateUtils.fromString(v);
