push down assignments to where they're needed