updated and done more better now