rewrite to support hammer v2 API