Revert "Code for  #4 #3 #2"

This reverts commit be6de9a1c2b8e3e3b20dbbbbc5f2f718b6c19f6a.
Revert "Revert "Code for  #4 #3 #2""

This reverts commit e0cd6547cbf3c917835f672ef4e5510c73f50e0d.