Thanks to Chris & Guido I have something that works. A quick recap: Learned that: 1. Pickling a class involves a 'locatable' class definition on both the pickling and unpickling operations. 2. Where to move it? Ended up in site-packages, named the package folder and module the same thing and discovered the true meaning of from {package} import {module}. 3. Zope external modules only see the code involved in the specified call, so calling a module with an internal class definition ( that works in python ) will fail as an external method because zope ignores it. Resolved the problem by importing the package/module/class from site-packages, which enables zope's external methods to locate the class. Next question: At Chris's suggestion I'd like to move the code from the external method to the site-package, leaving just a stub for the external methods. Same problem all over again. Zope sees the functions in the modules, but not the class defined in the module. Tried a quick experiment, created a separate file for the code in the site-package, and imported the class from the adjacent file. Zope still can't see it. So before I start flailing about I thought I'd see if anyone else has experienced a similar situation, and how they resolved it. I can see a possible solution in creating two 'site-packages', one for the code and one for the class. But that's just a guess, and it lacks a certain elegance! Je ne sais quoi, Sean