diff --git a/sencha.resc b/sencha.resc
index a9ced9d..ab84cc2 100644
--- a/sencha.resc
+++ b/sencha.resc
@@ -60,6 +60,10 @@
 $cheriotLibrary ?= @out/cheriot/sim/librenode_mpact_cheriot.so
 sysbus.cpu1 CpuLibraryPath $cheriotLibrary
 
+# Enable the command line interface on port 4567
+$cli_port?= 4567
+#sysbus.cpu1 CliPort $cli_port
+
 # Setup ram_smc to coordinate with cpu1
 sysbus.ram_smc CpuLibraryPath $cheriotLibrary
 sysbus.ram_smc Start
diff --git a/shodan_infrastructure/MpactCheriotCPU.cs b/shodan_infrastructure/MpactCheriotCPU.cs
index 20161b4..3d2f0de 100644
--- a/shodan_infrastructure/MpactCheriotCPU.cs
+++ b/shodan_infrastructure/MpactCheriotCPU.cs
@@ -68,7 +68,7 @@
 		public MpactCheriotCPU(uint id, UInt64 memoryBase, UInt64 memorySize,
 				       UInt64 revocationMemoryBase, UInt64 clintMMRBase,
 				       string cpuType, IMachine machine, Endianess endianness,
-               CpuBitness bitness = CpuBitness.Bits32)
+				       CpuBitness bitness = CpuBitness.Bits32)
 		: base(id, cpuType, machine, endianness, bitness)
 		{
 			this.memoryBase = memoryBase;
@@ -79,7 +79,6 @@
 			value_ptr = Marshal.AllocHGlobal(8);
 			reg_info_ptr = Marshal.AllocHGlobal(Marshal.SizeOf<RegInfo>());
 			string_ptr = Marshal.AllocHGlobal(maxStringLen);
-			run_cb_delegate = new ActionInt32(RunComplete);
 			read_sysmem_delegate = new FuncInt32UInt64IntPtrInt32(ReadSysMemory);
 			write_sysmem_delegate = new FuncInt32UInt64IntPtrInt32(WriteSysMemory);
 			cpuLibraryRegistered = false;
@@ -110,13 +109,21 @@
 				return;
 			}
 			// Set up configuration array.
-			var config_names = new string[4] {"memoryBase", "memorySize", "revocationMemoryBase", "clintMMRBase"};
-			var config_values = new string[4];
-			config_values[0] = "0x" + memoryBase.ToString("X");
-			config_values[1] = "0x" + memorySize.ToString("X");
-			config_values[2] = "0x" + revocationMemBase.ToString("X");
-			config_values[3] = "0x" + clintBase.ToString("X");
-			Int32 cfg_res = set_config(mpact_id, config_names, config_values, 4);
+			var config_names = new List<string>();
+			var config_values = new List<string>();
+			config_names.Add("memoryBase");
+			config_names.Add("memorySize");
+			config_names.Add("revocationMemoryBase");
+			config_names.Add("clintMMRBase");
+			config_values.Add("0x" + memoryBase.ToString("X"));
+			config_values.Add("0x" + memorySize.ToString("X"));
+			config_values.Add("0x" + revocationMemBase.ToString("X"));
+			config_values.Add("0x" + clintBase.ToString("X"));
+			if (cli_port != -1) {
+				config_names.Add("cliPort");
+				config_values.Add("0x" + cli_port.ToString("X"));
+			}
+			Int32 cfg_res = set_config(mpact_id, config_names.ToArray(), config_values.ToArray(), config_names.Count);
 			if (cfg_res < 0) {
 				LogAndThrowRE("Failed to set configuration information");
 			}
@@ -134,8 +141,6 @@
 		public override void Dispose()
 		{
 			base.Dispose();
-			// Cleanup: simulator and any unmanaged resources.
-			halt(mpact_id, error_ptr);
 			destruct(mpact_id);
 		}
 
@@ -173,6 +178,8 @@
 				}
 		}
 
+		public int CliPort { get => cli_port; set => cli_port = value; }
+
 		public override ulong ExecutedInstructions => totalExecutedInstructions;
 
 		public override ExecutionMode ExecutionMode
@@ -341,15 +348,6 @@
 		return load_image(mpact_id, file_name, address);
 	}
 
-	public void RunComplete(Int32 result) {
-		Console.Error.WriteLine($"RunComplete({result})");
-	}
-
-	public void Run() {
-		Int32 status = run(mpact_id, run_cb_delegate);
-		Console.Error.WriteLine($"Run -> {status}");
-	}
-
 	public void OnGPIO(int number, bool value) {
 		if (mpact_id <= 0) {
 			this.Log(LogLevel.Noisy, "OnGPIO: no simulator, discard gpio {0}:{1}", number, value);
@@ -493,8 +491,7 @@
 		private Dictionary<string, Int32> registerNamesMap = new Dictionary<string, Int32>();
 		private string cpuLibraryPath;
     private bool cpuLibraryRegistered;
-		private string executableFile;
-		private string simulationFilePath;
+		private int cli_port = -1;
 		private NativeBinder binder;
 		private readonly object nativeLock;
 		private readonly Int32 maxStringLen = 32;
@@ -502,7 +499,6 @@
 		private IntPtr error_ptr {get; set;}
 		private IntPtr reg_info_ptr {get; set;}
 		private IntPtr string_ptr {get; set;}
-		private ActionInt32 run_cb_delegate;
 		private FuncInt32UInt64IntPtrInt32 read_sysmem_delegate;
 		private FuncInt32UInt64IntPtrInt32 write_sysmem_delegate;
 #pragma warning disable 649
@@ -532,10 +528,6 @@
 		private FuncInt32Int32UInt64IntPtrInt32 read_memory; // (Int32 id, UInt64 address, IntPtr buffer, Int32 size);
 		[Import(UseExceptionWrapper = false)]
 		private FuncInt32Int32UInt64IntPtrInt32 write_memory; // (Int32 id, UInt64 address, IntPtr buffer, Int32 size);
-		[Import(UseExceptionWrapper = false)]
-		private FuncInt32Int32ActionInt32 run; // (Int32 id, void callback(Int32) )
-		[Import(UseExceptionWrapper = false)]
-		private FuncInt32Int32IntPtr halt; // (Int32 id, IntPtr *value)
 		// Set config.
 		[Import(UseExceptionWrapper = false)]
 		private FuncInt32Int32StringArrStringArrInt32 set_config; // Int32 set_config(Int32 id, string[] names string[] values, Int32 size);
