=== modified file 'meldapp.py'
--- a/meld/meldapp.py
+++ b/meld/meldapp.py
@@ -30,6 +30,57 @@
 version = "1.5.2"
 
 
+################################################################################
+#
+# DbusHandler
+#
+################################################################################
+# dbus check Cf http://mail.gnome.org/archives/meld-list/2011-October/msg00008.html
+dbus_available = False
+try:
+    import dbus
+    if getattr(dbus, 'version', (0,0,0)) >= (0,41,0):
+        import sys
+        import dbus.glib
+        import dbus.service
+        dbus_available = True
+        
+        class DBusApp:
+            def register(self, app):
+                bus = dbus.SessionBus()
+                bus_name = dbus.service.BusName('net.sf.meld', bus=bus)
+                self.remote_instance = DBusProvider(bus_name, app)
+                
+            def running_already(self):
+                bus = dbus.SessionBus()
+                proxy = bus.get_object('org.freedesktop.DBus',
+                                       '/org/freedesktop/DBus')
+                iface = dbus.Interface(proxy, 'org.freedesktop.DBus')
+                names = iface.ListNames()
+                if 'net.sf.meld' in names:
+                    return True
+                return False        
+            
+            def remote_open_paths(self, args, auto_compare):
+                bus = dbus.SessionBus()
+                proxy = bus.get_object('net.sf.meld', '/net/sf/meld')
+                iface = dbus.Interface(proxy, 'net.sf.meld')
+                iface.open_paths(args, auto_compare)
+
+        class DBusProvider(dbus.service.Object):
+            def __init__(self, bus_name, app, object_path='/net/sf/meld'):
+                dbus.service.Object.__init__(self, bus_name, object_path)
+                self.app = app
+                
+            @dbus.service.method('net.sf.meld')
+            def open_paths(self, args, auto_compare):
+                self.app.window.open_paths(args, auto_compare)        
+
+# No dbus support
+except ImportError:
+    pass
+
+
 class FilterEntry(object):
 
     __slots__ = ("label", "active", "filter", "filter_string")
@@ -164,6 +215,8 @@
             version="%prog " + version)
         parser.add_option("-L", "--label", action="append", default=[],
             help=_("Set label to use instead of file name"))
+        parser.add_option("-n", "--newtab", action="store_true", default=False,
+            help=_("Open a new tab in already running instance"))
         parser.add_option("-a", "--auto-compare", action="store_true", default=False,
             help=_("Automatically compare all differing files on startup"))
         parser.add_option("-u", "--unified", action="store_true",
@@ -185,7 +238,29 @@
                 parser.error(_("can't compare more than three directories"))
             self.window.open_paths(files)
 
+        # dbus handling
+        if options.newtab:
+            if not dbus_available:
+                print _("no dbus support, thus option -n --newtab not available.")
+            else:
+            # successfull import dbus
+                running_already = False
+                dbus_app = DBusApp()
+                # check any already registered instance
+                running_already = dbus_app.running_already()
+                if not running_already:
+                # dbus register it
+                    dbus_app.register(self)
+                else:
+                # use existing instance
+                    tab = dbus_app.remote_open_paths(args, options.auto_compare)
+                    self.parse_args_tab(tab, options)
+                    sys.exit(0)
+                    
         tab = self.window.open_paths(args, options.auto_compare)
+        self.parse_args_tab(tab, options)
+
+    def parse_args_tab(self, tab, options):
         if tab:
             tab.set_labels(options.label)
 
