Hmmm, It would appear that a Site Root and a Site Access Rule containing the following are NOT the same: <dtml-call "REQUEST.setURL(base=SiteRootBASE, path=SiteRootPATH)"> as my site access rule didn't work :( (it left the URL, BASEx and absolute_url() unchanged) The only way I could solve it was to do the following: Site Access Rule: <dtml-in virtual_hosts> <dtml-if "REQUEST.environ['HTTP_HOST']==_['sequence-item']"> <dtml-call "REQUEST.set('SiteRootPATH','/')"> </dtml-if> </dtml-in> And then put an empty SiteRoot object in the folder of each virtually hosted site. Why did I need to do this? (more out of curiosity than anything else...) Also why do the SiteRoot objects have to be in the folder of the virtually hosted site? why can't I just have one in the root folder which gets picked up through aquisition (they're all blank anyway ;-) And, most importantly of all, why does adding a site access rule prevent FTP access to Zope? Chris