I wonder if we can't meta program this a bit more, as this is really not DRY.