diff --git a/src/mod/endpoints/mod_gsmopen/gsmopen.h b/src/mod/endpoints/mod_gsmopen/gsmopen.h
index f56866a587..6ba413e3b1 100644
--- a/src/mod/endpoints/mod_gsmopen/gsmopen.h
+++ b/src/mod/endpoints/mod_gsmopen/gsmopen.h
@@ -449,6 +449,8 @@ struct private_object {
 	int requesting_imei;
 	char imsi[128];
 	int requesting_imsi;
+	char operator_name[128];
+	int requesting_operator_name;
 	int network_creg_not_supported;
 	char creg[128];
 
diff --git a/src/mod/endpoints/mod_gsmopen/gsmopen_protocol.cpp b/src/mod/endpoints/mod_gsmopen/gsmopen_protocol.cpp
index 12b6903e94..7533e40a5b 100644
--- a/src/mod/endpoints/mod_gsmopen/gsmopen_protocol.cpp
+++ b/src/mod/endpoints/mod_gsmopen/gsmopen_protocol.cpp
@@ -358,6 +358,15 @@ int gsmopen_serial_config_AT(private_t *tech_pvt)
 	if (res) {
 		DEBUGA_GSMOPEN("AT+CSQ failed\n", GSMOPEN_P_LOG);
 	}
+
+	/* operator name */
+	tech_pvt->requesting_operator_name = 1;
+	res = gsmopen_serial_write_AT_ack(tech_pvt, "AT+COPS?");
+	tech_pvt->requesting_operator_name = 0;
+	if (res) {
+		DEBUGA_GSMOPEN("AT+COPS? failed\n", GSMOPEN_P_LOG);
+	}
+
 	/* IMEI */
 	tech_pvt->requesting_imei = 1;
 	res = gsmopen_serial_write_AT_ack(tech_pvt, "AT+GSN");
@@ -1006,6 +1015,23 @@ int gsmopen_serial_read_AT(private_t *tech_pvt, int look_for_ack, int timeout_us
 
 			}
 
+			if ((strncmp(tech_pvt->line_array.result[i], "+COPS:", 6) == 0)) {
+				int mode, format, rat, err;
+				char oper[128] = "";
+				mode = format = rat = err = 0;
+
+				err = sscanf(&tech_pvt->line_array.result[i][6], "%d,%d,%*[\"]%[^\"]%*[\"],%d", &mode, &format, &oper, &rat);
+				if (err < 3) {
+					DEBUGA_GSMOPEN("|%s| is not formatted as: |+COPS: xx,yy,ssss,nn|\n", GSMOPEN_P_LOG, tech_pvt->line_array.result[i]);
+				} else if (option_debug > 1) {
+					DEBUGA_GSMOPEN("|%s| +COPS: : Mode %d, Format %d, Operator %s, Rat %d\n", GSMOPEN_P_LOG, tech_pvt->line_array.result[i], mode, format, oper, rat);
+				}
+
+				/* if we are requesting the operator name, copy it over */
+				if (tech_pvt->requesting_operator_name)
+					strncpy(tech_pvt->operator_name, oper, sizeof(tech_pvt->operator_name));
+			}
+
 			if ((strncmp(tech_pvt->line_array.result[i], "+CMGW:", 6) == 0)) {
 				int err;
 
diff --git a/src/mod/endpoints/mod_gsmopen/mod_gsmopen.cpp b/src/mod/endpoints/mod_gsmopen/mod_gsmopen.cpp
index a92303351a..73478826e7 100644
--- a/src/mod/endpoints/mod_gsmopen/mod_gsmopen.cpp
+++ b/src/mod/endpoints/mod_gsmopen/mod_gsmopen.cpp
@@ -2422,6 +2422,7 @@ SWITCH_STANDARD_API(gsmopen_dump_function)
 					stream->write_function(stream, "got_signal = %s\n", value);
 					snprintf(value, sizeof(value) - 1, "%d", tech_pvt->running);
 					stream->write_function(stream, "running = %s\n", value);
+					stream->write_function(stream, "operator = %s\n", tech_pvt->operator_name);
 					stream->write_function(stream, "imei = %s\n", tech_pvt->imei);
 					stream->write_function(stream, "imsi = %s\n", tech_pvt->imsi);
 					snprintf(value, sizeof(value) - 1, "%d", tech_pvt->controldev_dead);
@@ -2480,6 +2481,7 @@ SWITCH_STANDARD_API(gsmopen_dump_function)
 			stream->write_function(stream, "got_signal = %s\n", value);
 			snprintf(value, sizeof(value) - 1, "%d", tech_pvt->running);
 			stream->write_function(stream, "running = %s\n", value);
+			stream->write_function(stream, "operator = %s\n", tech_pvt->operator_name);
 			stream->write_function(stream, "imei = %s\n", tech_pvt->imei);
 			stream->write_function(stream, "imsi = %s\n", tech_pvt->imsi);
 			snprintf(value, sizeof(value) - 1, "%d", tech_pvt->controldev_dead);
@@ -2809,6 +2811,7 @@ int dump_event_full(private_t *tech_pvt, int is_alarm, int alarm_code, const cha
 		switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "got_signal", value);
 		snprintf(value, sizeof(value) - 1, "%d", tech_pvt->running);
 		switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "running", value);
+		switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "operator", tech_pvt->operator_name);
 		switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "imei", tech_pvt->imei);
 		switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "imsi", tech_pvt->imsi);
 		snprintf(value, sizeof(value) - 1, "%d", tech_pvt->controldev_dead);