refactor and support placeholdable hash keys