diff --git a/suites/nitb_debug/error.py b/suites/nitb_debug/error.py
new file mode 100644
index 0000000..032e26c
--- /dev/null
+++ b/suites/nitb_debug/error.py
@@ -0,0 +1,5 @@
+#!/usr/bin/env python3
+from osmo_gsm_tester.testenv import *
+
+# This can be used to verify that a test error is reported properly.
+assert False
diff --git a/suites/nitb_debug/fail.py b/suites/nitb_debug/fail.py
new file mode 100644
index 0000000..a2d9e3a
--- /dev/null
+++ b/suites/nitb_debug/fail.py
@@ -0,0 +1,5 @@
+#!/usr/bin/env python3
+from osmo_gsm_tester.testenv import *
+
+# This can be used to verify that a test failure is reported properly.
+test.set_fail('ExpectedFail', 'This failure is expected')
diff --git a/suites/nitb_debug/fail_raise.py b/suites/nitb_debug/fail_raise.py
new file mode 100644
index 0000000..c30a4f5
--- /dev/null
+++ b/suites/nitb_debug/fail_raise.py
@@ -0,0 +1,8 @@
+#!/usr/bin/env python3
+from osmo_gsm_tester.testenv import *
+
+class ExpectedExn(Exception):
+    pass
+
+# This can be used to verify that a test failure is reported properly.
+raise ExpectedExn('This failure is expected')
diff --git a/suites/nitb_debug/interactive.py b/suites/nitb_debug/interactive.py
new file mode 100755
index 0000000..595cfd9
--- /dev/null
+++ b/suites/nitb_debug/interactive.py
@@ -0,0 +1,111 @@
+#!/usr/bin/env python3
+from osmo_gsm_tester.testenv import *
+
+print('use resources...')
+nitb = suite.nitb()
+bts = suite.bts()
+modems = suite.modems(int(prompt('How many modems?')))
+
+print('start nitb and bts...')
+nitb.bts_add(bts)
+nitb.start()
+bts.start()
+wait(nitb.bts_is_connected, bts)
+
+for m in modems:
+  nitb.subscriber_add(m)
+  m.connect(nitb.mcc_mnc())
+
+while True:
+  cmd = prompt('Enter command: (q)uit (s)ms (g)et-registered (w)ait-registered, call-list [<ms_msisdn>], call-dial <src_msisdn> <dst_msisdn>, call-wait-incoming <src_msisdn> <dst_msisdn>, call-answer <mt_msisdn> <call_id>, call-hangup <ms_msisdn> <call_id>, ussd <command>')
+  cmd = cmd.strip().lower()
+
+  if not cmd:
+    continue
+
+  params = cmd.split()
+
+  if 'quit'.startswith(cmd):
+    break
+
+  elif 'wait-registered'.startswith(cmd):
+    try:
+      for m in modems:
+         wait(m.is_connected, nitb.mcc_mnc())
+      wait(nitb.subscriber_attached, *modems)
+    except Timeout:
+      print('Timeout while waiting for registration.')
+
+  elif 'get-registered'.startswith(cmd):
+    print(nitb.imsi_list_attached())
+    print('RESULT: %s' %
+       ('All modems are registered.' if nitb.subscriber_attached(*modems)
+        else 'Some modem(s) not registered yet.'))
+
+  elif 'sms'.startswith(cmd):
+    for mo in modems:
+      for mt in modems:
+        mo.sms_send(mt.msisdn, 'to ' + mt.name())
+
+  elif cmd.startswith('call-list'):
+      if len(params) != 1 and len(params) != 2:
+        print('wrong format')
+        continue
+      for ms in modems:
+        if len(params) == 1 or str(ms.msisdn) == params[1]:
+          print('call-list: %r %r' % (ms.name(), ms.call_id_list()))
+
+  elif cmd.startswith('call-dial'):
+    if len(params) != 3:
+      print('wrong format')
+      continue
+    src_msisdn, dst_msisdn = params[1:]
+    for mo in modems:
+      if str(mo.msisdn) == src_msisdn:
+        print('dialing %s->%s' % (src_msisdn, dst_msisdn))
+        call_id = mo.call_dial(dst_msisdn)
+        print('dial success: call_id=%r' % call_id)
+
+  elif cmd.startswith('call-wait-incoming'):
+    if len(params) != 3:
+      print('wrong format')
+      continue
+    src_msisdn, dst_msisdn = params[1:]
+    for mt in modems:
+      if str(mt.msisdn) == dst_msisdn:
+        print('waiting for incoming %s->%s' % (src_msisdn, dst_msisdn))
+        call_id = mt.call_wait_incoming(src_msisdn)
+        print('incoming call success: call_id=%r' % call_id)
+
+  elif cmd.startswith('call-answer'):
+    if len(params) != 3:
+      print('wrong format')
+      continue
+    mt_msisdn, call_id = params[1:]
+    for mt in modems:
+      if str(mt.msisdn) == mt_msisdn:
+        print('answering %s %r' % (mt.name(), call_id))
+        mt.call_answer(call_id)
+
+  elif cmd.startswith('call-hangup'):
+    if len(params) != 3:
+      print('wrong format')
+      continue
+    ms_msisdn, call_id = params[1:]
+    for ms in modems:
+      if str(ms.msisdn) == ms_msisdn:
+        print('hanging up %s %r' % (ms.name(), call_id))
+        ms.call_hangup(call_id)
+
+  elif cmd.startswith('ussd'):
+    if len(params) != 2:
+      print('wrong format')
+      continue
+    ussd_cmd = params[1]
+    for ms in modems:
+        print('modem %s: ussd %s' % (ms.name(), ussd_cmd))
+        response = ms.ussd_send(ussd_cmd)
+        print('modem %s: response=%r' % (ms.name(), response))
+
+  else:
+      print('Unknown command: %s' % cmd)
diff --git a/suites/nitb_debug/pass.py b/suites/nitb_debug/pass.py
new file mode 100644
index 0000000..c07f079
--- /dev/null
+++ b/suites/nitb_debug/pass.py
@@ -0,0 +1,5 @@
+#!/usr/bin/env python3
+from osmo_gsm_tester.testenv import *
+
+# This can be used to verify that a test passes correctly.
+pass
diff --git a/suites/nitb_debug/suite.conf b/suites/nitb_debug/suite.conf
new file mode 100644
index 0000000..adfc161
--- /dev/null
+++ b/suites/nitb_debug/suite.conf
@@ -0,0 +1,10 @@
+resources:
+  ip_address:
+  - times: 1
+  bts:
+  - times: 1
+  modem:
+  - times: 4
+
+defaults:
+  timeout: 60s
