Fix for #167
diff --git a/src/main/java/com/fasterxml/jackson/core/json/JsonWriteContext.java b/src/main/java/com/fasterxml/jackson/core/json/JsonWriteContext.java
index b383143..275b2ca 100644
--- a/src/main/java/com/fasterxml/jackson/core/json/JsonWriteContext.java
+++ b/src/main/java/com/fasterxml/jackson/core/json/JsonWriteContext.java
@@ -128,6 +128,9 @@
      * @return Index of the field entry (0-based)
      */
     public int writeFieldName(String name) throws JsonProcessingException {
+        if (_gotName) {
+            return JsonWriteContext.STATUS_EXPECT_VALUE;
+        }
         _gotName = true;
         _currentName = name;
         if (_dups != null) { _checkDup(_dups, name); }
diff --git a/src/test/java/com/fasterxml/jackson/core/json/TestGeneratorDupHandling.java b/src/test/java/com/fasterxml/jackson/core/json/TestGeneratorDupHandling.java
index f7be3e3..d8d538c 100644
--- a/src/test/java/com/fasterxml/jackson/core/json/TestGeneratorDupHandling.java
+++ b/src/test/java/com/fasterxml/jackson/core/json/TestGeneratorDupHandling.java
@@ -26,7 +26,7 @@
         final JsonFactory f = new JsonFactory();
         _testSimpleDups(false, true, f);
     }
-    
+
     @SuppressWarnings("resource")
     protected void _testSimpleDups(boolean useStream, boolean lazySetting, JsonFactory f)
             throws Exception
diff --git a/src/test/java/com/fasterxml/jackson/core/json/TestJsonGenerator.java b/src/test/java/com/fasterxml/jackson/core/json/TestJsonGenerator.java
index b804e4c..9e26e28 100644
--- a/src/test/java/com/fasterxml/jackson/core/json/TestJsonGenerator.java
+++ b/src/test/java/com/fasterxml/jackson/core/json/TestJsonGenerator.java
@@ -13,7 +13,6 @@
 {
     // // // First, tests for primitive (non-structured) values
 
-    @SuppressWarnings("resource")
     public void testStringWrite() throws Exception
     {
         JsonFactory jf = new JsonFactory();
@@ -226,7 +225,38 @@
         
         gen.close();
     }
-    
+
+    // [core#167]: no error for writing field name twice
+    public void testDupFieldNameWrites() throws Exception
+    {
+        JsonFactory f = new JsonFactory();
+        _testDupFieldNameWrites(f, false);
+        _testDupFieldNameWrites(f, true);        
+    }
+
+    private void _testDupFieldNameWrites(JsonFactory f, boolean useReader) throws Exception
+    {
+        JsonGenerator gen;
+        ByteArrayOutputStream bout = new ByteArrayOutputStream();
+        if (useReader) {
+            gen = f.createGenerator(new OutputStreamWriter(bout, "UTF-8"));
+        } else {
+            gen = f.createGenerator(bout, JsonEncoding.UTF8);
+        }
+        gen.writeStartObject();
+        gen.writeFieldName("a");
+        
+        try {
+            gen.writeFieldName("b");
+            gen.flush();
+            String json = bout.toString("UTF-8");
+            fail("Should not have let two consequtive field name writes succeed: output = "+json);
+        } catch (JsonProcessingException e) {
+            verifyException(e, "can not write a field name, expecting a value");
+        }
+        gen.close();
+    }
+            
     /*
     /**********************************************************
     /* Internal methods