diff --git a/src/TrayPowerOff.lhs b/src/TrayPowerOff.lhs
--- a/src/TrayPowerOff.lhs
+++ b/src/TrayPowerOff.lhs
@@ -11,7 +11,7 @@
     ( statusIconNewFromFile, statusIconActivate, statusIconPopupMenu )
 import Graphics.UI.Gtk.ActionMenuToolbar.Action( actionNew, actionActivated )
 import Graphics.UI.Gtk.ActionMenuToolbar.ActionGroup
-    ( actionGroupNew, actionGroupAddAction )
+    ( ActionGroup, actionGroupNew, actionGroupAddAction )
 import Graphics.UI.Gtk.ActionMenuToolbar.UIManager
     ( uiManagerNew, uiManagerAddUiFromString, uiManagerGetWidget
     , uiManagerInsertActionGroup )
@@ -20,10 +20,35 @@
 import Data.Maybe( fromJust )
 import System.Cmd( system )
 import System.Exit( ExitCode(..) )
+import Control.Monad( mapM_ )
 \end{code}
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \begin{code}
+data MenuItem = MenuItem { menuId :: String
+                         , menuText :: String
+                         , menuAction :: IO () }
+\end{code}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{code}
+menuXml :: String
+menuXml = "<popup>\
+\           <menuitem action=\"AOFF\" />\
+\           <menuitem action=\"AREB\" />\
+\           <menuitem action=\"ASUS\" />\
+\           <menuitem action=\"AHIB\" />\
+\          </popup>"   
+
+menuItems :: [MenuItem]
+menuItems = [ MenuItem "AOFF" "PowerOff" powerOffAction
+            , MenuItem "AREB" "Reboot" rebootAction 
+            , MenuItem "ASUS" "Suspend" suspendAction
+            , MenuItem "AHIB" "Hibernate" hibernateAction ]
+\end{code}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{code}
 main :: IO()
 main = do
   initGUI
@@ -31,18 +56,11 @@
   iconfile <- getDataFileName "icons/icon64.png"
   icon <- statusIconNewFromFile iconfile
 
-  aoff <- actionNew "AOFF" "PowerOff" Nothing Nothing
-  on aoff actionActivated powerOffAction
-  areb <- actionNew "AREB" "Reboot" Nothing Nothing
-  on areb actionActivated rebootAction
-
   group <- actionGroupNew "AGRP"
-
-  actionGroupAddAction group aoff
-  actionGroupAddAction group areb
+  mapM_ (createMenuItem group) menuItems
 
   uiman <- uiManagerNew
-  uiManagerAddUiFromString uiman uiDecl
+  uiManagerAddUiFromString uiman menuXml
   uiManagerInsertActionGroup uiman group 0
 
   pop <- fmap (castToMenu . fromJust) $ uiManagerGetWidget uiman "/popup"
@@ -54,25 +72,23 @@
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \begin{code}
-menuPopUp :: Menu -> Maybe MouseButton -> TimeStamp -> IO ()
-menuPopUp menu _ _ = do
-  menuPopup menu Nothing
+createMenuItem :: ActionGroup -> MenuItem -> IO ()
+createMenuItem group item = do
+  action <- actionNew (menuId item) (menuText item) Nothing Nothing
+  on action actionActivated (menuAction item)
+  actionGroupAddAction group action 
 \end{code}
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \begin{code}
-menuActivate :: Menu -> IO ()
-menuActivate menu = do
-  menuPopup menu Nothing
+menuPopUp :: Menu -> Maybe MouseButton -> TimeStamp -> IO ()
+menuPopUp menu _ _ = menuPopup menu Nothing
 \end{code}
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \begin{code}
-uiDecl :: [Char]
-uiDecl = "<popup>\
-\           <menuitem action=\"AOFF\" />\
-\           <menuitem action=\"AREB\" />\
-\          </popup>"   
+menuActivate :: Menu -> IO ()
+menuActivate menu = menuPopup menu Nothing
 \end{code}
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -90,6 +106,26 @@
 rebootAction :: IO ()
 rebootAction = do
   err <- system "sudo /sbin/reboot"
+  case err of
+    ExitFailure n -> putStrLn $ "Error code: " ++ show n
+    ExitSuccess -> return ()
+\end{code}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{code}
+suspendAction :: IO ()
+suspendAction = do
+  err <- system "sudo /usr/sbin/pm-suspend"
+  case err of
+    ExitFailure n -> putStrLn $ "Error code: " ++ show n
+    ExitSuccess -> return ()
+\end{code}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{code}
+hibernateAction :: IO ()
+hibernateAction = do
+  err <- system "sudo /usr/sbin/pm-hibernate"
   case err of
     ExitFailure n -> putStrLn $ "Error code: " ++ show n
     ExitSuccess -> return ()
diff --git a/traypoweroff.cabal b/traypoweroff.cabal
--- a/traypoweroff.cabal
+++ b/traypoweroff.cabal
@@ -1,5 +1,5 @@
 name:			traypoweroff
-version:		0.9.0
+version:		1.0.0
 cabal-Version:		>= 1.6
 description:		PowerOff Tray Icon
 license:		BSD3
