diff --git a/src/gatewayinfo.c b/src/gatewayinfo.c
index 299763db5a3a289bafc559f1aa3fedc1b0783043..8fc6acadff87fabf2c27389e1caa31cc927603e7 100644
--- a/src/gatewayinfo.c
+++ b/src/gatewayinfo.c
@@ -13,36 +13,28 @@
 static int get_manufacturer_oui(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
 {
 	dmuci_get_option_value_string_varstate("gwinfo", "gatewayinfo", "oui", value);
-	if (*value[0] == '\0') {
-		db_get_value_string("device", "deviceinfo", "ManufacturerOUI", value);
-	}
-
 	return 0;
 }
 
 static int get_product_class(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
 {
 	dmuci_get_option_value_string_varstate("gwinfo", "gatewayinfo", "class", value);
-	if (*value[0] == '\0') {
-		db_get_value_string("device", "deviceinfo", "ProductClass", value);
-	}
-
 	return 0;
 }
 
 static int get_serial_number(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
 {
 	dmuci_get_option_value_string_varstate("gwinfo", "gatewayinfo", "serial", value);
-	if (*value[0] == '\0') {
-		db_get_value_string("device", "deviceinfo", "SerialNumber", value);
-	}
-
 	return 0;
 }
 
 static int get_gateway_proto(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
 {
 	dmuci_get_option_value_string_varstate("gwinfo", "gatewayinfo", "proto", value);
+	if (*value[0] == '\0') {
+		*value=dmstrdup("Unknown");
+	}
+
 	return 0;
 }
 
@@ -58,6 +50,105 @@ static int get_mac_address(char *refparam, struct dmctx *ctx, void *data, char *
 	return 0;
 }
 
+static event_args unknown_gw_args = {
+	.name = "gateway-info.gateway.unknown",
+	.param = (const char *[]) {
+		"MACAddress",
+		NULL
+	}
+};
+
+static int get_event_unknown_gw(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
+{
+	*value = (char *)&unknown_gw_args;
+	return 0;
+}
+
+static int event_unknown_gw(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action)
+{
+	switch (action) {
+		case EVENT_CHECK:
+			break;
+		case EVENT_RUN:
+		{
+			char *hwaddr = dmjson_get_value((json_object *)value, 1, "hwaddr");
+
+			fill_blob_param(&ctx->bb, "MACAddress", hwaddr, DMT_TYPE[DMT_STRING], 0);
+			break;
+		}
+	}
+
+	return 0;
+}
+
+static event_args usp_gw_args = {
+	.name = "gateway-info.gateway.usp",
+	.param = (const char *[]) {
+		"EndpointID",
+		NULL
+	}
+};
+
+static int get_event_usp_gw(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
+{
+	*value = (char *)&usp_gw_args;
+	return 0;
+}
+
+static int event_usp_gw(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action)
+{
+	switch (action) {
+		case EVENT_CHECK:
+			break;
+		case EVENT_RUN:
+		{
+			char *endpoint_id = dmjson_get_value((json_object *)value, 1, "endpoint");
+
+			fill_blob_param(&ctx->bb, "EndpointID", endpoint_id, DMT_TYPE[DMT_STRING], 0);
+			break;
+		}
+	}
+
+	return 0;
+}
+
+static event_args cwmp_gw_args = {
+	.name = "gateway-info.gateway.cwmp",
+	.param = (const char *[]) {
+		"ManufacturerOUI",
+		"ProductClass",
+		"SerialNumber",
+		NULL
+	}
+};
+
+static int get_event_cwmp_gw(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
+{
+	*value = (char *)&cwmp_gw_args;
+	return 0;
+}
+
+static int event_cwmp_gw(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action)
+{
+	switch (action) {
+		case EVENT_CHECK:
+			break;
+		case EVENT_RUN:
+		{
+			char *oui = dmjson_get_value((json_object *)value, 1, "oui");
+			char *class = dmjson_get_value((json_object *)value, 1, "class");
+			char *serial = dmjson_get_value((json_object *)value, 1, "serial");
+
+			fill_blob_param(&ctx->bb, "ManufacturerOUI", oui, DMT_TYPE[DMT_STRING], 0);
+			fill_blob_param(&ctx->bb, "ProductClass", class, DMT_TYPE[DMT_STRING], 0);
+			fill_blob_param(&ctx->bb, "SerialNumber", serial, DMT_TYPE[DMT_STRING], 0);
+			break;
+		}
+	}
+
+	return 0;
+}
+
 /**********************************************************************************************************************************
 *                                            OBJ & PARAM DEFINITION
 ***********************************************************************************************************************************/
@@ -70,6 +161,9 @@ DMLEAF tGatewayInfoParams[] = {
 {"ManagementProtocol", &DMREAD, DMT_STRING, get_gateway_proto, NULL, BBFDM_USP},
 {"EndpointID", &DMREAD, DMT_STRING, get_endpoint_id, NULL, BBFDM_USP},
 {"MACAddress", &DMREAD, DMT_STRING, get_mac_address, NULL, BBFDM_USP},
+{"UnknownGatewayDiscovered!", &DMREAD, DMT_EVENT, get_event_unknown_gw, event_unknown_gw, BBFDM_USP},
+{"USPGatewayDiscovered!", &DMREAD, DMT_EVENT, get_event_usp_gw, event_usp_gw, BBFDM_USP},
+{"CWMPGatewayDiscovered!", &DMREAD, DMT_EVENT, get_event_cwmp_gw, event_cwmp_gw, BBFDM_USP},
 {0}
 };