diff --git a/bin/ipmi_debug.py b/bin/ipmi_debug.py
index 300756c..0fc6a86 100755
--- a/bin/ipmi_debug.py
+++ b/bin/ipmi_debug.py
@@ -14,27 +14,43 @@
 DBUS_NAME = 'org.openbmc.HostIpmi'
 OBJ_NAME = '/org/openbmc/HostIpmi/1'
 
-def print_packet(seq, netfn, cmd, data):
-    print 'seq:   0x%02x\nnetfn: 0x%02x\ncmd:   0x%02x\ndata:  [%s]' % (
-            seq, netfn, cmd,
-            ", ".join(['0x%02x' % x for x in data]))
+def header(seq, netfn, lun, cmd):
+    return (
+        'seq:   0x%02x\nnetfn: 0x%02x\n\nlun: 0x%02d\ncmd:   0x%02x\n') % (
+            seq, netfn, lun, cmd)
 
 
+def print_request(seq, netfn, lun, cmd, data):
+    str = header(seq, netfn, lun, cmd)
+    str += 'data:  [%s]' % ', '.join(['0x%02x' % x for x in data])
+    print str
+
+def print_response(seq, netfn, lun, cmd, cc, data):
+    str = header(seq, netfn, lun, cmd)
+    str += 'cc:    0x%02x\ndata:  [%s]' % (
+                cc, ', '.join(['0x%02x' % x for x in data])
+            )
+    print str
+
 class IpmiDebug(dbus.service.Object):
     def __init__(self,bus,name):
         dbus.service.Object.__init__(self,bus,name)
 
-    @dbus.service.signal(DBUS_NAME, "yyyay")
-    def ReceivedMessage(self, seq, netfn, cmd, data):
+    @dbus.service.signal(DBUS_NAME, "yyyyay")
+    def ReceivedMessage(self, seq, netfn, lun, cmd, data):
         print "IPMI packet from host:"
-        print_packet(seq, netfn, cmd, data)
+        print_request(seq, netfn, lun, cmd, data)
 
-    @dbus.service.method(DBUS_NAME, "yyyay", "x")
-    def sendMessage(self, seq, netfn, cmd, data):
+    @dbus.service.method(DBUS_NAME, "yyyyyay", "x")
+    def sendMessage(self, seq, netfn, lun, cmd, ccode, data):
         print "IPMI packet sent to host:"
-        print_packet(seq, netfn, cmd, data)
+        print_response(seq, netfn, lun, cmd, ccode, data)
         return 0
 
+    @dbus.service.method(DBUS_NAME)
+    def setAttention(self):
+        print "IPMI SMS_ATN set"
+
 class ConsoleReader(object):
     def __init__(self, ipmi_obj):
         self.buffer = ''
@@ -65,7 +81,7 @@
         except ValueError:
             return
         self.seq += 1
-        self.ipmi_obj.ReceivedMessage(self.seq, data[0], data[1], data[2:])
+        self.ipmi_obj.ReceivedMessage(self.seq, data[0], 0, data[1], data[2:])
 
 def main():
     dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
@@ -75,8 +91,8 @@
     mainloop = gobject.MainLoop()
     r = ConsoleReader(obj)
 
-    print ("Enter IPMI packet as hex values. First two bytes will be used"
-            "as netfn and cmd")
+    print ("Enter IPMI packet as hex values. First three bytes will be used"
+            "as netfn and cmd.\nlun will be zero.")
     mainloop.run()
 
 if __name__ == '__main__':
