diff --git a/adaptercore/openolt.go b/adaptercore/openolt.go
index 9b5b5ac..4c506a5 100644
--- a/adaptercore/openolt.go
+++ b/adaptercore/openolt.go
@@ -302,13 +302,13 @@
 	return errors.New("device-handler-not-set")
 }
 
-//Suppress_alarm unimplemented
-func (oo *OpenOLT) Suppress_alarm(filter *voltha.AlarmFilter) error {
+//Suppress_event unimplemented
+func (oo *OpenOLT) Suppress_event(filter *voltha.EventFilter) error {
 	return errors.New("unImplemented")
 }
 
-//Unsuppress_alarm  unimplemented
-func (oo *OpenOLT) Unsuppress_alarm(filter *voltha.AlarmFilter) error {
+//Unsuppress_event  unimplemented
+func (oo *OpenOLT) Unsuppress_event(filter *voltha.EventFilter) error {
 	return errors.New("unImplemented")
 }
 
diff --git a/adaptercore/openolt_test.go b/adaptercore/openolt_test.go
index 27af430..ec1ca43 100644
--- a/adaptercore/openolt_test.go
+++ b/adaptercore/openolt_test.go
@@ -745,9 +745,9 @@
 	}
 }
 
-func TestOpenOLT_Suppress_alarm(t *testing.T) {
+func TestOpenOLT_Suppress_event(t *testing.T) {
 	type args struct {
-		filter *voltha.AlarmFilter
+		filter *voltha.EventFilter
 	}
 	tests := []struct {
 		name    string
@@ -755,24 +755,24 @@
 		args    args
 		wantErr error
 	}{
-		{"suppress_alarm-1", &fields{}, args{}, errors.New("unImplemented")},
-		{"suppress_alarm-2", &fields{}, args{}, errors.New("unImplemented")},
-		{"suppress_alarm-3", &fields{}, args{}, errors.New("unImplemented")},
+		{"suppress_event-1", &fields{}, args{}, errors.New("unImplemented")},
+		{"suppress_event-2", &fields{}, args{}, errors.New("unImplemented")},
+		{"suppress_event-3", &fields{}, args{}, errors.New("unImplemented")},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
 			oo := testOltObject(tt.fields)
-			if err := oo.Suppress_alarm(tt.args.filter); (err != nil) &&
+			if err := oo.Suppress_event(tt.args.filter); (err != nil) &&
 				(reflect.TypeOf(err) != reflect.TypeOf(tt.wantErr)) {
-				t.Errorf("Suppress_alarm() error = %v, wantErr %v", err, tt.wantErr)
+				t.Errorf("Suppress_event() error = %v, wantErr %v", err, tt.wantErr)
 			}
 		})
 	}
 }
 
-func TestOpenOLT_Unsuppress_alarm(t *testing.T) {
+func TestOpenOLT_Unsuppress_event(t *testing.T) {
 	type args struct {
-		filter *voltha.AlarmFilter
+		filter *voltha.EventFilter
 	}
 	tests := []struct {
 		name    string
@@ -780,16 +780,16 @@
 		args    args
 		wantErr error
 	}{
-		{"unsupress_alarm-1", &fields{}, args{}, errors.New("unImplemented")},
-		{"unsupress_alarm-2", &fields{}, args{}, errors.New("unImplemented")},
-		{"unsupress_alarm-3", &fields{}, args{}, errors.New("unImplemented")},
+		{"unsupress_event-1", &fields{}, args{}, errors.New("unImplemented")},
+		{"unsupress_event-2", &fields{}, args{}, errors.New("unImplemented")},
+		{"unsupress_event-3", &fields{}, args{}, errors.New("unImplemented")},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
 			oo := testOltObject(tt.fields)
-			if err := oo.Unsuppress_alarm(tt.args.filter); (err != nil) &&
+			if err := oo.Unsuppress_event(tt.args.filter); (err != nil) &&
 				(reflect.TypeOf(err) != reflect.TypeOf(tt.wantErr)) {
-				t.Errorf("Unsuppress_alarm() error = %v, wantErr %v", err, tt.wantErr)
+				t.Errorf("Unsuppress_event() error = %v, wantErr %v", err, tt.wantErr)
 			}
 		})
 	}
