moved declarations around in propagate to make more sense