marshal does need the bytes argument