Again though, it is near pointless to have the param AND the method for simulations. if you have a canFill then dont have a doFill.
They should not be separate functions completely, fill() should use canFill for propogating whether or not it CAN actually fill. I think in your mind this is working perfectly but I think you should close your env, and come back later after resting some and think it over again, as this will ultimately confuse and divide too many modders