working good maybe ready for merge