diff --git a/user/src/com/google/gwt/uibinder/rebind/AbstractFieldWriter.java b/user/src/com/google/gwt/uibinder/rebind/AbstractFieldWriter.java
index 929dd55..a98a249 100644
--- a/user/src/com/google/gwt/uibinder/rebind/AbstractFieldWriter.java
+++ b/user/src/com/google/gwt/uibinder/rebind/AbstractFieldWriter.java
@@ -213,22 +213,20 @@
         && getAssignableType() != null
         && getAssignableType().isAssignableTo(renderablePanelType);
 
-    // Check initializer.
-    if (initializer == null) {
-      if (ownerField != null && ownerField.isProvided()) {
-        initializer = String.format("owner.%s", name);
-      } else {
-        JClassType type = getInstantiableType();
-        if (type != null) {
-          if ((type.isInterface() == null)
-              && (type.findConstructor(new JType[0]) == null)) {
-            logger.die(NO_DEFAULT_CTOR_ERROR, type.getQualifiedSourceName(),
-                type.getName());
-          }
+    // Check initializer. Provided value takes precedence over initializer.
+    if (ownerField != null && ownerField.isProvided()) {
+      initializer = String.format("owner.%s", name);
+    } else if (initializer == null) {
+      JClassType type = getInstantiableType();
+      if (type != null) {
+        if ((type.isInterface() == null)
+            && (type.findConstructor(new JType[0]) == null)) {
+          logger.die(NO_DEFAULT_CTOR_ERROR, type.getQualifiedSourceName(),
+              type.getName());
         }
-        initializer = String.format("(%1$s) GWT.create(%1$s.class)",
-            getQualifiedSourceName());
       }
+      initializer = String.format("(%1$s) GWT.create(%1$s.class)",
+          getQualifiedSourceName());
     }
 
     w.newline();
diff --git a/user/test/com/google/gwt/uibinder/test/client/UiBinderTest.java b/user/test/com/google/gwt/uibinder/test/client/UiBinderTest.java
index d598652..758bb69 100644
--- a/user/test/com/google/gwt/uibinder/test/client/UiBinderTest.java
+++ b/user/test/com/google/gwt/uibinder/test/client/UiBinderTest.java
@@ -65,6 +65,28 @@
     root = widgetUi.root;
   }
 
+  /**
+   * Tests that the provided value takes precedence over a custom parser,
+   * {@code UiFactory} or {@code UiConstructor}.
+   * <p>
+   * The fields are {@code final} and we test that they've correctly been
+   * modified by the template.
+   * 
+   * @see http://code.google.com/p/google-web-toolkit/issues/detail?id=7740
+   */
+  public void testProvidedWidgetWithCustomInitializer() {
+    // Custom parser: should use the provided header, as the one from the
+    // template is passed to the (ignored) custom initializer. But the child
+    // widget should have been set.
+    assertEquals("Provided header text", widgetUi.myProvidedDisclosurePanel.getHeaderTextAccessor().getText());
+    assertNotNull(widgetUi.myProvidedDisclosurePanelItem);
+    assertSame(widgetUi.myProvidedDisclosurePanelItem, widgetUi.myProvidedDisclosurePanel.getContent());
+    // UiConstructor
+    assertEquals("ditto", widgetUi.providedAnnotatedStrictLabel.getText());
+    // UiFactory
+    assertEquals("from template", widgetUi.providedStrictLabel.getText());
+  }
+
   public void testTableWithColumns() {
     assertEquals("col", domUi.narrowColumn.getTagName().toLowerCase());
     assertEquals("tr", domUi.tr.getTagName().toLowerCase());
diff --git a/user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.java b/user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.java
index e1c676f..a07e0b0 100644
--- a/user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.java
+++ b/user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.java
@@ -116,6 +116,9 @@
   @UiField Widget myStackPanelItem;
   @UiField DisclosurePanel myDisclosurePanel;
   @UiField Widget myDisclosurePanelItem;
+  @UiField(provided = true)
+  final DisclosurePanel myProvidedDisclosurePanel = new DisclosurePanel("Provided header text");
+  @UiField Widget myProvidedDisclosurePanelItem;
   @UiField Tree myTree;
   @UiField TreeItem myTreeItemA;
   @UiField Widget myTreeWidgetB;
@@ -133,11 +136,12 @@
   @UiField NeedlesslyAnnotatedLabel needlessLabel;
   @UiField AnnotatedStrictLabel strictLabel;
   @UiField(provided = true)
-  AnnotatedStrictLabel providedStrictLabel = new AnnotatedStrictLabel(
+  final AnnotatedStrictLabel providedAnnotatedStrictLabel = new AnnotatedStrictLabel(
       "likewise");
   @UiField AnnotatedStrictLabel translatedStrictLabel;
   @UiField StrictLabel veryStrictLabel;
   @UiField StrictLabel translatedVeryStrictLabel;
+  @UiField(provided = true) final StrictLabel providedStrictLabel = new StrictLabel("provided");
   @UiField FooLabel theFoo;
   @UiField MenuBar dropdownMenuBar;
   @UiField MenuItem menuItemMop;
diff --git a/user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.ui.xml b/user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.ui.xml
index 1365691..7a97528 100644
--- a/user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.ui.xml
+++ b/user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.ui.xml
@@ -451,6 +451,20 @@
 
       </gwt:DisclosurePanel>
 
+      <p> ... a provided DisclosurePanel with a text header ... </p>
+
+      <gwt:DisclosurePanel ui:field='myProvidedDisclosurePanel' animationEnabled='true'>
+        <gwt:header>
+          <ui:msg description="Label for Disclosure One">I just have a text header</ui:msg>
+        </gwt:header>
+
+
+          <gwt:Label ui:field='myProvidedDisclosurePanelItem'>
+            <ui:msg  description="Content for Disclosure One Text">Disclosure Text</ui:msg>
+          </gwt:Label>
+
+      </gwt:DisclosurePanel>
+
       <h2>Stylish</h2>
       <p>
        Templates work with ClientBundle. For example,
@@ -551,7 +565,8 @@
       </demo:StrictLabel></p>
       <p><demo:NeedlesslyAnnotatedLabel ui:field="needlessLabel"
         text="Sometimes people do things they don't need to do. Don't punish them."/></p>
-      <demo:AnnotatedStrictLabel ui:field="providedStrictLabel">ditto</demo:AnnotatedStrictLabel>
+      <demo:AnnotatedStrictLabel ui:field="providedAnnotatedStrictLabel">ditto</demo:AnnotatedStrictLabel>
+      <demo:StrictLabel ui:field="providedStrictLabel" text="from template" />
 
       <demo:FooLabel ui:field='theFoo' pojo="{values.pojo}"/>
 
