stage, before remove static methods
ported to instance methods, all pass