Will write up abstraction in blog post if anyone's interested