diff --git a/lib/igt_chamelium.c b/lib/igt_chamelium.c
index dcd8855f..4cea5fdb 100644
--- a/lib/igt_chamelium.c
+++ b/lib/igt_chamelium.c
@@ -209,57 +209,13 @@ void chamelium_destroy_frame_dump(struct chamelium_frame_dump *dump)
 	free(dump);
 }
 
-struct fsm_monitor_args {
-	struct chamelium *chamelium;
-	struct chamelium_port *port;
-	struct udev_monitor *mon;
-};
-
-/*
- * Whenever resolutions or other factors change with the display output, the
- * Chamelium's display receivers need to be fully reset in order to perform any
- * frame-capturing related tasks. This requires cutting off the display then
- * turning it back on, and is indicated by the Chamelium sending hotplug events
- */
-static void *chamelium_fsm_mon(void *data)
-{
-	struct fsm_monitor_args *args = data;
-	drmModeConnector *connector;
-	int drm_fd = args->chamelium->drm_fd;
-
-	/*
-	 * Wait for the chamelium to try unplugging the connector, otherwise
-	 * the thread calling chamelium_rpc will kill us
-	 */
-	igt_hotplug_detected(args->mon, 60);
-
-	/*
-	 * Just in case the RPC call being executed returns before we complete
-	 * the FSM modesetting sequence, so we don't leave the display in a bad
-	 * state.
-	 */
-	pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL);
-
-	igt_debug("Chamelium needs FSM, handling\n");
-	connector = chamelium_port_get_connector(args->chamelium, args->port,
-						 false);
-	kmstest_set_connector_dpms(drm_fd, connector, DRM_MODE_DPMS_OFF);
-	kmstest_set_connector_dpms(drm_fd, connector, DRM_MODE_DPMS_ON);
-
-	drmModeFreeConnector(connector);
-	return NULL;
-}
-
 static xmlrpc_value *chamelium_rpc(struct chamelium *chamelium,
-				   struct chamelium_port *fsm_port,
 				   const char *method_name,
 				   const char *format_str,
 				   ...)
 {
 	xmlrpc_value *res;
 	va_list va_args;
-	struct fsm_monitor_args monitor_args;
-	pthread_t fsm_thread_id;
 
 	/* Cleanup the last error, if any */
 	if (chamelium->env.fault_occurred) {
@@ -267,31 +223,12 @@ static xmlrpc_value *chamelium_rpc(struct chamelium *chamelium,
 		xmlrpc_env_init(&chamelium->env);
 	}
 
-	/* Unfortunately xmlrpc_client's event loop helpers are rather useless
-	 * for implementing any sort of event loop, since they provide no way
-	 * to poll for events other then the RPC response. This means in order
-	 * to handle the chamelium attempting FSM, we have to fork into another
-	 * thread and have that handle hotplugging displays
-	 */
-	if (fsm_port) {
-		monitor_args.chamelium = chamelium;
-		monitor_args.port = fsm_port;
-		monitor_args.mon = igt_watch_hotplug();
-		pthread_create(&fsm_thread_id, NULL, chamelium_fsm_mon,
-			       &monitor_args);
-	}
-
 	va_start(va_args, format_str);
 	xmlrpc_client_call2f_va(&chamelium->env, chamelium->client,
 				chamelium->url, method_name, format_str, &res,
 				va_args);
 	va_end(va_args);
 
-	if (fsm_port) {
-		pthread_cancel(fsm_thread_id);
-		igt_cleanup_hotplug(monitor_args.mon);
-	}
-
 	igt_assert_f(!chamelium->env.fault_occurred,
 		     "Chamelium RPC call failed: %s\n",
 		     chamelium->env.fault_string);
@@ -310,7 +247,7 @@ static xmlrpc_value *chamelium_rpc(struct chamelium *chamelium,
 void chamelium_plug(struct chamelium *chamelium, struct chamelium_port *port)
 {
 	igt_debug("Plugging %s\n", port->name);
-	xmlrpc_DECREF(chamelium_rpc(chamelium, NULL, "Plug", "(i)", port->id));
+	xmlrpc_DECREF(chamelium_rpc(chamelium, "Plug", "(i)", port->id));
 }
 
 /**
@@ -324,7 +261,7 @@ void chamelium_plug(struct chamelium *chamelium, struct chamelium_port *port)
 void chamelium_unplug(struct chamelium *chamelium, struct chamelium_port *port)
 {
 	igt_debug("Unplugging port %s\n", port->name);
-	xmlrpc_DECREF(chamelium_rpc(chamelium, NULL, "Unplug", "(i)",
+	xmlrpc_DECREF(chamelium_rpc(chamelium, "Unplug", "(i)",
 				    port->id));
 }
 
@@ -344,7 +281,7 @@ bool chamelium_is_plugged(struct chamelium *chamelium,
 	xmlrpc_value *res;
 	xmlrpc_bool is_plugged;
 
-	res = chamelium_rpc(chamelium, NULL, "IsPlugged", "(i)", port->id);
+	res = chamelium_rpc(chamelium, "IsPlugged", "(i)", port->id);
 
 	xmlrpc_read_bool(&chamelium->env, res, &is_plugged);
 	xmlrpc_DECREF(res);
@@ -373,7 +310,7 @@ bool chamelium_port_wait_video_input_stable(struct chamelium *chamelium,
 
 	igt_debug("Waiting for video input to stabalize on %s\n", port->name);
 
-	res = chamelium_rpc(chamelium, port, "WaitVideoInputStable", "(ii)",
+	res = chamelium_rpc(chamelium, "WaitVideoInputStable", "(ii)",
 			    port->id, timeout_secs);
 
 	xmlrpc_read_bool(&chamelium->env, res, &is_on);
@@ -413,7 +350,7 @@ void chamelium_fire_hpd_pulses(struct chamelium *chamelium,
 	for (i = 0; i < count; i++)
 		xmlrpc_array_append_item(&chamelium->env, pulse_widths, width);
 
-	xmlrpc_DECREF(chamelium_rpc(chamelium, NULL, "FireMixedHpdPulses",
+	xmlrpc_DECREF(chamelium_rpc(chamelium, "FireMixedHpdPulses",
 				    "(iA)", port->id, pulse_widths));
 
 	xmlrpc_DECREF(width);
@@ -446,7 +383,7 @@ void chamelium_fire_mixed_hpd_pulses(struct chamelium *chamelium,
 	}
 	va_end(args);
 
-	xmlrpc_DECREF(chamelium_rpc(chamelium, NULL, "FireMixedHpdPulses",
+	xmlrpc_DECREF(chamelium_rpc(chamelium, "FireMixedHpdPulses",
 				    "(iA)", port->id, pulse_widths));
 
 	xmlrpc_DECREF(pulse_widths);
@@ -470,7 +407,7 @@ void chamelium_schedule_hpd_toggle(struct chamelium *chamelium,
 	igt_debug("Scheduling HPD toggle on %s in %d ms\n", port->name,
 		  delay_ms);
 
-	xmlrpc_DECREF(chamelium_rpc(chamelium, NULL, "ScheduleHpdToggle",
+	xmlrpc_DECREF(chamelium_rpc(chamelium, "ScheduleHpdToggle",
 				    "(iii)", port->id, delay_ms, rising_edge));
 }
 
@@ -490,7 +427,7 @@ int chamelium_new_edid(struct chamelium *chamelium, const unsigned char *edid)
 	struct chamelium_edid *allocated_edid;
 	int edid_id;
 
-	res = chamelium_rpc(chamelium, NULL, "CreateEdid", "(6)",
+	res = chamelium_rpc(chamelium, "CreateEdid", "(6)",
 			    edid, EDID_LENGTH);
 
 	xmlrpc_read_int(&chamelium->env, res, &edid_id);
@@ -512,7 +449,7 @@ int chamelium_new_edid(struct chamelium *chamelium, const unsigned char *edid)
 
 static void chamelium_destroy_edid(struct chamelium *chamelium, int edid_id)
 {
-	xmlrpc_DECREF(chamelium_rpc(chamelium, NULL, "DestroyEdid", "(i)",
+	xmlrpc_DECREF(chamelium_rpc(chamelium, "DestroyEdid", "(i)",
 				    edid_id));
 }
 
@@ -532,7 +469,7 @@ static void chamelium_destroy_edid(struct chamelium *chamelium, int edid_id)
 void chamelium_port_set_edid(struct chamelium *chamelium,
 			     struct chamelium_port *port, int edid_id)
 {
-	xmlrpc_DECREF(chamelium_rpc(chamelium, NULL, "ApplyEdid", "(ii)",
+	xmlrpc_DECREF(chamelium_rpc(chamelium, "ApplyEdid", "(ii)",
 				    port->id, edid_id));
 }
 
@@ -554,7 +491,7 @@ void chamelium_port_set_ddc_state(struct chamelium *chamelium,
 	igt_debug("%sabling DDC bus on %s\n",
 		  enabled ? "En" : "Dis", port->name);
 
-	xmlrpc_DECREF(chamelium_rpc(chamelium, NULL, "SetDdcState", "(ib)",
+	xmlrpc_DECREF(chamelium_rpc(chamelium, "SetDdcState", "(ib)",
 				    port->id, enabled));
 }
 
@@ -574,7 +511,7 @@ bool chamelium_port_get_ddc_state(struct chamelium *chamelium,
 	xmlrpc_value *res;
 	xmlrpc_bool enabled;
 
-	res = chamelium_rpc(chamelium, NULL, "IsDdcEnabled", "(i)", port->id);
+	res = chamelium_rpc(chamelium, "IsDdcEnabled", "(i)", port->id);
 	xmlrpc_read_bool(&chamelium->env, res, &enabled);
 
 	xmlrpc_DECREF(res);
@@ -599,7 +536,7 @@ void chamelium_port_get_resolution(struct chamelium *chamelium,
 {
 	xmlrpc_value *res, *res_x, *res_y;
 
-	res = chamelium_rpc(chamelium, port, "DetectResolution", "(i)",
+	res = chamelium_rpc(chamelium, "DetectResolution", "(i)",
 			    port->id);
 
 	xmlrpc_array_read_item(&chamelium->env, res, 0, &res_x);
@@ -617,7 +554,7 @@ static void chamelium_get_captured_resolution(struct chamelium *chamelium,
 {
 	xmlrpc_value *res, *res_w, *res_h;
 
-	res = chamelium_rpc(chamelium, NULL, "GetCapturedResolution", "()");
+	res = chamelium_rpc(chamelium, "GetCapturedResolution", "()");
 
 	xmlrpc_array_read_item(&chamelium->env, res, 0, &res_w);
 	xmlrpc_array_read_item(&chamelium->env, res, 1, &res_h);
@@ -680,7 +617,7 @@ struct chamelium_frame_dump *chamelium_port_dump_pixels(struct chamelium *chamel
 	xmlrpc_value *res;
 	struct chamelium_frame_dump *frame;
 
-	res = chamelium_rpc(chamelium, port, "DumpPixels",
+	res = chamelium_rpc(chamelium, "DumpPixels",
 			    (w && h) ? "(iiiii)" : "(innnn)",
 			    port->id, x, y, w, h);
 	chamelium->capturing_port = port;
@@ -742,7 +679,7 @@ igt_crc_t *chamelium_get_crc_for_area(struct chamelium *chamelium,
 	xmlrpc_value *res;
 	igt_crc_t *ret = malloc(sizeof(igt_crc_t));
 
-	res = chamelium_rpc(chamelium, port, "ComputePixelChecksum",
+	res = chamelium_rpc(chamelium, "ComputePixelChecksum",
 			    (w && h) ? "(iiiii)" : "(innnn)",
 			    port->id, x, y, w, h);
 	chamelium->capturing_port = port;
@@ -780,7 +717,7 @@ igt_crc_t *chamelium_get_crc_for_area(struct chamelium *chamelium,
 void chamelium_start_capture(struct chamelium *chamelium,
 			     struct chamelium_port *port, int x, int y, int w, int h)
 {
-	xmlrpc_DECREF(chamelium_rpc(chamelium, port, "StartCapturingVideo",
+	xmlrpc_DECREF(chamelium_rpc(chamelium, "StartCapturingVideo",
 				    (w && h) ? "(iiiii)" : "(innnn)",
 				    port->id, x, y, w, h));
 	chamelium->capturing_port = port;
@@ -798,7 +735,7 @@ void chamelium_start_capture(struct chamelium *chamelium,
  */
 void chamelium_stop_capture(struct chamelium *chamelium, int frame_count)
 {
-	xmlrpc_DECREF(chamelium_rpc(chamelium, NULL, "StopCapturingVideo",
+	xmlrpc_DECREF(chamelium_rpc(chamelium, "StopCapturingVideo",
 				    "(i)", frame_count));
 }
 
@@ -829,7 +766,7 @@ void chamelium_stop_capture(struct chamelium *chamelium, int frame_count)
 void chamelium_capture(struct chamelium *chamelium, struct chamelium_port *port,
 		       int x, int y, int w, int h, int frame_count)
 {
-	xmlrpc_DECREF(chamelium_rpc(chamelium, port, "CaptureVideo",
+	xmlrpc_DECREF(chamelium_rpc(chamelium, "CaptureVideo",
 				    (w && h) ? "(iiiiii)" : "(iinnnn)",
 				    port->id, frame_count, x, y, w, h));
 	chamelium->capturing_port = port;
@@ -851,7 +788,7 @@ igt_crc_t *chamelium_read_captured_crcs(struct chamelium *chamelium,
 	xmlrpc_value *res, *elem;
 	int i;
 
-	res = chamelium_rpc(chamelium, NULL, "GetCapturedChecksums", "(in)", 0);
+	res = chamelium_rpc(chamelium, "GetCapturedChecksums", "(in)", 0);
 
 	*frame_count = xmlrpc_array_size(&chamelium->env, res);
 	ret = calloc(sizeof(igt_crc_t), *frame_count);
@@ -887,7 +824,7 @@ struct chamelium_frame_dump *chamelium_read_captured_frame(struct chamelium *cha
 	xmlrpc_value *res;
 	struct chamelium_frame_dump *frame;
 
-	res = chamelium_rpc(chamelium, NULL, "ReadCapturedFrame", "(i)", index);
+	res = chamelium_rpc(chamelium, "ReadCapturedFrame", "(i)", index);
 	frame = frame_from_xml(chamelium, res);
 	xmlrpc_DECREF(res);
 
@@ -908,7 +845,7 @@ int chamelium_get_captured_frame_count(struct chamelium *chamelium)
 	xmlrpc_value *res;
 	int ret;
 
-	res = chamelium_rpc(chamelium, NULL, "GetCapturedFrameCount", "()");
+	res = chamelium_rpc(chamelium, "GetCapturedFrameCount", "()");
 	xmlrpc_read_int(&chamelium->env, res, &ret);
 
 	xmlrpc_DECREF(res);
@@ -1231,7 +1168,7 @@ int chamelium_get_frame_limit(struct chamelium *chamelium,
 	if (!w && !h)
 		chamelium_port_get_resolution(chamelium, port, &w, &h);
 
-	res = chamelium_rpc(chamelium, port, "GetMaxFrameLimit", "(iii)",
+	res = chamelium_rpc(chamelium, "GetMaxFrameLimit", "(iii)",
 			    port->id, w, h);
 
 	xmlrpc_read_int(&chamelium->env, res, &ret);
@@ -1383,7 +1320,7 @@ static unsigned int chamelium_get_port_type(struct chamelium *chamelium,
 	const char *port_type_str;
 	unsigned int port_type;
 
-	res = chamelium_rpc(chamelium, NULL, "GetConnectorType",
+	res = chamelium_rpc(chamelium, "GetConnectorType",
 			    "(i)", port->id);
 
 	xmlrpc_read_string(&chamelium->env, res, &port_type_str);
@@ -1524,7 +1461,7 @@ static bool chamelium_read_config(struct chamelium *chamelium, int drm_fd)
 void chamelium_reset(struct chamelium *chamelium)
 {
 	igt_debug("Resetting the chamelium\n");
-	xmlrpc_DECREF(chamelium_rpc(chamelium, NULL, "Reset", "()"));
+	xmlrpc_DECREF(chamelium_rpc(chamelium, "Reset", "()"));
 }
 
 static void chamelium_exit_handler(int sig)
