My first question got lost in all the discussion of the second. I'm going to repost it in hopes of getting lucky. In order to keep my table headers consistent across reports, I have them stored as a separate DTML method called IS_Ptd_Header. In my main Income Statement, I have this where I want the table header to show up; <span tal:replace="structure here/IS_Ptd_Header"></span> This works fine. The problem I've run into is when I want to use tal tags in the IS_Ptd_header like this; Income Statement for period <span tal:replace="request/Per">Period</span> If I have this line in the Income Statement ZPT it works. I get the "Per" parameter from the URL. When the same line in IS_Ptd_Header gets ignored so the resulting page shows "Income Statement for period Period". I thought that maybe the tal tags were being ignored because IS_Ptd_Header is a DTML method so I created a ZPT with the name IS_YTD_Header and used that in the tal replace command but the result came back as HTML quoted text instead of the actual HTML. Anyone know what I'm missing? It doesn't look like ZPT is designed to work this way. For my footer, (for now) I just have the </table> tag to finish my table. The ZPT gives me a mismatched tag error. What's the best way to modularize the web pages? Thanks