diff --git a/core/api/src/main/java/org/onosproject/net/newresource/Resource.java b/core/api/src/main/java/org/onosproject/net/newresource/Resource.java
index 72b9a57..15e4626 100644
--- a/core/api/src/main/java/org/onosproject/net/newresource/Resource.java
+++ b/core/api/src/main/java/org/onosproject/net/newresource/Resource.java
@@ -208,7 +208,11 @@
         if (this == obj) {
             return true;
         }
-        if (!(obj instanceof Resource)) {
+
+        if (obj == null) {
+            return false;
+        }
+        if (this.getClass() != obj.getClass()) {
             return false;
         }
         final Resource that = (Resource) obj;
@@ -259,25 +263,14 @@
 
         @Override
         public int hashCode() {
-            return Objects.hash(this.id(), this.value);
+            return super.hashCode();
         }
 
+        // explicitly overriding to express that we intentionally ignore
+        // `value` in equality comparison
         @Override
         public boolean equals(Object obj) {
-            if (this == obj) {
-                return true;
-            }
-
-            if (!(obj instanceof Continuous)) {
-                return false;
-            }
-
-            if (!super.equals(obj)) {
-                return false;
-            }
-
-            final Continuous other = (Continuous) obj;
-            return Objects.equals(this.id(), other.id());
+            return super.equals(obj);
         }
 
         /**
@@ -288,6 +281,14 @@
         public double value() {
             return value;
         }
+
+        @Override
+        public String toString() {
+            return MoreObjects.toStringHelper(this)
+                    .add("id", id())
+                    .add("value", value)
+                    .toString();
+        }
     }
 
 }
diff --git a/core/api/src/main/java/org/onosproject/net/newresource/ResourceId.java b/core/api/src/main/java/org/onosproject/net/newresource/ResourceId.java
index c18e08b..6bfc3cc 100644
--- a/core/api/src/main/java/org/onosproject/net/newresource/ResourceId.java
+++ b/core/api/src/main/java/org/onosproject/net/newresource/ResourceId.java
@@ -16,7 +16,6 @@
 package org.onosproject.net.newresource;
 
 import com.google.common.annotations.Beta;
-import com.google.common.base.MoreObjects;
 import com.google.common.collect.ImmutableList;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.PortNumber;
@@ -95,8 +94,6 @@
 
     @Override
     public String toString() {
-        return MoreObjects.toStringHelper(this)
-                .add("components", components)
-                .toString();
+        return components.toString();
     }
 }
diff --git a/core/net/src/main/java/org/onosproject/net/newresource/impl/ResourceManager.java b/core/net/src/main/java/org/onosproject/net/newresource/impl/ResourceManager.java
index 96466d5..83ae6e0 100644
--- a/core/net/src/main/java/org/onosproject/net/newresource/impl/ResourceManager.java
+++ b/core/net/src/main/java/org/onosproject/net/newresource/impl/ResourceManager.java
@@ -34,12 +34,14 @@
 import org.onosproject.net.newresource.Resource;
 import org.onosproject.net.newresource.ResourceStore;
 import org.onosproject.net.newresource.ResourceStoreDelegate;
+import org.slf4j.Logger;
 
 import java.util.Collection;
 import java.util.List;
 import java.util.stream.Collectors;
 
 import static com.google.common.base.Preconditions.checkNotNull;
+import static org.slf4j.LoggerFactory.getLogger;
 
 /**
  * An implementation of ResourceService.
@@ -53,18 +55,24 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected ResourceStore store;
 
+    private final Logger log = getLogger(getClass());
+
     private final ResourceStoreDelegate delegate = new InternalStoreDelegate();
 
     @Activate
     public void activate() {
         store.setDelegate(delegate);
         eventDispatcher.addSink(ResourceEvent.class, listenerRegistry);
+
+        log.info("Started");
     }
 
     @Deactivate
     public void deactivate() {
         store.unsetDelegate(delegate);
         eventDispatcher.removeSink(ResourceEvent.class);
+
+        log.info("Stopped");
     }
 
     @Override
diff --git a/core/store/dist/src/main/java/org/onosproject/store/newresource/impl/ConsistentResourceStore.java b/core/store/dist/src/main/java/org/onosproject/store/newresource/impl/ConsistentResourceStore.java
index 707ce4b..817f8d2 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/newresource/impl/ConsistentResourceStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/newresource/impl/ConsistentResourceStore.java
@@ -143,6 +143,9 @@
     @Override
     public boolean register(List<Resource> resources) {
         checkNotNull(resources);
+        if (log.isTraceEnabled()) {
+            resources.forEach(r -> log.trace("registering {}", r));
+        }
 
         TransactionContext tx = service.transactionContextBuilder().build();
         tx.begin();
@@ -324,17 +327,36 @@
         checkNotNull(resource);
         checkArgument(resource instanceof Resource.Discrete || resource instanceof Resource.Continuous);
 
+        // check if it's registered or not.
+        Versioned<Set<Resource>> v = childMap.get(resource.parent().get());
+        if (v == null || !v.value().contains(resource)) {
+            return false;
+        }
+
         if (resource instanceof Resource.Discrete) {
+            // check if already consumed
             return getConsumer((Resource.Discrete) resource).isEmpty();
         } else {
-            return isAvailable((Resource.Continuous) resource);
+            Resource.Continuous requested = (Resource.Continuous) resource;
+            Resource.Continuous registered = v.value().stream()
+                    .filter(c -> c.equals(resource))
+                    .findFirst()
+                    .map(c -> (Resource.Continuous) c)
+                    .get();
+            if (registered.value() < requested.value()) {
+                // Capacity < requested, can never satisfy
+                return false;
+            }
+            // check if there's enough left
+            return isAvailable(requested);
         }
     }
 
     private boolean isAvailable(Resource.Continuous resource) {
         Versioned<ContinuousResourceAllocation> allocation = continuousConsumers.get(resource.id());
         if (allocation == null) {
-            return false;
+            // no allocation (=no consumer) full registered resources available
+            return true;
         }
 
         return hasEnoughResource(allocation.value().original(), resource, allocation.value());
@@ -362,7 +384,10 @@
     @Override
     public Collection<Resource> getChildResources(Resource parent) {
         checkNotNull(parent);
-        checkArgument(parent instanceof Resource.Discrete);
+        if (!(parent instanceof Resource.Discrete)) {
+            // only Discrete resource can have child resource
+            return ImmutableList.of();
+        }
 
         Versioned<Set<Resource>> children = childMap.get((Resource.Discrete) parent);
         if (children == null) {
