diff --git a/src/http/modules/ngx_http_upstream_ip_hash_module.c b/src/http/modules/ngx_http_upstream_ip_hash_module.c
index fd9ecbe..d3849b6 100644
--- a/src/http/modules/ngx_http_upstream_ip_hash_module.c
+++ b/src/http/modules/ngx_http_upstream_ip_hash_module.c
@@ -9,6 +9,10 @@
 #include <ngx_core.h>
 #include <ngx_http.h>

+#if (NGX_HTTP_UPSTREAM_CHECK)
+#include "ngx_http_upstream_check_module.h"
+#endif
+

 typedef struct {
     /* the round robin data must be first */
@@ -182,6 +186,12 @@ ngx_http_upstream_get_ip_hash_peer(ngx_peer_connection_t *pc, void *data)

             if (!peer->down) {

+#if (NGX_HTTP_UPSTREAM_CHECK)
+                ngx_log_debug1(NGX_LOG_DEBUG_HTTP, pc->log, 0,
+                               "get ip_hash peer, check_index: %ui",
+                               peer->check_index);
+                if (!ngx_http_upstream_check_peer_down(peer->check_index)) {
+#endif
                 if (peer->max_fails == 0 || peer->fails < peer->max_fails) {
                     break;
                 }
@@ -190,6 +200,9 @@ ngx_http_upstream_get_ip_hash_peer(ngx_peer_connection_t *pc, void *data)
                     peer->fails = 0;
                     break;
                 }
+#if (NGX_HTTP_UPSTREAM_CHECK)
+                }
+#endif
             }

             iphp->rrp.tried[n] |= m;
diff --git a/src/http/ngx_http_upstream_round_robin.c b/src/http/ngx_http_upstream_round_robin.c
index afc9b2e..1c0344e 100644
--- a/src/http/ngx_http_upstream_round_robin.c
+++ b/src/http/ngx_http_upstream_round_robin.c
@@ -9,6 +9,9 @@
 #include <ngx_core.h>
 #include <ngx_http.h>

+#if (NGX_HTTP_UPSTREAM_CHECK)
+#include "ngx_http_upstream_check_module.h"
+#endif

 static ngx_int_t ngx_http_upstream_cmp_servers(const void *one,
     const void *two);
@@ -75,6 +78,17 @@ ngx_http_upstream_init_round_robin(ngx_conf_t *cf,
                 peers->peer[n].down = server[i].down;
                 peers->peer[n].weight = server[i].down ? 0 : server[i].weight;
                 peers->peer[n].current_weight = peers->peer[n].weight;
+
+#if (NGX_HTTP_UPSTREAM_CHECK)
+                if (!server[i].down) {
+                    peers->peer[n].check_index =
+                        ngx_http_upstream_check_add_peer(cf, us, &server[i].addrs[j]);
+                }
+                else {
+                    peers->peer[n].check_index = (ngx_uint_t) NGX_ERROR;
+                }
+#endif
+
                 n++;
             }
         }
@@ -128,6 +142,17 @@ ngx_http_upstream_init_round_robin(ngx_conf_t *cf,
                 backup->peer[n].max_fails = server[i].max_fails;
                 backup->peer[n].fail_timeout = server[i].fail_timeout;
                 backup->peer[n].down = server[i].down;
+
+#if (NGX_HTTP_UPSTREAM_CHECK)
+                if (!server[i].down) {
+                    backup->peer[n].check_index =
+                        ngx_http_upstream_check_add_peer(cf, us, &server[i].addrs[j]);
+                }
+                else {
+                    backup->peer[n].check_index = (ngx_uint_t) NGX_ERROR;
+                }
+#endif
+
                 n++;
             }
         }
@@ -186,6 +211,9 @@ ngx_http_upstream_init_round_robin(ngx_conf_t *cf,
         peers->peer[i].current_weight = 1;
         peers->peer[i].max_fails = 1;
         peers->peer[i].fail_timeout = 10;
+#if (NGX_HTTP_UPSTREAM_CHECK)
+        peers->peer[i].check_index = (ngx_uint_t) NGX_ERROR;
+#endif
     }

     us->peer.data = peers;
@@ -302,6 +330,9 @@ ngx_http_upstream_create_round_robin_peer(ngx_http_request_t *r,
         peers->peer[0].current_weight = 1;
         peers->peer[0].max_fails = 1;
         peers->peer[0].fail_timeout = 10;
+#if (NGX_HTTP_UPSTREAM_CHECK)
+        peers->peer[0].check_index = (ngx_uint_t) NGX_ERROR;
+#endif

     } else {

@@ -334,6 +365,9 @@ ngx_http_upstream_create_round_robin_peer(ngx_http_request_t *r,
             peers->peer[i].current_weight = 1;
             peers->peer[i].max_fails = 1;
             peers->peer[i].fail_timeout = 10;
+#if (NGX_HTTP_UPSTREAM_CHECK)
+            peers->peer[i].check_index = (ngx_uint_t) NGX_ERROR;
+#endif
         }
     }

@@ -411,7 +445,11 @@ ngx_http_upstream_get_round_robin_peer(ngx_peer_connection_t *pc, void *data)

     if (rrp->peers->single) {
         peer = &rrp->peers->peer[0];
-
+#if (NGX_HTTP_UPSTREAM_CHECK)
+        if (ngx_http_upstream_check_peer_down(peer->check_index)) {
+            return NGX_BUSY;
+        }
+#endif
     } else {

         /* there are several peers */
@@ -438,6 +476,12 @@ ngx_http_upstream_get_round_robin_peer(ngx_peer_connection_t *pc, void *data)

                     if (!peer->down) {

+#if (NGX_HTTP_UPSTREAM_CHECK)
+                        ngx_log_debug1(NGX_LOG_DEBUG_HTTP, pc->log, 0,
+                                       "get rr peer, check_index: %ui",
+                                       peer->check_index);
+                        if (!ngx_http_upstream_check_peer_down(peer->check_index)) {
+#endif
                         if (peer->max_fails == 0
                             || peer->fails < peer->max_fails)
                         {
@@ -448,6 +492,9 @@ ngx_http_upstream_get_round_robin_peer(ngx_peer_connection_t *pc, void *data)
                             peer->fails = 0;
                             break;
                         }
+#if (NGX_HTTP_UPSTREAM_CHECK)
+                        }
+#endif

                         peer->current_weight = 0;

@@ -486,6 +533,12 @@ ngx_http_upstream_get_round_robin_peer(ngx_peer_connection_t *pc, void *data)

                     if (!peer->down) {

+#if (NGX_HTTP_UPSTREAM_CHECK)
+                        ngx_log_debug1(NGX_LOG_DEBUG_HTTP, pc->log, 0,
+                                       "get rr peer2, check_index: %ui",
+                                       peer->check_index);
+                        if (!ngx_http_upstream_check_peer_down(peer->check_index)) {
+#endif
                         if (peer->max_fails == 0
                             || peer->fails < peer->max_fails)
                         {
@@ -496,6 +549,9 @@ ngx_http_upstream_get_round_robin_peer(ngx_peer_connection_t *pc, void *data)
                             peer->fails = 0;
                             break;
                         }
+#if (NGX_HTTP_UPSTREAM_CHECK)
+                        }
+#endif

                         peer->current_weight = 0;

diff --git a/src/http/ngx_http_upstream_round_robin.h b/src/http/ngx_http_upstream_round_robin.h
index 6d285ab..354cca2 100644
--- a/src/http/ngx_http_upstream_round_robin.h
+++ b/src/http/ngx_http_upstream_round_robin.h
@@ -28,6 +28,10 @@ typedef struct {
     ngx_uint_t                      max_fails;
     time_t                          fail_timeout;

+#if (NGX_HTTP_UPSTREAM_CHECK)
+    ngx_uint_t                      check_index;
+#endif
+
     ngx_uint_t                      down;          /* unsigned  down:1; */

 #if (NGX_HTTP_SSL)
