#2 use define_singleton_method instead of eigenclass technique