basic functionality and callback added