abstracting more things