ported to express 3

not sure how necessary this is, but it's not that big of a change