added back propagation