updated. *think* it's right