add ^C handling