Implemented all tests of HeaderPortletTests_SPEC3_6_4_HeaderPortlet. Removed the case of msg==null from other portlets as it will never occur.
diff --git a/portlet-tck_3.0/V3HeaderPortletTests/src/main/docs/ModuleAssertions.csv b/portlet-tck_3.0/V3HeaderPortletTests/src/main/docs/ModuleAssertions.csv
index 7456eac..8102738 100644
--- a/portlet-tck_3.0/V3HeaderPortletTests/src/main/docs/ModuleAssertions.csv
+++ b/portlet-tck_3.0/V3HeaderPortletTests/src/main/docs/ModuleAssertions.csv
@@ -2,8 +2,7 @@
 Class / Section;Keywords;Name;Testable;Description
 HeaderPortletTests;;;;
 SPEC3_6_4;HeaderPortlet;renderHeaders;TRUE;renderHeaders() method is called before render() method if the portlet implements HeaderPortlet interface.
-SPEC3_6_4;HeaderPortlet;renderHeaders2;TRUE;If the portlet container runtime option javax.portlet.renderHeaders is set to TRUE and the portlet also implements HeaderPortlet interface, then renderHeaders() method is called first followed by render() method with the RENDER_PART attribute set to "RENDER_HEADERS".
-SPEC3_6_4;HeaderPortlet;renderHeaders3;TRUE;If the portlet container runtime option javax.portlet.renderHeaders is set to TRUE, then header written by renderHeaders() method could be overwritten by render() method.
+SPEC3_6_4;HeaderPortlet;renderHeaders2;TRUE;The container runtime option javax.portlet.renderHeaders is disregarded for version 3.0 or later.
 SPEC7_14;RenderRequest;getETag;TRUE;Method getETag(): Returns null if there is no cached response.
 SPEC14;Header Attr;attributes1;TRUE;The portlet can access a map with user information attributes via the request attribute PortletRequest.USER_INFO
 SPEC14;Header Attr;attributes2;TRUE;The PortletRequest.CCPP_PROFILE request attribute must return a javax.ccpp.Profile based on the current portlet request
diff --git a/portlet-tck_3.0/V3HeaderPortletTests/src/main/java/javax/portlet/tck/portlets/HeaderPortletTests_SPEC14_HeaderAttr.java b/portlet-tck_3.0/V3HeaderPortletTests/src/main/java/javax/portlet/tck/portlets/HeaderPortletTests_SPEC14_HeaderAttr.java
index 658b723..f596d2c 100644
--- a/portlet-tck_3.0/V3HeaderPortletTests/src/main/java/javax/portlet/tck/portlets/HeaderPortletTests_SPEC14_HeaderAttr.java
+++ b/portlet-tck_3.0/V3HeaderPortletTests/src/main/java/javax/portlet/tck/portlets/HeaderPortletTests_SPEC14_HeaderAttr.java
@@ -77,7 +77,6 @@
       String msg = (String) portletReq.getPortletSession().getAttribute(
             RESULT_ATTR_PREFIX + "HeaderPortletTests_SPEC14_HeaderAttr",
             APPLICATION_SCOPE);
-      msg = (msg.equals("nullnull")) ? "Not ready. click test case link." : msg;
       writer.write("<p>" + msg + "</p>\n");
       portletReq.getPortletSession().removeAttribute(
             RESULT_ATTR_PREFIX + "HeaderPortletTests_SPEC14_HeaderAttr",
diff --git a/portlet-tck_3.0/V3HeaderPortletTests/src/main/java/javax/portlet/tck/portlets/HeaderPortletTests_SPEC14_RenderState_ApiHeader.java b/portlet-tck_3.0/V3HeaderPortletTests/src/main/java/javax/portlet/tck/portlets/HeaderPortletTests_SPEC14_RenderState_ApiHeader.java
index 5935ec3..2049ca6 100644
--- a/portlet-tck_3.0/V3HeaderPortletTests/src/main/java/javax/portlet/tck/portlets/HeaderPortletTests_SPEC14_RenderState_ApiHeader.java
+++ b/portlet-tck_3.0/V3HeaderPortletTests/src/main/java/javax/portlet/tck/portlets/HeaderPortletTests_SPEC14_RenderState_ApiHeader.java
@@ -83,7 +83,6 @@
       String msg = (String) portletReq.getPortletSession().getAttribute(
             RESULT_ATTR_PREFIX + "HeaderPortletTests_SPEC14_RenderState_ApiHeader",
             APPLICATION_SCOPE);
-      msg = (msg.equals("nullnull")) ? "Not ready. click test case link." : msg;
       writer.write("<p>" + msg + "</p>\n");
       portletReq.getPortletSession().removeAttribute(
             RESULT_ATTR_PREFIX + "HeaderPortletTests_SPEC14_RenderState_ApiHeader",
diff --git a/portlet-tck_3.0/V3HeaderPortletTests/src/main/java/javax/portlet/tck/portlets/HeaderPortletTests_SPEC3_6_4_HeaderPortlet.java b/portlet-tck_3.0/V3HeaderPortletTests/src/main/java/javax/portlet/tck/portlets/HeaderPortletTests_SPEC3_6_4_HeaderPortlet.java
index 9ae95d1..f13a8f7 100644
--- a/portlet-tck_3.0/V3HeaderPortletTests/src/main/java/javax/portlet/tck/portlets/HeaderPortletTests_SPEC3_6_4_HeaderPortlet.java
+++ b/portlet-tck_3.0/V3HeaderPortletTests/src/main/java/javax/portlet/tck/portlets/HeaderPortletTests_SPEC3_6_4_HeaderPortlet.java
@@ -18,40 +18,46 @@
 
 package javax.portlet.tck.portlets;
 
-import java.io.*;
-import java.util.*;
-import java.util.logging.*;
-import static java.util.logging.Logger.*;
-import javax.xml.namespace.QName;
-import javax.portlet.*;
-import javax.portlet.annotations.*;
-import javax.portlet.filter.*;
-import javax.servlet.*;
-import javax.servlet.http.*;
-import javax.portlet.tck.beans.*;
-import javax.portlet.tck.constants.*;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.Map;
+
+import javax.portlet.ActionRequest;
+import javax.portlet.ActionResponse;
+import javax.portlet.HeaderPortlet;
+import javax.portlet.HeaderRequest;
+import javax.portlet.HeaderResponse;
+import javax.portlet.Portlet;
+import javax.portlet.PortletConfig;
+import javax.portlet.PortletException;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
+import javax.portlet.tck.beans.TestResult;
 import javax.portlet.tck.util.ModuleTestCaseDetails;
-import static javax.portlet.tck.util.ModuleTestCaseDetails.*;
-import static javax.portlet.tck.constants.Constants.*;
-import static javax.portlet.PortletSession.*;
-import static javax.portlet.ResourceURL.*;
+
+import static javax.portlet.tck.util.ModuleTestCaseDetails.V3HEADERPORTLETTESTS_SPEC3_6_4_HEADERPORTLET_RENDERHEADERS;
+import static javax.portlet.tck.util.ModuleTestCaseDetails.V3HEADERPORTLETTESTS_SPEC3_6_4_HEADERPORTLET_RENDERHEADERS2;
+import static javax.portlet.tck.constants.Constants.RESULT_ATTR_PREFIX;
+import static javax.portlet.PortletSession.APPLICATION_SCOPE;
 
 /**
- * This portlet implements several test cases for the JSR 362 TCK. The test case names
- * are defined in the /src/main/resources/xml-resources/additionalTCs.xml
- * file. The build process will integrate the test case names defined in the 
- * additionalTCs.xml file into the complete list of test case names for execution by the driver.
+ * This portlet implements several test cases for the JSR 362 TCK. The test case
+ * names are defined in the /src/main/resources/xml-resources/additionalTCs.xml
+ * file. The build process will integrate the test case names defined in the
+ * additionalTCs.xml file into the complete list of test case names for
+ * execution by the driver.
  *
  */
 
-@PortletConfiguration(portletName = "HeaderPortletTests_SPEC3_6_4_HeaderPortlet")
-public class HeaderPortletTests_SPEC3_6_4_HeaderPortlet implements Portlet {
-   
+public class HeaderPortletTests_SPEC3_6_4_HeaderPortlet
+      implements Portlet, HeaderPortlet {
+   private boolean       tr0_success   = false;
    private PortletConfig portletConfig = null;
 
    @Override
    public void init(PortletConfig config) throws PortletException {
-      this.portletConfig = config;
+      // this.portletConfig = config;
    }
 
    @Override
@@ -59,49 +65,77 @@
    }
 
    @Override
-   public void processAction(ActionRequest portletReq, ActionResponse portletResp) throws PortletException, IOException {
+   public void processAction(ActionRequest portletReq,
+         ActionResponse portletResp) throws PortletException, IOException {
    }
 
    @Override
-   public void render(RenderRequest portletReq, RenderResponse portletResp) throws PortletException, IOException {
+   public void render(RenderRequest portletReq, RenderResponse portletResp)
+         throws PortletException, IOException {
 
       PrintWriter writer = portletResp.getWriter();
       ModuleTestCaseDetails tcd = new ModuleTestCaseDetails();
 
-      /* TestCase: V3HeaderPortletTests_SPEC3_6_4_HeaderPortlet_renderHeaders       */
-      /* Details: "renderHeaders() method is called before render() method if the   */
-      /* portlet implements HeaderPortlet interface."                               */
+      /* TestCase: V3HeaderPortletTests_SPEC3_6_4_HeaderPortlet_renderHeaders */
+      /*
+       * Details: "renderHeaders() method is called before render() method if
+       * the portlet implements HeaderPortlet interface."
+       */
       {
-         TestResult result = tcd.getTestResultFailed(V3HEADERPORTLETTESTS_SPEC3_6_4_HEADERPORTLET_RENDERHEADERS);
-         /* TODO: implement test */
-         result.appendTcDetail("Not implemented.");
+         TestResult result = tcd.getTestResultFailed(
+               V3HEADERPORTLETTESTS_SPEC3_6_4_HEADERPORTLET_RENDERHEADERS);
+         result.setTcSuccess(tr0_success);
+         result.writeTo(writer);
+         tr0_success = false;
+      }
+
+      String msg = (String) portletReq.getPortletSession().getAttribute(
+            RESULT_ATTR_PREFIX + "HeaderPortletTests_SPEC3_6_4_HeaderPortlet",
+            APPLICATION_SCOPE);
+      writer.write("<p>" + msg + "</p>\n");
+      portletReq.getPortletSession().removeAttribute(
+            RESULT_ATTR_PREFIX + "HeaderPortletTests_SPEC3_6_4_HeaderPortlet",
+            APPLICATION_SCOPE);
+
+   }
+
+   @Override
+   public void renderHeaders(HeaderRequest portletReq,
+         HeaderResponse portletResp) throws PortletException, IOException {
+
+      StringWriter writer = new StringWriter();
+
+      ModuleTestCaseDetails tcd = new ModuleTestCaseDetails();
+
+      tr0_success = true;
+
+      /*
+       * TestCase: V3HeaderPortletTests_SPEC3_6_4_HeaderPortlet_renderHeaders2
+       */
+      /*
+       * Details: "The container runtime option javax.portlet.renderHeaders is
+       * disregarded for version 3.0 or later."
+       */
+      {
+         TestResult result = tcd.getTestResultFailed(
+               V3HEADERPORTLETTESTS_SPEC3_6_4_HEADERPORTLET_RENDERHEADERS2);
+         Map<String, String[]> runtimeOptions = portletConfig
+               .getContainerRuntimeOptions();
+         String[] renderHeaders = runtimeOptions
+               .get("javax.portlet.renderHeaders");
+         if (renderHeaders == null || renderHeaders.length == 0) {
+            result.setTcSuccess(true);
+         } else {
+            result.appendTcDetail(
+                  "Failed because javax.portlet.renderHeaders is found equal to "
+                        + renderHeaders[0]);
+         }
          result.writeTo(writer);
       }
 
-      /* TestCase: V3HeaderPortletTests_SPEC3_6_4_HeaderPortlet_renderHeaders2      */
-      /* Details: "If the portlet container runtime option                          */
-      /* javax.portlet.renderHeaders is set to TRUE and the portlet also implements */
-      /* HeaderPortlet interface, then renderHeaders() method is called first       */
-      /* followed by render() method with the RENDER_PART attribute set to          */
-      /* \"RENDER_HEADERS\"."                                                       */
-      {
-         TestResult result = tcd.getTestResultFailed(V3HEADERPORTLETTESTS_SPEC3_6_4_HEADERPORTLET_RENDERHEADERS2);
-         /* TODO: implement test */
-         result.appendTcDetail("Not implemented.");
-         result.writeTo(writer);
-      }
-
-      /* TestCase: V3HeaderPortletTests_SPEC3_6_4_HeaderPortlet_renderHeaders3      */
-      /* Details: "If the portlet container runtime option                          */
-      /* javax.portlet.renderHeaders is set to TRUE, then header written by         */
-      /* renderHeaders() method could be overwritten by render() method."           */
-      {
-         TestResult result = tcd.getTestResultFailed(V3HEADERPORTLETTESTS_SPEC3_6_4_HEADERPORTLET_RENDERHEADERS3);
-         /* TODO: implement test */
-         result.appendTcDetail("Not implemented.");
-         result.writeTo(writer);
-      }
-
+      portletReq.getPortletSession().setAttribute(
+            RESULT_ATTR_PREFIX + "HeaderPortletTests_SPEC3_6_4_HeaderPortlet",
+            writer.toString(), APPLICATION_SCOPE);
    }
 
 }
diff --git a/portlet-tck_3.0/V3HeaderPortletTests/src/main/java/javax/portlet/tck/portlets/HeaderPortletTests_SPEC7_14_RenderRequest.java b/portlet-tck_3.0/V3HeaderPortletTests/src/main/java/javax/portlet/tck/portlets/HeaderPortletTests_SPEC7_14_RenderRequest.java
index cc95dd7..a136fee 100644
--- a/portlet-tck_3.0/V3HeaderPortletTests/src/main/java/javax/portlet/tck/portlets/HeaderPortletTests_SPEC7_14_RenderRequest.java
+++ b/portlet-tck_3.0/V3HeaderPortletTests/src/main/java/javax/portlet/tck/portlets/HeaderPortletTests_SPEC7_14_RenderRequest.java
@@ -70,7 +70,6 @@
       String msg = (String) portletReq.getPortletSession().getAttribute(
             RESULT_ATTR_PREFIX + "HeaderPortletTests_SPEC7_14_RenderRequest",
             APPLICATION_SCOPE);
-      msg = (msg.equals("nullnull")) ? "Not ready. click test case link." : msg;
       writer.write("<p>" + msg + "</p>\n");
       portletReq.getPortletSession().removeAttribute(
             RESULT_ATTR_PREFIX + "HeaderPortletTests_SPEC7_14_RenderRequest",
diff --git a/portlet-tck_3.0/V3HeaderPortletTests/src/main/java/javax/portlet/tck/util/ModuleTestCaseDetails.java b/portlet-tck_3.0/V3HeaderPortletTests/src/main/java/javax/portlet/tck/util/ModuleTestCaseDetails.java
index 642d59a..5c6905f 100644
--- a/portlet-tck_3.0/V3HeaderPortletTests/src/main/java/javax/portlet/tck/util/ModuleTestCaseDetails.java
+++ b/portlet-tck_3.0/V3HeaderPortletTests/src/main/java/javax/portlet/tck/util/ModuleTestCaseDetails.java
@@ -36,7 +36,6 @@
 
    public final static String V3HEADERPORTLETTESTS_SPEC3_6_4_HEADERPORTLET_RENDERHEADERS = "V3HeaderPortletTests_SPEC3_6_4_HeaderPortlet_renderHeaders";
    public final static String V3HEADERPORTLETTESTS_SPEC3_6_4_HEADERPORTLET_RENDERHEADERS2 = "V3HeaderPortletTests_SPEC3_6_4_HeaderPortlet_renderHeaders2";
-   public final static String V3HEADERPORTLETTESTS_SPEC3_6_4_HEADERPORTLET_RENDERHEADERS3 = "V3HeaderPortletTests_SPEC3_6_4_HeaderPortlet_renderHeaders3";
    public final static String V3HEADERPORTLETTESTS_SPEC7_14_RENDERREQUEST_GETETAG = "V3HeaderPortletTests_SPEC7_14_RenderRequest_getETag";
    public final static String V3HEADERPORTLETTESTS_SPEC14_HEADERATTR_ATTRIBUTES1 = "V3HeaderPortletTests_SPEC14_HeaderAttr_attributes1";
    public final static String V3HEADERPORTLETTESTS_SPEC14_HEADERATTR_ATTRIBUTES2 = "V3HeaderPortletTests_SPEC14_HeaderAttr_attributes2";
@@ -258,8 +257,7 @@
    static {
 
       tcd.put(V3HEADERPORTLETTESTS_SPEC3_6_4_HEADERPORTLET_RENDERHEADERS, "renderHeaders() method is called before render() method if the portlet implements HeaderPortlet interface.");
-      tcd.put(V3HEADERPORTLETTESTS_SPEC3_6_4_HEADERPORTLET_RENDERHEADERS2, "If the portlet container runtime option javax.portlet.renderHeaders is set to TRUE and the portlet also implements HeaderPortlet interface, then renderHeaders() method is called first followed by render() method with the RENDER_PART attribute set to \"RENDER_HEADERS\".");
-      tcd.put(V3HEADERPORTLETTESTS_SPEC3_6_4_HEADERPORTLET_RENDERHEADERS3, "If the portlet container runtime option javax.portlet.renderHeaders is set to TRUE, then header written by renderHeaders() method could be overwritten by render() method.");
+      tcd.put(V3HEADERPORTLETTESTS_SPEC3_6_4_HEADERPORTLET_RENDERHEADERS2, "The container runtime option javax.portlet.renderHeaders is disregarded for version 3.0 or later.");
       tcd.put(V3HEADERPORTLETTESTS_SPEC7_14_RENDERREQUEST_GETETAG, "Method getETag(): Returns null if there is no cached response.");
       tcd.put(V3HEADERPORTLETTESTS_SPEC14_HEADERATTR_ATTRIBUTES1, "The portlet can access a map with user information attributes via the request attribute PortletRequest.USER_INFO");
       tcd.put(V3HEADERPORTLETTESTS_SPEC14_HEADERATTR_ATTRIBUTES2, "The PortletRequest.CCPP_PROFILE request attribute must return a javax.ccpp.Profile based on the current portlet request");
diff --git a/portlet-tck_3.0/V3HeaderPortletTests/src/main/resources/xml-resources/additionalTCs.xml b/portlet-tck_3.0/V3HeaderPortletTests/src/main/resources/xml-resources/additionalTCs.xml
index b184fea..ee077e3 100644
--- a/portlet-tck_3.0/V3HeaderPortletTests/src/main/resources/xml-resources/additionalTCs.xml
+++ b/portlet-tck_3.0/V3HeaderPortletTests/src/main/resources/xml-resources/additionalTCs.xml
@@ -22,7 +22,6 @@
 <!-- JSR 362 API HeaderPortletTests test case names and page mappings -->
 <entry key="V3HeaderPortletTests_SPEC3_6_4_HeaderPortlet_renderHeaders">V3HeaderPortletTests</entry>
 <entry key="V3HeaderPortletTests_SPEC3_6_4_HeaderPortlet_renderHeaders2">V3HeaderPortletTests</entry>
-<entry key="V3HeaderPortletTests_SPEC3_6_4_HeaderPortlet_renderHeaders3">V3HeaderPortletTests</entry>
 <entry key="V3HeaderPortletTests_SPEC7_14_RenderRequest_getETag">V3HeaderPortletTests</entry>
 <entry key="V3HeaderPortletTests_SPEC14_HeaderAttr_attributes1">V3HeaderPortletTests</entry>
 <entry key="V3HeaderPortletTests_SPEC14_HeaderAttr_attributes2">V3HeaderPortletTests</entry>
diff --git a/portlet-tck_3.0/V3HeaderPortletTests/src/main/webapp/WEB-INF/portlet.xml b/portlet-tck_3.0/V3HeaderPortletTests/src/main/webapp/WEB-INF/portlet.xml
new file mode 100644
index 0000000..c61f2d6
--- /dev/null
+++ b/portlet-tck_3.0/V3HeaderPortletTests/src/main/webapp/WEB-INF/portlet.xml
@@ -0,0 +1,43 @@
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.     
+-->
+<portlet-app xmlns="http://xmlns.jcp.org/xml/ns/portlet" 
+             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+           xmlns:rp="http://www.apache.org/portals/pluto/pub-render-params/ResourcePortlet"
+             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/portlet http://xmlns.jcp.org/xml/ns/portlet/portlet-app_3_0.xsd" 
+             version="3.0"
+    		id="V3HeaderPortletTests">
+   
+   <portlet>
+      <portlet-name>HeaderPortletTests_SPEC3_6_4_HeaderPortlet</portlet-name>
+      <portlet-class>javax.portlet.tck.portlets.HeaderPortletTests_SPEC3_6_4_HeaderPortlet</portlet-class>
+      <expiration-cache>0</expiration-cache>
+      <supports>
+         <mime-type>text/html</mime-type>
+      </supports>
+      <supported-locale>en_US</supported-locale>
+      <portlet-info>
+         <title>HeaderPortletTests_SPEC3_6_4_HeaderPortlet</title>
+      </portlet-info>
+      <container-runtime-option>
+         <name>javax.portlet.renderHeaders</name>
+         <value>true</value>
+      </container-runtime-option>
+   </portlet>
+   
+</portlet-app>