diff --git a/README.md b/README.md
index 2f789a2..ec71975 100644
--- a/README.md
+++ b/README.md
@@ -39,11 +39,26 @@
       Intl.withLocale('fr', () => print(myLocalizedMessage());
 
 To specify the locale for an operation you can create a format object in
-a specific locale, or pass in the locale as a parameter to methods.
+a specific locale, pass in the locale as a parameter to methods, or
+set the default locale.
 
-      var format = new DateFormat.yMd("ar");
-      var dateString = format.format(new DateTime.now());
-      print(myMessage(dateString, locale: 'ar');
+```dart
+var format = new DateFormat.yMd("ar");
+var dateString = format.format(new DateTime.now());
+```
+
+or
+
+```dart
+print(myMessage(dateString, locale: 'ar');
+```
+	  
+or
+
+```dart
+Intl.defaultLocale = "es"'
+new DateFormat.jm().format(new DateTime.now());
+```
 
 ## Initialization
 
diff --git a/lib/src/intl/date_format.dart b/lib/src/intl/date_format.dart
index 8f023fc..40ff895 100644
--- a/lib/src/intl/date_format.dart
+++ b/lib/src/intl/date_format.dart
@@ -9,6 +9,7 @@
 /**
  * DateFormat is for formatting and parsing dates in a locale-sensitive
  * manner.
+ *
  * It allows the user to choose from a set of standard date time formats as well
  * as specify a customized pattern under certain locales. Date elements that
  * vary across locales include month name, week name, field order, etc.
@@ -52,7 +53,11 @@
  * which can also adapt to different locales and is preferred where available.
  *
  * Skeletons: These can be specified either as the ICU constant name or as the
- * skeleton to which it resolves. The supported set of skeletons is as follows
+ * skeleton to which it resolves. The supported set of skeletons is as follows.
+ * For each skeleton there is a named constructor that can be used to create it.
+ * It's also possible to pass the skeleton as a string, but the constructor
+ * is preferred.
+ * 
  *      ICU Name                   Skeleton
  *      --------                   --------
  *      DAY                          d
@@ -104,13 +109,20 @@
  *      new DateFormat.yMd()             -> 7/10/1996
  *      new DateFormat("yMd")            -> 7/10/1996
  *      new DateFormat.yMMMMd("en_US")   -> July 10, 1996
- *      new DateFormat("Hm", "en_US")    -> 12:08 PM
- *      new DateFormat.yMd().add_Hm()    -> 7/10/1996 12:08 PM
+ *      new DateFormat.jm()              -> 5:08 PM
+ *      new DateFormat.yMd().add_jm()    -> 7/10/1996 5:08 PM
+ *      new DateFormat.Hm()              -> 17:08 // force 24 hour time
  *
  * Explicit Pattern Syntax: Formats can also be specified with a pattern string.
- * The skeleton forms will resolve to explicit patterns of this form, but will
- * also adapt to different patterns in different locales.
- * The following characters are reserved:
+ * This can be used for formats that don't have a skeleton available, but these
+ * will not adapt to different locales. For example, in an explicit pattern the 
+ * letters "H" and "h" are available for 24 hour and 12 hour time formats 
+ * respectively. But there isn't a way in an explicit pattern to get the
+ * behaviour of the "j" skeleton, which prints 24 hour or 12 hour time according
+ * to the conventions of the locale, and also includes am/pm markers where 
+ * appropriate. So it is preferable to use the skeletons.
+ *
+ * The following characters are available in explicit patterns:
  *
  *     Symbol   Meaning                Presentation        Example
  *     ------   -------                ------------        -------
@@ -200,7 +212,7 @@
    * the locale.
    *
    * For example, in an en_US locale, specifying the skeleton
-   *     new DateFormat('yMEd');
+   *     new DateFormat.yMEd();
    * or the explicit
    *     new DateFormat('EEE, M/d/y');
    * would produce the same result, a date of the form
@@ -282,15 +294,15 @@
    *
    * For example, this will accept
    *
-   *       new DateTimeFormat.yMMMd("en_US").parseLoose("SEp   3 2014");
-   *       new DateTimeFormat.yMd("en_US").parseLoose("09    03/2014");
+   *       new DateFormat.yMMMd("en_US").parseLoose("SEp   3 2014");
+   *       new DateFormat.yMd("en_US").parseLoose("09    03/2014");
    *
    * It will NOT accept
    *
    *      // "Sept" is not a valid month name.
-   *      new DateTimeFormat.yMMMd("en_US").parseLoose("Sept 3, 2014");
+   *      new DateFormat.yMMMd("en_US").parseLoose("Sept 3, 2014");
    *      // Delimiters can't have leading whitespace.
-   *      new DateTimeFormat.yMd("en_US").parseLoose("09 / 03 / 2014");
+   *      new DateFormat.yMd("en_US").parseLoose("09 / 03 / 2014");
    */
   DateTime parseLoose(String inputString, [utc = false]) {
     try {
