--- /dev/null
+#compdef dbus
+
+# Completion for dbus python client
+# http://code.google.com/p/dbus-tools/source/browse/trunk/_dbus
+
+local count="$#words"
+local opts=0
+
+for word in $words[2,-2] ; do
+ case $word in
+ -*)
+ (( opts += 1 ))
+ ;;
+ *)
+ break
+ ;;
+ esac
+done
+
+if (( opts == count - 2 )) ; then
+ if [[ $words[-1] = -* ]] ; then
+ _arguments -C \
+ {-a,--all}'[Equivalent to -e -s -t -u]' \
+ {-e,--empty}'[Also show empty services/objects]' \
+ {-h,--help}'[Print help]' \
+ {-s,--signals}'[Print signals]' \
+ {-t,--activatables}'[Also show activatables services]' \
+ {-u,--unnamed}'[Also show unnamed services]' \
+ {-y,--system-bus}'[Use system bus]'
+ return
+ fi
+fi
+
+case $((count - 2 - $opts)) in
+ 0)
+ _message "service"
+ ;;
+ 1)
+ _message "object"
+ ;;
+ 2)
+ _message "method"
+ ;;
+ *)
+ _wanted file expl "`dbus -c $words[2,-2]`" _files
+ return
+esac
+
+compadd `dbus -c $words[2,-2]`
+
+return