cleaned up semantics