adding extra features and improvements