Classes in OCaml are indeed slow, but that is because they are incredibly different from modules. A class has fields, that is, meathods, that are "named" and searched by comparing hashes. Modules also have fields, functions and values, but they are named only as far as the programmer in concerned - in compiled code, they are indexed (by an integer), and actually, the native compiler can actually optimise even that (so only a plain function call remains). In contrast, everytime you call a method of an object, it is searched in the method list of that class (well, I think there is some caching too). But this "slowness" is expected - objects are also more adaptable than modules. If you have a function # let f o = o#some_method ();; val f : < some_method : unit -> 'a; .. > -> 'a = you can pass to it any object with method "some_method" of type unit -> 'a. That's called structural subtyping. - Tom