Fail to parse with duplicate mapping keys
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 791627c..2045a70 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -7,6 +7,9 @@
     </properties>
     <body>
         <release version="1.15-SNAPSHOT" date="in Mercurial" description="Maintenance">
+            <action dev="py4fun" type="fix"  issue="199">
+                Fail to parse with duplicate mapping keys (2015-02-04)
+            </action>
             <action dev="py4fun" type="update"  issue="205">
                 Add test to clarify iOS emoji character in the surrogate range (2015-02-03)
             </action>
diff --git a/src/main/java/org/yaml/snakeyaml/constructor/BaseConstructor.java b/src/main/java/org/yaml/snakeyaml/constructor/BaseConstructor.java
index 227b95d..755a5a7 100644
--- a/src/main/java/org/yaml/snakeyaml/constructor/BaseConstructor.java
+++ b/src/main/java/org/yaml/snakeyaml/constructor/BaseConstructor.java
@@ -382,7 +382,10 @@
                         new RecursiveTuple<Map<Object, Object>, RecursiveTuple<Object, Object>>(
                                 mapping, new RecursiveTuple<Object, Object>(key, value)));
             } else {
-                mapping.put(key, value);
+                Object previous = mapping.put(key, value);
+                if (previous != null) throw new ConstructorException("while constructing a mapping",
+                        node.getStartMark(), "found duplicate key '" + key + "' with values '" + previous + "' and '" + value + "'", tuple
+                        .getKeyNode().getStartMark());
             }
         }
     }
diff --git a/src/test/java/org/yaml/snakeyaml/issues/issue139/MergeValueTest.java b/src/test/java/org/yaml/snakeyaml/issues/issue139/MergeValueTest.java
index 55bf50f..399de94 100644
--- a/src/test/java/org/yaml/snakeyaml/issues/issue139/MergeValueTest.java
+++ b/src/test/java/org/yaml/snakeyaml/issues/issue139/MergeValueTest.java
@@ -21,21 +21,33 @@
 
 import org.yaml.snakeyaml.Util;
 import org.yaml.snakeyaml.Yaml;
+import org.yaml.snakeyaml.constructor.ConstructorException;
 
 public class MergeValueTest extends TestCase {
 
     public void testNotUniqueSimple() {
-        String simple = "{key: 1, key: 2}";
+        String simple = "{k: 1, k: 2}";
         Yaml yaml = new Yaml();
-        @SuppressWarnings("unchecked")
-        Map<String, Integer> map = (Map<String, Integer>) yaml.load(simple);
-        assertEquals(1, map.size());
-        assertEquals(new Integer(2), map.get("key"));
+        try {
+            yaml.load(simple);
+            fail("Duplicate key must not be accepted.");
+        } catch (ConstructorException e) {
+            System.out.print(e);
+            assertTrue(simple, e.getMessage().contains("duplicate key"));
+        }
     }
 
     public void testMerge() {
         check("issues/issue139-1.yaml");// merge with unique keys
-        check("issues/issue139-2.yaml");// merge with same key
+    }
+
+    public void testMergeWithSameKey() {
+        try {
+            check("issues/issue139-2.yaml");// merge with same key
+            fail("Duplicate key must not be accepted.");
+        } catch (ConstructorException e) {
+            assertTrue(e.getMessage().contains("duplicate key"));
+        }
     }
 
     private void check(String name) {
@@ -64,7 +76,7 @@
         assertEquals(2, map.size());
         Map<String, Integer> common = (Map<String, Integer>) map.get("common");
         Map<String, Integer> production = (Map<String, Integer>) map.get("production");
-        assertEquals(new Integer(2), common.get("key"));
-        assertEquals(new Integer(3), production.get("key"));
+        assertEquals(new Integer(1), common.get("key"));
+        assertEquals(new Integer(2), production.get("key"));
     }
 }
diff --git a/src/test/resources/issues/issue139-2.yaml b/src/test/resources/issues/issue139-2.yaml
index ca2967c..b52d1d5 100644
--- a/src/test/resources/issues/issue139-2.yaml
+++ b/src/test/resources/issues/issue139-2.yaml
@@ -1,6 +1,6 @@
 common: &id_common
    key: 1
-   key: 2 # this value must overwrite the previous. Is it specified ?
+   key: 2 # this is the same key
 
 production:
    <<: *id_common
\ No newline at end of file
diff --git a/src/test/resources/issues/issue139-3.yaml b/src/test/resources/issues/issue139-3.yaml
index 3b5d0d9..8ed5a48 100644
--- a/src/test/resources/issues/issue139-3.yaml
+++ b/src/test/resources/issues/issue139-3.yaml
@@ -1,7 +1,6 @@
 common: &id_common
    key: 1
-   key: 2
 
 production:
    <<: *id_common
-   key: 3 # this value must stay
\ No newline at end of file
+   key: 2 # this value must stay
\ No newline at end of file