diff --git a/ChangeLog b/ChangeLog
index c4ba248..d95b433 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2008-09-22  Dave Foster <daf@minuslab.net>
+    * glib/glibmm/main.h:
+	* glib/glibmm/main.cc: Added SignalIdle::connect_once,
+	SignalTimeout::connect_once, and SignalTimeout::connect_seconds_once.
+
 === 2.16.4 ===
 
 2008-07-03  Jonathon Jongsma <jjongsma@gnome.org>
diff --git a/docs/reference/beautify_docs.pl b/docs/reference/beautify_docs.pl
old mode 100755
new mode 100644
diff --git a/glib/glibmm/main.cc b/glib/glibmm/main.cc
index 997462d..7ccb04b 100644
--- a/glib/glibmm/main.cc
+++ b/glib/glibmm/main.cc
@@ -311,6 +311,12 @@ sigc::connection SignalTimeout::connect(const sigc::slot<bool>& slot,
   return connection;
 }
 
+void SignalTimeout::connect_once(const sigc::slot<void>& slot, 
+                                 unsigned int interval, int priority)
+{
+    connect(sigc::bind_return(slot, false), interval, priority);
+}
+
 /* Note that this is our equivalent of g_timeout_add_seconds(). */
 sigc::connection SignalTimeout::connect_seconds(const sigc::slot<bool>& slot,
                                         unsigned int interval, int priority)
@@ -334,6 +340,12 @@ sigc::connection SignalTimeout::connect_seconds(const sigc::slot<bool>& slot,
   return connection;
 }
 
+void SignalTimeout::connect_seconds_once(const sigc::slot<void>& slot, 
+                                         unsigned int interval, int priority)
+{
+    connect_seconds(sigc::bind_return(slot, false), interval, priority);
+}
+
 SignalTimeout signal_timeout()
 {
   return SignalTimeout(0); // 0 means default context
@@ -369,6 +381,11 @@ sigc::connection SignalIdle::connect(const sigc::slot<bool>& slot, int priority)
   return connection;
 }
 
+void SignalIdle::connect_once(const sigc::slot<void>& slot, int priority)
+{
+    connect(sigc::bind_return(slot, false), priority);
+}
+
 SignalIdle signal_idle()
 {
   return SignalIdle(0); // 0 means default context
diff --git a/glib/glibmm/main.h b/glib/glibmm/main.h
index 5797360..fa01a0e 100644
--- a/glib/glibmm/main.h
+++ b/glib/glibmm/main.h
@@ -161,6 +161,20 @@ public:
   sigc::connection connect(const sigc::slot<bool>& slot, unsigned int interval,
                            int priority = PRIORITY_DEFAULT);
 
+ /** Connects an timeout handler that runs only once.
+  * This method takes a function pointer to a function with a void return
+  * and no parameters. After running once it is not called again.
+  *
+  * @see connect
+  * @param slot A slot to call when @a interval has elapsed. For example:
+  * @code
+  * void on_timeout_once()
+  * @endcode
+  * @param interval The timeout in milliseconds.
+  * @param priority The priority of the new event source. 
+  */
+  void connect_once(const sigc::slot<void>& slot, unsigned int interval,
+                    int priority = PRIORITY_DEFAULT);
 
   /** Connects a timeout handler with whole second granularity.
    *
@@ -192,6 +206,23 @@ public:
   sigc::connection connect_seconds(const sigc::slot<bool>& slot, unsigned int interval,
                            int priority = PRIORITY_DEFAULT);
 
+ /** Connects an timeout handler that runs only once with whole second
+  *  granularity.
+  *
+  * This method takes a function pointer to a function with a void return
+  * and no parameters. After running once it is not called again.
+  *
+  * @see connect_seconds
+  * @param slot A slot to call when @a interval has elapsed. For example:
+  * @code
+  * void on_timeout_once()
+  * @endcode
+  * @param interval The timeout in milliseconds.
+  * @param priority The priority of the new event source. 
+  */
+  void connect_seconds_once(const sigc::slot<void>& slot, unsigned int interval,
+                            int priority = PRIORITY_DEFAULT);
+
 private:
   GMainContext* context_;
 
@@ -223,6 +254,12 @@ public:
    */
   sigc::connection connect(const sigc::slot<bool>& slot, int priority = PRIORITY_DEFAULT_IDLE);
 
+ /** Connects an idle handler that runs only once.
+  * This method takes a function pointer to a function with a void return
+  * and no parameters. After running once it is not called again.
+  */
+  void connect_once(const sigc::slot<void>& slot, int priority = PRIORITY_DEFAULT_IDLE);
+
 private:
   GMainContext* context_;
 
