diff --git a/framework/subsystems/ogsmd/modems/singleline/channel.py b/framework/subsystems/ogsmd/modems/singleline/channel.py
index d43772d..dd93a1f 100644
--- a/framework/subsystems/ogsmd/modems/singleline/channel.py
+++ b/framework/subsystems/ogsmd/modems/singleline/channel.py
@@ -12,6 +12,11 @@ Module: channel
 """
 
 from ogsmd.modems.abstract.channel import AbstractModemChannel
+import itertools
+import select
+import gobject
+import logging
+logger=logging.getLogger('ogsmd')
 
 #=========================================================================#
 class SingleLineChannel( AbstractModemChannel ):
@@ -21,6 +26,64 @@ class SingleLineChannel( AbstractModemChannel ):
             kwargs["timeout"] = 60*60
         AbstractModemChannel.__init__( self, *args, **kwargs )
 
+    def _hookLowLevelInit( self ):
+        """
+        Low level initialization of channel. (copied from the calypso modem)
+
+        This is actually an ugly hack which is unfortunately
+        necessary since the qualcomm msm7200 modem obviously has problems
+        wrt. to initialization (swallowing first bunch of commands now and then...)
+        To work around this, we send 'ATE0\r\n' until we actually get an
+        'OK' from the modem. We try this for 5 times, then we reopen
+        the serial line. If after 10 times we still have no response,
+        we assume that the modem is broken and fail.
+        """
+        for i in itertools.count():
+            logger.debug( "(modem init... try #%d)", i+1 )
+            select.select( [], [self.serial.fd], [], 0.5 )
+            self.serial.write( "ATE0Q0V1\r\n" )
+            r, w, x = select.select( [self.serial.fd], [], [], 0.5 )
+            if r:
+                try:
+                    buf = self.serial.inWaiting()
+                # FIXME remove catchall here
+                except:
+                    self.serial.close()
+                    path = self.pathfactory( self.name )
+                    if not path: # path is None or ""
+                        return False
+                    self.serial.port = str( path )
+                    self.serial.open()
+                    buf = self.serial.inWaiting()
+                ok = self.serial.read(buf).strip()
+                logger.debug( "read: %s", ok )
+                if "OK" in ok or "AT" in ok:
+                    break
+            logger.debug( "(modem not responding)" )
+            if i == 5:
+                logger.debug( "(reopening modem)" )
+                self.serial.close()
+                path = self.pathfactory( self.name )
+                if not path: # path is None or ""
+                    return False
+                self.serial.port = str( path )
+                self.serial.open()
+
+            if i == 10:
+                logger.warning( "(can't read from modem. giving up)" )
+                self.serial.close()
+                return False
+        logger.info( "%s: responding OK" % self )
+        self.serial.flushInput()
+
+        return True
+
+    #
+    # TI Calypso has a deep sleep mode, effective after 8 seconds,
+    # from which we need to wake up by sending a special character
+    # (plus a small waiting time) - delay can't do no harm on the msm7xxxx
+    #
+
     def _populateCommands( self ):
         """
         Populate the command queues to be sent on modem state changes.
@@ -29,6 +92,7 @@ class SingleLineChannel( AbstractModemChannel ):
         AbstractModemChannel._populateCommands( self ) # prepopulated
 
         c = self._commands["init"]
+	c.remove( 'Z' )
         # reenable unsolicited responses, we don't have a seperate channel
         # so we need to process them here as well
         c.append( '+CLIP=1' ) # calling line identification presentation enable
diff --git a/framework/subsystems/ogsmd/modems/singleline/modem.py b/framework/subsystems/ogsmd/modems/singleline/modem.py
index 737a0f4..81af865 100644
--- a/framework/subsystems/ogsmd/modems/singleline/modem.py
+++ b/framework/subsystems/ogsmd/modems/singleline/modem.py
@@ -39,4 +39,4 @@ class SingleLine( AbstractModem ):
             return self._channels["SINGLE"]
 
     def portfactory( self, name ):
-        return config.getValue( "ogsmd", "serial", default="/dev/ttySAC0" )
+        return config.getValue( "ogsmd", "serial", default="/dev/smd0" )
