added type traints, canged to/push to use type traits