diff --git a/dbus/dbus-internals.c b/dbus/dbus-internals.c
index edf7de6..9d4ef8d 100644
--- a/dbus/dbus-internals.c
+++ b/dbus/dbus-internals.c
@@ -329,6 +329,41 @@ _dbus_verbose_init (void)
     }
 }
 
+#ifdef DBUS_WIN 
+#define DBUS_DIR_SEPARATOR '\\'
+#else
+#define DBUS_DIR_SEPARATOR '/'
+#endif
+
+/** 
+ remove source root from file path 
+ the source root is determined by 
+*/ 
+static char *_dbus_file_path_extract_elements_from_tail(const char *file,int level)
+{
+	static int prefix = -1;
+	char *p;
+
+	if (prefix == -1) 
+	  {
+	    char *p = file + strlen(file);
+        int i = 0;
+        prefix = 0;
+        for (;p >= file;p--)
+          {
+	        if (*p == DBUS_DIR_SEPARATOR)
+              {
+                  if (++i >= level) 
+                    {
+                      prefix = p-file+1;
+                      break;
+                    }
+             }
+          }
+      }
+	return file+prefix;
+}
+
 /**
  * Implementation of dbus_is_verbose() macro if built with verbose logging
  * enabled.
@@ -350,7 +385,14 @@ _dbus_is_verbose_real (void)
  * @param format printf-style format string.
  */
 void
+#ifdef __VA_ARGS__
+_dbus_verbose_real (const char *file, 
+				    const int line, 
+				    const char *function, 
+				    const char *format,
+#else
 _dbus_verbose_real (const char *format,
+#endif
                     ...)
 {
   va_list args;
@@ -382,17 +424,24 @@ _dbus_verbose_real (const char *format,
     need_pid = TRUE;
   else
     need_pid = FALSE;
-  
+
   va_start (args, format);
 #ifdef DBUS_USE_OUTPUT_DEBUG_STRING
   {
   char buf[1024];
   strcpy(buf,module_name);
+#ifdef __VA_ARGS__
+  vsprintf (buf+strlen(buf), "%s(%d):%s ",_dbus_file_path_extract_elements_from_tail(file,2),line,function);
+#endif
   vsprintf (buf+strlen(buf),format, args);
   va_end (args);
   OutputDebugString(buf);
   }
 #else
+#ifdef __VA_ARGS__
+  fprintf (stderr, "%s(%d):%s ",_dbus_file_path_extract_elements_from_tail(file,2),line,function);
+#endif
+
   vfprintf (stderr, format, args);
   va_end (args);
 
diff --git a/dbus/dbus-internals.h b/dbus/dbus-internals.h
index 8b5af8d..a79ee20 100644
--- a/dbus/dbus-internals.h
+++ b/dbus/dbus-internals.h
@@ -83,12 +83,18 @@ void _dbus_warn_check_failed  (const char *format,
 
 #ifdef DBUS_ENABLE_VERBOSE_MODE
 
+#ifdef __VA_ARGS__
+void _dbus_verbose_real       (const char *file, const int line, const char *function, 
+                               const char *format,...) _DBUS_GNUC_PRINTF (1, 2);
+#  define _dbus_verbose(fmt,...) _dbus_verbose_real( __FILE__,__LINE__,__FUNCTION__,fmt, ## __VA_ARGS__)
+#else
 void _dbus_verbose_real       (const char *format,
                                ...) _DBUS_GNUC_PRINTF (1, 2);
+#  define _dbus_verbose _dbus_verbose_real
+#endif
 void _dbus_verbose_reset_real (void);
 dbus_bool_t _dbus_is_verbose_real (void);
 
-#  define _dbus_verbose _dbus_verbose_real
 #  define _dbus_verbose_reset _dbus_verbose_reset_real
 #  define _dbus_is_verbose _dbus_is_verbose_real
 #else
