diff --git a/sysinfo/Test.ttcn b/sysinfo/Test.ttcn
index c7ce0f9..5fa89fa 100644
--- a/sysinfo/Test.ttcn
+++ b/sysinfo/Test.ttcn
@@ -3,6 +3,7 @@
 	import from GSMTAP_Types all;
 	import from GSMTAP_PortType all;
 	import from IPL4_GSMTAP_CtrlFunct all;
+	import from TELNETasp_PortType all;
 
 	const octetstring si1 := '5506198fb38000000000000000000000000000e504002b'O;
 	const octetstring si2 := '59061a00000000000000000000000000000000ffe50400'O;
@@ -11,6 +12,7 @@
 
 	type component dummy_CT {
 		port GSMTAP_PT GSMTAP;
+		port TELNETasp_PT BSCVTY;
 	};
 
 	testcase TC_si1() runs on dummy_CT {
@@ -73,8 +75,89 @@
 		log("SI: ", dec_SystemInformation(rf.msg.payload));
 	}
 
+
+
+	/* permitted prompts on VTY */
+	const charstring NORMAL_PROMPT := "OpenBSC> ";
+	const charstring ENABLE_PROMPT := "OpenBSC# ";
+	const charstring CONFIG_PROMPT := "OpenBSC(*)\#";
+
+	const ASP_TelnetDynamicConfig vty_prompt[3] := {
+		{
+			prompt := {
+				id := 1,
+				prompt := NORMAL_PROMPT,
+				has_wildcards := false
+			}
+		}, {
+			prompt := {
+				id := 2,
+				prompt := ENABLE_PROMPT,
+				has_wildcards := false
+			}
+		}, {
+			prompt := {
+				id := 3,
+				prompt := CONFIG_PROMPT,
+				has_wildcards := true
+			}
+		}
+	};
+
+	/* configure prompts in TELNETasp module */
+	function f_vty_set_prompts(TELNETasp_PT pt) {
+		/* set some configuration that isn't possible to express
+		 * in the config file due to syntactic restrictions (Who invents config
+		 * files that don't permit regular expressions? */
+		for (var integer i := 0; i < sizeof(vty_prompt); i:= i + 1) {
+			pt.send(vty_prompt[i])
+		}
+	}
+
+	/* wait for any of the permitted prompts; buffer + return all intermediate output */
+	function f_vty_wait_for_prompt(TELNETasp_PT pt) return charstring {
+		template charstring config_pattern := pattern CONFIG_PROMPT;
+		var charstring rx, buf := "";
+		timer T := 2.0;
+
+		T.start;
+		alt {
+			[] pt.receive(NORMAL_PROMPT) { };
+			[] pt.receive(ENABLE_PROMPT) { };
+			[] pt.receive(config_pattern) { };
+			[] pt.receive(charstring:?) -> value rx { buf := buf & rx; repeat };
+			[] T.timeout { setverdict(fail); return ""};
+		}
+		T.stop;
+		return buf;
+	}
+
+	/* send a VTY command and obtain response until prompt is received */
+	function f_vty_transceive(TELNETasp_PT pt, charstring tx) return charstring {
+		pt.send(tx);
+		return f_vty_wait_for_prompt(pt);
+	}
+
+	/* enter the'confiugration' mode of the VTY */
+	function f_vty_enter_config(TELNETasp_PT pt) {
+		f_vty_transceive(pt, "enable");
+		f_vty_transceive(pt, "configure terminal")
+	}
+
+	testcase TC_telnet() runs on dummy_CT {
+
+		map(self:BSCVTY, system:BSCVTY);
+		f_vty_set_prompts(BSCVTY)
+
+		f_vty_transceive(BSCVTY, "show network")
+		f_vty_enter_config(BSCVTY)
+		f_vty_transceive(BSCVTY, "network")
+		f_vty_transceive(BSCVTY, "bts 0")
+	}
+
 	control {
 		execute(TC_si1());
 		execute(TC_gsmtap());
+		execute(TC_telnet());
 	}
 }
