ox = createobject( "g3b" ) op = createobject( "gpolymorph" ) op.draw() define class gpolymorph as Custom function draw() *-- calling from here (existance of the callee assumed) *-- breaks the assert check, since the polymorphic method does not *-- implement a method of the abstract class. ox.draw() enddefine define class G3b as G2b enddefineImplementing the check at compile time sounds like a nice approach, since also checking against the above problem might give you a hefty runtime penalty if done often/always. But I suppose such a builder might encounter some difficulties as well: first bump i visualze would be differing factory patterns from class loading via table down to makro expansion... Unless you do a static check on all classes included and even flag methods which are not overwritten but also not called in the current system.