separated trans function