make scheme_* return instead of exit