implemented propagate. needs testing.