needs some updates and improvements