diff --git a/js/src/alert.js b/js/src/alert.js
index 9d8a865d1cd379daee237cc4308310a771459abd..bc368ae6224f37ff9222ca179599a03c5a4311a3 100644
--- a/js/src/alert.js
+++ b/js/src/alert.js
@@ -47,6 +47,9 @@ const ClassName = {
 class Alert {
   constructor(element) {
     this._element = element
+    if (this._element) {
+      Data.setData(element, DATA_KEY, this)
+    }
   }
 
   // Getters
@@ -129,7 +132,6 @@ class Alert {
 
       if (!data) {
         data = new Alert(this)
-        Data.setData(this, DATA_KEY, data)
       }
 
       if (config === 'close') {
@@ -148,7 +150,8 @@ class Alert {
  * Data Api implementation
  * ------------------------------------------------------------------------
  */
-EventHandler.on(document, Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert()))
+EventHandler
+  .on(document, Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert()))
 
 /**
  * ------------------------------------------------------------------------
diff --git a/js/src/button.js b/js/src/button.js
index ce69253e443bb119f7dc4834301c5890e6c09535..8bdf9d5bd7d95d10e17650a5ea46f038e06b0361 100644
--- a/js/src/button.js
+++ b/js/src/button.js
@@ -52,6 +52,7 @@ const Event = {
 class Button {
   constructor(element) {
     this._element = element
+    Data.setData(element, DATA_KEY, this)
   }
 
   // Getters
@@ -112,10 +113,6 @@ class Button {
     if (triggerChangeEvent) {
       this._element.classList.toggle(ClassName.ACTIVE)
     }
-
-    static _getInstance(element) {
-      return Data.getData(element, DATA_KEY)
-    }
   }
 
   dispose() {
@@ -131,7 +128,6 @@ class Button {
 
       if (!data) {
         data = new Button(this)
-        Data.setData(this, DATA_KEY, data)
       }
 
       if (config === 'toggle') {
@@ -139,6 +135,10 @@ class Button {
       }
     })
   }
+
+  static _getInstance(element) {
+    return Data.getData(element, DATA_KEY)
+  }
 }
 
 /**
diff --git a/js/src/carousel.js b/js/src/carousel.js
index 8de7fd5ee4a12d5ca3476f5032552de92f8590dd..32a039c49dcb09659dba60e7d99f827362a36fdb 100644
--- a/js/src/carousel.js
+++ b/js/src/carousel.js
@@ -119,6 +119,7 @@ class Carousel {
     this._pointerEvent      = Boolean(window.PointerEvent || window.MSPointerEvent)
 
     this._addEventListeners()
+    Data.setData(element, DATA_KEY, this)
   }
 
   // Getters
@@ -526,7 +527,6 @@ class Carousel {
 
     if (!data) {
       data = new Carousel(element, _config)
-      Data.setData(element, DATA_KEY, data)
     }
 
     if (typeof config === 'number') {
diff --git a/js/src/collapse.js b/js/src/collapse.js
index eebac13bbf36e809471b1457e8617ed8448e1fff..dae60e1227f64af9a656c1e6b60ee74c9538a15a 100644
--- a/js/src/collapse.js
+++ b/js/src/collapse.js
@@ -96,6 +96,8 @@ class Collapse {
     if (this._config.toggle) {
       this.toggle()
     }
+
+    Data.setData(element, DATA_KEY, this)
   }
 
   // Getters
@@ -358,7 +360,6 @@ class Collapse {
 
     if (!data) {
       data = new Collapse(element, _config)
-      Data.setData(element, DATA_KEY, data)
     }
 
     if (typeof config === 'string') {
diff --git a/js/src/dropdown.js b/js/src/dropdown.js
index fbbaa08fa0aca8c60888e455c3f79d05e9635a55..6a4fb9e0137c1649f163845a2796c1fdf3a035d5 100644
--- a/js/src/dropdown.js
+++ b/js/src/dropdown.js
@@ -103,6 +103,7 @@ class Dropdown {
     this._inNavbar = this._detectNavbar()
 
     this._addEventListeners()
+    Data.setData(element, DATA_KEY, this)
   }
 
   // Getters
diff --git a/js/src/modal.js b/js/src/modal.js
index 0ecd6948f21b759175281b87f1dd6f9b7f9c5834..34aa56606c2489f83f270353368d222b5c3924fe 100644
--- a/js/src/modal.js
+++ b/js/src/modal.js
@@ -87,6 +87,7 @@ class Modal {
     this._ignoreBackdropClick = false
     this._isTransitioning     = false
     this._scrollbarWidth      = 0
+    Data.setData(element, DATA_KEY, this)
   }
 
   // Getters
@@ -522,7 +523,6 @@ class Modal {
 
       if (!data) {
         data = new Modal(this, _config)
-        Data.setData(this, DATA_KEY, data)
       }
 
       if (typeof config === 'string') {
@@ -581,7 +581,6 @@ EventHandler.on(document, Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (
   let data = Data.getData(target, DATA_KEY)
   if (!data) {
     data = new Modal(target, config)
-    Data.setData(target, DATA_KEY, data)
   }
 
   data.show(this)
diff --git a/js/src/popover.js b/js/src/popover.js
index b4623261907ee87c5b010d0a1499ae9348505610..36640407b72ecbe34060f9347d290dd190b62962 100644
--- a/js/src/popover.js
+++ b/js/src/popover.js
@@ -134,10 +134,10 @@ class Popover extends Tooltip {
   _cleanTipClass() {
     const tip = this.getTipElement()
     const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX)
+
     if (tabClass !== null && tabClass.length > 0) {
-      tabClass.map((token) => token.trim()).forEach((tClass) => {
-        tip.classList.remove(tClass)
-      })
+      tabClass.map((token) => token.trim())
+        .forEach((tClass) => tip.classList.remove(tClass))
     }
   }
 
diff --git a/js/src/tooltip.js b/js/src/tooltip.js
index fbe9ed856a5f6d349f4395c6c1e72134a2b488c7..29394b9484e23478c5f8dee5929982f01d63c12c 100644
--- a/js/src/tooltip.js
+++ b/js/src/tooltip.js
@@ -143,6 +143,7 @@ class Tooltip {
     this.tip     = null
 
     this._setListeners()
+    Data.setData(element, this.constructor.DATA_KEY, this)
   }
 
   // Getters
@@ -779,7 +780,6 @@ class Tooltip {
 
       if (!data) {
         data = new Tooltip(this, _config)
-        Data.setData(this, DATA_KEY, data)
       }
 
       if (typeof config === 'string') {