experiment with GUARD macro for cleaned up protection on things protected until end of fn call