end
 
 begin
+  extend CanSpawnComposeMode
   Redwood::start
   Index.load
 
         end
 
       when :compose
-        to = BufferManager.ask_for_contacts(:people, "To: ") or next
-        cc = BufferManager.ask_for_contacts(:people, "Cc: ") or next if $config[:ask_for_cc]
-        bcc = BufferManager.ask_for_contacts(:people, "Bcc: ") or next if $config[:ask_for_bcc]
-
-        mode = ComposeMode.new :to => to, :cc => cc, :bcc => bcc
-        bm.spawn "New Message", mode
-        mode.edit_message
+        spawn_compose_mode
       when :poll
         reporting_thread { PollManager.poll }
       when :recall_draft
 
 module Redwood
 
+module CanSpawnComposeMode
+  def spawn_compose_mode opts={}
+    to = opts[:to] || BufferManager.ask_for_contacts(:people, "To: ") or return
+    cc = opts[:cc] || BufferManager.ask_for_contacts(:people, "Cc: ") or return if $config[:ask_for_cc]
+    bcc = opts[:bcc] || BufferManager.ask_for_contacts(:people, "Bcc: ") or return if $config[:ask_for_bcc]
+    
+    mode = ComposeMode.new :to => to, :cc => cc, :bcc => bcc
+    BufferManager.spawn "New Message", mode
+    mode.edit_message
+  end
+end
+
 class ComposeMode < EditMessageMode
   def initialize opts={}
     header = {
 
 module Redwood
 
 class ThreadViewMode < LineCursorMode
+  include CanSpawnComposeMode
+
   ## this holds all info we need to lay out a message
   class MessageLayout
     attr_accessor :top, :bot, :prev, :next, :depth, :width, :state, :color, :star_color, :orig_new
 
   def compose
     p = @person_lines[curpos]
-    mode =
-      if p
-        ComposeMode.new :to => [p]
-      else
-        ComposeMode.new
-      end
-    BufferManager.spawn "Compose message", mode
-    mode.edit_message
+    if p
+      spawn_compose_mode :to => [p]
+    else
+      spawn_compose_mode
+    end
   end    
 
   def edit_labels