With the release of UPower 0.9.2 today, I decided that it was safe to start depending on it for Suspend and Hibernate. The parts that we use didn't change between 0.9.1 and 0.9.2. This is a slight modification of the code that used DeviceKit/Power, with just the well-known service name changed and a little tweak to swallow the timeout error that happens when you suspend. The DeviceKit/Power code is no longer there. The HAL code is there but only as a fallback if the ConsoleKit and UPower paths aren't usable.
I have added an area at the bottom where I display the error, if we get one, so the user will have a clue why their button press didn't work.
I have this ready to check in. Are the distros ready to have this in mainline.