diff --git a/sms/SMSTest.st b/sms/SMSTest.st
new file mode 100644
index 0000000..6073858
--- /dev/null
+++ b/sms/SMSTest.st
@@ -0,0 +1,105 @@
+"
+ (C) 2012 by Holger Hans Peter Freyther
+ All Rights Reserved
+
+ 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 .
+"
+
+PackageLoader fileInPackage: #FakeBTS.
+
+FakeBTS.OpenBSCTest subclass: SMSTest [
+
+
+ SMSTest class >> cpDataRpData [
+ ^ #(
+ 16r09 16r01 16r35 16r01 16r2A 16r07 16r91 16r44
+ 16r77 16r58 16r10 16r06 16r50 16r00 16r2B 16r04
+ 16r04 16r81 16r32 16r24 16r00 16r00 16r80 16r21
+ 16r03 16r41 16r24 16r32 16r40 16r1F 16r41 16r26
+ 16r03 16r94 16r7D 16r56 16rA5 16r20 16r28 16rF2
+ 16rE9 16r2C 16r82 16r82 16rD2 16r22 16r48 16r58
+ 16r64 16r3E 16r9D 16r47 16r10 16rF5 16r09 16rAA
+ 16r4E 16r01) asByteArray.
+ ]
+
+ startTest [
+ "1. Connect to the BTS"
+ self createAndConnectBTS: '1801/0/0'.
+
+ self
+ testWrongSMSStart;
+ testCPTimeout.
+ ]
+
+ testWrongSMSStart [
+ | lchan |
+
+ "2. Get a LCHAN"
+ lchan := self requireAnyChannel.
+
+ "3. CP-DATA/RP-DATA PDU"
+ lchan sendGSM: self class cpDataRpData sapi: 3.
+
+ [
+ | msg |
+ "Read all messages until the end on SAPI=0. Ignore SAPI=3"
+ "If we send another SAPI=3 Release Indication we get a double
+ RF Channel Release from the NITB."
+ msg := GSM48MSG decode: lchan nextSapi0Msg readStream.
+ (msg isKindOf: GSM48RRChannelRelease)
+ ifTrue: [lchan releaseAllSapis. ^true].
+ ] repeat.
+
+ "Current origin/master will be stuck forever here."
+ ]
+
+ testCPTimeout [
+ | lchan cm tmsi |
+
+ tmsi := self allocateTmsi: '901010000001111'.
+
+ "2. Get a LCHAN"
+ lchan := self requireAnyChannel.
+
+ "3. Send a CM Service Request "
+ cm := GSM48CMServiceReq new.
+ cm mi tmsi: tmsi.
+ lchan sendGSM: cm toMessage.
+
+ "4. CP-DATA/RP-DATA PDU"
+ lchan sendGSM: self class cpDataRpData sapi: 3.
+
+ "Wait for the channel to be released.."
+ [
+ | msg |
+ "Read all messages until the end on SAPI=0. Ignore SAPI=3"
+ "If we send another SAPI=3 Release Indication we get a double
+ RF Channel Release from the NITB."
+ [
+ msg := GSM48MSG decode: lchan nextSapi0Msg readStream.
+ (msg isKindOf: GSM48RRChannelRelease)
+ ifTrue: [lchan releaseAllSapis. ^true]
+ ] on: Exception do: [Transcript nextPutAll: 'GSM decoding error'; nl.].
+ ] repeat.
+ ]
+]
+
+Eval [
+ | test |
+
+ test := SMSTest new
+ startTest;
+ stopBts;
+ yourself.
+]