diff --git a/common/probe/probe.go b/common/probe/probe.go
index 984036c..fdb07e8 100644
--- a/common/probe/probe.go
+++ b/common/probe/probe.go
@@ -116,6 +116,18 @@
 			log.Debugw("probe-service-registered", log.Fields{"service-name": name})
 		}
 	}
+
+	if p.readyFunc != nil {
+		p.isReady = p.readyFunc(p.status)
+	} else {
+		p.isReady = defaultReadyFunc(p.status)
+	}
+
+	if p.healthFunc != nil {
+		p.isHealthy = p.healthFunc(p.status)
+	} else {
+		p.isHealthy = defaultHealthFunc(p.status)
+	}
 }
 
 // UpdateStatus utility function to send a service update to the probe
diff --git a/common/probe/probe_test.go b/common/probe/probe_test.go
index 18c4835..a7edc7f 100644
--- a/common/probe/probe_test.go
+++ b/common/probe/probe_test.go
@@ -202,7 +202,7 @@
 	assert.Equal(t, http.StatusTeapot, resp.StatusCode, "invalid status code for no services")
 }
 
-func TestReadzWithServices(t *testing.T) {
+func TestReadzWithServicesWithTrue(t *testing.T) {
 	p := (&Probe{}).WithReadyFunc(AlwaysTrue).WithHealthFunc(AlwaysTrue)
 	p.RegisterService("one", "two")
 
@@ -210,7 +210,18 @@
 	w := httptest.NewRecorder()
 	p.readzFunc(w, req)
 	resp := w.Result()
-	assert.Equal(t, http.StatusTeapot, resp.StatusCode, "invalid status code for no services")
+	assert.Equal(t, http.StatusOK, resp.StatusCode, "invalid status code for registered only services")
+}
+
+func TestReadzWithServicesWithDefault(t *testing.T) {
+	p := &Probe{}
+	p.RegisterService("one", "two")
+
+	req := httptest.NewRequest("GET", "http://example.com/readz", nil)
+	w := httptest.NewRecorder()
+	p.readzFunc(w, req)
+	resp := w.Result()
+	assert.Equal(t, http.StatusTeapot, resp.StatusCode, "invalid status code for registered only services")
 }
 
 func TestReadzNpServicesDefault(t *testing.T) {
@@ -258,7 +269,7 @@
 	assert.Equal(t, http.StatusTeapot, resp.StatusCode, "invalid status code for no services")
 }
 
-func TestHealthzWithServices(t *testing.T) {
+func TestHealthzWithServicesWithTrue(t *testing.T) {
 	p := (&Probe{}).WithReadyFunc(AlwaysTrue).WithHealthFunc(AlwaysTrue)
 	p.RegisterService("one", "two")
 
@@ -266,7 +277,18 @@
 	w := httptest.NewRecorder()
 	p.healthzFunc(w, req)
 	resp := w.Result()
-	assert.Equal(t, http.StatusTeapot, resp.StatusCode, "invalid status code for no services")
+	assert.Equal(t, http.StatusOK, resp.StatusCode, "invalid status code for registered only services")
+}
+
+func TestHealthzWithServicesWithDefault(t *testing.T) {
+	p := &Probe{}
+	p.RegisterService("one", "two")
+
+	req := httptest.NewRequest("GET", "http://example.com/healthz", nil)
+	w := httptest.NewRecorder()
+	p.healthzFunc(w, req)
+	resp := w.Result()
+	assert.Equal(t, http.StatusOK, resp.StatusCode, "invalid status code for registered only services")
 }
 
 func TestHealthzNoServicesDefault(t *testing.T) {
diff --git a/ro_core/core/core.go b/ro_core/core/core.go
index cd27a42..8b0317b 100644
--- a/ro_core/core/core.go
+++ b/ro_core/core/core.go
@@ -86,11 +86,19 @@
 
 func (core *Core) Stop(ctx context.Context) {
 	log.Info("stopping-adaptercore")
-	core.exitChannel <- 1
+	if core.exitChannel != nil {
+		core.exitChannel <- 1
+	}
 	// Stop all the started services
-	core.grpcServer.Stop()
-	core.logicalDeviceMgr.stop(ctx)
-	core.deviceMgr.stop(ctx)
+	if core.grpcServer != nil {
+		core.grpcServer.Stop()
+	}
+	if core.logicalDeviceMgr != nil {
+		core.logicalDeviceMgr.stop(ctx)
+	}
+	if core.deviceMgr != nil {
+		core.deviceMgr.stop(ctx)
+	}
 	log.Info("adaptercore-stopped")
 }
 
diff --git a/rw_core/core/core.go b/rw_core/core/core.go
index e74e869..f22f8b8 100644
--- a/rw_core/core/core.go
+++ b/rw_core/core/core.go
@@ -136,12 +136,22 @@
 
 func (core *Core) Stop(ctx context.Context) {
 	log.Info("stopping-adaptercore")
-	core.exitChannel <- 1
+	if core.exitChannel != nil {
+		core.exitChannel <- 1
+	}
 	// Stop all the started services
-	core.grpcServer.Stop()
-	core.logicalDeviceMgr.stop(ctx)
-	core.deviceMgr.stop(ctx)
-	core.kmp.Stop()
+	if core.grpcServer != nil {
+		core.grpcServer.Stop()
+	}
+	if core.logicalDeviceMgr != nil {
+		core.logicalDeviceMgr.stop(ctx)
+	}
+	if core.deviceMgr != nil {
+		core.deviceMgr.stop(ctx)
+	}
+	if core.kmp != nil {
+		core.kmp.Stop()
+	}
 	log.Info("adaptercore-stopped")
 }
 
