updated for more function object features