Modification and improvements according to feedback.