diff --git a/reference/code-museum/src/com/google/gwt/museum/client/defaultmuseum/DefaultMuseum.java b/reference/code-museum/src/com/google/gwt/museum/client/defaultmuseum/DefaultMuseum.java
index d80ab61..6e4ccc6 100644
--- a/reference/code-museum/src/com/google/gwt/museum/client/defaultmuseum/DefaultMuseum.java
+++ b/reference/code-museum/src/com/google/gwt/museum/client/defaultmuseum/DefaultMuseum.java
@@ -38,6 +38,7 @@
     addIssue(new Issue2261());
     addIssue(new Issue2290());
     addIssue(new Issue2307());
+    addIssue(new Issue2318());
     addIssue(new Issue2321());
     addIssue(new Issue2331());
     addIssue(new Issue2338());
diff --git a/reference/code-museum/src/com/google/gwt/museum/client/defaultmuseum/Issue2318.java b/reference/code-museum/src/com/google/gwt/museum/client/defaultmuseum/Issue2318.java
new file mode 100644
index 0000000..9b6a3ff
--- /dev/null
+++ b/reference/code-museum/src/com/google/gwt/museum/client/defaultmuseum/Issue2318.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2008 Google Inc.
+ * 
+ * Licensed 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.
+ */
+
+package com.google.gwt.museum.client.defaultmuseum;
+
+import com.google.gwt.museum.client.common.AbstractIssue;
+import com.google.gwt.user.client.ui.NamedFrame;
+import com.google.gwt.user.client.ui.Widget;
+
+/**
+ * Warning message in IE6 when using NamedFrame on SSL-secured web-site.
+ */
+public class Issue2318 extends AbstractIssue {
+  @Override
+  public Widget createIssue() {
+    return new NamedFrame("myFrame");
+  }
+
+  @Override
+  public String getInstructions() {
+    return "Open this page in IE6 on an SSL-secured server (https).  Verify "
+        + "that you do not see a mixed-content warning.";
+  }
+
+  @Override
+  public String getSummary() {
+    return "Warning message in IE6 when using NamedFrame on SSL-secured site";
+  }
+
+  @Override
+  public boolean hasCSS() {
+    return false;
+  }
+}
diff --git a/user/src/com/google/gwt/user/client/ui/NamedFrame.java b/user/src/com/google/gwt/user/client/ui/NamedFrame.java
index 9efe1f7..402158a 100644
--- a/user/src/com/google/gwt/user/client/ui/NamedFrame.java
+++ b/user/src/com/google/gwt/user/client/ui/NamedFrame.java
@@ -17,6 +17,7 @@
 
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.core.client.JavaScriptObject;
+import com.google.gwt.dom.client.IFrameElement;
 import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.Element;
 
@@ -43,6 +44,30 @@
     }
   }
 
+  /**
+   * Creates an HTML IFRAME element with a src and name.
+   * 
+   * @param src the src of the frame
+   * @param name the name of the frame, which must contain at least one
+   *          non-whitespace character and must not contain reserved HTML markup
+   *          characters such as '<code>&lt;</code>', '<code>&gt;</code>',
+   *          or '<code>&amp;</code>'
+   * @return the newly-created element
+   * @throws IllegalArgumentException if the supplied name is not allowed 
+   */
+  private static IFrameElement createIFrame(String src, String name) {
+    if (name == null || !isValidName(name.trim())) {
+      throw new IllegalArgumentException(
+          "expecting one or more non-whitespace chars with no '<', '>', or '&'");
+    }
+
+    // Use innerHTML to implicitly create the <iframe>. This is necessary
+    // because most browsers will not respect a dynamically-set iframe name.
+    Element div = DOM.createDiv();
+    div.setInnerHTML("<iframe src=\"" + src + "\" name='" + name + "'>");
+    return div.getFirstChild().cast();
+  }
+
   private static native void initStatics() /*-{
     @com.google.gwt.user.client.ui.NamedFrame::PATTERN_NAME = /^[^<>&\'\"]+$/;
   }-*/;
@@ -67,18 +92,9 @@
    * @throws IllegalArgumentException if the supplied name is not allowed 
    */
   public NamedFrame(String name) {
-    if (name == null || !isValidName(name.trim())) {
-      throw new IllegalArgumentException(
-          "expecting one or more non-whitespace chars with no '<', '>', or '&'");
-    }
-
-    // Use innerHTML to implicitly create the <iframe>. This is necessary
-    // because most browsers will not respect a dynamically-set iframe name.
-    Element div = DOM.createDiv();
-    DOM.setInnerHTML(div, "<iframe name='" + name + "'>");
-
-    Element iframe = DOM.getFirstChild(div);
-    replaceElement(iframe);
+    // Setting a src prevents mixed-content warnings.
+    // http://weblogs.asp.net/bleroy/archive/2005/08/09/how-to-put-a-div-over-a-select-in-ie.aspx
+    super(createIFrame("javascript:''", name));
     setStyleName(DEFAULT_STYLENAME);
   }
 
