diff -r 9a91d975c88b gtk2_ardour/ardour_ui.cc
--- a/gtk2_ardour/ardour_ui.cc	Fri Jan 02 17:43:01 2009 +0000
+++ b/gtk2_ardour/ardour_ui.cc	Sat Jan 03 21:05:12 2009 +0000
@@ -1740,6 +1740,7 @@
 #endif
 }
 
+/** Blink timeout callback; called every 240ms */
 gint
 ARDOUR_UI::_blink (void *arg)
 
@@ -1754,13 +1755,11 @@
 	Blink (blink_on = !blink_on); /* EMIT_SIGNAL */
 }
 
+/** Start the blink signal. Everybody with a blinking widget
+ *  uses Blink to drive the widget's state. */
 void
 ARDOUR_UI::start_blinking ()
 {
-	/* Start the blink signal. Everybody with a blinking widget
-	   uses Blink to drive the widget's state.
-	*/
-
 	if (blink_timeout_tag < 0) {
 		blink_on = false;	
 		blink_timeout_tag = g_timeout_add (240, _blink, this);
@@ -1902,6 +1901,9 @@
 	}
 }
 
+/** Called every 240ms to blink the transport record button, if required.
+ *  @param onoff true for on, false for off.
+ */
 void
 ARDOUR_UI::transport_rec_enable_blink (bool onoff) 
 {
@@ -1911,6 +1913,7 @@
 	
 	switch (session->record_status()) {
 	case Session::Enabled:
+		/* rec enabled but not rolling; flash */
 		if (onoff) {
 			rec_button.set_visual_state (2);
 		} else {
@@ -1919,10 +1922,12 @@
 		break;
 
 	case Session::Recording:
+		/* recording; on but not flashing */
 		rec_button.set_visual_state (1);
 		break;
 
 	default:
+		/* not recording or enabled; off */
 		rec_button.set_visual_state (0);
 		break;
 	}
diff -r 9a91d975c88b gtk2_ardour/ardour_ui.h
--- a/gtk2_ardour/ardour_ui.h	Fri Jan 02 17:43:01 2009 +0000
+++ b/gtk2_ardour/ardour_ui.h	Sat Jan 03 21:05:12 2009 +0000
@@ -173,7 +173,10 @@
 
 	Gtk::Tooltips& tooltips() { return _tooltips; }
 
+	/** Emitted every 240ms with an alternating true / false parameter, once
+	 *  start_blinking() has been called. */
 	static sigc::signal<void,bool> Blink;
+	
 	static sigc::signal<void>      RapidScreenUpdate;
 	static sigc::signal<void>      SuperRapidScreenUpdate;
 	static sigc::signal<void,nframes_t, bool, nframes_t> Clock;
@@ -319,8 +322,8 @@
 
 	static gint _blink  (void *);
 	void blink ();
-	gint blink_timeout_tag;
-	bool blink_on;
+	gint blink_timeout_tag; ///< value returned from g_timeout_add in start_blinking(), or -1
+	bool blink_on; ///< last emitted blink value
 	void start_blinking ();
 	void stop_blinking ();
 
@@ -410,7 +413,7 @@
 	BindableButton goto_end_button;
 	BindableButton auto_loop_button;
 	BindableButton play_selection_button;
-	BindableButton rec_button;
+	BindableButton rec_button; ///< transport Record button
 
 	Gtk::ComboBoxText sync_option_combo;
 
diff -r 9a91d975c88b libs/ardour/session_state.cc
--- a/libs/ardour/session_state.cc	Fri Jan 02 17:43:01 2009 +0000
+++ b/libs/ardour/session_state.cc	Sat Jan 03 21:05:12 2009 +0000
@@ -649,6 +649,10 @@
 	unlink (xml_path.c_str());
 }
 
+/** Save state to disk.
+ *  @param snapshot_name Snapshot name to use, or "" to use _current_snapshot_name.
+ *  @param pending true to save to <snapshot_name>.pending, otherwise <snapshot_name>.ardour
+ */
 int
 Session::save_state (string snapshot_name, bool pending)
 {
@@ -928,6 +932,9 @@
 		node->add_property ("name", _name);
 		snprintf (buf, sizeof (buf), "%" PRId32, _nominal_frame_rate);
 		node->add_property ("sample-rate", buf);
+		node->add_property ("record-enabled", get_record_enabled () ? "1" : "0");
+		snprintf (buf, sizeof (buf), "%" PRId32, _transport_frame);
+		node->add_property ("transport-frame", buf);
 
 		if (session_dirs.size() > 1) {
 
@@ -1164,6 +1171,16 @@
 				return -1;
 			}
 		}
+	}
+
+	if ((prop = node.property (X_("record-enabled"))) != 0) {
+		if (prop->value () == "1") {
+			maybe_enable_record ();
+		}
+	}
+
+	if ((prop = node.property (X_("transport-frame"))) != 0) {
+		_transport_frame = atoi (prop->value ());
 	}
 
 	setup_raid_path(_path);
