diff --git a/src/factories/baseWidget.js b/src/factories/baseWidget.js
index e4be2eed..51733cab 100644
--- a/src/factories/baseWidget.js
+++ b/src/factories/baseWidget.js
@@ -1117,15 +1117,16 @@
                         filters = parts.slice(1).join(':');
                     }
                 }
-                if (widgetName && _this.desc.name === widgetName && filters) {
+                if (widgetName && _this.desc.name !== widgetName) return mdx;
+                if (filters) {
                     let f = filters.split('~');
                     for (let i = 0; i < f.length; i++) {
                         let s = f[i];
                         let isExclude = s.indexOf('%NOT') !== -1;
-                        if (s.indexOf('{') !== -1) {
+                        if (/\{([^}]+)\}/.test(s)) {
                             // Many values
                             let path = s.substring(0, s.indexOf('{')).replace('%NOT ', '');
-                            let values = s.match(/\{([^)]+)\}/)[1].split(',');
+                            let values = s.match(/\{([^}]+)\}/)[1].split(',');
                             mdx += ' %FILTER %OR({';
                             mdx += values.map(v => path + v + (isExclude ? '.%NOT' : '')).join(',');
                             mdx += '})';
diff --git a/src/services/filters.js b/src/services/filters.js
index 897846de..f68d7d4b 100644
--- a/src/services/filters.js
+++ b/src/services/filters.js
@@ -4,7 +4,7 @@
 (function() {
     'use strict';
 
-    function FiltersSvc($rootScope, Connector, Storage, Lang) {
+    function FiltersSvc($rootScope, Connector, Storage, Lang, $location) {
         var _this = this;
         this.items = [];
         this.isFiltersOnToolbarExists = false;
@@ -52,7 +52,6 @@
                     if (parts && parts.length !== 0) {
                         var params = parts[0].substring(2, parts[0].length - 2);
                         flt.additionalParams = params.toLowerCase().trim().split(',');
-                        console.log(params);
 
                         if (flt.additionalParams.indexOf('inverseorder') !== -1) flt.values = flt.values.reverse();
                         if (flt.additionalParams.indexOf('ignorenow') !== -1) flt.values = flt.values.filter(function(v) { return v.path.toLowerCase() !== '&[now]';});
@@ -64,6 +63,8 @@
             }
 
             loadFiltersFromSettings();
+
+            loadFilterFromQuery();
         }
 
         /**
@@ -77,37 +78,92 @@
                 for (var i = 0; i < widgets._filters.length; i++) {
                     var flt = widgets._filters[i];
 
-                    var exists = _this.items.filter(function(el) { return el.targetProperty === flt.targetProperty; })[0];
-                    if (exists) {
-                        // Check for single value
-                        exists.value = flt.value;
-                        exists.isExclude = flt.isExclude;
-                        exists.isInterval = flt.isInterval;
-
-                        if (exists.isInterval) {
-                            exists.fromIdx = flt.fromIdx;
-                            exists.toIdx = flt.toIdx;
-                            exists.valueDisplay = exists.values[exists.fromIdx].name + ':' + exists.values[exists.toIdx].name;
-                        } else {
-                            var values = flt.value.split('|');
-
-                            // Multiple values was selected
-                            exists.values.forEach(function (v) {
-                                if (values.indexOf(v.path) !== -1) v.checked = true;
-                            });
-
-                            exists.valueDisplay = flt.value.split('|').map(el => {
-                                let v = exists.values.find(e => e.path == el);
-                                return (v.name || '').toString();
-                            }).join(',');
-                        }
-
-                        found = true;
-                    }
+                    applyFilterValue(flt);
                 }
             }
         }
 
+        function applyFilterValue(flt) {
+            var exists = _this.items.filter(function(el) { return el.targetProperty === flt.targetProperty; })[0];
+            if (!exists) return;
+            // Check for single value
+            exists.value = flt.value;
+            exists.isExclude = flt.isExclude;
+            exists.isInterval = flt.isInterval;
+
+            if (exists.isInterval) {
+                if (!flt.fromIdx && !flt.toIdx) {
+                    let ranges = flt.value.match(/(&\[[^\]]+\]):(&\[[^\]]+\])/);
+                    const findIndex = (path) => { return exists.values.findIndex(val => val.path === path) }
+                    flt.fromIdx = findIndex(ranges[1]);
+                    flt.toIdx = findIndex(ranges[2]);
+                }
+                exists.fromIdx = flt.fromIdx;
+                exists.toIdx = flt.toIdx;
+                exists.valueDisplay = exists.values[exists.fromIdx].name + ':' + exists.values[exists.toIdx].name;
+            } else {
+                var values = flt.value.split('|');
+
+                // Multiple values was selected
+                exists.values.forEach(function (v) {
+                    if (values.indexOf(v.path) !== -1) v.checked = true;
+                });
+                
+                exists.valueDisplay = flt.value.split('|').map(el => {
+                    let v = exists.values.find(e => e.path == el);
+                    return v === undefined ? null : (v.name || '').toString();
+                }).filter(v => v !== null).join(',');
+            }
+
+            return exists;
+        }
+
+        /**
+         * Load settings from query
+         */
+        function loadFilterFromQuery() {
+            let querySettings = $location.search().SETTINGS;
+            if (!querySettings) return;
+
+            let params = querySettings.split(';');
+            let filters = '';
+            for (let i in params) {
+                let parts = params[i].split(':');
+                if (parts[0].toLowerCase() === 'filter') {
+                    filters = parts.slice(1).join(':');
+                }
+            }
+            if (filters) {
+                let f = filters.split('~');
+                for (let i in f) {
+                    let s = f[i];
+                    let targetProperty = s.match(/^(\[([^\]]+)\].)*/)[0].slice(0, -1);
+                    let flt = {
+                        targetProperty: targetProperty,
+                        isExclude: false,
+                        isInterval: false
+                    };
+
+                    let filterValue = s.substr(targetProperty.length + 1);
+                    if (filterValue.startsWith('%NOT')) {
+                        flt.isExclude = true;
+                        filterValue = filterValue.substr(5);
+                    }
+                    const re = /\{([^}]+)\}/;
+                    if (re.test(filterValue)) {
+                        let values = filterValue.match(re)[1].split(',');
+                        filterValue = values.join('|');
+                    } else if (/&\[[^\]]+\]:&\[[^\]]+\]/.test(filterValue)) {
+                        flt.isInterval = true;
+                    } 
+
+                    flt.value = filterValue;
+
+                    applyFilterValue(flt);
+                }
+            }
+        } 
+
         function getClickFilterTarget(widgetName) {
             for (var i = 0; i < _this.items.length; i++) {
                 var flt = _this.items[i];
@@ -273,6 +329,6 @@
     }
 
     angular.module('app')
-        .service('Filters', ['$rootScope', 'Connector', 'Storage', 'Lang', FiltersSvc]);
+        .service('Filters', ['$rootScope', 'Connector', 'Storage', 'Lang', '$location', FiltersSvc]);
 
 })();