Speaking of: "Get rid of the incRef/decRef API of class File. Instead, add a clone() method which generates a new (independant) File object for the same file (only would work for files in read mode, obviously)." - Wouldn't it be nicer do make the copy constructor and the operator = of Common::File public and making them doing a clone of the file nicer? Since it wouldn't be possible to implement a Common::File clone() like method until those are protected. If the copy constructor and operator = would be doing the same like clone there would be no need for clone again, but if those don't do the same like clone it would be unsafe for code like: "void foo(Common::File bar);"