diff --git a/core/net/src/main/java/org/onosproject/net/newresource/impl/ResourceDeviceListener.java b/core/net/src/main/java/org/onosproject/net/newresource/impl/ResourceDeviceListener.java
index 066dd33..114c4c7 100644
--- a/core/net/src/main/java/org/onosproject/net/newresource/impl/ResourceDeviceListener.java
+++ b/core/net/src/main/java/org/onosproject/net/newresource/impl/ResourceDeviceListener.java
@@ -17,12 +17,20 @@
 
 import org.onosproject.net.Device;
 import org.onosproject.net.Port;
+import org.onosproject.net.OchPort;
+import org.onosproject.net.TributarySlot;
+import org.onosproject.net.OduSignalType;
 import org.onosproject.net.device.DeviceEvent;
 import org.onosproject.net.device.DeviceListener;
 import org.onosproject.net.newresource.ResourceAdminService;
 import org.onosproject.net.newresource.ResourcePath;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
+import java.util.List;
 import java.util.concurrent.ExecutorService;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 
@@ -31,6 +39,13 @@
  */
 final class ResourceDeviceListener implements DeviceListener {
 
+    private static final Logger log = LoggerFactory.getLogger(ResourceDeviceListener.class);
+
+    private static final int TOTAL_ODU2_TRIBUTARY_SLOTS = 8;
+    private static final int TOTAL_ODU4_TRIBUTARY_SLOTS = 80;
+    private static final List<TributarySlot> ENTIRE_ODU2_TRIBUTARY_SLOTS = getEntireOdu2TributarySlots();
+    private static final List<TributarySlot> ENTIRE_ODU4_TRIBUTARY_SLOTS = getEntireOdu4TributarySlots();
+
     private final ResourceAdminService adminService;
     private final ExecutorService executor;
 
@@ -76,11 +91,50 @@
 
     private void registerPortResource(Device device, Port port) {
         ResourcePath parent = ResourcePath.discrete(device.id());
-        executor.submit(() -> adminService.registerResources(parent, port.number()));
+        executor.submit(() -> registerPortResource(device, port, parent));
+    }
+
+    private void registerPortResource(Device device, Port port, ResourcePath parent) {
+        adminService.registerResources(parent, port.number());
+        ResourcePath portPath = ResourcePath.discrete(device.id(), port.number());
+
+        switch (port.type()) {
+            case OCH:
+                // register ODU TributarySlots against the OCH port
+                registerTributarySlotsResources(((OchPort) port).signalType(), portPath);
+                break;
+            default:
+                break;
+        }
+    }
+
+    private void registerTributarySlotsResources(OduSignalType oduSignalType, ResourcePath portPath) {
+        switch (oduSignalType) {
+            case ODU2:
+                adminService.registerResources(portPath, ENTIRE_ODU2_TRIBUTARY_SLOTS);
+                break;
+            case ODU4:
+                adminService.registerResources(portPath, ENTIRE_ODU4_TRIBUTARY_SLOTS);
+                break;
+            default:
+                break;
+        }
     }
 
     private void unregisterPortResource(Device device, Port port) {
         ResourcePath parent = ResourcePath.discrete(device.id());
         executor.submit(() -> adminService.unregisterResources(parent, port.number()));
     }
+
+    private static List<TributarySlot> getEntireOdu2TributarySlots() {
+        return IntStream.rangeClosed(1, TOTAL_ODU2_TRIBUTARY_SLOTS)
+                .mapToObj(x -> TributarySlot.of(x))
+                .collect(Collectors.toList());
+    }
+    private static List<TributarySlot> getEntireOdu4TributarySlots() {
+        return IntStream.rangeClosed(1, TOTAL_ODU4_TRIBUTARY_SLOTS)
+                .mapToObj(x -> TributarySlot.of(x))
+                .collect(Collectors.toList());
+    }
+
 }
