todo: move to a published gem