guide (todo: cleanup, rewrite)