Replacing define_singleton_method with extend

And better technique for removing decorator method.

And refactor away some duplicated code