demo complete, code need to clean up