diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_html.html
index f6ed0a2b771818b3e2a0feda66d8465ca6e345be..09055897f972c8484528174d614584956325e948 100644
--- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_html.html
+++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_html.html
@@ -138,8 +138,8 @@
                 </table>
               </div>
               <div class="padding-10 msgtext-box"></div>
-              <div class="">
-                <legend><strong>With OPML Selection:</strong></legend>
+              <legend><strong>With OPML Selection:</strong></legend>
+              <div class="padding-lr-10">
                 <a href="#" class="ui-btn ui-corner-all ui-btn-inline opml-state"><i class="fa fa-check-square-o"></i> Enable/disable</a>
                 <a href="#" class="ui-btn ui-corner-all ui-btn-inline opml-delete"><i class="fa fa-trash"></i> Delete</a>
                 <a href="#" class="ui-btn ui-corner-all ui-btn-inline opml-test"><i class="fa fa-globe" aria-hidden="true"></i> Test URL Access</a>
@@ -147,23 +147,36 @@
                   <i class="fa fa-spinner fa-2x fa-spin"></i>
                 </span>
               </div>
-              <div class="padding-5">
-                <fieldset class="sync-interval-controlgroup" data-role="controlgroup" data-type="horizontal">
-                  <legend><strong>Auto Sync Interval:</strong></legend>
-                  <input type="radio" name="sync-data-timer" id="sync-data-5m" value="300000" checked="checked">
-                  <label for="sync-data-5m">5 min</label>
-                  <input type="radio" name="sync-data-timer" id="sync-data-10m" value="600000">
-                  <label for="sync-data-10m">10 min</label>
-                  <input type="radio" name="sync-data-timer" id="sync-data-20m" value="1200000">
-                  <label for="sync-data-20m">20 min</label>
-                  <input type="radio" name="sync-data-timer" id="sync-data-30m" value="1800000">
-                  <label for="sync-data-30m">30 min</label>
-                  <input type="radio" name="sync-data-timer" id="sync-data-1h" value="3600000">
-                  <label for="sync-data-1h">1 h</label>
-                </fieldset>
-                <p>Last sync date: <span class="last-sync"></span></p>
+              <div>
+                <legend><strong>Auto Sync Time Interval:</strong></legend>
+                <div class="padding-lr-10">
+                  <fieldset class="sync-interval-controlgroup" data-role="controlgroup" data-type="horizontal">
+                    <input type="radio" name="sync-data-timer" id="sync-data-5m" value="300000" checked="checked">
+                    <label for="sync-data-5m">5 mn</label>
+                    <input type="radio" name="sync-data-timer" id="sync-data-10m" value="600000">
+                    <label for="sync-data-10m">10 mn</label>
+                    <input type="radio" name="sync-data-timer" id="sync-data-20m" value="1200000">
+                    <label for="sync-data-20m">20 mn</label>
+                    <input type="radio" name="sync-data-timer" id="sync-data-30m" value="1800000">
+                    <label for="sync-data-30m">30 mn</label>
+                    <input type="radio" name="sync-data-timer" id="sync-data-1h" value="3600000">
+                    <label for="sync-data-1h">1 h</label>
+                  </fieldset>
+                  <p>Last sync date: <span class="last-sync"></span></p>
+                </div>
+                <legend><strong>Check Online Access Before Sync:</strong></legend>
+                <div class="padding-lr-10">
+                  <fieldset data-role="controlgroup" data-type="horizontal">
+                    <select name="sync-check-offline" id="sync-check-offline" data-role="slider" data-mini="true">
+                      <option value="off">Off</option>
+                      <option value="on">On</option>
+                    </select>
+                  </fieldset>
+                </div>
                 <h2><strong>Manual Sync:</strong></h2>
-                <button class="ui-btn ui-corner-all ui-btn-inline sync-all"><i class="fa fa-download"></i> <span>Sync Data Now</span></button>
+                <div class="padding-lr-10">
+                  <button class="ui-btn ui-corner-all ui-btn-inline sync-all"><i class="fa fa-download"></i> <span>Sync Data Now</span></button>
+                </div>
               </div>
             </div>
           </div>
diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_html.xml
index 22ff93630772df394a769ee80cb90be19dccb9b8..3ac0a3dfc8c3265ea760549bf004e2a2a5a89455 100644
--- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_html.xml
+++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_html.xml
@@ -239,7 +239,7 @@
             </item>
             <item>
                 <key> <string>serial</string> </key>
-                <value> <string>961.22105.7758.14592</string> </value>
+                <value> <string>961.52563.23676.54306</string> </value>
             </item>
             <item>
                 <key> <string>state</string> </key>
@@ -257,7 +257,7 @@
                     </tuple>
                     <state>
                       <tuple>
-                        <float>1503497281.04</float>
+                        <float>1504526479.13</float>
                         <string>UTC</string>
                       </tuple>
                     </state>
diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_js.js
index 03330d103cf2bbfcf743296a7c9e4e9392eac41a..3be721aa3bfa950292958965febb42498c5842ae 100644
--- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_js.js
+++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_js.js
@@ -287,6 +287,7 @@
     .declareService(function () {
       var gadget = this,
         sync_checkbox_list,
+        online_select_element,
         alert_box,
         i;
 
@@ -370,6 +371,15 @@
         .push(function (time_interval) {
           return setSelectSyncTime(time_interval);
         })
+        .push(function () {
+          return gadget.getSetting("sync_check_offline", "true");
+        })
+        .push(function (sync_check_offline) {
+          if (sync_check_offline) {
+            $(gadget.element.querySelector("select[name='sync-check-offline']"))
+              .val('on').slider("refresh");
+          }
+        })
         .push(function () {
           var promise_list = [];
 
@@ -419,6 +429,14 @@
             }
           ));
 
+          promise_list.push(
+            $(gadget.element.querySelector("select[name='sync-check-offline']")
+            ).bind( "change", function() {
+              var element = gadget.element.querySelector("select[name='sync-check-offline']");
+              return gadget.setSetting('sync_check_offline',
+                                       ($(element).val() === 'on') ? "true" : "false");
+            })
+          );
           promise_list.push(
             $(gadget.element.querySelector(
               "input[name='configure-newpwd']"
@@ -676,8 +694,9 @@
                   })
                     .push(undefined, function (error) {
                       var msg = "";
-                      if (error.currentTarget.responseType === "" ||
-                          error.currentTarget.responseType === "text") {
+                      if (error.currentTarget !== undefined && 
+                          (error.currentTarget.responseType === "" ||
+                          error.currentTarget.responseType === "text")) {
                         msg = error.currentTarget.responseText;
                       }
                       alert_box.removeClass('ui-content-hidden')
diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_js.xml
index dbc811a2e957c2df2ff9e65bb93c83921e6ff030..7ff304bc10ca79b840f60c11f3a40650017b0b4f 100644
--- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_js.xml
+++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_js.xml
@@ -239,7 +239,7 @@
             </item>
             <item>
                 <key> <string>serial</string> </key>
-                <value> <string>961.40699.48372.17271</string> </value>
+                <value> <string>961.62212.52900.63880</string> </value>
             </item>
             <item>
                 <key> <string>state</string> </key>
@@ -257,7 +257,7 @@
                     </tuple>
                     <state>
                       <tuple>
-                        <float>1503651680.71</float>
+                        <float>1504861845.27</float>
                         <string>UTC</string>
                       </tuple>
                     </state>
diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_sync_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_sync_js.js
index 829d936c1787a38f8db09ee1740cf37e1567b886..4061360a2a3578d652f301abf16d9d4d2be3fe58 100644
--- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_sync_js.js
+++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_sync_js.js
@@ -1,6 +1,7 @@
-/*global window, rJS, RSVP, $, clearTimeout, setTimeout, console */
+/*global window, rJS, RSVP, $, clearTimeout, setTimeout, console, XMLHttpRequest, document */
 /*jslint nomen: true, indent: 2, maxerr: 3*/
-(function (window, rJS, RSVP, $, console, clearTimeout, setTimeout) {
+(function (window, rJS, RSVP, $, console, clearTimeout, setTimeout,
+  XMLHttpRequest, document) {
   "use strict";
 
   var gadget_klass = rJS(window);
@@ -23,6 +24,32 @@
     .declareMethod("startSync", function (options) {
       var gadget = this;
 
+      function testOnline(url) {
+        return new RSVP.Promise(function (resolve, reject) {
+          var xhr = new XMLHttpRequest();
+
+          xhr.onload = function (event) {
+            var response = event.target;
+            if (response.status === 302 || response.status === 200) {
+              resolve({status: 'OK'});
+            } else {
+              reject({
+                status: 'ERROR'
+              });
+            }
+          };
+
+          xhr.onerror = function (e) {
+            reject({
+              status: 'ERROR'
+            });
+          };
+
+          xhr.open("GET", url, true);
+          xhr.send("");
+        });
+      }
+
       function formatDate(d) {
         function addZero(n) {
           return n < 10 ? "0" + n : n.toString();
@@ -32,79 +59,41 @@
           + "-" + addZero(d.getDate()) + " " + addZero(d.getHours())
           + ":" + addZero(d.getMinutes()) + ":" + addZero(d.getSeconds());
       }
-      /*
-      function getErrorLog(error_list) {
-        // Build error msg from failed sync
-        var i,
-          tmp_url,
-          error_message = "";
 
-        for (i = 0; i < error_list.length; i += 1) {
-          if (error_list[i].storage_dict.hasOwnProperty('sub_storage')) {
-            if (error_list[i].storage_dict.sub_storage.hasOwnProperty('sub_storage')) {
-              tmp_url = error_list[i].storage_dict.sub_storage.sub_storage.url;
-            } else {
-              tmp_url = error_list[i].storage_dict.sub_storage.url;
+      function syncAllStorageWithCheck() {
+        gadget.props.offline = false;
+        return gadget.getSetting('sync_check_offline', 'true')
+          .push(function (check_offline) {
+            var parser;
+            if (check_offline === 'true') {
+              parser = document.createElement("a");
+              parser.href = document.URL;
+              return new RSVP.Queue()
+                .push(function () {
+                  return testOnline(parser.origin);
+                })
+                .push(undefined, function() {
+                  return {status: "ERROR"};
+                })
+                .push(function (online_result) {
+                  if (online_result.status === "OK") {
+                    return syncAllStorage();
+                  }
+                  gadget.props.offline = true;
+                  return $.notify(
+                    "Sync aborted, no internet access...",
+                    {
+                      position: "bottom right",
+                      autoHide: true,
+                      className: "error",
+                      autoHideDelay: 10000
+                    }
+                  );
+                });
             }
-          } else {
-            tmp_url = error_list[i].storage_dict.url;
-          }
-          error_message += "> " + error_list[i].storage_dict.hosting + " > " +
-            error_list[i].storage_dict.title + "\n";
-          error_message += "Cannot download file(s) at " + tmp_url + ".\n\n";
-        }
-        return error_message;
-      }
-
-      function updateStatus(gadget, storage_dict, status) {
-        var promise_list = [],
-          jio_gadget,
-          url,
-          i;
-
-        return getJioGadget(gadget, storage_dict)
-          .push(function (jio_declared_gadget) {
-            jio_gadget = jio_declared_gadget;
-            return jio_gadget.allDocs({include_docs: true});
-          })
-          .push(undefined, function (error) {
-            console.log(error);
-            return {
-              data: {
-                total_rows: 0
-              }
-            };
-          })
-          .push(function (jio_docs) {
-            var tmp;
-            for (i = 0; i < jio_docs.data.total_rows; i += 1) {
-              if (jio_docs.data.rows[i].id.startsWith('_replicate_')) {
-                continue;
-              }
-              tmp = jio_docs.data.rows[i].doc;
-              if (storage_dict.storage_type === "rss") {
-                if (tmp.category === "WARNING") {
-                  continue;
-                }
-                tmp.category = "WARNING";
-              } else if (storage_dict.storage_type === "webdav") {
-                if (tmp.status === "WARNING") {
-                  continue;
-                }
-                tmp.status = "WARNING";
-              }
-              promise_list.push(jio_gadget.put(
-                jio_docs.data.rows[i].id,
-                tmp
-              ));
-            }
-            return RSVP.all(promise_list);
-          })
-          .push(undefined, function (error) {
-            console.log("ERROR: update status to WARNING");
-            console.log(error);
+            return syncAllStorage();
           });
-      }*/
+      }
 
       function syncAllStorage() {
         var error_log,
@@ -169,19 +158,6 @@
                 method: 'Monitoring Sync'
               })*/
           })
-          /*.push(function () {
-            var promise_list = [],
-              i;
-            // Update all failures monitoring status to Warning
-            for (i = 0; i < gadget.props.error_list.length; i += 1) {
-              promise_list.push(updateStatus(
-                gadget,
-                gadget.props.error_list[i].storage_dict,
-                'WARNING'
-              ));
-            }
-            return RSVP.all(promise_list);
-          })*/
           .push(function () {
             gadget.props.started = false;
             return $.notify(
@@ -213,7 +189,7 @@
                 // There was a recent sync don't start a new sync before the time_interval!
                 return;
               }
-              return syncAllStorage();
+              return syncAllStorageWithCheck();
             })
             .push(undefined, function (error) {
               console.error(error);
@@ -223,7 +199,10 @@
               return gadget.getSetting('sync_data_interval');
             })
             .push(function (timer_interval) {
-              if (timer_interval === undefined) {
+              if (gadget.props.offline === true) {
+                // Offline mode detected, next check will be in 3 minutes
+                timer_interval = 180000;
+              } else if (timer_interval === undefined) {
                 timer_interval = gadget.props.default_sync_interval;
               }
               gadget.props.timer_interval = timer_interval;
@@ -248,7 +227,7 @@
           // sync is running...
           return;
         }
-        return syncAllStorage();
+        return syncAllStorageWithCheck();
       }
       // Default sync interval to 5 minutes
       gadget.props.default_sync_interval = 300000;
@@ -289,4 +268,5 @@
         });
     });
 
-}(window, rJS, RSVP, $, console, clearTimeout, setTimeout));
\ No newline at end of file
+}(window, rJS, RSVP, $, console, clearTimeout, setTimeout, XMLHttpRequest,
+  document));
\ No newline at end of file
diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_sync_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_sync_js.xml
index f3cce65ebd5bcdd77eab49a8c398ff305290d624..5299c4e6c2814e1bd69da1532c52b414a0862135 100644
--- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_sync_js.xml
+++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_sync_js.xml
@@ -242,7 +242,7 @@
             </item>
             <item>
                 <key> <string>serial</string> </key>
-                <value> <string>961.40574.58268.18875</string> </value>
+                <value> <string>961.62215.16074.40192</string> </value>
             </item>
             <item>
                 <key> <string>state</string> </key>
@@ -260,7 +260,7 @@
                     </tuple>
                     <state>
                       <tuple>
-                        <float>1503563500.59</float>
+                        <float>1504861961.08</float>
                         <string>UTC</string>
                       </tuple>
                     </state>