diff --git a/examples/scratchnet.py b/examples/scratchnet.py
index 84c74bedb3dfd900621bafa0d199f1832eb1f068..030d0dde043fafd7d61bebe30c218492cf37137f 100755
--- a/examples/scratchnet.py
+++ b/examples/scratchnet.py
@@ -11,44 +11,44 @@
 from mininet.net import init
 from mininet.node import Node
 from mininet.util import createLink
-from mininet.log import info
-
-# print out info() messages, including cmdPrint
-logging.LOGLEVELDEFAULT = logging.INFO
+from mininet.log import lg, info
 
 def scratchNet( cname='controller', cargs='ptcp:'):
-    # Create Network
-    print "*** creating Nodes"
+
+    info( "*** Creating nodes\n" )
     controller = Node( 'c0', inNamespace=False )
     switch = Node( 's0', inNamespace=False )
     h0 = Node( 'h0' )
     h1 = Node( 'h1' )
-    print "*** creating links"
+    
+    info( "*** Creating links\n" )
     createLink( node1=h0, port1=0, node2=switch, port2=0 )
     createLink( node1=h1, port1=0, node2=switch, port2=1 )
-    # Configure hosts
-    print "*** configuring hosts"
+
+    info( "*** Configuring hosts\n" )
     h0.setIP( h0.intfs[ 0 ], '192.168.123.1', '/24' )
     h1.setIP( h1.intfs[ 0 ], '192.168.123.2', '/24' )
-    print h0
-    print h1
-    # Start network using kernel datapath
-    controller.cmdPrint( cname + ' ' + cargs + '&' )
-    switch.cmdPrint( 'dpctl deldp nl:0' )
-    switch.cmdPrint( 'dpctl adddp nl:0' )
+    info( str( h0 ) + '\n' )
+    info( str( h1 ) + '\n' )
+    
+    info( "*** Starting network using kernel datapath\n" )
+    controller.cmd( cname + ' ' + cargs + '&' )
+    switch.cmd( 'dpctl deldp nl:0' )
+    switch.cmd( 'dpctl adddp nl:0' )
     for intf in switch.intfs.values():
-      switch.cmdPrint( 'dpctl addif nl:0 ' + intf )
-    switch.cmdPrint( 'ofprotocol nl:0 tcp:localhost &')
-    # Run test
-    print h0.cmd( 'ping -c1 ' + h1.IP() )
-    # Stop network
-    controller.cmdPrint( 'kill %' + cname)
-    switch.cmdPrint( 'dpctl deldp nl:0' )
-    switch.cmdPrint( 'kill %ofprotocol' )
-    switch.stop()
-    controller.stop()
+      switch.cmd( 'dpctl addif nl:0 ' + intf )
+    switch.cmd( 'ofprotocol nl:0 tcp:localhost &')
+    
+    info( "*** Running test\n" )
+    h0.cmdPrint( 'ping -c1 ' + h1.IP() )
+    
+    info( "*** Stopping network\n" )
+    controller.cmd( 'kill %' + cname)
+    switch.cmd( 'dpctl deldp nl:0' )
+    switch.cmd( 'kill %ofprotocol' )
    
 if __name__ == '__main__':
-    info( '*** Scratch network demo\n' )
-    init()   
+    info( '*** Scratch network demo (kernel datapath)\n' )
+    init()
+    lg.setLogLevel( 'info' )
     scratchNet()
diff --git a/examples/scratchnetuser.py b/examples/scratchnetuser.py
index a321cd5ef34e09f616f5aff987536e382820c836..345a2af0e2e1c75909ffd6b66a08a8ef2784aebc 100755
--- a/examples/scratchnetuser.py
+++ b/examples/scratchnetuser.py
@@ -8,40 +8,56 @@
 This version uses the user datapath.
 """
 
-from mininet.mininet import init, Node, createLink
+from mininet.net import init
+from mininet.node import Node
+from mininet.util import createLink
+from mininet.log import lg, info
 
 def scratchNetUser( cname='controller', cargs='ptcp:'):
-   # Create Network
-   # It's not strictly necessary for the controller and switches
-   # to be in separate namespaces. For performance, they probably
-   # should be in the root namespace. However, it's interesting to
-   # see how they could work even if they are in separate namespaces.
-   controller = Node( 'c0' )
-   switch = Node( 's0')
-   h0 = Node( 'h0' )
-   h1 = Node( 'h1' )
-   createLink( controller, switch )
-   createLink( h0, switch )
-   createLink( h1, switch )
-   # Configure control network
-   controller.setIP( controller.intfs[ 0 ], '10.0.123.1', '/24' )
-   switch.setIP( switch.intfs[ 0 ], '10.0.123.2', '/24' )
-   # Configure hosts
-   h0.setIP( h0.intfs[ 0 ], '192.168.123.1', '/24' )
-   h1.setIP( h1.intfs[ 0 ], '192.168.123.2', '/24' )
-   # Start network using user datapath
-   controller.cmdPrint( cname + ' ' + cargs + '&' )
-   switch.cmdPrint( 'ifconfig lo 127.0.0.1' )
-   switch.cmdPrint( 'ofdatapath -i ' + ','.join( switch.intfs[ 1: ]) 
-      + ' ptcp: &' )
-   switch.cmdPrint( 'ofprotocol tcp:' + controller.IP() + ' tcp:localhost &' )
-   # Run test
-   h0.cmdPrint( 'ping -c1 ' + h1.IP() )
-   # Stop network
-   controller.cmdPrint( 'kill %' + cname)
-   switch.cmdPrint( 'kill %ofdatapath' )
-   switch.cmdPrint( 'kill %ofprotocol' )
+    # Create Network
+    # It's not strictly necessary for the controller and switches
+    # to be in separate namespaces. For performance, they probably
+    # should be in the root namespace. However, it's interesting to
+    # see how they could work even if they are in separate namespaces.
+
+    info( '*** Creating Network\n' )
+    controller = Node( 'c0' )
+    switch = Node( 's0')
+    h0 = Node( 'h0' )
+    h1 = Node( 'h1' )
+    createLink( controller, 0, switch, 0 )
+    createLink( h0, 0, switch, 1 )
+    createLink( h1, 0, switch, 2 )
+
+    info( '*** Configuring control network\n' )
+    controller.setIP( controller.intfs[ 0 ], '10.0.123.1', '/24' )
+    switch.setIP( switch.intfs[ 0 ], '10.0.123.2', '/24' )
+    
+    info( '*** Configuring hosts\n' )
+    h0.setIP( h0.intfs[ 0 ], '192.168.123.1', '/24' )
+    h1.setIP( h1.intfs[ 0 ], '192.168.123.2', '/24' )
+    
+    info( '*** Network state:\n' )
+    for node in controller, switch, h0, h1:
+        info( str( node ) + '\n' )
+        
+    info( '*** Starting controller and user datapath\n' )
+    controller.cmd( cname + ' ' + cargs + '&' )
+    switch.cmd( 'ifconfig lo 127.0.0.1' )
+    intfs = [ switch.intfs[ port ] for port in (1, 2) ]
+    switch.cmd( 'ofdatapath -i ' + ','.join( intfs ) + ' ptcp: &' )
+    switch.cmd( 'ofprotocol tcp:' + controller.IP() + ' tcp:localhost &' )
+
+    info( '*** Running test\n' )
+    h0.cmdPrint( 'ping -c1 ' + h1.IP() )
+
+    info( '*** Stopping network\n' )
+    controller.cmd( 'kill %' + cname )
+    switch.cmd( 'kill %ofdatapath' )
+    switch.cmd( 'kill %ofprotocol' )
    
 if __name__ == '__main__':
-   init()   
-   scratchNetUser()
+    info( '*** Scratch network demo (user datapath)\n' )
+    init()   
+    lg.setLogLevel( 'info' )
+    scratchNetUser()
diff --git a/mininet/node.py b/mininet/node.py
index eb60b85a0086fd1dae12dc795774b27859de5a09..99935c6f2c0e7f64ea5f556cb8db8b3b6ca7352e 100644
--- a/mininet/node.py
+++ b/mininet/node.py
@@ -54,7 +54,7 @@ class Node( object ):
     def __init__( self, name, inNamespace=True ):
         self.name = name
         closeFds = False # speed vs. memory use
-        # xpgEcho is needed so we can echo our sentinel in sendCmd
+        # xpg_echo is needed so we can echo our sentinel in sendCmd
         cmd = [ '/bin/bash', '-O', 'xpg_echo' ]
         self.inNamespace = inNamespace
         if self.inNamespace:
@@ -170,7 +170,7 @@ def cmd( self, cmd, verbose=False ):
         """Send a command, wait for output, and return it.
            cmd: string"""
         log = info if verbose else debug
-        log( '*** %s : %s', self.name, cmd )
+        log( '*** %s : %s\n' % ( self.name, cmd ) )
         self.sendCmd( cmd )
         return self.waitOutput( verbose )
 
@@ -261,9 +261,9 @@ def intfIsUp( self, port ):
     # Other methods
     def __str__( self ):
         result = self.name + ':'
-        result += ' IP=' + repr( self.IP() )
+        result += ' IP=' + str( self.IP() )
         result += ' intfs=' + ','.join( sorted( self.intfs.values() ) )
-        result += ' waiting=' + repr( self.waiting )
+        result += ' waiting=' + str( self.waiting )
         return result