diff --git a/protos/voltha_protos/adapter.proto b/protos/voltha_protos/adapter.proto
index 3b13266..cb4b9f9 100755
--- a/protos/voltha_protos/adapter.proto
+++ b/protos/voltha_protos/adapter.proto
@@ -1,13 +1,11 @@
 syntax = "proto3";
 
 option go_package = "github.com/opencord/voltha-protos/v5/go/voltha";
-option java_package = "org.opencord.voltha";
+option java_package = "org.opencord.voltha.adapter";
 option java_outer_classname = "VolthaAdapter";
 
-package voltha;
+package adapter;
 
-
-import "voltha_protos/meta.proto";
 import "google/protobuf/any.proto";
 
 message AdapterConfig {
@@ -22,15 +20,15 @@
 
     // the adapter ID has to be unique,
     // it will be generated as Type + CurrentReplica
-    string id = 1 [(access) = READ_ONLY];
-    string vendor = 2 [(access) = READ_ONLY];
-    string version = 3 [(access) = READ_ONLY];
+    string id = 1;
+    string vendor = 2;
+    string version = 3;
 
     // Adapter configuration
     AdapterConfig config = 16;
 
     // Custom descriptors and custom configuration
-    google.protobuf.Any additional_description = 64 [(access) = READ_ONLY];
+    google.protobuf.Any additional_description = 64;
 
     repeated string logical_device_ids = 4;  // Logical devices "owned"
 
diff --git a/protos/voltha_protos/adapter_service.proto b/protos/voltha_protos/adapter_service.proto
new file mode 100755
index 0000000..5ff553e
--- /dev/null
+++ b/protos/voltha_protos/adapter_service.proto
@@ -0,0 +1,88 @@
+syntax = "proto3";
+
+option go_package = "github.com/opencord/voltha-protos/v5/go/adapter_service";
+option java_package = "org.opencord.voltha.adapter_service";
+option java_outer_classname = "VolthaAdapterService";
+
+package adapter_service;
+
+import "google/protobuf/empty.proto";
+import "voltha_protos/common.proto";
+import "voltha_protos/core_adapter.proto";
+import "voltha_protos/device.proto";
+import "voltha_protos/extensions.proto";
+import "voltha_protos/health.proto";
+import "voltha_protos/voltha.proto";
+import "voltha_protos/omci_test.proto";
+import "voltha_protos/events.proto";
+
+// AdapterService is a gRPC service to serve requests from Voltha RW_Core.
+service AdapterService {
+    // GetHealthStatus is used by an AdapterService client to verify connectivity
+    // to the gRPC server hosting the AdapterService service
+    rpc GetHealthStatus(google.protobuf.Empty) returns (health.HealthStatus);
+
+    // Device
+    rpc AdoptDevice(device.Device) returns(google.protobuf.Empty);
+    rpc ReconcileDevice(device.Device) returns(google.protobuf.Empty);
+    rpc DeleteDevice(device.Device) returns(google.protobuf.Empty);
+    rpc DisableDevice(device.Device) returns(google.protobuf.Empty);
+    rpc ReEnableDevice(device.Device) returns(google.protobuf.Empty);
+    rpc RebootDevice(device.Device) returns(google.protobuf.Empty);
+    rpc SelfTestDevice(device.Device) returns(google.protobuf.Empty);
+    rpc GetOfpDeviceInfo(device.Device) returns(core_adapter.SwitchCapability);
+    rpc ChildDeviceLost(device.Device) returns(google.protobuf.Empty);
+
+    // Ports
+    rpc EnablePort(device.Port) returns(google.protobuf.Empty);
+    rpc DisablePort(device.Port) returns(google.protobuf.Empty);
+
+    // Flows
+    rpc UpdateFlowsBulk(core_adapter.BulkFlows) returns(google.protobuf.Empty);
+    rpc UpdateFlowsIncrementally(core_adapter.IncrementalFlows) returns(google.protobuf.Empty);
+
+    //Packets
+    rpc SendPacketOut(core_adapter.PacketOut) returns(google.protobuf.Empty);
+
+    // PM
+    rpc UpdatePmConfig(core_adapter.PmConfigsInfo) returns(google.protobuf.Empty);
+
+    // Image
+    rpc DownloadOnuImage(device.DeviceImageDownloadRequest) returns (device.DeviceImageResponse);
+    rpc GetOnuImageStatus(device.DeviceImageRequest) returns (device.DeviceImageResponse);
+    rpc AbortOnuImageUpgrade(device.DeviceImageRequest) returns (device.DeviceImageResponse);
+    rpc GetOnuImages(common.ID) returns (device.OnuImages);
+    rpc ActivateOnuImage(device.DeviceImageRequest) returns (device.DeviceImageResponse);
+    rpc CommitOnuImage(device.DeviceImageRequest) returns (device.DeviceImageResponse);
+
+    // Deprecated Image APIs
+    rpc DownloadImage(core_adapter.ImageDownloadMessage) returns (device.ImageDownload) {
+        option deprecated = true;
+    };
+    rpc GetImageDownloadStatus(core_adapter.ImageDownloadMessage) returns (device.ImageDownload) {
+        option deprecated = true;
+    };
+    rpc CancelImageDownload(core_adapter.ImageDownloadMessage) returns (device.ImageDownload) {
+        option deprecated = true;
+    };
+    rpc ActivateImageUpdate(core_adapter.ImageDownloadMessage) returns (device.ImageDownload) {
+        option deprecated = true;
+    };
+    rpc RevertImageUpdate(core_adapter.ImageDownloadMessage) returns (device.ImageDownload) {
+        option deprecated = true;
+    };
+
+    // Tests
+    rpc StartOmciTest(core_adapter.OMCITest) returns(omci.TestResponse);
+    rpc SimulateAlarm(core_adapter.SimulateAlarmMessage) returns (common.OperationResp);
+
+    // Events
+    rpc SuppressEvent(event.EventFilter) returns(google.protobuf.Empty);
+    rpc UnSuppressEvent(event.EventFilter) returns(google.protobuf.Empty);
+
+    // Get/Set
+    rpc GetExtValue(core_adapter.GetExtValueMessage) returns (extension.ReturnValues);
+    rpc SetExtValue(core_adapter.SetExtValueMessage) returns (google.protobuf.Empty);
+    rpc GetSingleValue(extension.SingleGetValueRequest) returns (extension.SingleGetValueResponse);
+    rpc SetSingleValue(extension.SingleSetValueRequest) returns (extension.SingleSetValueResponse);
+}
diff --git a/protos/voltha_protos/adapter_services.proto b/protos/voltha_protos/adapter_services.proto
deleted file mode 100755
index 967511e..0000000
--- a/protos/voltha_protos/adapter_services.proto
+++ /dev/null
@@ -1,99 +0,0 @@
-syntax = "proto3";
-
-option go_package = "github.com/opencord/voltha-protos/v5/go/adapter_services";
-option java_package = "org.opencord.adapter_services";
-option java_outer_classname = "VolthaAdapterServices";
-
-package voltha;
-
-import "google/protobuf/empty.proto";
-import  "voltha_protos/common.proto";
-import  "voltha_protos/inter_container.proto";
-import "voltha_protos/device.proto";
-import "voltha_protos/extensions.proto";
-import "voltha_protos/openolt.proto";
-import "voltha_protos/health.proto";
-import "voltha_protos/voltha.proto";
-
-// Service waiting for Core requests
-service AdapterService {
-    // GetHealthStatus is used by an AdapterService client to verify connectivity
-    // to the gRPC server hosting the AdapterService service
-    rpc GetHealthStatus(google.protobuf.Empty) returns (HealthStatus);
-
-    // Device
-    rpc AdoptDevice(Device) returns(google.protobuf.Empty);
-    rpc ReconcileDevice(Device) returns(google.protobuf.Empty);
-    rpc DeleteDevice(Device) returns(google.protobuf.Empty);
-    rpc DisableDevice(Device) returns(google.protobuf.Empty);
-    rpc ReEnableDevice(Device) returns(google.protobuf.Empty);
-    rpc RebootDevice(Device) returns(google.protobuf.Empty);
-    rpc SelfTestDevice(Device) returns(google.protobuf.Empty);
-    rpc GetOfpDeviceInfo(Device) returns(SwitchCapability);
-    rpc ChildDeviceLost(Device) returns(google.protobuf.Empty);
-
-    // Ports
-    rpc EnablePort(Port) returns(google.protobuf.Empty);
-    rpc DisablePort(Port) returns(google.protobuf.Empty);
-
-    // Flows
-    rpc UpdateFlowsBulk(BulkFlows) returns(google.protobuf.Empty);
-    rpc UpdateFlowsIncrementally(IncrementalFlows) returns(google.protobuf.Empty);
-
-    //Packets
-    rpc SendPacketOut(PacketOut) returns(google.protobuf.Empty);
-
-    // PM
-    rpc UpdatePmConfig(PmConfigsInfo) returns(google.protobuf.Empty);
-
-    // Image
-    rpc DownloadOnuImage(DeviceImageDownloadRequest) returns (DeviceImageResponse);
-    rpc GetOnuImageStatus(DeviceImageRequest) returns (DeviceImageResponse);
-    rpc AbortOnuImageUpgrade(DeviceImageRequest) returns (DeviceImageResponse);
-    rpc GetOnuImages(common.ID) returns (OnuImages);
-    rpc ActivateOnuImage(DeviceImageRequest) returns (DeviceImageResponse);
-    rpc CommitOnuImage(DeviceImageRequest) returns (DeviceImageResponse);
-
-    // Deprecated Image APIs
-    rpc DownloadImage(ImageDownloadMessage) returns (ImageDownload);
-    rpc GetImageDownloadStatus(ImageDownloadMessage) returns (ImageDownload);
-    rpc CancelImageDownload(ImageDownloadMessage) returns (ImageDownload);
-    rpc ActivateImageUpdate(ImageDownloadMessage) returns (ImageDownload);
-    rpc RevertImageUpdate(ImageDownloadMessage) returns (ImageDownload);
-
-    // Tests
-    rpc StartOmciTest(OMCITest) returns(TestResponse);
-    rpc SimulateAlarm(SimulateAlarmMessage) returns (common.OperationResp);
-
-    // Events
-    rpc SuppressEvent(EventFilter) returns(google.protobuf.Empty);
-    rpc UnSuppressEvent(EventFilter) returns(google.protobuf.Empty);
-
-    // Get/Set
-    rpc GetExtValue(GetExtValueMessage) returns (common.ReturnValues);
-    rpc SetExtValue(SetExtValueMessage) returns (google.protobuf.Empty);
-    rpc GetSingleValue(extension.SingleGetValueRequest) returns (extension.SingleGetValueResponse);
-    rpc SetSingleValue(extension.SingleSetValueRequest) returns (extension.SingleSetValueResponse);
-}
-
-
-service OnuInterAdapterService {
-    // GetHealthStatus is used by an OnuInterAdapterService client to verify connectivity
-    // to the gRPC server hosting the OnuInterAdapterService service
-    rpc GetHealthStatus(google.protobuf.Empty) returns (HealthStatus);
-
-    rpc OnuIndication(OnuIndicationMessage) returns (google.protobuf.Empty);
-    rpc OmciIndication(OmciMessage) returns (google.protobuf.Empty);
-    rpc DownloadTechProfile(TechProfileDownloadMessage) returns (google.protobuf.Empty);
-    rpc DeleteGemPort(DeleteGemPortMessage) returns (google.protobuf.Empty);
-    rpc DeleteTCont(DeleteTcontMessage) returns (google.protobuf.Empty);
-}
-
-service OltInterAdapterService {
-    // GetHealthStatus is used by an OltInterAdapterService client to verify connectivity
-    // to the gRPC server hosting the OltInterAdapterService service
-    rpc GetHealthStatus(google.protobuf.Empty) returns (HealthStatus);
-
-    rpc ProxyOmciRequest(OmciMessage) returns (google.protobuf.Empty);
-    rpc GetTechProfileInstance(TechProfileInstanceRequestMessage) returns (TechProfileDownloadMessage);
-}
\ No newline at end of file
diff --git a/protos/voltha_protos/common.proto b/protos/voltha_protos/common.proto
index 19d81d7..9efbdd9 100755
--- a/protos/voltha_protos/common.proto
+++ b/protos/voltha_protos/common.proto
@@ -100,28 +100,4 @@
     // Additional Info
     string additional_info = 2;
 }
-message ValueType {
-        enum Type {
-                EMPTY = 0;
-                DISTANCE = 1;
-        }
-}
-message ValueSpecifier {
-	string id = 1;
-	ValueType.Type value = 2;
-}
 
-message ReturnValues {
-        uint32  Set = 1;       // Specifies what values are
-                               // set/valid in return
-
-        uint32 Unsupported = 2; // Specifies requested values not
-                                // supported by the device
-
-        uint32 Error  = 3;      // Specifies requested values not
-                                // fetched because of error
-
-        uint32 Distance = 4;    // Value of distance Set includes
-                                // DISTANCE
-
-}
diff --git a/protos/voltha_protos/core.proto b/protos/voltha_protos/core.proto
index ad8f83a..c0563c7 100755
--- a/protos/voltha_protos/core.proto
+++ b/protos/voltha_protos/core.proto
@@ -3,13 +3,7 @@
 option go_package = "github.com/opencord/voltha-protos/v5/go/core";
 option java_package = "org.opencord.voltha.core";
 
-import "google/protobuf/empty.proto";
-import "voltha_protos/inter_container.proto";
-import "voltha_protos/common.proto";
-import "voltha_protos/device.proto";
-import "voltha_protos/health.proto";
-
-package voltha;
+package core;
 
 message DeviceTransientState {
     // Transient State for devices
@@ -27,38 +21,8 @@
 	DELETING_POST_ADAPTER_RESPONSE = 4;
 	// State to represent that the device deletion is failed
 	DELETE_FAILED = 5;
-        // State to represent that reconcile is in progress
-        RECONCILE_IN_PROGRESS = 6;
+    // State to represent that reconcile is in progress
+    RECONCILE_IN_PROGRESS = 6;
     }
     Types transient_state = 1;
 }
-
-service CoreService {
-	//	 in coreProxy interface
-	rpc GetHealthStatus(google.protobuf.Empty) returns (HealthStatus);
-	rpc RegisterAdapter (AdapterRegistration) returns (google.protobuf.Empty);
-	rpc DeviceUpdate (Device) returns (google.protobuf.Empty);
-	rpc PortCreated (Port) returns (google.protobuf.Empty);
-	rpc PortsStateUpdate (PortStateFilter) returns (google.protobuf.Empty);
-	rpc DeleteAllPorts (common.ID) returns (google.protobuf.Empty);
-	rpc GetDevicePort (PortFilter) returns (Port);
-	rpc ListDevicePorts (common.ID) returns (Ports);
-	rpc DeviceStateUpdate (DeviceStateFilter) returns (google.protobuf.Empty);
-	rpc DevicePMConfigUpdate (PmConfigs) returns (google.protobuf.Empty);
-	rpc ChildDeviceDetected (DeviceDiscovery) returns (Device);
-	rpc ChildDevicesLost (common.ID) returns (google.protobuf.Empty);
-	rpc ChildDevicesDetected (common.ID) returns (google.protobuf.Empty);
-	rpc GetDevice (common.ID) returns (Device);
-	rpc GetChildDevice (ChildDeviceFilter) returns (Device);
-	rpc GetChildDevices (common.ID) returns (Devices);
-	rpc SendPacketIn (PacketIn) returns (google.protobuf.Empty);
-	rpc DeviceReasonUpdate (DeviceReason) returns (google.protobuf.Empty);
-	rpc PortStateUpdate (PortState) returns (google.protobuf.Empty);
-
-	// Additional API found in the Core - unused?
-	rpc ReconcileChildDevices (common.ID) returns (google.protobuf.Empty);
-	rpc GetChildDeviceWithProxyAddress (Device.ProxyAddress) returns (Device);
-	rpc GetPorts (PortFilter) returns (Ports);
-	rpc ChildrenStateUpdate (DeviceStateFilter) returns (google.protobuf.Empty);
-	rpc UpdateImageDownload (ImageDownload) returns (google.protobuf.Empty);
-}
\ No newline at end of file
diff --git a/protos/voltha_protos/core_adapter.proto b/protos/voltha_protos/core_adapter.proto
new file mode 100755
index 0000000..e58aaaa
--- /dev/null
+++ b/protos/voltha_protos/core_adapter.proto
@@ -0,0 +1,131 @@
+syntax = "proto3";
+
+option go_package = "github.com/opencord/voltha-protos/v5/go/core_adapter";
+option java_package = "org.opencord.voltha.core_adapter";
+
+import "voltha_protos/common.proto";
+import "voltha_protos/voltha.proto";
+import "voltha_protos/openflow_13.proto";
+import "voltha_protos/adapter.proto";
+import "voltha_protos/device.proto";
+import "voltha_protos/extensions.proto";
+import "voltha_protos/omci_test.proto";
+
+package core_adapter;
+
+// Core-Adapter messages
+
+message AdapterRegistration {
+    adapter.Adapter adapter  = 1;
+    device.DeviceTypes dTypes = 2;
+}
+
+message ChildDeviceFilter {
+    string parent_id = 1;
+    string serial_number = 2;
+    uint32 onu_id = 3;
+    uint32 parent_port_no = 4;
+}
+
+message PortFilter {
+    string device_id = 1;
+    uint32 port = 2;
+    device.Port.PortType port_type = 3;
+}
+
+message DeviceDiscovery {
+    string parent_id = 1;
+    uint32 parent_port_no = 2;
+    string child_device_type = 3;
+    uint32 channel_id = 4;
+    string vendor_id = 5;
+    string serial_number = 6;
+    uint32 onu_id = 7;
+}
+
+message DeviceStateFilter {
+    string device_id = 1;
+    string parent_device_id = 2;
+    common.OperStatus.Types oper_status = 3;
+    common.ConnectStatus.Types conn_status = 4;
+}
+
+message PortState {
+    string device_id = 1;
+    device.Port.PortType port_type = 2;
+    uint32 port_no = 3;
+    common.OperStatus.Types oper_status = 4;
+}
+
+message PortStateFilter {
+    string device_id = 1;
+    uint32 port_type_filter = 2;
+    common.OperStatus.Types oper_status = 4;
+}
+
+message PacketIn {
+    string device_id = 1;
+    uint32 port = 2;
+    bytes packet = 3;
+}
+
+message PacketOut {
+    string device_id = 1;
+    uint32 egress_port_no = 2;
+    openflow_13.ofp_packet_out packet = 3;
+}
+
+message DeviceReason {
+    string device_id = 1;
+    string reason = 2;
+}
+
+message BulkFlows {
+    device.Device device = 1;
+    openflow_13.Flows flows = 2;
+    openflow_13.FlowGroups groups = 3;
+    openflow_13.FlowMetadata flow_metadata = 4;
+}
+
+message IncrementalFlows {
+    device.Device device = 1;
+    openflow_13.FlowChanges flows = 2;
+    openflow_13.FlowGroupChanges groups = 3;
+    openflow_13.FlowMetadata flow_metadata = 4;
+}
+
+message PmConfigsInfo {
+    string device_id = 1;
+    device.PmConfigs pm_configs = 2;
+}
+
+message SwitchCapability {
+    openflow_13.ofp_desc desc = 1;
+    openflow_13.ofp_switch_features switch_features = 2;
+}
+
+message ImageDownloadMessage {
+    device.Device device = 1;
+    device.ImageDownload image = 2;
+}
+
+message OMCITest {
+    device.Device device = 1;
+    omci.OmciTestRequest request = 2;
+}
+
+message SimulateAlarmMessage {
+    device.Device device = 1;
+    device.SimulateAlarmRequest request = 2;
+}
+
+message GetExtValueMessage {
+    device.Device parent_device = 1;
+    device.Device child_device = 2;
+    extension.ValueType.Type value_type=3;
+}
+
+message SetExtValueMessage {
+    device.Device device = 1;
+    extension.ValueSet value=3;
+}
diff --git a/protos/voltha_protos/core_services.proto b/protos/voltha_protos/core_services.proto
new file mode 100755
index 0000000..b6c16da
--- /dev/null
+++ b/protos/voltha_protos/core_services.proto
@@ -0,0 +1,45 @@
+syntax = "proto3";
+
+option go_package = "github.com/opencord/voltha-protos/v5/go/core_service";
+option java_package = "org.opencord.voltha.core_service";
+option java_outer_classname = "VolthaCoreService";
+
+package core_service;
+
+import "google/protobuf/empty.proto";
+import "voltha_protos/core_adapter.proto";
+import "voltha_protos/common.proto";
+import "voltha_protos/device.proto";
+import "voltha_protos/health.proto";
+
+// The CoreService is a gRPC service implemented by the Voltha RW-Core for the
+// sole purpose of serving requests/updates from the Voltha adapters. 
+service CoreService {
+	//	 in coreProxy interface
+	rpc GetHealthStatus(google.protobuf.Empty) returns (health.HealthStatus);
+	rpc RegisterAdapter (core_adapter.AdapterRegistration) returns (google.protobuf.Empty);
+	rpc DeviceUpdate (device.Device) returns (google.protobuf.Empty);
+	rpc PortCreated (device.Port) returns (google.protobuf.Empty);
+	rpc PortsStateUpdate (core_adapter.PortStateFilter) returns (google.protobuf.Empty);
+	rpc DeleteAllPorts (common.ID) returns (google.protobuf.Empty);
+	rpc GetDevicePort (core_adapter.PortFilter) returns (device.Port);
+	rpc ListDevicePorts (common.ID) returns (device.Ports);
+	rpc DeviceStateUpdate (core_adapter.DeviceStateFilter) returns (google.protobuf.Empty);
+	rpc DevicePMConfigUpdate (device.PmConfigs) returns (google.protobuf.Empty);
+	rpc ChildDeviceDetected (core_adapter.DeviceDiscovery) returns (device.Device);
+	rpc ChildDevicesLost (common.ID) returns (google.protobuf.Empty);
+	rpc ChildDevicesDetected (common.ID) returns (google.protobuf.Empty);
+	rpc GetDevice (common.ID) returns (device.Device);
+	rpc GetChildDevice (core_adapter.ChildDeviceFilter) returns (device.Device);
+	rpc GetChildDevices (common.ID) returns (device.Devices);
+	rpc SendPacketIn (core_adapter.PacketIn) returns (google.protobuf.Empty);
+	rpc DeviceReasonUpdate (core_adapter.DeviceReason) returns (google.protobuf.Empty);
+	rpc PortStateUpdate (core_adapter.PortState) returns (google.protobuf.Empty);
+
+	// Additional API found in the Core - unused?
+	rpc ReconcileChildDevices (common.ID) returns (google.protobuf.Empty);
+	rpc GetChildDeviceWithProxyAddress (device.Device.ProxyAddress) returns (device.Device);
+	rpc GetPorts (core_adapter.PortFilter) returns (device.Ports);
+	rpc ChildrenStateUpdate (core_adapter.DeviceStateFilter) returns (google.protobuf.Empty);
+	rpc UpdateImageDownload (device.ImageDownload) returns (google.protobuf.Empty);
+}
\ No newline at end of file
diff --git a/protos/voltha_protos/device.proto b/protos/voltha_protos/device.proto
index f1ac063..9f05ed9 100755
--- a/protos/voltha_protos/device.proto
+++ b/protos/voltha_protos/device.proto
@@ -1,15 +1,14 @@
 syntax = "proto3";
 
 option go_package = "github.com/opencord/voltha-protos/v5/go/voltha";
-option java_package = "org.opencord.voltha";
+option java_package = "org.opencord.voltha.device";
 option java_outer_classname = "VolthaDevice";
 
-package voltha;
+package device;
 
 import "google/protobuf/any.proto";
 
 import "voltha_protos/common.proto";
-import "voltha_protos/meta.proto";
 import "voltha_protos/openflow_13.proto";
 
 // A Device Type
@@ -67,9 +66,9 @@
     string id = 1; // To work around a chameleon POST bug
     uint32 default_freq = 2; // Default sample rate
     // Forces group names and group semantics
-    bool grouped = 3 [(access) = READ_ONLY];
+    bool grouped = 3;
     // Allows Pm to set an individual sample frequency
-    bool freq_override = 4 [(access) = READ_ONLY];
+    bool freq_override = 4;
     repeated PmGroupConfig groups = 5; // The groups if grouped is true
     repeated PmConfig metrics = 6; // The metrics themselves if grouped is false.
     uint32 max_skew = 7; //Default value is set to 5 seconds
@@ -135,6 +134,7 @@
 // Older version of the API please see DeviceImageDownloadRequest
 // Deprecated in voltha 2.8, will be removed
 message ImageDownload {
+    option deprecated = true;
     enum ImageDownloadState {
         DOWNLOAD_UNKNOWN = 0;
         DOWNLOAD_SUCCEEDED = 1;
@@ -206,6 +206,7 @@
 
 // Deprecated in voltha 2.8, will be removed
 message ImageDownloads {
+    option deprecated = true;
     repeated ImageDownload items = 2;
 }
 
@@ -338,33 +339,33 @@
 // A Physical Device instance
 message Device {
     // Voltha's device identifier
-    string id = 1 [(access) = READ_ONLY];
+    string id = 1 ;
 
     // Device type, refers to one of the registered device types
-    string type = 2 [(access) = READ_ONLY];
+    string type = 2 ;
 
     // Is this device a root device. Each logical switch has one root
     // device that is associated with the logical flow switch.
-    bool root = 3 [(access) = READ_ONLY];
+    bool root = 3 ;
 
     // Parent device id, in the device tree (for a root device, the parent_id
     // is the logical_device.id)
-    string parent_id = 4 [(access) = READ_ONLY];
-    uint32 parent_port_no = 20 [(access) = READ_ONLY];
+    string parent_id = 4;
+    uint32 parent_port_no = 20;
 
     // Vendor, version, serial number, etc.
-    string vendor = 5 [(access) = READ_ONLY];
-    string model = 6 [(access) = READ_ONLY];
-    string hardware_version = 7 [(access) = READ_ONLY];
-    string firmware_version = 8 [(access) = READ_ONLY];
+    string vendor = 5;
+    string model = 6;
+    string hardware_version = 7;
+    string firmware_version = 8;
     // List of software on the device
-    Images images = 9 [(access) = READ_ONLY];
-    string serial_number = 10 [(access) = READ_ONLY];
-    string vendor_id = 24 [(access) = READ_ONLY];
+    Images images = 9;
+    string serial_number = 10;
+    string vendor_id = 24;
 
-    // Adapter that takes care of device
-    // Deprecated and replaced by adapter_endpoint
-    string adapter = 11 [(access) = READ_ONLY];
+    // adapter is deprecated and replaced by adapter_endpoint
+    reserved 11;
+    //string adapter = 11;
 
     // Indicates how to reach the adapter instance that manages this device
     string adapter_endpoint = 25;
@@ -404,25 +405,72 @@
 
     common.AdminState.Types admin_state = 16;
 
-    common.OperStatus.Types oper_status = 17 [(access) = READ_ONLY];
+    common.OperStatus.Types oper_status = 17 ;
 
-    string reason = 22 [(access) = READ_ONLY];  //  Used in FAILED state
+    string reason = 22 ;  //  Used in FAILED state
 
-    common.ConnectStatus.Types connect_status = 18 [(access) = READ_ONLY];
+    common.ConnectStatus.Types connect_status = 18 ;
 
     // TODO additional common attribute here
 
     // Device type specific attributes
     google.protobuf.Any custom = 64;
 
-    // PmConfigs will eventually converted to a child node of the
-    // device to falicitata callbacks and to simplify manipulation.
-    PmConfigs pm_configs = 131 [(child_node) = {}];
+    // PmConfigs type
+    PmConfigs pm_configs = 131 ;
 
-    repeated ImageDownload image_downloads = 133 [(child_node) = {key: "name"}];
+    repeated ImageDownload image_downloads = 133;
 
 }
 
+message DeviceImageDownloadRequest {
+
+    // Device Id
+    // allows for operations on multiple devices.
+    repeated common.ID device_id = 1;
+
+    //The image for the device containing all the information
+    Image image = 2;
+
+    //Activate the image if the download to the device is successful
+    bool activateOnSuccess = 3;
+
+    //Automatically commit the image if the activation on the device is successful
+    bool commitOnSuccess = 4;
+}
+
+message DeviceImageRequest {
+
+    //Device Id
+    //allows for operations on multiple adapters.
+    repeated common.ID device_id = 1;
+
+    // Image Version, this is the sole identifier of the image. it's the vendor specified OMCI version
+    // must be known at the time of initiating a download, activate, commit image on an onu.
+    string version = 2;
+
+    //Automatically commit the image if the activation on the device is successful
+    bool commitOnSuccess = 3;
+}
+
+message DeviceImageResponse {
+
+    //Image state for the different devices
+    repeated DeviceImageState device_image_states = 1;
+}
+
+// Device Self Test Response
+message SelfTestResponse {
+
+	enum SelfTestResult  {
+	    SUCCESS = 0;
+	    FAILURE = 1;
+	    NOT_SUPPORTED = 2;
+	    UNKNOWN_ERROR = 3;
+    }
+    SelfTestResult result = 1;
+}
+
 message Devices {
     repeated Device items = 1;
 }
diff --git a/protos/voltha_protos/events.proto b/protos/voltha_protos/events.proto
index e9d36ba..9376805 100755
--- a/protos/voltha_protos/events.proto
+++ b/protos/voltha_protos/events.proto
@@ -1,15 +1,43 @@
 syntax = "proto3";
 
 option go_package = "github.com/opencord/voltha-protos/v5/go/voltha";
-option java_package = "org.opencord.voltha";
+option java_package = "org.opencord.voltha.events";
 
-package voltha;
+package event;
 
-import "voltha_protos/meta.proto";
 import "google/api/annotations.proto";
 import "google/protobuf/timestamp.proto";
 import "voltha_protos/common.proto";
 
+
+message EventFilterRuleKey {
+
+    enum EventFilterRuleType {
+        filter_all = 0;
+        category = 1;
+        sub_category = 2;
+        kpi_event_type = 3;
+        config_event_type = 4;
+        device_event_type = 5;
+    }
+}
+
+message EventFilterRule {
+    EventFilterRuleKey.EventFilterRuleType key = 1;
+    string value = 2;
+}
+message EventFilter {
+    string id = 1 ;
+    bool enable = 2;
+    string device_id = 3;
+    string event_type = 4;
+    repeated EventFilterRule rules = 5;
+}
+
+message EventFilters {
+    repeated EventFilter filters = 1;
+}
+
 message ConfigEventType {
     enum Types {
         add = 0; // A new config has been added
diff --git a/protos/voltha_protos/extensions.proto b/protos/voltha_protos/extensions.proto
index 81c7942..9e5b0c1 100755
--- a/protos/voltha_protos/extensions.proto
+++ b/protos/voltha_protos/extensions.proto
@@ -19,9 +19,43 @@
 
 package extension;
 
-import public "voltha_protos/ext_config.proto";
+import "voltha_protos/ext_config.proto";
 import "google/protobuf/empty.proto";
 
+message ValueSet {
+    string id = 1;
+    oneof value{
+        config.AlarmConfig alarm_config = 2;
+    }
+}
+
+message ValueType {
+    enum Type {
+            EMPTY = 0;
+            DISTANCE = 1;
+    }
+}
+
+message ValueSpecifier {
+    string id = 1;
+    ValueType.Type value = 2;
+}
+
+message ReturnValues {
+    uint32  Set = 1;       // Specifies what values are
+                           // set/valid in return
+
+    uint32 Unsupported = 2; // Specifies requested values not
+                            // supported by the device
+
+    uint32 Error  = 3;      // Specifies requested values not
+                            // fetched because of error
+
+    uint32 Distance = 4;    // Value of distance Set includes
+                            // DISTANCE
+
+}
+
 message GetDistanceRequest {
     string onuDeviceId = 1;
 }
diff --git a/protos/voltha_protos/health.proto b/protos/voltha_protos/health.proto
index 8ed3cbc..d152d9a 100755
--- a/protos/voltha_protos/health.proto
+++ b/protos/voltha_protos/health.proto
@@ -1,13 +1,12 @@
 syntax = "proto3";
 
-option go_package = "github.com/opencord/voltha-protos/v5/go/voltha";
-option java_package = "org.opencord.voltha";
+option go_package = "github.com/opencord/voltha-protos/v5/go/health";
+option java_package = "org.opencord.voltha.health";
 
-package voltha;
+package health;
 
 import "google/api/annotations.proto";
 import "google/protobuf/empty.proto";
-import "voltha_protos/meta.proto";
 
 // Encode health status of a Voltha instance
 message HealthStatus {
@@ -20,7 +19,7 @@
     }
 
     // Current state of health of this Voltha instance
-    HealthState state = 1 [(access) = READ_ONLY];
+    HealthState state = 1 ;
 }
 
 // Health related services
diff --git a/protos/voltha_protos/ietf_interfaces.proto b/protos/voltha_protos/ietf_interfaces.proto
index 89f59b9..51b1612 100755
--- a/protos/voltha_protos/ietf_interfaces.proto
+++ b/protos/voltha_protos/ietf_interfaces.proto
@@ -1,7 +1,7 @@
 syntax = "proto3";
 
 option go_package = "github.com/opencord/voltha-protos/v5/go/ietf";
-option java_package = "org.opencord.voltha";
+option java_package = "org.opencord.voltha.ietf";
 
 package ietf;
 
diff --git a/protos/voltha_protos/inter_adapter.proto b/protos/voltha_protos/inter_adapter.proto
new file mode 100755
index 0000000..e622ce9
--- /dev/null
+++ b/protos/voltha_protos/inter_adapter.proto
@@ -0,0 +1,61 @@
+syntax = "proto3";
+
+option go_package = "github.com/opencord/voltha-protos/v5/go/inter_adapter";
+option java_package = "org.opencord.voltha.inter_adapter";
+
+import "voltha_protos/common.proto";
+import "voltha_protos/voltha.proto";
+import "voltha_protos/tech_profile.proto";
+import "voltha_protos/openolt.proto";
+import "voltha_protos/device.proto";
+
+package inter_adapter;
+
+
+// Inter-Adapter messages
+
+message OmciMessage {
+    bytes message = 1;
+    common.ConnectStatus.Types connect_status = 2;
+    device.Device.ProxyAddress proxy_address = 3;
+    string parent_device_id = 4;
+    string child_device_id = 5;
+}
+
+message TechProfileDownloadMessage {
+    string device_id = 1;
+    uint32 uni_id = 2;
+    string tp_instance_path = 3;
+    oneof tech_tp_instance {
+        tech_profile.TechProfileInstance tp_instance = 4; // relevant for GPON, XGPON and XGS-PON technologies
+        tech_profile.EponTechProfileInstance epon_tp_instance = 5; // relevant for EPON technology
+    }
+}
+
+message DeleteGemPortMessage {
+    string device_id = 1;
+    uint32 uni_id = 2;
+    string tp_instance_path = 3;
+    uint32 gem_port_id = 4;
+}
+
+message DeleteTcontMessage {
+    string device_id = 1;
+    uint32 uni_id = 2;
+    string tp_instance_path = 3;
+    uint32 alloc_id = 4;
+}
+
+message OnuIndicationMessage {
+    string device_id = 1;
+    openolt.OnuIndication onu_indication = 2;
+}
+
+message TechProfileInstanceRequestMessage {
+    string device_id = 1;
+    string tp_instance_path = 2; // technology profile instance path
+    string parent_device_id = 3;
+    uint32 parent_pon_port = 4;
+    uint32 onu_id = 5;
+    uint32 uni_id = 6;
+}
\ No newline at end of file
diff --git a/protos/voltha_protos/inter_container.proto b/protos/voltha_protos/inter_container.proto
deleted file mode 100755
index 6c946af..0000000
--- a/protos/voltha_protos/inter_container.proto
+++ /dev/null
@@ -1,186 +0,0 @@
-syntax = "proto3";
-
-option go_package = "github.com/opencord/voltha-protos/v5/go/inter_container";
-option java_package = "org.opencord.voltha";
-
-import "voltha_protos/common.proto";
-import "voltha_protos/voltha.proto";
-import "voltha_protos/openflow_13.proto";
-import "voltha_protos/tech_profile.proto";
-import "voltha_protos/openolt.proto";
-import "voltha_protos/adapter.proto";
-import "voltha_protos/device.proto";
-
-package voltha;
-
-//
-// Core-Adapter messages
-// ****
-// ****
-// ****
-message AdapterRegistration {
-    Adapter adapter  = 1;
-    DeviceTypes dTypes = 2;
-}
-
-message ChildDeviceFilter {
-    string parent_id = 1;
-    string serial_number = 2;
-    uint32 onu_id = 3;
-    uint32 parent_port_no = 4;
-}
-
-message PortFilter {
-    string device_id = 1;
-    uint32 port = 2;
-    Port.PortType port_type = 3;
-}
-
-message DeviceDiscovery {
-    string parent_id = 1;
-    uint32 parent_port_no = 2;
-    string child_device_type = 3;
-    uint32 channel_id = 4;
-    string vendor_id = 5;
-    string serial_number = 6;
-    uint32 onu_id = 7;
-}
-
-message DeviceStateFilter {
-    string device_id = 1;
-    string parent_device_id = 2;
-    common.OperStatus.Types oper_status = 3;
-    common.ConnectStatus.Types conn_status = 4;
-}
-
-message PortState {
-    string device_id = 1;
-    Port.PortType port_type = 2;
-    uint32 port_no = 3;
-    common.OperStatus.Types oper_status = 4;
-}
-
-message PortStateFilter {
-    string device_id = 1;
-    uint32 port_type_filter = 2;
-    common.OperStatus.Types oper_status = 4;
-}
-
-message PacketIn {
-    string device_id = 1;
-    uint32 port = 2;
-    bytes packet = 3;
-}
-
-message PacketOut {
-    string device_id = 1;
-    uint32 egress_port_no = 2;
-    openflow_13.ofp_packet_out packet = 3;
-}
-
-message DeviceReason {
-    string device_id = 1;
-    string reason = 2;
-}
-
-message BulkFlows {
-    Device device = 1;
-    openflow_13.Flows flows = 2;
-    openflow_13.FlowGroups groups = 3;
-    voltha.FlowMetadata flow_metadata = 4;
-}
-
-message IncrementalFlows {
-    Device device = 1;
-    openflow_13.FlowChanges flows = 2;
-    openflow_13.FlowGroupChanges groups = 3;
-    voltha.FlowMetadata flow_metadata = 4;
-}
-
-message PmConfigsInfo {
-    string device_id = 1;
-    PmConfigs pm_configs = 2;
-}
-
-message SwitchCapability {
-    openflow_13.ofp_desc desc = 1;
-    openflow_13.ofp_switch_features switch_features = 2;
-}
-
-message ImageDownloadMessage {
-    Device device = 1;
-    ImageDownload image = 2;
-}
-
-message OMCITest {
-    Device device = 1;
-    OmciTestRequest request = 2;
-}
-
-message SimulateAlarmMessage {
-    Device device = 1;
-    SimulateAlarmRequest request = 2;
-}
-
-message GetExtValueMessage {
-    Device parent_device = 1;
-    Device child_device = 2;
-    common.ValueType.Type value_type=3;
-}
-
-message SetExtValueMessage {
-    Device device = 1;
-    ValueSet value=3;
-}
-
-//
-// Inter-Adapter messages
-// ****
-// ****
-// ****
-
-message OmciMessage {
-    bytes message = 1;
-    common.ConnectStatus.Types connect_status = 2;
-    voltha.Device.ProxyAddress proxy_address = 3;
-    string parent_device_id = 4;
-    string child_device_id = 5;
-}
-
-message TechProfileDownloadMessage {
-    string device_id = 1;
-    uint32 uni_id = 2;
-    string tp_instance_path = 3;
-    oneof tech_tp_instance {
-        tech_profile.TechProfileInstance tp_instance = 4; // relevant for GPON, XGPON and XGS-PON technologies
-        tech_profile.EponTechProfileInstance epon_tp_instance = 5; // relevant for EPON technology
-    }
-}
-
-message DeleteGemPortMessage {
-    string device_id = 1;
-    uint32 uni_id = 2;
-    string tp_instance_path = 3;
-    uint32 gem_port_id = 4;
-}
-
-message DeleteTcontMessage {
-    string device_id = 1;
-    uint32 uni_id = 2;
-    string tp_instance_path = 3;
-    uint32 alloc_id = 4;
-}
-
-message OnuIndicationMessage {
-    string device_id = 1;
-    openolt.OnuIndication onu_indication = 2;
-}
-
-message TechProfileInstanceRequestMessage {
-    string device_id = 1;
-    string tp_instance_path = 2; // technology profile instance path
-    string parent_device_id = 3;
-    uint32 parent_pon_port = 4;
-    uint32 onu_id = 5;
-    uint32 uni_id = 6;
-}
\ No newline at end of file
diff --git a/protos/voltha_protos/logical_device.proto b/protos/voltha_protos/logical_device.proto
index 9931251..dddcbb0 100755
--- a/protos/voltha_protos/logical_device.proto
+++ b/protos/voltha_protos/logical_device.proto
@@ -1,13 +1,12 @@
 syntax = "proto3";
 
 option go_package = "github.com/opencord/voltha-protos/v5/go/voltha";
-option java_package = "org.opencord.voltha";
+option java_package = "org.opencord.voltha.logical_device";
 option java_outer_classname = "OFLogicalDevice";
 
-package voltha;
+package logical_device;
 
 import "google/api/annotations.proto";
-import "voltha_protos/meta.proto";
 import "voltha_protos/openflow_13.proto";
 
 message LogicalPortId {
diff --git a/protos/voltha_protos/meta.proto b/protos/voltha_protos/meta.proto
deleted file mode 100755
index 4dd6d5d..0000000
--- a/protos/voltha_protos/meta.proto
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2015, Google Inc.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// This file contains annotation definitions that can be used to describe
-// a configuration tree.
-
-syntax = "proto3";
-
-option go_package = "github.com/opencord/voltha-protos/v5/go/common";
-option java_package = "org.opencord.voltha.common";
-
-package voltha;
-
-import "google/protobuf/descriptor.proto";
-
-message ChildNode {
-    string key = 1;
-}
-
-enum Access {
-
-    // read-write, stored attribute
-    CONFIG = 0;
-
-    // read-only field, stored with the model, covered by its hash
-    READ_ONLY = 1;
-
-    // A read-only attribute that is not stored in the model, not covered
-    // by its hash, its value is filled real-time upon each request.
-    REAL_TIME = 2;
-
-}
-
-extend google.protobuf.FieldOptions {
-
-    // If present, it indicates that this field is stored as external child node
-    // or children nodes in Voltha's internal configuration tree.
-    // If the field is a container field and if the option specifies a key
-    // the child objects will be addressible by that key.
-    ChildNode child_node = 7761772;
-
-    // This annotation can be used to indicate that a field is read-only,
-    // from the perspective of NBI access. Backend plugins and system
-    // internals can update the field but the update requests through the
-    // NBI will ignore for instance a field that is marked as read-only (RO).
-    Access access = 7761773;
-}
diff --git a/protos/voltha_protos/olt_inter_adapter_service.proto b/protos/voltha_protos/olt_inter_adapter_service.proto
new file mode 100755
index 0000000..5d4773f
--- /dev/null
+++ b/protos/voltha_protos/olt_inter_adapter_service.proto
@@ -0,0 +1,20 @@
+syntax = "proto3";
+
+option go_package = "github.com/opencord/voltha-protos/v5/go/olt_inter_adapter_service";
+option java_package = "org.opencord.voltha.olt_inter_adapter_service";
+option java_outer_classname = "VolthaOltInterAdapterService";
+
+package olt_inter_adapter_service;
+
+import "google/protobuf/empty.proto";
+import "voltha_protos/inter_adapter.proto";
+import "voltha_protos/health.proto";
+
+service OltInterAdapterService {
+    // GetHealthStatus is used by an OltInterAdapterService client to verify connectivity
+    // to the gRPC server hosting the OltInterAdapterService service
+    rpc GetHealthStatus(google.protobuf.Empty) returns (health.HealthStatus);
+
+    rpc ProxyOmciRequest(inter_adapter.OmciMessage) returns (google.protobuf.Empty);
+    rpc GetTechProfileInstance(inter_adapter.TechProfileInstanceRequestMessage) returns (inter_adapter.TechProfileDownloadMessage);
+}
\ No newline at end of file
diff --git a/protos/voltha_protos/omci_alarm_db.proto b/protos/voltha_protos/omci_alarm_db.proto
index 2fd6d57..940a844 100755
--- a/protos/voltha_protos/omci_alarm_db.proto
+++ b/protos/voltha_protos/omci_alarm_db.proto
@@ -20,49 +20,44 @@
 
 package omci;
 
-import "voltha_protos/meta.proto";
-
 
 message AlarmAttributeData {
-    string name        = 1 [(voltha.access) = READ_ONLY];
+    string name        = 1;
     string value       = 2;
 }
 
 message AlarmInstanceData {
-    uint32 instance_id      = 1 [(voltha.access) = READ_ONLY];
+    uint32 instance_id      = 1;
     string created          = 2;
     string modified         = 3;
 
-    repeated AlarmAttributeData attributes = 4
-    [(voltha.child_node) = {key: "name"}];
+    repeated AlarmAttributeData attributes = 4;
 }
 
 message AlarmClassData {
-    uint32 class_id         = 1 [(voltha.access) = READ_ONLY];
+    uint32 class_id         = 1;
 
-    repeated AlarmInstanceData instances= 2
-    [(voltha.child_node) = {key: "instance_id"}];
+    repeated AlarmInstanceData instances= 2;
 }
 
 message AlarmManagedEntity {
-    uint32 class_id  = 1 [(voltha.access) = READ_ONLY];
-    string name      = 2 [(voltha.access) = READ_ONLY];
+    uint32 class_id  = 1;
+    string name      = 2;
 }
 
 message AlarmMessageType {
-    uint32 message_type = 1 [(voltha.access) = READ_ONLY];
+    uint32 message_type = 1;
 }
 
 message AlarmDeviceData {
-    string device_id             = 1 [(voltha.access) = READ_ONLY];
+    string device_id             = 1;
     string created               = 2;
     uint32 last_alarm_sequence   = 3;
     string last_sync_time        = 4;
     uint32 version               = 5;
 
 
-    repeated AlarmClassData classes = 6
-    [(voltha.child_node) = {key: "class_id"}];
+    repeated AlarmClassData classes = 6;
 
     repeated AlarmManagedEntity managed_entities = 7;
     repeated AlarmMessageType message_types = 8;
diff --git a/protos/voltha_protos/omci_mib_db.proto b/protos/voltha_protos/omci_mib_db.proto
index 1813845..62f1656 100755
--- a/protos/voltha_protos/omci_mib_db.proto
+++ b/protos/voltha_protos/omci_mib_db.proto
@@ -20,48 +20,42 @@
 
 package omci;
 
-import "voltha_protos/meta.proto";
-
-
 message MibAttributeData {
-    string name        = 1 [(voltha.access) = READ_ONLY];
+    string name        = 1;
     string value       = 2;
 }
 
 message MibInstanceData {
-    uint32 instance_id      = 1 [(voltha.access) = READ_ONLY];
+    uint32 instance_id      = 1;
     string created          = 2;
     string modified         = 3;
 
-    repeated MibAttributeData attributes = 4
-    [(voltha.child_node) = {key: "name"}];
+    repeated MibAttributeData attributes = 4;
 }
 
 message MibClassData {
-    uint32 class_id         = 1 [(voltha.access) = READ_ONLY];
+    uint32 class_id         = 1;
 
-    repeated MibInstanceData instances= 2
-    [(voltha.child_node) = {key: "instance_id"}];
+    repeated MibInstanceData instances= 2;
 }
 
 message ManagedEntity {
-    uint32 class_id  = 1 [(voltha.access) = READ_ONLY];
-    string name      = 2 [(voltha.access) = READ_ONLY];
+    uint32 class_id  = 1;
+    string name      = 2;
 }
 
 message MessageType {
-    uint32 message_type = 1 [(voltha.access) = READ_ONLY];
+    uint32 message_type = 1;
 }
 
 message MibDeviceData {
-    string device_id        = 1 [(voltha.access) = READ_ONLY];
+    string device_id        = 1;
     string created          = 2;
     string last_sync_time   = 3;
     uint32 mib_data_sync    = 4;
     uint32 version          = 5;
 
-    repeated MibClassData classes = 6
-    [(voltha.child_node) = {key: "class_id"}];
+    repeated MibClassData classes = 6;
 
     repeated ManagedEntity managed_entities = 7;
     repeated MessageType message_types = 8;
diff --git a/protos/voltha_protos/omci_test.proto b/protos/voltha_protos/omci_test.proto
new file mode 100755
index 0000000..cd4f507
--- /dev/null
+++ b/protos/voltha_protos/omci_test.proto
@@ -0,0 +1,21 @@
+syntax = "proto3";
+
+option go_package = "github.com/opencord/voltha-protos/v5/go/omci";
+
+package omci;
+
+option java_package = "org.opencord.voltha.omci";
+
+message OmciTestRequest {
+    string id = 1;
+    string uuid = 2;
+}
+
+message TestResponse{
+    enum TestResponseResult  {
+        SUCCESS = 0;
+        FAILURE = 1;
+    }
+    TestResponseResult result = 1;
+}
+
diff --git a/protos/voltha_protos/onu_inter_adapter_service.proto b/protos/voltha_protos/onu_inter_adapter_service.proto
new file mode 100755
index 0000000..ee4dff7
--- /dev/null
+++ b/protos/voltha_protos/onu_inter_adapter_service.proto
@@ -0,0 +1,23 @@
+syntax = "proto3";
+
+option go_package = "github.com/opencord/voltha-protos/v5/go/onu_inter_adapter_service";
+option java_package = "org.opencord.voltha.onu_inter_adapter_service";
+option java_outer_classname = "VolthaOnuInterAdapterService";
+
+package onu_inter_adapter_service;
+
+import "google/protobuf/empty.proto";
+import "voltha_protos/inter_adapter.proto";
+import "voltha_protos/health.proto";
+
+service OnuInterAdapterService {
+    // GetHealthStatus is used by an OnuInterAdapterService client to verify connectivity
+    // to the gRPC server hosting the OnuInterAdapterService service
+    rpc GetHealthStatus(google.protobuf.Empty) returns (health.HealthStatus);
+
+    rpc OnuIndication(inter_adapter.OnuIndicationMessage) returns (google.protobuf.Empty);
+    rpc OmciIndication(inter_adapter.OmciMessage) returns (google.protobuf.Empty);
+    rpc DownloadTechProfile(inter_adapter.TechProfileDownloadMessage) returns (google.protobuf.Empty);
+    rpc DeleteGemPort(inter_adapter.DeleteGemPortMessage) returns (google.protobuf.Empty);
+    rpc DeleteTCont(inter_adapter.DeleteTcontMessage) returns (google.protobuf.Empty);
+}
\ No newline at end of file
diff --git a/protos/voltha_protos/openflow_13.proto b/protos/voltha_protos/openflow_13.proto
index 3a6a315..2f6791e 100755
--- a/protos/voltha_protos/openflow_13.proto
+++ b/protos/voltha_protos/openflow_13.proto
@@ -2308,4 +2308,10 @@
         ofp_port_status port_status = 2;
         ofp_error_msg error = 3;
     }
+}
+
+// Additional information required to process flow at device adapters
+message FlowMetadata {
+    // Meters associated with flow-update to adapter
+    repeated openflow_13.ofp_meter_config meters = 1;
 }
\ No newline at end of file
diff --git a/protos/voltha_protos/openolt.proto b/protos/voltha_protos/openolt.proto
index b68727a..03fe064 100755
--- a/protos/voltha_protos/openolt.proto
+++ b/protos/voltha_protos/openolt.proto
@@ -20,9 +20,9 @@
 
 package openolt;
 import "google/api/annotations.proto";
-import public "voltha_protos/tech_profile.proto";
-import public "voltha_protos/common.proto";
+import "voltha_protos/tech_profile.proto";
 import "voltha_protos/ext_config.proto";
+import "voltha_protos/extensions.proto";
 
 service Openolt {
 
@@ -196,7 +196,7 @@
         };
     }
 
-    rpc GetExtValue(ValueParam) returns (common.ReturnValues) {
+    rpc GetExtValue(ValueParam) returns (extension.ReturnValues) {
         option (google.api.http) = {
           post: "/v1/GetExtValue"
           body: "*"
@@ -750,7 +750,7 @@
 
 message ValueParam {
 	Onu onu = 1;
-	common.ValueType.Type value = 2;
+	extension.ValueType.Type value = 2;
 }
 
 message PonRxPowerData {
diff --git a/protos/voltha_protos/voltha.proto b/protos/voltha_protos/voltha.proto
index 1d4dc78..359858e 100755
--- a/protos/voltha_protos/voltha.proto
+++ b/protos/voltha_protos/voltha.proto
@@ -13,71 +13,30 @@
 import "google/api/annotations.proto";
 import "google/protobuf/empty.proto";
 
-import public "voltha_protos/meta.proto";
 import public "voltha_protos/common.proto";
-import public "voltha_protos/health.proto";
-import public "voltha_protos/logical_device.proto";
-import public "voltha_protos/device.proto";
-import public "voltha_protos/adapter.proto";
-import public "voltha_protos/openflow_13.proto";
+import "voltha_protos/health.proto";
+import "voltha_protos/logical_device.proto";
+import "voltha_protos/device.proto";
+import "voltha_protos/adapter.proto";
+import "voltha_protos/openflow_13.proto";
+import "voltha_protos/events.proto";
+import "voltha_protos/extensions.proto";
 
 import "voltha_protos/omci_mib_db.proto";
 import "voltha_protos/omci_alarm_db.proto";
-import "voltha_protos/ext_config.proto";
+import "voltha_protos/omci_test.proto";
 
 option java_package = "org.opencord.voltha";
 option java_outer_classname = "VolthaProtos";
 option csharp_namespace = "Opencord.Voltha.Voltha";
 
-message DeviceGroup {
-
-    string id = 1 [(access) = READ_ONLY];
-
-    repeated LogicalDevice logical_devices = 2 [(child_node) = {key: "id"}];
-
-    repeated Device devices = 3 [(child_node) = {key: "id"}];
-}
-
-message DeviceGroups {
-    repeated DeviceGroup items = 1;
-}
-
-
-message EventFilterRuleKey {
-
-    enum EventFilterRuleType {
-        filter_all = 0;
-        category = 1;
-        sub_category = 2;
-        kpi_event_type = 3;
-        config_event_type = 4;
-        device_event_type = 5;
-    }
-}
-
-message EventFilterRule {
-    EventFilterRuleKey.EventFilterRuleType key = 1;
-    string value = 2;
-}
-message EventFilter {
-    string id = 1 [(access) = READ_ONLY];
-    bool enable = 2;
-    string device_id = 3;
-    string event_type = 4;
-    repeated EventFilterRule rules = 5;
-}
-
-message EventFilters {
-    repeated EventFilter filters = 1;
-}
-
 // CoreInstance represents a core instance.  It is data held in memory when a core
 // is running.  This data is not persistent.
 message CoreInstance {
 
-    string instance_id = 1  [(access) = READ_ONLY];
+    string instance_id = 1;
 
-    HealthStatus health = 2 [(child_node) = {}];
+    health.HealthStatus health = 2;
 
 }
 
@@ -85,123 +44,33 @@
     repeated CoreInstance items = 1;
 }
 
-message OmciTestRequest {
-    string id = 1;
-    string uuid = 2;
-}
-
-message TestResponse{
-    enum TestResponseResult  {
-        SUCCESS = 0;
-        FAILURE = 1;
-    }
-    TestResponseResult result = 1;
-}
-
-message ValueSet {
-    string id = 1;
-    oneof value{
-        config.AlarmConfig alarm_config = 2;
-    }
-}
 
 // Voltha represents the Voltha cluster data.  Each Core instance will hold a subset of
 // the entire cluster. However, some items (e.g. adapters) will be held by all cores
 // for better performance
 message Voltha {
 
-    string version = 1 [(access) = READ_ONLY];
+    string version = 1 ;
 
-    repeated Adapter adapters = 2 [(child_node) = {key: "id"}];
+    repeated adapter.Adapter adapters = 2;
 
-    repeated LogicalDevice logical_devices = 3 [(child_node) = {key: "id"}];
+    repeated logical_device.LogicalDevice logical_devices = 3;
 
-    repeated Device devices = 4 [(child_node) = {key: "id"}];
+    repeated device.Device devices = 4;
 
-    repeated DeviceType device_types = 5 [(child_node) = {key: "id"}];
+    repeated device.DeviceType device_types = 5;
 
-    repeated DeviceGroup device_groups = 6 [(child_node) = {key: "id"}];
+    reserved 6;
+    // device_groups is not used
+    // repeated DeviceGroup device_groups = 6;
 
-    repeated EventFilter event_filters = 7 [(child_node) = {key: "id"}];
+    repeated event.EventFilter event_filters = 7;
 
     repeated
-        omci.MibDeviceData omci_mib_database = 28
-        [(child_node) = {key: "device_id"}];
+        omci.MibDeviceData omci_mib_database = 28;
 
     repeated
-        omci.AlarmDeviceData omci_alarm_database = 29
-        [(child_node) = {key: "device_id"}];
-}
-
-// Device Self Test Response
-message SelfTestResponse {
-
-	enum SelfTestResult  {
-	    SUCCESS = 0;
-	    FAILURE = 1;
-	    NOT_SUPPORTED = 2;
-	    UNKNOWN_ERROR = 3;
-    }
-    SelfTestResult result = 1;
-}
-
-message OfAgentSubscriber {
-    // ID of ofagent instance
-    string ofagent_id = 1;
-
-    // ID of voltha instance to which the ofagent is subscribed
-    string voltha_id = 2;
-}
-
-// Identifies a membership group a Core belongs to
-message Membership {
-    //  Group name
-    string group_name = 1;
-
-    // Unique ID of a container within that group
-    string id = 2;
-}
-
-message DeviceImageDownloadRequest {
-
-    // Device Id
-    // allows for operations on multiple devices.
-    repeated common.ID device_id = 1;
-
-    //The image for the device containing all the information
-    Image image = 2;
-
-    //Activate the image if the download to the device is successful
-    bool activateOnSuccess = 3;
-
-    //Automatically commit the image if the activation on the device is successful
-    bool commitOnSuccess = 4;
-}
-
-message DeviceImageRequest {
-
-    //Device Id
-    //allows for operations on multiple adapters.
-    repeated common.ID device_id = 1;
-
-    // Image Version, this is the sole identifier of the image. it's the vendor specified OMCI version
-    // must be known at the time of initiating a download, activate, commit image on an onu.
-    string version = 2;
-
-    //Automatically commit the image if the activation on the device is successful
-    bool commitOnSuccess = 3;
-}
-
-message DeviceImageResponse {
-
-    //Image state for the different devices
-    repeated DeviceImageState device_image_states = 1;
-}
-
-// Additional information required to process flow at device adapters
-message FlowMetadata {
-    // Meters associated with flow-update to adapter
-    repeated openflow_13.ofp_meter_config meters = 1;
+        omci.AlarmDeviceData omci_alarm_database = 29;
 }
 
 /*
@@ -209,22 +78,6 @@
  *
  */
 service VolthaService {
-
-    // Get the membership group of a Voltha Core
-    rpc GetMembership(google.protobuf.Empty) returns(Membership) {
-        option (google.api.http) = {
-            get: "/api/v1/membership"
-        };
-    }
-
-    // Set the membership group of a Voltha Core
-    rpc UpdateMembership(Membership) returns(google.protobuf.Empty) {
-        option (google.api.http) = {
-            post: "/api/v1/membership"
-            body: "*"
-        };
-    }
-
     // Get high level information on the Voltha cluster
     rpc GetVoltha(google.protobuf.Empty) returns(Voltha) {
         option (google.api.http) = {
@@ -247,7 +100,7 @@
     }
 
     // List all active adapters (plugins) in the Voltha cluster
-    rpc ListAdapters(google.protobuf.Empty) returns(Adapters) {
+    rpc ListAdapters(google.protobuf.Empty) returns(adapter.Adapters) {
         option (google.api.http) = {
             get: "/api/v1/adapters"
         };
@@ -255,42 +108,42 @@
 
 
     // List all logical devices managed by the Voltha cluster
-    rpc ListLogicalDevices(google.protobuf.Empty) returns(LogicalDevices) {
+    rpc ListLogicalDevices(google.protobuf.Empty) returns(logical_device.LogicalDevices) {
         option (google.api.http) = {
             get: "/api/v1/logical_devices"
         };
     }
 
     // Get additional information on a given logical device
-    rpc GetLogicalDevice(common.ID) returns(LogicalDevice) {
+    rpc GetLogicalDevice(common.ID) returns(logical_device.LogicalDevice) {
         option (google.api.http) = {
             get: "/api/v1/logical_devices/{id}"
         };
     }
 
     // List ports of a logical device
-    rpc ListLogicalDevicePorts(common.ID) returns(LogicalPorts) {
+    rpc ListLogicalDevicePorts(common.ID) returns(logical_device.LogicalPorts) {
         option (google.api.http) = {
             get: "/api/v1/logical_devices/{id}/ports"
         };
     }
 
     // Gets a logical device port
-    rpc GetLogicalDevicePort(LogicalPortId) returns(LogicalPort) {
+    rpc GetLogicalDevicePort(logical_device.LogicalPortId) returns(logical_device.LogicalPort) {
         option (google.api.http) = {
             get: "/api/v1/logical_devices/{id}/ports/{port_id}"
         };
     }
 
     // Enables a logical device port
-    rpc EnableLogicalDevicePort(LogicalPortId) returns(google.protobuf.Empty) {
+    rpc EnableLogicalDevicePort(logical_device.LogicalPortId) returns(google.protobuf.Empty) {
         option (google.api.http) = {
             post: "/api/v1/logical_devices/{id}/ports/{port_id}/enable"
         };
     }
 
     // Disables a logical device port
-    rpc DisableLogicalDevicePort(LogicalPortId) returns(google.protobuf.Empty) {
+    rpc DisableLogicalDevicePort(logical_device.LogicalPortId) returns(google.protobuf.Empty) {
         option (google.api.http) = {
             post: "/api/v1/logical_devices/{id}/ports/{port_id}/disable"
         };
@@ -345,7 +198,7 @@
     }
 
     // List all physical devices controlled by the Voltha cluster
-    rpc ListDevices(google.protobuf.Empty) returns(Devices) {
+    rpc ListDevices(google.protobuf.Empty) returns(device.Devices) {
         option (google.api.http) = {
             get: "/api/v1/devices"
         };
@@ -367,14 +220,14 @@
     }
 
     // Get more information on a given physical device
-    rpc GetDevice(common.ID) returns(Device) {
+    rpc GetDevice(common.ID) returns(device.Device) {
         option (google.api.http) = {
             get: "/api/v1/devices/{id}"
         };
     }
 
     // Pre-provision a new physical device
-    rpc CreateDevice(Device) returns(Device) {
+    rpc CreateDevice(device.Device) returns(device.Device) {
         option (google.api.http) = {
             post: "/api/v1/devices"
             body: "*"
@@ -421,7 +274,8 @@
     // Request an image download to the standby partition
     // of a device.
     // Note that the call is expected to be non-blocking.
-    rpc DownloadImage(ImageDownload) returns(common.OperationResp) {
+    rpc DownloadImage(device.ImageDownload) returns(common.OperationResp) {
+        option deprecated = true;
         option (google.api.http) = {
             post: "/api/v1/devices/{id}/image_downloads/{name}"
             body: "*"
@@ -431,7 +285,8 @@
     // Get image download status on a device
     // The request retrieves progress on device and updates db record
     // Deprecated in voltha 2.8, will be removed
-    rpc GetImageDownloadStatus(ImageDownload) returns(ImageDownload) {
+    rpc GetImageDownloadStatus(device.ImageDownload) returns(device.ImageDownload) {
+        option deprecated = true;
         option (google.api.http) = {
             get: "/api/v1/devices/{id}/image_downloads/{name}/status"
         };
@@ -439,7 +294,8 @@
 
     // Get image download db record
     // Deprecated in voltha 2.8, will be removed
-    rpc GetImageDownload(ImageDownload) returns(ImageDownload) {
+    rpc GetImageDownload(device.ImageDownload) returns(device.ImageDownload) {
+        option deprecated = true;
         option (google.api.http) = {
             get: "/api/v1/devices/{id}/image_downloads/{name}"
         };
@@ -447,7 +303,8 @@
 
     // List image download db records for a given device
     // Deprecated in voltha 2.8, will be removed
-    rpc ListImageDownloads(common.ID) returns(ImageDownloads) {
+    rpc ListImageDownloads(common.ID) returns(device.ImageDownloads) {
+        option deprecated = true;
         option (google.api.http) = {
             get: "/api/v1/devices/{id}/image_downloads"
         };
@@ -455,7 +312,8 @@
 
     // Cancel an existing image download process on a device
     // Deprecated in voltha 2.8, will be removed
-    rpc CancelImageDownload(ImageDownload) returns(common.OperationResp) {
+    rpc CancelImageDownload(device.ImageDownload) returns(common.OperationResp) {
+        option deprecated = true;
         option (google.api.http) = {
             delete: "/api/v1/devices/{id}/image_downloads/{name}"
         };
@@ -469,7 +327,8 @@
     // activated image running on device
     // Note that the call is expected to be non-blocking.
     // Deprecated in voltha 2.8, will be removed
-    rpc ActivateImageUpdate(ImageDownload) returns(common.OperationResp) {
+    rpc ActivateImageUpdate(device.ImageDownload) returns(common.OperationResp) {
+        option deprecated = true;
         option (google.api.http) = {
             post: "/api/v1/devices/{id}/image_downloads/{name}/image_update"
             body: "*"
@@ -484,7 +343,8 @@
     // previous image running on device
     // Note that the call is expected to be non-blocking.
     // Deprecated in voltha 2.8, will be removed
-    rpc RevertImageUpdate(ImageDownload) returns(common.OperationResp) {
+    rpc RevertImageUpdate(device.ImageDownload) returns(common.OperationResp) {
+        option deprecated = true;
         option (google.api.http) = {
             post: "/api/v1/devices/{id}/image_downloads/{name}/image_revert"
             body: "*"
@@ -493,7 +353,7 @@
 
     // Downloads a certain image to the standby partition of the devices
     // Note that the call is expected to be non-blocking.
-    rpc DownloadImageToDevice (DeviceImageDownloadRequest) returns (DeviceImageResponse) {
+    rpc DownloadImageToDevice (device.DeviceImageDownloadRequest) returns (device.DeviceImageResponse) {
         option (google.api.http) = {
             get: "/api/v1/devices/images/download_images"
         };
@@ -501,7 +361,7 @@
 
     // Get image status on a number of devices devices
     // Polled from northbound systems to get state of download/activate/commit
-    rpc GetImageStatus (DeviceImageRequest) returns (DeviceImageResponse) {
+    rpc GetImageStatus (device.DeviceImageRequest) returns (device.DeviceImageResponse) {
         option (google.api.http) = {
             get: "/api/v1/devices/images/images_status"
         };
@@ -511,14 +371,14 @@
     // To be used carefully, stops any further operations for the Image on the given devices
     // Might also stop if possible existing work, but no guarantees are given,
     // depends on implementation and procedure status.
-    rpc AbortImageUpgradeToDevice (DeviceImageRequest) returns (DeviceImageResponse) {
+    rpc AbortImageUpgradeToDevice (device.DeviceImageRequest) returns (device.DeviceImageResponse) {
         option (google.api.http) = {
             get: "/api/v1/devices/images/abort_upgrade_images"
         };
     }
 
     // Get Both Active and Standby image for a given device
-    rpc GetOnuImages (common.ID) returns (OnuImages) {
+    rpc GetOnuImages (common.ID) returns (device.OnuImages) {
         option (google.api.http) = {
             get: "/api/v1/devices/{id}/onu_images"
         };
@@ -531,7 +391,7 @@
     // If no reboot, then a reboot is required to make the
     // activated image running on device
     // Note that the call is expected to be non-blocking.
-    rpc ActivateImage (DeviceImageRequest) returns (DeviceImageResponse) {
+    rpc ActivateImage (device.DeviceImageRequest) returns (device.DeviceImageResponse) {
         option (google.api.http) = {
             post: "/api/v1/devices/images/activate_images"
             body: "*"
@@ -544,7 +404,7 @@
     // If no reboot, then a reboot is required to make the
     // activated image running on device upon next reboot
     // Note that the call is expected to be non-blocking.
-    rpc CommitImage (DeviceImageRequest) returns (DeviceImageResponse) {
+    rpc CommitImage (device.DeviceImageRequest) returns (device.DeviceImageResponse) {
         option (google.api.http) = {
             post: "/api/v1/devices/images/commit_images"
             body: "*"
@@ -552,21 +412,21 @@
     }
 
     // List ports of a device
-    rpc ListDevicePorts (common.ID) returns (Ports) {
+    rpc ListDevicePorts (common.ID) returns (device.Ports) {
         option (google.api.http) = {
             get: "/api/v1/devices/{id}/ports"
         };
     }
 
     // List pm config of a device
-    rpc ListDevicePmConfigs (common.ID) returns (PmConfigs) {
+    rpc ListDevicePmConfigs (common.ID) returns (device.PmConfigs) {
         option (google.api.http) = {
             get: "/api/v1/devices/{id}/pm_configs"
         };
     }
 
     // Update the pm config of a device
-    rpc UpdateDevicePmConfigs(voltha.PmConfigs) returns(google.protobuf.Empty) {
+    rpc UpdateDevicePmConfigs(device.PmConfigs) returns(google.protobuf.Empty) {
         option (google.api.http) = {
             post: "/api/v1/devices/{id}/pm_configs"
             body: "*"
@@ -588,26 +448,19 @@
     }
 
     // List device types known to Voltha
-    rpc ListDeviceTypes(google.protobuf.Empty) returns(DeviceTypes) {
+    rpc ListDeviceTypes(google.protobuf.Empty) returns(device.DeviceTypes) {
         option (google.api.http) = {
             get: "/api/v1/device_types"
         };
     }
 
     // Get additional information on a device type
-    rpc GetDeviceType(common.ID) returns(DeviceType) {
+    rpc GetDeviceType(common.ID) returns(device.DeviceType) {
         option (google.api.http) = {
             get: "/api/v1/device_types/{id}"
         };
     }
 
-    // List all device sharding groups
-    rpc ListDeviceGroups(google.protobuf.Empty) returns(DeviceGroups) {
-        option (google.api.http) = {
-            get: "/api/v1/device_groups"
-        };
-    }
-
     // Stream control packets to the dataplane
     rpc StreamPacketsOut(stream openflow_13.PacketOut)
         returns(google.protobuf.Empty) {
@@ -625,14 +478,7 @@
         // This does not have an HTTP representation
     }
 
-    // Get additional information on a device group
-    rpc GetDeviceGroup(common.ID) returns(DeviceGroup) {
-        option (google.api.http) = {
-            get: "/api/v1/device_groups/{id}"
-        };
-    }
-
-    rpc CreateEventFilter(EventFilter) returns(EventFilter) {
+    rpc CreateEventFilter(event.EventFilter) returns(event.EventFilter) {
         option (google.api.http) = {
             post: "/api/v1/event_filters"
             body: "*"
@@ -640,39 +486,39 @@
     }
 
     // Get all filters present for a device
-    rpc GetEventFilter(common.ID) returns(EventFilters) {
+    rpc GetEventFilter(common.ID) returns(event.EventFilters) {
         option (google.api.http) = {
             get: "/api/v1/event_filters/{id}"
         };
     }
 
-    rpc UpdateEventFilter(EventFilter) returns(EventFilter) {
+    rpc UpdateEventFilter(event.EventFilter) returns(event.EventFilter) {
         option (google.api.http) = {
             put: "/api/v1/event_filters/{id}"
             body: "*"
         };
     }
 
-    rpc DeleteEventFilter(EventFilter) returns(google.protobuf.Empty) {
+    rpc DeleteEventFilter(event.EventFilter) returns(google.protobuf.Empty) {
         option (google.api.http) = {
             delete: "/api/v1/event_filters/{id}"
         };
     }
 
     // Get all the filters present
-    rpc ListEventFilters(google.protobuf.Empty) returns(EventFilters) {
+    rpc ListEventFilters(google.protobuf.Empty) returns(event.EventFilters) {
         option (google.api.http) = {
             get: "/api/v1/event_filters"
         };
     }
 
-    rpc GetImages(common.ID) returns(Images) {
+    rpc GetImages(common.ID) returns(device.Images) {
         option (google.api.http) = {
             get: "/api/v1/devices/{id}/images"
         };
     }
 
-    rpc SelfTest(common.ID) returns(SelfTestResponse) {
+    rpc SelfTest(common.ID) returns(device.SelfTestResponse) {
         option (google.api.http) = {
             post: "/api/v1/devices/{id}/self_test"
         };
@@ -693,40 +539,38 @@
     }
 
     // Simulate an Alarm
-    rpc SimulateAlarm(SimulateAlarmRequest) returns(common.OperationResp) {
+    rpc SimulateAlarm(device.SimulateAlarmRequest) returns(common.OperationResp) {
         option (google.api.http) = {
             post: "/api/v1/devices/{id}/simulate_larm"
             body: "*"
         };
     }
-    rpc Subscribe (OfAgentSubscriber) returns (OfAgentSubscriber) {
-    }
 
-    rpc EnablePort(voltha.Port) returns(google.protobuf.Empty) {
+    rpc EnablePort(device.Port) returns(google.protobuf.Empty) {
         option (google.api.http) = {
             post: "/v1/EnablePort"
             body: "*"
         };
     }
-    rpc DisablePort(voltha.Port) returns(google.protobuf.Empty) {
+    rpc DisablePort(device.Port) returns(google.protobuf.Empty) {
         option (google.api.http) = {
             post: "/v1/DisablePort"
             body: "*"
         };
     }
-    rpc GetExtValue(common.ValueSpecifier) returns(common.ReturnValues) {
+    rpc GetExtValue(extension.ValueSpecifier) returns(extension.ReturnValues) {
         option (google.api.http) = {
             get: "/api/v1/GetExtValue"
         };
     }
-    rpc SetExtValue(ValueSet) returns(google.protobuf.Empty) {
+    rpc SetExtValue(extension.ValueSet) returns(google.protobuf.Empty) {
         option (google.api.http) = {
             get: "/api/v1/SetExtValue"
         };
     }
 
     // omci start and stop cli implementation
-    rpc StartOmciTestAction(OmciTestRequest) returns(TestResponse) {
+    rpc StartOmciTestAction(omci.OmciTestRequest) returns(omci.TestResponse) {
         option (google.api.http) = {
             post: "/api/v1/start_omci_test"
             body: "*"
