maybe some sort of async with catalyst