use is_callable instead of method_exists