Calendar plug-in with Widget

How about a calendar of events plug-in that lets you add events and display the calendar with events as a widget? Preferably the events could have icons associated with them and include a start time as well as the date.

Taking it a step further, it would be great if it could also be used as a scheduling device as an alternate use. In that case, the events are not displayed publicly but the times they are to occur are blocked out. Then, if someone wants to schedule a meeting/appointment, they select a free time and request it, in which case a notice is sent to the admin who can then accept and block out the time.