Yes, here is some code. Any help would be very much appreciated. The following fails to type check: class p (x: int) = object method plus1 : int = x + 1 end class p2 (x: int) = object inherit p x method plus2 : int = x + 2 end class r = object (self) val mutable l = [] method make_el x = new p x method add (x: int) : unit = l <- (self#make_el x) :: l method length : int = List.length l method total : int = List.fold_left (fun t el -> t + el#plus1) 0 l end class r2 = object inherit r method make_el x = new p2 x method total2 : int = List.fold_left (fun t el -> t + el#plus2) 0 l end What I am trying to do is to replace, in l, elements of type p with elements of type p2, so that my class r2 can offer more methods (or use them internally). However, the compiler complains that p2 and p are not compatible, because p does not have method plus2 (in spite of the fact that no runtime error can occur). I am not a deep expert of Ocaml type system for classes, as you might have guessed by now, so if someone were able to suggest a set of type casts/notations/... that would make the above go through, I would be very grateful. In my real (large) code, I use the elements of the list l in many places inside the code of r (and by inheritance, r2). Do you have any code that we can look at to see what the problem is? Can > you perhaps construct a small yet complete example that demonstartes the > issue? > > -- > > William D. Neumann > >