Yeah something like: Public Function Event_ScreenSaver(ByVal Type As Integer) As Boolean 'Enter = 0, 'Start = 1, 'End = 2, Select Case Type Case 0 AttractTimer.Interval(2700000) ' <---userSetInterval AttractTimer.Start() Application.SetSuspendState(PowerState.Hibernate, true, true) Case 1 AttractTimer.Interval(2700000) ' <---userSetInterval AttractTimer.Start() Application.SetSuspendState(PowerState.Hibernate, true, true) Case 2 AttractTimer.Stop() End Select Return True End Function If I get the plugin system, you could start the timer when you enter Attract Mode or it starts on it's own (Case 0 is Enter Attract and Case 1 is for when it launches itself, right?) Use the Application Suspend method to make your machine hibernate when the timer is reached, and stop the timer if you exit Attract Mode. Shouldn't even need Tom to implement it if the plugin system can already process events for Attract Mode. Of course, this is a suggestion and will likely need a lot of fine tuning (userSetInterval field for one so you can specify the amount of time before the machine hibernates) and this may not hook Attract Mode the way I think it will... It would need to have an Event Handler instead of just doing it after so many minutes, but that's easy enough to do. Tom will have to clarify as to whether I have the Use Case events right... but that should be an easy one. No need to screw around with detecting inputs really.