fully functional. now cleanup