port to internal controller, some routes are still broken