wrap return types better (needs work)