diff --git a/selftest/sms_test.py b/selftest/sms_test.py
index 25fb551..ce81c3e 100755
--- a/selftest/sms_test.py
+++ b/selftest/sms_test.py
@@ -1,20 +1,20 @@
 #!/usr/bin/env python3
 
 import _prep
-from osmo_gsm_tester import ofono_client
+from osmo_gsm_tester import sms
 
-print(ofono_client.Sms())
-print(ofono_client.Sms())
-print(ofono_client.Sms())
-sms = ofono_client.Sms('123', '456')
-print(str(sms))
+print(sms.Sms())
+print(sms.Sms())
+print(sms.Sms())
+msg = sms.Sms('123', '456')
+print(str(msg))
 
-sms2 = ofono_client.Sms('123', '456')
-print(str(sms2))
-assert sms != sms2
+msg2 = sms.Sms('123', '456')
+print(str(msg2))
+assert msg != msg2
 
-sms2.msg = str(sms.msg)
-print(str(sms2))
-assert sms == sms2
+msg2.msg = str(msg.msg)
+print(str(msg2))
+assert msg == msg2
 
 # vim: expandtab tabstop=4 shiftwidth=4
diff --git a/src/osmo_gsm_tester/ofono_client.py b/src/osmo_gsm_tester/ofono_client.py
index 5494ec2..0525019 100644
--- a/src/osmo_gsm_tester/ofono_client.py
+++ b/src/osmo_gsm_tester/ofono_client.py
@@ -17,7 +17,7 @@
 # You should have received a copy of the GNU Affero General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-from . import log, test, util, event_loop
+from . import log, test, util, event_loop, sms
 
 from pydbus import SystemBus, Variant
 import time
@@ -338,20 +338,20 @@
             tokens.append('to ' + to_msisdn_or_modem.name())
         else:
             to_msisdn = str(to_msisdn_or_modem)
-        sms = Sms(self.msisdn, to_msisdn, 'from ' + self.name(), *tokens)
-        self.log('sending sms to MSISDN', to_msisdn, sms=sms)
+        msg = sms.Sms(self.msisdn, to_msisdn, 'from ' + self.name(), *tokens)
+        self.log('sending sms to MSISDN', to_msisdn, sms=msg)
         mm = self.dbus.interface(I_SMS)
-        mm.SendMessage(to_msisdn, str(sms))
-        return sms
+        mm.SendMessage(to_msisdn, str(msg))
+        return msg
 
     def _on_incoming_message(self, message, info):
         self.log('Incoming SMS:', repr(message))
         self.dbg(info=info)
         self.sms_received_list.append((message, info))
 
-    def sms_was_received(self, sms):
+    def sms_was_received(self, sms_obj):
         for msg, info in self.sms_received_list:
-            if sms.matches(msg):
+            if sms_obj.matches(msg):
                 self.log('SMS received as expected:', repr(msg))
                 self.dbg(info=info)
                 return True
@@ -364,32 +364,4 @@
     def log_info(self, *args, **kwargs):
         self.log(self.info(*args, **kwargs))
 
-class Sms:
-    _last_sms_idx = 0
-    msg = None
-
-    def __init__(self, from_msisdn=None, to_msisdn=None, *tokens):
-        Sms._last_sms_idx += 1
-        msgs = ['message nr. %d' % Sms._last_sms_idx]
-        msgs.extend(tokens)
-        if from_msisdn:
-            msgs.append('from %s' % from_msisdn)
-        if to_msisdn:
-            msgs.append('to %s' % to_msisdn)
-        self.msg = ', '.join(msgs)
-
-    def __str__(self):
-        return self.msg
-
-    def __repr__(self):
-        return repr(self.msg)
-
-    def __eq__(self, other):
-        if isinstance(other, Sms):
-            return self.msg == other.msg
-        return inself.msg == other
-
-    def matches(self, msg):
-        return self.msg == msg
-
 # vim: expandtab tabstop=4 shiftwidth=4
diff --git a/src/osmo_gsm_tester/sms.py b/src/osmo_gsm_tester/sms.py
new file mode 100644
index 0000000..64eca5a
--- /dev/null
+++ b/src/osmo_gsm_tester/sms.py
@@ -0,0 +1,48 @@
+# osmo_gsm_tester: DBUS client to talk to ofono
+#
+# Copyright (C) 2016-2017 by sysmocom - s.f.m.c. GmbH
+#
+# Author: Neels Hofmeyr <neels@hofmeyr.de>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+class Sms:
+    _last_sms_idx = 0
+    msg = None
+
+    def __init__(self, from_msisdn=None, to_msisdn=None, *tokens):
+        Sms._last_sms_idx += 1
+        msgs = ['message nr. %d' % Sms._last_sms_idx]
+        msgs.extend(tokens)
+        if from_msisdn:
+            msgs.append('from %s' % from_msisdn)
+        if to_msisdn:
+            msgs.append('to %s' % to_msisdn)
+        self.msg = ', '.join(msgs)
+
+    def __str__(self):
+        return self.msg
+
+    def __repr__(self):
+        return repr(self.msg)
+
+    def __eq__(self, other):
+        if isinstance(other, Sms):
+            return self.msg == other.msg
+        return inself.msg == other
+
+    def matches(self, msg):
+        return self.msg == msg
+
+# vim: expandtab tabstop=4 shiftwidth=4
