let's make this stuff more frameworky