almost final. clean up to do