code refactor to make +! more semantics