Index: deskbar/handlers/gdmactions.py
===================================================================
--- deskbar/handlers/gdmactions.py	(revision 1842)
+++ deskbar/handlers/gdmactions.py	(working copy)
@@ -315,3 +315,4 @@
         matches = self.indexer.look_up(query)
         self.set_priority_for_matches( matches )
         self._emit_query_ready(query, matches )
+        self._emit_finished()
Index: deskbar/handlers/programs.py
===================================================================
--- deskbar/handlers/programs.py	(revision 1842)
+++ deskbar/handlers/programs.py	(working copy)
@@ -109,6 +109,7 @@
         if self._match != None:
             self._match.set_priority( self.get_priority() + get_priority_for_name(qstring, self._match._desktop.get_string("Exec")) )
             self._emit_query_ready(qstring, [self._match] )
+            self._emit_finished()
             
     @staticmethod
     def desktop_file_exists(desktop):
@@ -272,6 +273,7 @@
         result += self.query_desktop_programs(query)
         self.set_priority_for_matches(result)
         self._emit_query_ready(query, result )
+        self._emit_finished()
         
     def query_path_programs(self, query):
         program = query.split(" ")[0]
Index: deskbar/handlers/templates.py
===================================================================
--- deskbar/handlers/templates.py	(revision 1842)
+++ deskbar/handlers/templates.py	(working copy)
@@ -198,4 +198,5 @@
         matches = self.indexer.look_up(query)
         self.set_priority_for_matches(matches)
         self._emit_query_ready(query, matches)
+        self._emit_finished()
 
Index: deskbar/handlers/history.py
===================================================================
--- deskbar/handlers/history.py	(revision 1842)
+++ deskbar/handlers/history.py	(working copy)
@@ -58,3 +58,4 @@
                 priority = inc_priority (priority)
         
         self._emit_query_ready(query, result )
+        self._emit_finished()
Index: deskbar/handlers/files.py
===================================================================
--- deskbar/handlers/files.py	(revision 1842)
+++ deskbar/handlers/files.py	(working copy)
@@ -117,6 +117,7 @@
                 result.append (vol_match)
         
         self._emit_query_ready(query, result )
+        self._emit_finished()
     
     def _query_filefolder(self, query, is_file):
         completions, prefix, relative = filesystem_possible_completions(query, is_file)
Index: deskbar/handlers/beagle-static.py
===================================================================
--- deskbar/handlers/beagle-static.py	(revision 1842)
+++ deskbar/handlers/beagle-static.py	(working copy)
@@ -44,6 +44,7 @@
                 
     def query(self, query):
         self._emit_query_ready(query, [BeagleMatch(name=query, priority=self.get_priority())] )
+        self._emit_finished()
     
     @staticmethod
     def has_requirements():
Index: deskbar/handlers/mozilla.py
===================================================================
--- deskbar/handlers/mozilla.py	(revision 1842)
+++ deskbar/handlers/mozilla.py	(working copy)
@@ -158,6 +158,7 @@
             matches = self._bookmarks.look_up(query)[:deskbar.DEFAULT_RESULTS_PER_HANDLER]
         self.set_priority_for_matches( matches )
         self._emit_query_ready(query, matches )
+        self._emit_finished()
     
     def query_smart_bookmarks(self, query, max):
         # if one of the smart bookmarks' shortcuts matches as a prefix,
@@ -236,10 +237,13 @@
             for s in self._smart_bookmarks:
                 if s.get_name() == PRIMARY_SEARCH_ENGINE:
                     self._emit_query_ready(query, [s] )
+                    self._emit_finished()
                     return
             self._emit_query_ready(query, self._smart_bookmarks )
+            self._emit_finished()
         else:
             self._emit_query_ready(query, self._smart_bookmarks )
+            self._emit_finished()
     
     def has_config(self):
         return True
@@ -770,6 +774,7 @@
         matches = self._indexer.look_up(query)[:deskbar.DEFAULT_RESULTS_PER_HANDLER]
         self.set_priority_for_matches( matches )
         self._emit_query_ready(query, matches )
+        self._emit_finished()
         
     @staticmethod
     def has_requirements():
Index: deskbar/handlers/tomboy.py
===================================================================
--- deskbar/handlers/tomboy.py	(revision 1842)
+++ deskbar/handlers/tomboy.py	(working copy)
@@ -158,12 +158,16 @@
 			case = text[0].capitalize() + text[1:]
 			if tomboy().FindNote(case) == '':
 				self._emit_query_ready( text, [TomboyCreateNoteMatch(case)] )
+				self._emit_finished()
 			# Search for the note (not case-sensitive)
 			# The query text needs to be lowercase, for reasons I do not fathom
 			tomboy().SearchNotes( text.lower(), dbus.Boolean(False), 
 				# A lambda, because otherwise the handler won't get the query text
 				reply_handler=lambda notes: self.handle_searchnotes( text, notes ),
 				error_handler=self.handle_dbus_error )
+			self._emit_finished()
+		self._emit_finished()
+				
 	
 	@staticmethod
 	def has_requirements():
Index: deskbar/handlers/beagle-live.py
===================================================================
--- deskbar/handlers/beagle-live.py	(revision 1842)
+++ deskbar/handlers/beagle-live.py	(working copy)
@@ -195,8 +195,27 @@
         
     def get_hash(self):
         return self._complete_uri
+
+class BeagleSearchAction(OpenWithApplicationAction):
+    def __init__(self, name, term, verb):
+    	OpenWithApplicationAction.__init__(self, name, "beagle-search", [term])
+    	self._verb = verb
+
+    def get_verb(self):
+    	return self._verb
     
 ### ===== End: Actions ===== ###
+
+class BeagleSearchMatch(deskbar.interfaces.Match):
+    def __init__(self, term, verb="", **args):
+    	deskbar.interfaces.Match.__init__(self, name=term, icon= "system-search", category="actions", **args)
+    	self.verb = verb
+    	self.term = term
+    	self.add_action( BeagleSearchAction("Beagle Search", term, verb) )
+    
+    def get_hash(self, text=None):
+    	return "beagle-search "+self.term
+    	
         
 class BeagleLiveMatch (deskbar.interfaces.Match):
     def __init__(self, result=None, **args):
@@ -283,6 +302,7 @@
         # a new key in inserted and it isn't removed
         # therefore, dict is getting bigger and bigger
         self.counter = {}
+        self.beagle_search_match = False
         self.__lock = threading.Lock()
         
     def initialize (self):
@@ -297,6 +317,7 @@
         self.beagle_query.add_text(qstring)
         self.beagle_query.connect("hits-added", self.hits_added, qstring, MAX_RESULTS)
         self.beagle.send_request_async(self.beagle_query)
+        self._emit_finished()
        
     def hits_added(self, query, response, qstring, qmax):
         hit_matches = []
@@ -368,6 +389,11 @@
             self.counter[qstring][hit_type] = 0
 
         if self.counter[qstring][hit_type] >= qmax:
+            if( not self.beagle_search_match ):
+            	self.beagle_search_match = True
+            	match = BeagleSearchMatch(qstring, _("Aditional results of %s with Beagle") % "<b>%(text)s</b>")
+            	self._emit_query_ready(qstring, [match])
+            	return match
             return
             
         hit_type_data = TYPES[hit_type]
Index: deskbar/handlers/epiphany.py
===================================================================
--- deskbar/handlers/epiphany.py	(revision 1842)
+++ deskbar/handlers/epiphany.py	(working copy)
@@ -70,6 +70,7 @@
         matches = bookmarks.look_up(query)[:deskbar.DEFAULT_RESULTS_PER_HANDLER]
         self.set_priority_for_matches( matches )
         self._emit_query_ready(query, matches )
+        self._emit_finished()
         
     @staticmethod
     def has_requirements():
@@ -109,12 +110,14 @@
                 b = shortcuts_to_smart_bookmarks_map[prefix]
                 text = query[x+1:]
                 self._emit_query_ready(query, [BrowserSmartMatch(b.get_name(), b.url, prefix, b, icon=b._icon, priority=self.get_priority())] )
+                self._emit_finished()
                 return
             except KeyError:
                 # Probably from the b = ... line.  Getting here
                 # means that there is no such shortcut.
                 pass
         self._emit_query_ready(query, smart_bookmarks)
+        self._emit_finished()
     def show_config(self, parent):
         on_customize_search_shortcuts(smart_bookmarks, shortcuts_to_smart_bookmarks_map)
         
@@ -152,6 +155,7 @@
         matches = self._history.look_up(query)[:deskbar.DEFAULT_RESULTS_PER_HANDLER]
         self.set_priority_for_matches( matches )
         self._emit_query_ready(query, matches )
+        self._emit_finished()
         
 class EpiphanyBookmarksParser(xml.sax.ContentHandler):
     def __init__(self, handler, cache):
Index: deskbar/handlers/desklicious.py
===================================================================
--- deskbar/handlers/desklicious.py	(revision 1842)
+++ deskbar/handlers/desklicious.py	(working copy)
@@ -72,6 +72,7 @@
         LOGGER.info('Returning del.icio.us result')
         self.set_priority_for_matches( posts )
         self._emit_query_ready(tag, posts )
+        self._emit_finished()
         
     def has_config(self):
         return True
Index: deskbar/handlers/iswitch-window.py
===================================================================
--- deskbar/handlers/iswitch-window.py	(revision 1842)
+++ deskbar/handlers/iswitch-window.py	(working copy)
@@ -68,3 +68,4 @@
                                 break
 
         self._emit_query_ready(query, results )
+        self._emit_finished()
Index: deskbar/handlers/yahoo.py
===================================================================
--- deskbar/handlers/yahoo.py	(revision 1842)
+++ deskbar/handlers/yahoo.py	(working copy)
@@ -62,6 +62,7 @@
             stream = urllib.urlopen(url, proxies=get_proxy())
         except IOError, msg:
             LOGGER.error("Could not open URL %s: %s, %s" % (url, msg[0], msg[1]))
+            self._emit_finished()
             return
         
         dom = xml.dom.minidom.parse(stream)
@@ -83,3 +84,4 @@
         #self.check_query_changed ()
         LOGGER.info("Returning yahoo answer for: "+qstring)
         self._emit_query_ready(qstring, matches )
+        self._emit_finished()
Index: deskbar/handlers/recent.py
===================================================================
--- deskbar/handlers/recent.py	(revision 1842)
+++ deskbar/handlers/recent.py	(working copy)
@@ -50,10 +50,11 @@
             if not recent.exists(): continue
             result.append (RecentMatch (recent, category="files", priority=self.get_priority()))
         self._emit_query_ready(query, result )
+        self._emit_finished()
             
     @staticmethod
     def has_requirements():
         if gtk.pygtk_version >= (2,9,0):
             return True
         RecentHandler.INSTRUCTIONS = _("This handler requires a more recent gtk version (2.9.0 or newer).")
-        return False
\ No newline at end of file
+        return False
Index: deskbar/handlers/web_address.py
===================================================================
--- deskbar/handlers/web_address.py	(revision 1842)
+++ deskbar/handlers/web_address.py	(working copy)
@@ -52,6 +52,7 @@
         result = self.query_http(query)
         result += self.query_mail(query)
         self._emit_query_ready(query, result )
+        self._emit_finished()
         
     def query_http(self, query):
         match = AUTH_REGEX.match(query)
Index: deskbar/handlers/evolution.py
===================================================================
--- deskbar/handlers/evolution.py	(revision 1842)
+++ deskbar/handlers/evolution.py	(working copy)
@@ -58,6 +58,7 @@
                 continue            
             matches.append(EvolutionMatch(name, email, uri, pixbuf, priority=self.get_priority()))
         self._emit_query_ready(query, matches )
+        self._emit_finished()
         
     @staticmethod
     def has_requirements():
Index: deskbar/interfaces/Module.py
===================================================================
--- deskbar/interfaces/Module.py	(revision 1842)
+++ deskbar/interfaces/Module.py	(working copy)
@@ -6,6 +6,7 @@
     
     __gsignals__ = {
         "query-ready" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [gobject.TYPE_STRING, gobject.TYPE_PYOBJECT]),
+        "finished" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, []),
     }
     
     INFOS = {'icon': '', 'name': '', 'description': '', 'version': '1.0.0.0', 'categories': {}}
@@ -23,6 +24,11 @@
         self.emit ("query-ready", query, matches)
         return False
     
+    def _emit_finished(self):
+    	"""Idle handler to emit a 'finished' signal to the main loop."""
+    	self.emit("finished")
+    	return False
+    
     def is_enabled(self):
         """
         Whether the module is enabled
@@ -131,4 +137,4 @@
         Whether all requirements are met to use this module
         """
         return True
-    
\ No newline at end of file
+    
