diff --git a/rw_core/mocks/adapter.go b/rw_core/mocks/adapter.go
index 79107c1..a8117fe 100644
--- a/rw_core/mocks/adapter.go
+++ b/rw_core/mocks/adapter.go
@@ -300,3 +300,33 @@
 func (ta *Adapter) SetDeleteAction(failDeleteDevice bool) {
 	ta.failDeleteDevice = failDeleteDevice
 }
+
+// Download_onu_image -
+func (ta *Adapter) Download_onu_image(ctx context.Context, request *voltha.DeviceImageDownloadRequest) (*voltha.DeviceImageResponse, error) { //nolint
+	return nil, nil
+}
+
+// Get_onu_image_status -
+func (ta *Adapter) Get_onu_image_status(ctx context.Context, in *voltha.DeviceImageRequest) (*voltha.DeviceImageResponse, error) { //nolint
+	return nil, nil
+}
+
+// Abort_onu_image_upgrade -
+func (ta *Adapter) Abort_onu_image_upgrade(ctx context.Context, in *voltha.DeviceImageRequest) (*voltha.DeviceImageResponse, error) { //nolint
+	return nil, nil
+}
+
+// Get_onu_images -
+func (ta *Adapter) Get_onu_images(ctx context.Context, deviceID string) (*voltha.OnuImages, error) { //nolint
+	return nil, nil
+}
+
+// Activate_onu_image -
+func (ta *Adapter) Activate_onu_image(ctx context.Context, in *voltha.DeviceImageRequest) (*voltha.DeviceImageResponse, error) { //nolint
+	return nil, nil
+}
+
+// Commit_onu_image -
+func (ta *Adapter) Commit_onu_image(ctx context.Context, in *voltha.DeviceImageRequest) (*voltha.DeviceImageResponse, error) { //nolint
+	return nil, nil
+}
diff --git a/rw_core/mocks/adapter_olt.go b/rw_core/mocks/adapter_olt.go
index e13e774..a07d073 100644
--- a/rw_core/mocks/adapter_olt.go
+++ b/rw_core/mocks/adapter_olt.go
@@ -295,3 +295,33 @@
 	_ = valueflag
 	return nil, errors.New("get-ext-value-not-implemented")
 }
+
+func (oltA *OLTAdapter) Download_onu_image(ctx context.Context, request *voltha.DeviceImageDownloadRequest) (*voltha.DeviceImageResponse, error) { //nolint
+	_ = request
+	return nil, errors.New("download-onu-image-not-implemented")
+}
+
+func (oltA *OLTAdapter) Get_onu_image_status(ctx context.Context, in *voltha.DeviceImageRequest) (*voltha.DeviceImageResponse, error) { //nolint
+	_ = in
+	return nil, errors.New("get-onu-image-not-implemented")
+}
+
+func (oltA *OLTAdapter) Abort_onu_image_upgrade(ctx context.Context, in *voltha.DeviceImageRequest) (*voltha.DeviceImageResponse, error) { //nolint
+	_ = in
+	return nil, errors.New("abort-onu-image-upgrade-not-implemented")
+}
+
+func (oltA *OLTAdapter) Get_onu_images(ctx context.Context, deviceID string) (*voltha.OnuImages, error) { //nolint
+	_ = deviceID
+	return nil, errors.New("get-onu-images-not-implemented")
+}
+
+func (oltA *OLTAdapter) Activate_onu_image(ctx context.Context, in *voltha.DeviceImageRequest) (*voltha.DeviceImageResponse, error) { //nolint
+	_ = in
+	return nil, errors.New("activate-onu-image-not-implemented")
+}
+
+func (oltA *OLTAdapter) Commit_onu_image(ctx context.Context, in *voltha.DeviceImageRequest) (*voltha.DeviceImageResponse, error) { //nolint
+	_ = in
+	return nil, errors.New("commit-onu-image-not-implemented")
+}
diff --git a/rw_core/mocks/adapter_onu.go b/rw_core/mocks/adapter_onu.go
index fc24a3b..b1b004b 100644
--- a/rw_core/mocks/adapter_onu.go
+++ b/rw_core/mocks/adapter_onu.go
@@ -199,3 +199,34 @@
 	_ = valueflag
 	return nil, errors.New("get-ext-value-not-implemented")
 }
+
+func (onuA *ONUAdapter) Download_onu_image(ctx context.Context, request *voltha.DeviceImageDownloadRequest) (*voltha.DeviceImageResponse, error) { //nolint
+	logger.Infof(ctx, "Download_onu_image")
+	_ = request
+	return nil, errors.New("download-onu-image-not-implemented")
+}
+
+func (onuA *ONUAdapter) Get_onu_image_status(ctx context.Context, in *voltha.DeviceImageRequest) (*voltha.DeviceImageResponse, error) { //nolint
+	_ = in
+	return nil, errors.New("get-onu-image-not-implemented")
+}
+
+func (onuA *ONUAdapter) Abort_onu_image_upgrade(ctx context.Context, in *voltha.DeviceImageRequest) (*voltha.DeviceImageResponse, error) { //nolint
+	_ = in
+	return nil, errors.New("abort-onu-image-upgrade-not-implemented")
+}
+
+func (onuA *ONUAdapter) Get_onu_images(ctx context.Context, deviceID string) (*voltha.OnuImages, error) { //nolint
+	_ = deviceID
+	return nil, errors.New("get-onu-images-not-implemented")
+}
+
+func (onuA *ONUAdapter) Activate_onu_image(ctx context.Context, in *voltha.DeviceImageRequest) (*voltha.DeviceImageResponse, error) { //nolint
+	_ = in
+	return nil, errors.New("activate-onu-image-not-implemented")
+}
+
+func (onuA *ONUAdapter) Commit_onu_image(ctx context.Context, in *voltha.DeviceImageRequest) (*voltha.DeviceImageResponse, error) { //nolint
+	_ = in
+	return nil, errors.New("commit-onu-image-not-implemented")
+}
