also some naming caremad: _2, _3, etc.  might be better to name the variants by how they vary from the original function so it's easier to remember which one to use.