Respect supplementary characters
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index a64cdb8..77e149f 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -7,6 +7,9 @@
 	</properties>

 	<body>

         <release version="1.10-SNAPSHOT" date="in Mercurial" description="Development">

+             <action dev="py4fun" type="fix" issue="137">

+                Respect supplementary characters (2012-01-06)

+             </action>

              <action dev="py4fun" type="add">

                 Add a test for issue 136 (2011-12-14)

              </action>

diff --git a/src/main/java/org/yaml/snakeyaml/scanner/ScannerImpl.java b/src/main/java/org/yaml/snakeyaml/scanner/ScannerImpl.java
index 47e69c3..6e10b7d 100644
--- a/src/main/java/org/yaml/snakeyaml/scanner/ScannerImpl.java
+++ b/src/main/java/org/yaml/snakeyaml/scanner/ScannerImpl.java
@@ -1503,7 +1503,8 @@
                                         + " hexadecimal numbers, but found: " + hex,
                                 reader.getMark());
                     }
-                    char unicode = (char) Integer.parseInt(hex, 16);
+                    int decimal = Integer.parseInt(hex, 16);
+                    String unicode = new String(Character.toChars(decimal));
                     chunks.append(unicode);
                     reader.forward(length);
                 } else if (scanLineBreak().length() != 0) {
diff --git a/src/test/java/org/yaml/snakeyaml/issues/issue137/SupplementaryCharactersTest.java b/src/test/java/org/yaml/snakeyaml/issues/issue137/SupplementaryCharactersTest.java
index 43bc278..2b6fbbd 100644
--- a/src/test/java/org/yaml/snakeyaml/issues/issue137/SupplementaryCharactersTest.java
+++ b/src/test/java/org/yaml/snakeyaml/issues/issue137/SupplementaryCharactersTest.java
@@ -20,20 +20,36 @@
 
 import org.yaml.snakeyaml.Yaml;
 
+/**
+ * http://java.sun.com/developer/technicalArticles/Intl/Supplementary/
+ */
 public class SupplementaryCharactersTest extends TestCase {
 
-  public void testSupplementaryCharacter() {
-    Yaml yaml = new Yaml();
-    String parsed = (String) yaml.load("\"\\U0001f648\"");
-    // assertEquals(2, parsed.length());
-    assertEquals("\ud83d\ude48", parsed);
-    // System.out.println(data);
-  }
+    public void testSupplementaryCharacter() {
+        Yaml yaml = new Yaml();
+        String parsed = (String) yaml.load("\"\\U0001f648\"");
+        assertEquals("\ud83d\ude48", parsed);
+        // System.out.println(data);
+    }
 
-  public void testBasicMultilingualPlane() {
-    Yaml yaml = new Yaml();
-    String parsed = (String) yaml.load("\"\\U00000041\"");
-    assertEquals("A", parsed);
-    // System.out.println(data);
-  }
+    public void testBasicMultilingualPlane() {
+        Yaml yaml = new Yaml();
+        String parsed = (String) yaml.load("\"\\U00000041\"");
+        assertEquals("A", parsed);
+    }
+
+    public void testDumpSupplementaryCharacter() {
+        Yaml yaml = new Yaml();
+        String output = yaml.dump("\ud83d\ude48");
+        assertEquals("\"\ud83d\ude48\"\n", output);
+    }
+
+    public void testLoadSupplementaryCharacter() {
+        try {
+            new Yaml().load("\"\ud83d\ude48\"\n");
+            fail("Are Supplementary Characters printable ?");
+        } catch (Exception e) {
+            assertEquals("special characters are not allowed", e.getMessage());
+        }
+    }
 }