diff --git a/os/net/app-layer/coap/coap-conf.h b/os/net/app-layer/coap/coap-conf.h
index 911017ed8cba186205cdb7a66f27aeeee41b2b50..5b610dca337035378f4f7e7b0c5c95df10554420 100644
--- a/os/net/app-layer/coap/coap-conf.h
+++ b/os/net/app-layer/coap/coap-conf.h
@@ -99,7 +99,9 @@
 #endif /* COAP_MAX_OBSERVERS */
 
 /* Interval in notifies in which NON notifies are changed to CON notifies to check client. */
-#ifndef COAP_OBSERVE_REFRESH_INTERVAL
+#ifdef COAP_CONF_OBSERVE_REFRESH_INTERVAL
+#define COAP_OBSERVE_REFRESH_INTERVAL COAP_CONF_OBSERVE_REFRESH_INTERVAL
+#else
 #define COAP_OBSERVE_REFRESH_INTERVAL  20
 #endif /* COAP_OBSERVE_REFRESH_INTERVAL */
 
diff --git a/os/net/app-layer/coap/coap-observe.c b/os/net/app-layer/coap/coap-observe.c
index d6ef3887e525def0d6f94d6c32cc5e389234d98a..3574acac41802562832c6508cd7848fd86f52697 100644
--- a/os/net/app-layer/coap/coap-observe.c
+++ b/os/net/app-layer/coap/coap-observe.c
@@ -244,7 +244,9 @@ coap_notify_observers_sub(coap_resource_t *resource, const char *subpath)
       /*TODO implement special transaction for CON, sharing the same buffer to allow for more observers */
 
       if((transaction = coap_new_transaction(coap_get_mid(), &obs->endpoint))) {
-        if(obs->obs_counter % COAP_OBSERVE_REFRESH_INTERVAL == 0) {
+        /* if COAP_OBSERVE_REFRESH_INTERVAL is zero, never send observations as confirmable messages */
+        if(COAP_OBSERVE_REFRESH_INTERVAL != 0
+            && (obs->obs_counter % COAP_OBSERVE_REFRESH_INTERVAL == 0)) {
           LOG_DBG("           Force Confirmable for\n");
           notification->type = COAP_TYPE_CON;
         }