diff --git a/rw_core/coreIf/adapter_manager_if.go b/rw_core/coreIf/adapter_manager_if.go
new file mode 100644
index 0000000..b48852c
--- /dev/null
+++ b/rw_core/coreIf/adapter_manager_if.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2018-present Open Networking Foundation
+
+ * 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.
+ */
+package coreIf
+
+import (
+	"context"
+	"github.com/opencord/voltha-protos/v2/go/voltha"
+)
+
+type AdapterManager interface {
+	ListAdapters(ctx context.Context) (*voltha.Adapters, error)
+	GetAdapterName(deviceType string) (string, error)
+	GetDeviceType(deviceType string) *voltha.DeviceType
+	RegisterAdapter(adapter *voltha.Adapter, deviceTypes *voltha.DeviceTypes) *voltha.CoreInstance
+}
diff --git a/rw_core/coreIf/core_if.go b/rw_core/coreIf/core_if.go
new file mode 100644
index 0000000..bf9a661
--- /dev/null
+++ b/rw_core/coreIf/core_if.go
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2018-present Open Networking Foundation
+ *
+ * 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.
+ */
+/*
+Defines a DeviceManager Interface - Used for unit testing of the flow decomposer only at this
+time.
+*/
+package coreIf
+
+import (
+	"context"
+	"github.com/opencord/voltha-go/db/model"
+	"github.com/opencord/voltha-go/rw_core/config"
+	"github.com/opencord/voltha-lib-go/v2/pkg/kafka"
+)
+
+type Core interface {
+	Start(ctx context.Context)
+	Stop(ctx context.Context)
+	GetKafkaInterContainerProxy() *kafka.InterContainerProxy
+	GetConfig() *config.RWCoreFlags
+	GetInstanceId() string
+	GetClusterDataProxy() *model.Proxy
+	GetAdapterManager() AdapterManager
+	StartGRPCService(ctx context.Context)
+	GetDeviceManager() DeviceManager
+	GetLogicalDeviceManager() LogicalDeviceManager
+	GetDeviceOwnerShip() DeviceOwnership
+}
diff --git a/rw_core/coreIf/device_ownership_if.go b/rw_core/coreIf/device_ownership_if.go
new file mode 100644
index 0000000..fb19097
--- /dev/null
+++ b/rw_core/coreIf/device_ownership_if.go
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2018-present Open Networking Foundation
+
+ * 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.
+ */
+package coreIf
+
+import (
+	"context"
+)
+
+type DeviceOwnership interface {
+	Start(ctx context.Context)
+	Stop(ctx context.Context)
+	OwnedByMe(id interface{}) (bool, error)
+	AbandonDevice(id string) error
+	GetAllDeviceIdsOwnedByMe() []string
+}
diff --git a/rw_core/coreIf/logical_device_manager_if.go b/rw_core/coreIf/logical_device_manager_if.go
new file mode 100644
index 0000000..a10a3c8
--- /dev/null
+++ b/rw_core/coreIf/logical_device_manager_if.go
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2018-present Open Networking Foundation
+ *
+ * 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.
+ */
+/*
+Defines a DeviceManager Interface - Used for unit testing of the flow decomposer only at this
+time.
+*/
+package coreIf
+
+import (
+	"context"
+	"github.com/opencord/voltha-protos/v2/go/openflow_13"
+	"github.com/opencord/voltha-protos/v2/go/voltha"
+)
+
+type LogicalDeviceManager interface {
+	GetLogicalPort(lPortId *voltha.LogicalPortId) (*voltha.LogicalPort, error)
+	EnableLogicalPort(ctx context.Context, id *voltha.LogicalPortId, ch chan interface{})
+	DisableLogicalPort(ctx context.Context, id *voltha.LogicalPortId, ch chan interface{})
+	UpdateFlowTable(ctx context.Context, id string, flow *openflow_13.OfpFlowMod, ch chan interface{})
+	UpdateMeterTable(ctx context.Context, id string, meter *openflow_13.OfpMeterMod, ch chan interface{})
+	UpdateGroupTable(ctx context.Context, id string, groupMod *openflow_13.OfpGroupMod, ch chan interface{})
+	GetLogicalDevice(id string) (*voltha.LogicalDevice, error)
+	ListManagedLogicalDevices() (*voltha.LogicalDevices, error)
+	ListLogicalDevices() (*voltha.LogicalDevices, error)
+	ListLogicalDeviceFlows(ctx context.Context, id string) (*openflow_13.Flows, error)
+	ListLogicalDeviceFlowGroups(ctx context.Context, id string) (*openflow_13.FlowGroups, error)
+	ListLogicalDevicePorts(ctx context.Context, id string) (*voltha.LogicalPorts, error)
+	ListLogicalDeviceMeters(ctx context.Context, id string) (*openflow_13.Meters, error)
+	PacketOut(packet *openflow_13.PacketOut) error
+}
