diff --git a/src/jsr311-api/src/javax/ws/rs/core/NewCookie.java b/src/jsr311-api/src/javax/ws/rs/core/NewCookie.java
index 83ede1e..2cd4fd7 100644
--- a/src/jsr311-api/src/javax/ws/rs/core/NewCookie.java
+++ b/src/jsr311-api/src/javax/ws/rs/core/NewCookie.java
@@ -93,7 +93,11 @@
      * @throws IllegalArgumentException if cookie is null
      */
     public NewCookie(Cookie cookie) {
-        super(cookie.getName(), cookie.getValue(), cookie.getPath(), cookie.getDomain(), cookie.getVersion());
+        super(cookie==null ? null : cookie.getName(), 
+              cookie==null ? null : cookie.getValue(),
+              cookie==null ? null : cookie.getPath(),
+              cookie==null ? null : cookie.getDomain(),
+              cookie==null ? Cookie.DEFAULT_VERSION : cookie.getVersion());
     }
 
     /**
@@ -105,7 +109,10 @@
      * @throws IllegalArgumentException if cookie is null
      */
     public NewCookie(Cookie cookie, String comment, int maxAge, boolean secure) {
-        this(cookie.getName(), cookie.getValue(), cookie.getPath(), cookie.getDomain(), cookie.getVersion(), comment, maxAge, secure);
+        this(cookie);
+        this.comment = comment;
+        this.maxAge = maxAge;
+        this.secure = secure;
     }
 
     /**
diff --git a/src/jsr311-api/test/javax/ws/rs/core/NewCookieTest.java b/src/jsr311-api/test/javax/ws/rs/core/NewCookieTest.java
new file mode 100644
index 0000000..48567d5
--- /dev/null
+++ b/src/jsr311-api/test/javax/ws/rs/core/NewCookieTest.java
@@ -0,0 +1,56 @@
+/*
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the "License").  You may not use this file except
+ * in compliance with the License.
+ * 
+ * You can obtain a copy of the license at
+ * http://www.opensource.org/licenses/cddl1.php
+ * See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+package javax.ws.rs.core;
+
+import javax.ws.rs.ext.RuntimeDelegate;
+import junit.framework.TestCase;
+
+public class NewCookieTest extends TestCase {
+    
+    public NewCookieTest(String testName) {
+        super(testName);
+    }            
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        RuntimeDelegate.setInstance(new RuntimeDelegateStub());
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        super.tearDown();
+        RuntimeDelegate.setInstance(null);
+    }
+
+    /**
+     * Test of valueOf method, of class NewCookie.
+     */
+    public void testCtor() {
+        System.out.println("ctor");
+        Cookie c = new Cookie("name","value");
+        NewCookie nc = new NewCookie(c);
+        assertEquals(nc.getName(), c.getName());
+        try {
+            nc = new NewCookie(null);
+            fail("Expected IllegalArgumentException");
+        } catch (IllegalArgumentException e) {
+        }
+        try {
+            nc = new NewCookie(null, "comment", 120, true);
+            fail("Expected IllegalArgumentException");
+        } catch (IllegalArgumentException e) {
+        }
+    }
+
+}
