works with great speed. cleanup required