diff --git a/tiles-parent/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java b/tiles-parent/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java
index 40a00c0..05ad174 100644
--- a/tiles-parent/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java
+++ b/tiles-parent/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java
@@ -229,8 +229,8 @@
      */
     public void render(Definition definition, Request request) {
         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-parent/tiles-core/src/test/java/org/apache/tiles/impl/BasicTilesContainerTest.java b/tiles-parent/tiles-core/src/test/java/org/apache/tiles/impl/BasicTilesContainerTest.java
index bacae93..8c9f476 100644
--- a/tiles-parent/tiles-core/src/test/java/org/apache/tiles/impl/BasicTilesContainerTest.java
+++ b/tiles-parent/tiles-core/src/test/java/org/apache/tiles/impl/BasicTilesContainerTest.java
@@ -23,19 +23,13 @@
 import java.io.IOException;
 import java.io.StringWriter;
 import java.net.URL;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
 
 import junit.framework.TestCase;
 
 import org.apache.tiles.Attribute;
-import org.apache.tiles.BasicAttributeContext;
 import org.apache.tiles.factory.AbstractTilesContainerFactory;
 import org.apache.tiles.factory.BasicTilesContainerFactory;
 import org.apache.tiles.request.ApplicationContext;
-import org.apache.tiles.request.DispatchRequest;
 import org.apache.tiles.request.Request;
 import org.apache.tiles.request.locale.URLApplicationResource;
 import org.apache.tiles.request.render.CannotRenderException;
@@ -43,6 +37,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+
 /**
  * @version $Rev$ $Date$
  */
@@ -51,7 +46,8 @@
     /**
      * The logging object.
      */
-    private final Logger log = LoggerFactory.getLogger(BasicTilesContainerTest.class);
+    private final Logger log = LoggerFactory
+            .getLogger(BasicTilesContainerTest.class);
 
     /**
      * A sample integer value to check object rendering.
@@ -66,12 +62,13 @@
     /** {@inheritDoc} */
     @Override
     public void setUp() {
-        ApplicationContext context = EasyMock.createMock(ApplicationContext.class);
+        ApplicationContext context = EasyMock
+                .createMock(ApplicationContext.class);
         URL url = getClass().getResource("/org/apache/tiles/factory/test-defs.xml");
         URLApplicationResource resource = new URLApplicationResource("/WEB-INF/tiles.xml", url);
 
-        EasyMock.expect(context.getResource("/WEB-INF/tiles.xml")).andReturn(resource);
-        EasyMock.expect(context.getResource(resource, Locale.ROOT)).andReturn(resource);
+        EasyMock.expect(context.getResource("/WEB-INF/tiles.xml"))
+                .andReturn(resource);
         EasyMock.replay(context);
         AbstractTilesContainerFactory factory = new BasicTilesContainerFactory();
         container = (BasicTilesContainer) factory.createContainer(context);
@@ -106,7 +103,8 @@
             exceptionFound = true;
         }
 
-        assertTrue("An attribute of 'object' type cannot be rendered", exceptionFound);
+        assertTrue("An attribute of 'object' type cannot be rendered",
+                exceptionFound);
     }
 
     /**
@@ -124,7 +122,8 @@
         attribute.setRenderer("string");
         container.render(attribute, request);
         writer.close();
-        assertEquals("The attribute should have been rendered", "This is the value", writer.toString());
+        assertEquals("The attribute should have been rendered",
+                "This is the value", writer.toString());
         EasyMock.reset(request);
         request = EasyMock.createMock(Request.class);
         EasyMock.expect(request.isUserInRole("myrole")).andReturn(Boolean.FALSE);
@@ -132,7 +131,8 @@
         writer = new StringWriter();
         container.render(attribute, request);
         writer.close();
-        assertNotSame("The attribute should have not been rendered", "This is the value", writer);
+        assertNotSame("The attribute should have not been rendered",
+                "This is the value", writer);
     }
 
     /**
@@ -143,24 +143,7 @@
         EasyMock.replay(request);
         Attribute attribute = new Attribute("This is the value");
         Object value = container.evaluate(attribute, request);
-        assertEquals("The attribute has not been evaluated correctly", "This is the value", value);
-    }
-
-    public void testJiraTiles544() throws IOException {
-        DispatchRequest request = EasyMock.createMock(DispatchRequest.class);
-        Map<String, Object> requestScope = new HashMap<String, Object>();
-        EasyMock.expect(request.getContext("request")).andReturn(requestScope).anyTimes();
-        EasyMock.expect(request.getContext("session")).andReturn(Collections.<String, Object> emptyMap()).anyTimes();
-        EasyMock.expect(request.getRequestLocale()).andReturn(Locale.ROOT).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);
+        assertEquals("The attribute has not been evaluated correctly",
+                "This is the value", value);
     }
 }
