decode explicitly - don't use backcompat u() func