bit more programmatic in places