diff --git a/src/js/utils.js b/src/js/utils.js
index 8db7c82b6077c7ce89e2bdff2a7c39be86a0cc68..4524cf4ded943dadb024cbf7ea8c4ea2932ead50 100644
--- a/src/js/utils.js
+++ b/src/js/utils.js
@@ -106,10 +106,11 @@ function removeAllChildNodes(parent) {
 
 /**
  * Initial widgets grid
- * @param {*} widgets
+ * @param {*} initialWidgets
  * @param {*} items
  */
-export function initGrid(widgets, items) {
+export function initGrid(initialWidgets, items) {
+  let widgets = initialWidgets
   // Basic grid object
   const grid = GridStack.init({
     cellHeight: 70,
@@ -270,6 +271,15 @@ export function initGrid(widgets, items) {
     disableWidgetMoveAndResize();
   }
 
+  /**
+   * Refresh widgets with updated widgets array.
+   * @param {*} newWidgets 
+   */
+  function refreshWidgets(newWidgets) {
+    widgets = newWidgets
+    plotWidgets(grid.engine.nodes, widgets);
+  }
+
   return {
     grid,
     toggleSidebar,
@@ -277,5 +287,6 @@ export function initGrid(widgets, items) {
     load,
     enableWidgetMoveAndResize,
     disableWidgetMoveAndResize,
+    refreshWidgets
   };
 }