updated&cleaned