diff --git a/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java b/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java
index fd0ace2..29d1e76 100644
--- a/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java
+++ b/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java
@@ -635,8 +635,8 @@
      */
     protected void render(TilesRequestContext request, Definition definition) {
         AttributeContext originalContext = getAttributeContext(request);
-        BasicAttributeContext subContext = new BasicAttributeContext(definition);
-        subContext.inherit(originalContext);
+        BasicAttributeContext subContext = new BasicAttributeContext(originalContext);
+        subContext.inherit(definition);
 
         pushContext(subContext, request);
 
diff --git a/tiles-core/src/test/java/org/apache/tiles/impl/BasicTilesContainerTest.java b/tiles-core/src/test/java/org/apache/tiles/impl/BasicTilesContainerTest.java
index c42c58d..669a035 100644
--- a/tiles-core/src/test/java/org/apache/tiles/impl/BasicTilesContainerTest.java
+++ b/tiles-core/src/test/java/org/apache/tiles/impl/BasicTilesContainerTest.java
@@ -24,15 +24,11 @@
 import java.io.StringWriter;
 import java.net.URL;
 import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 import junit.framework.TestCase;
 
 import org.apache.tiles.Attribute;
-import org.apache.tiles.BasicAttributeContext;
 import org.apache.tiles.TilesApplicationContext;
 import org.apache.tiles.TilesException;
 import org.apache.tiles.context.ChainedTilesRequestContextFactory;
@@ -161,28 +157,6 @@
     }
 
     /**
-     * Tests for TILES-544
-     */
-    public void testJiraTiles544() throws IOException {
-        TilesRequestContext request = EasyMock.createMock(TilesRequestContext.class);
-        Map<String, Object> requestScope = new HashMap<String, Object>();
-        EasyMock.expect(request.getRequestScope()).andReturn(requestScope).anyTimes();
-        EasyMock.expect(request.getSessionScope()).andReturn(Collections.<String, Object> emptyMap()).anyTimes();
-        EasyMock.expect(request.getRequestLocale()).andReturn(null).anyTimes();
-        EasyMock.expect(request.getRequestObjects()).andReturn(new Object[] {request}).anyTimes();
-        request.dispatch("/test.jsp");
-        EasyMock.replay(request);
-        Attribute testDef1 = new Attribute("test.def1");
-        testDef1.setRenderer("definition");
-        BasicAttributeContext context = new BasicAttributeContext();
-        context.setTemplateAttribute(testDef1);
-        container.pushContext(context, request);
-        container.render(request, context);
-        container.popContext(request);
-        EasyMock.verify(request);
-    }
-
-    /**
      * A BasicTilesContainerFactory with overridden createRequestContextFactory
      * method.
      *
