I'm inching along. Thanks to Michel Pelletier and Andy Kuchling, I now know my calendar module is a Product and what most (all?) of the necessary scaffolding is. My Calendar class supports a show method: def show(self, year, month=0): """return plain ASCII calendar month == 0 ==> display calendar for entire year """ if year < 1 or year > 9999: raise ValueError, ("year out of range: %d" % year) if month < 0 or month > 12: raise ValueError, ("month out of range: %d" % month) if month: cal = os.popen("cal %s %s" % (month, year)).read() else: cal = os.popen("cal %s" % year).read() return HTMLFile('cal', month=month, year=year, cal=cal) When I access http://localhost:8080/Calendar/show?month:int=0&year:int=1998 I get the following traceback: Traceback (innermost last): File /home/dolphin/skip/src/Zope-1.9b1-src/lib/python/ZPublisher/Publish.py, line 861, in publish_module File /home/dolphin/skip/src/Zope-1.9b1-src/lib/python/ZPublisher/Publish.py, line 585, in publish (Info: /Calendar/show) File /home/dolphin/skip/src/Zope-1.9b1-src/lib/python/ZPublisher/Response.py, line 284, in setBody File /home/dolphin/skip/src/Zope-1.9b1-src/lib/python/DocumentTemplate/DT_HTML.py, line 217, in __str__ (Object: /home/dolphin/skip/src/Zope-1.9b1-src/lib/python/cal.dtml) File /home/dolphin/skip/src/Zope-1.9b1-src/lib/python/DocumentTemplate/DT_HTML.py, line 209, in quotedHTML (Object: /home/dolphin/skip/src/Zope-1.9b1-src/lib/python/cal.dtml) File /home/dolphin/skip/src/Zope-1.9b1-src/lib/python/DocumentTemplate/DT_String.py, line 532, in read_raw (Object: /home/dolphin/skip/src/Zope-1.9b1-src/lib/python/cal.dtml) IOError: (2, 'No such file or directory') which suggests to me that my cal.dtml file is not where Zope expects to find it. All files in my Products/Calendar directory are in that directory: % ls -F lib/python/Products/Calendar/ __init__.py cal.dtml vcal.gif __init__.pyc cal.py addCalendar_form.dtml cal.pyc Why is it looking up two levels in the directory hierarchy for the DTML file? As far as I can tell, I'm using the same calling conventions for HTMLFile objects as the MailHost and sample Products do. Any suggestions this time? Skip Montanaro | Mojam: "Uniting the World of Music" http://www.mojam.com/ skip@calendar.com | Musi-Cal: http://concerts.calendar.com/ 518-372-5583