From e27bac2923d68a9e114e5d5e92a7e5e2642f95c3 Mon Sep 17 00:00:00 2001
From: Katarzyna Kwiatkowska <kkwiatkowska@pl.sii.eu>
Date: Wed, 18 Oct 2017 15:49:58 +0200
Subject: [PATCH] #20024: Added 'if's to wherever a loop iterates over a
 variable which could potentially be null / undefined

---
 js/dss/dss-components/dss-action-selector.js  |  235 +--
 .../dss-components/dss-condition-selector.js  | 1328 +++++++------
 js/dss/dss-components/dss-device-selector.js  |  113 +-
 js/dss/dss-components/dss-radiogroup.js       |   26 +-
 .../dss-timereference-control.js              |   84 +-
 js/dss/dss-components/dss-trigger-selector.js | 1687 +++++++++--------
 .../dss-components/dss-weekday-selection.js   |   80 +-
 js/dss/dss-datamodel.js                       | 1655 ++++++++--------
 js/dss/dss-edit-dialog.js                     |   47 +-
 js/dss/dss-grid.js                            |  599 +++---
 js/dss/dss-wizard-dialog.js                   |  113 +-
 11 files changed, 3152 insertions(+), 2815 deletions(-)

diff --git a/js/dss/dss-components/dss-action-selector.js b/js/dss/dss-components/dss-action-selector.js
index edc7b479..516c750e 100644
--- a/js/dss/dss-components/dss-action-selector.js
+++ b/js/dss/dss-components/dss-action-selector.js
@@ -929,18 +929,20 @@ Ext.define('DSS.component.ActionConfigurator', {
         			var oUserStates=dss.staticDataModel.getUserStates();
         			var sStringValue;
         			var image=null;
-        			for (var iIndex=0;iIndex<oUserStates.length;iIndex++) {
-            			if (oUserStates[iIndex].name==stateName) {
-            				if (value=='active') {
-            					sStringValue=oUserStates[iIndex].setName;
-            					image=dss.staticDataModel.baseImagePath +  "state/uds_state_active.png"
-            				} else {
-            					sStringValue=oUserStates[iIndex].resetName;
-            					image=dss.staticDataModel.baseImagePath +  "state/uds_state_inactive.png"
-            				}
-            				sStringValue= Ext.String.format2(_("Customstate {state} change to {value}"),{state:oUserStates[iIndex].displayName,value:sStringValue});
-            			}
-            		}
+                    if (oUserStates) {
+            			for (var iIndex=0;iIndex<oUserStates.length;iIndex++) {
+                			if (oUserStates[iIndex].name==stateName) {
+                				if (value=='active') {
+                					sStringValue=oUserStates[iIndex].setName;
+                					image=dss.staticDataModel.baseImagePath +  "state/uds_state_active.png"
+                				} else {
+                					sStringValue=oUserStates[iIndex].resetName;
+                					image=dss.staticDataModel.baseImagePath +  "state/uds_state_inactive.png"
+                				}
+                				sStringValue= Ext.String.format2(_("Customstate {state} change to {value}"),{state:oUserStates[iIndex].displayName,value:sStringValue});
+                			}
+                		}
+                    }
 
 	        		var sString = '<table><tr>';
 	        		if (image!=null)
@@ -1267,16 +1269,18 @@ Ext.define('DSS.component.ActionConfigurator', {
 
     		var oUserStates=dss.staticDataModel.getUserStates();
 
-    		for (var iIndex=0;iIndex<oUserStates.length;iIndex++)
-    			if (oUserStates[iIndex].type=='custom-states') {
-	    			var Aktionen = [{
-	                    name : oUserStates[iIndex].displayName,
-	                    _id : oUserStates[iIndex].name,
-	                    next : true,
-	                    icon : null
-	                }];
-	    			Ext.data.StoreManager.lookup('actionConfigurator_userStateStore').add(Aktionen);
-	    		}
+            if (oUserStates) {
+        		for (var iIndex=0;iIndex<oUserStates.length;iIndex++)
+        			if (oUserStates[iIndex].type=='custom-states') {
+    	    			var Aktionen = [{
+    	                    name : oUserStates[iIndex].displayName,
+    	                    _id : oUserStates[iIndex].name,
+    	                    next : true,
+    	                    icon : null
+    	                }];
+    	    			Ext.data.StoreManager.lookup('actionConfigurator_userStateStore').add(Aktionen);
+    	    		}
+            }
 
     	}
 
@@ -1610,10 +1614,13 @@ Ext.define('DSS.component.ActionConfigurator', {
                 }
             });
 
-            for (var iIndex=0;iIndex<dss.staticDataModel.getZoneArray().length;iIndex++) {
-            	var oStore=this.getDeviceStore(dss.staticDataModel.getZoneArray()[iIndex].ZoneID);
-            	if (oStore.count()>0)
-            		Ext.data.StoreManager.lookup('actionConfigurator_zoneDeviceStore').add(dss.staticDataModel.getZoneArray()[iIndex]);
+            var zoneArray = dss.staticDataModel.getZoneArray();
+            if (zoneArray) {
+                for (var iIndex=0;iIndex<zoneArray.length;iIndex++) {
+                	var oStore=this.getDeviceStore(dss.staticDataModel.getZoneArray()[iIndex].ZoneID);
+                	if (oStore.count()>0)
+                		Ext.data.StoreManager.lookup('actionConfigurator_zoneDeviceStore').add(dss.staticDataModel.getZoneArray()[iIndex]);
+                }
             }
         }
     },
@@ -1810,42 +1817,45 @@ Ext.define('DSS.component.ActionConfigurator', {
                     });
             	}
             } else {
-            var oScenes = dss.staticDataModel.getScenes(ZoneID, groupID);
-            for ( var iIndex = 0; iIndex < oScenes.length; iIndex++) {
-                var oObject = {};
-                oObject.id = oScenes[iIndex].id;
-                oObject.reachable = oScenes[iIndex].reachable;
-                oObject.icon = oScenes[iIndex].icon;
-                if (oScenes[iIndex].name == oScenes[iIndex].defaultName)
-                    oObject.name = oScenes[iIndex].name;
-                else
-                    oObject.name = oScenes[iIndex].defaultName + ' - ' + oScenes[iIndex].name;
-
-                if (ZoneID==0)
-                	if (groupID==0) {
-                		if (oScenes[iIndex].id==90)
-                			oObject.reachable = false;
-                    	if (oScenes[iIndex].id==91)
-                    		oObject.reachable = false;
-                	}
+                var oScenes = dss.staticDataModel.getScenes(ZoneID, groupID);
+                if (oScenes) {
+                    for ( var iIndex = 0; iIndex < oScenes.length; iIndex++) {
+                        var oObject = {};
+                        oObject.id = oScenes[iIndex].id;
+                        oObject.reachable = oScenes[iIndex].reachable;
+                        oObject.icon = oScenes[iIndex].icon;
+                        if (oScenes[iIndex].name == oScenes[iIndex].defaultName)
+                            oObject.name = oScenes[iIndex].name;
+                        else
+                            oObject.name = oScenes[iIndex].defaultName + ' - ' + oScenes[iIndex].name;
+
+                        if (ZoneID==0)
+                        	if (groupID==0) {
+                        		if (oScenes[iIndex].id==90)
+                        			oObject.reachable = false;
+                            	if (oScenes[iIndex].id==91)
+                            		oObject.reachable = false;
+                        	}
 
-                Ext.data.StoreManager.lookup('actionConfigurator_szeneStore_' + ZoneID + '_' + groupID).add(oObject);
+                        Ext.data.StoreManager.lookup('actionConfigurator_szeneStore_' + ZoneID + '_' + groupID).add(oObject);
 
-                if (oObject.undoable) {
-                    oObject = {};
-                    oObject.id = -1 * oScenes[iIndex].id;
-                    oObject.reachable = oScenes[iIndex].reachable;
-                    oObject.icon = oScenes[iIndex].icon;
+                        if (oObject.undoable) {
+                            oObject = {};
+                            oObject.id = -1 * oScenes[iIndex].id;
+                            oObject.reachable = oScenes[iIndex].reachable;
+                            oObject.icon = oScenes[iIndex].icon;
 
 
-                    if (oScenes[iIndex].name == oScenes[iIndex].defaultName)
-                        oObject.name = _('Undo ') + oScenes[iIndex].name;
-                    else
-                        oObject.name = _('Undo ') + oScenes[iIndex].defaultName + ' - ' + oScenes[iIndex].name;
-                    Ext.data.StoreManager.lookup('actionConfigurator_szeneStore_' + ZoneID + '_' + groupID).add(oObject);
-                }
+                            if (oScenes[iIndex].name == oScenes[iIndex].defaultName)
+                                oObject.name = _('Undo ') + oScenes[iIndex].name;
+                            else
+                                oObject.name = _('Undo ') + oScenes[iIndex].defaultName + ' - ' + oScenes[iIndex].name;
+                            Ext.data.StoreManager.lookup('actionConfigurator_szeneStore_' + ZoneID + '_' + groupID).add(oObject);
+                        }
 
-            }}
+                    }
+                }
+            }
 
         }
         return Ext.data.StoreManager.lookup('actionConfigurator_szeneStore_' + ZoneID + '_' + groupID);
@@ -1865,27 +1875,29 @@ Ext.define('DSS.component.ActionConfigurator', {
                 }
             });
             var oDevice = dss.staticDataModel.getDevicesForZone(ZoneID,0);
-            for (var iIndex=0;iIndex<oDevice.length;iIndex++) {
-            	//var fShouldDo=(oDevice[iIndex].outputMode!=0);
-            	var fShouldDo= ((oDevice[iIndex].outputMode != 0) && (oDevice[iIndex].outputMode != 30) && (oDevice[iIndex].outputMode != 64));
-
-            	if (oDevice[iIndex].hasActions)
-            		fShouldDo=true;
-            	if (oDevice[iIndex].deviceCustomActions!=null)
-            		if (Object.keys(oDevice[iIndex].deviceCustomActions).length>0)
-            			fShouldDo=true;
-            	if (oDevice[iIndex].deviceStandardActions!=null)
-            		if (Object.keys(oDevice[iIndex].deviceStandardActions).length>0)
-            			fShouldDo=true;
-            	if (oDevice[iIndex].specialActions.actions!=null)
-            		if (oDevice[iIndex].specialActions.actions.deviceActions!=null)
-            			fShouldDo=true;
-
-            	if (!oDevice[iIndex].present)
-            		if(!this.fIgnorePresence)
-            			fShouldDo=false;
-            	if (fShouldDo)
-                    Ext.data.StoreManager.lookup('actionConfigurator_deviceStore_' + ZoneID).add(oDevice[iIndex]);
+            if (oDevice) {
+                for (var iIndex=0;iIndex<oDevice.length;iIndex++) {
+                	//var fShouldDo=(oDevice[iIndex].outputMode!=0);
+                	var fShouldDo= ((oDevice[iIndex].outputMode != 0) && (oDevice[iIndex].outputMode != 30) && (oDevice[iIndex].outputMode != 64));
+
+                	if (oDevice[iIndex].hasActions)
+                		fShouldDo=true;
+                	if (oDevice[iIndex].deviceCustomActions!=null)
+                		if (Object.keys(oDevice[iIndex].deviceCustomActions).length>0)
+                			fShouldDo=true;
+                	if (oDevice[iIndex].deviceStandardActions!=null)
+                		if (Object.keys(oDevice[iIndex].deviceStandardActions).length>0)
+                			fShouldDo=true;
+                	if (oDevice[iIndex].specialActions.actions!=null)
+                		if (oDevice[iIndex].specialActions.actions.deviceActions!=null)
+                			fShouldDo=true;
+
+                	if (!oDevice[iIndex].present)
+                		if(!this.fIgnorePresence)
+                			fShouldDo=false;
+                	if (fShouldDo)
+                        Ext.data.StoreManager.lookup('actionConfigurator_deviceStore_' + ZoneID).add(oDevice[iIndex]);
+                }
             }
         }
         return Ext.data.StoreManager.lookup('actionConfigurator_deviceStore_' + ZoneID);
@@ -1903,22 +1915,24 @@ Ext.define('DSS.component.ActionConfigurator', {
         });
 
         var oGroups=dss.staticDataModel.getUsergroups();
-        for (var iIndex=0;iIndex<oGroups.length;iIndex++) {
-            oGroupControlStore.add({
-                id : oGroups[iIndex].id,
-                group : oGroups[iIndex].id,
-                name : oGroups[iIndex].name,
-                icon : dss.staticDataModel.getImagePathForGroup(0,oGroups[iIndex].id),
-                reachable : true
-            });
-            if (oGroups[iIndex].color == 1)
+        if (oGroups) {
+            for (var iIndex=0;iIndex<oGroups.length;iIndex++) {
                 oGroupControlStore.add({
-                    id : -1 * oGroups[iIndex].id,
-                    group : null,
-                    name : oGroups[iIndex].name + ' ' + _('blinking'),
-                    icon : dss.staticDataModel.baseImagePath + 'sceneIcons/scene_blink.png',
+                    id : oGroups[iIndex].id,
+                    group : oGroups[iIndex].id,
+                    name : oGroups[iIndex].name,
+                    icon : dss.staticDataModel.getImagePathForGroup(0,oGroups[iIndex].id),
                     reachable : true
                 });
+                if (oGroups[iIndex].color == 1)
+                    oGroupControlStore.add({
+                        id : -1 * oGroups[iIndex].id,
+                        group : null,
+                        name : oGroups[iIndex].name + ' ' + _('blinking'),
+                        icon : dss.staticDataModel.baseImagePath + 'sceneIcons/scene_blink.png',
+                        reachable : true
+                    });
+            }
         }
 
         this.grids.lvlUserGroup = Ext.create('Ext.grid.Panel', {
@@ -2294,11 +2308,13 @@ Ext.define('DSS.component.ActionConfigurator', {
      });
 
 	 var oState=null;
-	 for (var iIndex=0;iIndex<dss.staticDataModel.userStates.length;iIndex++) {
-		 if (dss.staticDataModel.userStates[iIndex].name==stateID) {
-			 oState = dss.staticDataModel.userStates[iIndex];
-		 }
-	 }
+     if (dss.staticDataModel.userStates) {
+    	 for (var iIndex=0;iIndex<dss.staticDataModel.userStates.length;iIndex++) {
+    		 if (dss.staticDataModel.userStates[iIndex].name==stateID) {
+    			 oState = dss.staticDataModel.userStates[iIndex];
+    		 }
+    	 }
+     }
 	 if (oState!=null) {
          var oItem={
         		    name: stateID,
@@ -3677,14 +3693,14 @@ Ext.define('DSS.component.ActionConfigurator', {
                 }
             }
         });
-        if (dss.staticDataModel.HLECache!=null)
-            if (dss.staticDataModel.HLECache.length>0) {
-                for (var iIndex=0;iIndex<dss.staticDataModel.HLECache.length;iIndex++)
-                    oStore.add( {
-                        name:dss.staticDataModel.HLECache[iIndex].name,
-                        id:dss.staticDataModel.HLECache[iIndex].id
-                    });
+        if (dss.staticDataModel.HLECache) {
+            for (var iIndex=0;iIndex<dss.staticDataModel.HLECache.length;iIndex++) {
+                oStore.add( {
+                    name:dss.staticDataModel.HLECache[iIndex].name,
+                    id:dss.staticDataModel.HLECache[iIndex].id
+                });
             }
+        }
         oStore.sort('name','ASC');
         this.grids.lvlHighLevelEvent = Ext.create('Ext.grid.Panel', {
             height : this.iDefaultHeight,
@@ -3843,11 +3859,14 @@ Ext.define('DSS.component.ActionConfigurator', {
             //if (zoneID!=0) {
                 oSceneGroup0Store = this.getSceneStore(zoneID, 0);
             /*} else {
-                for (var iIndex=0;iIndex<dss.staticDataModel.getZoneArray().length;iIndex++) {
-                    var firstZone=dss.staticDataModel.getZoneArray()[iIndex];
-                    if (firstZone.ZoneID!=0) {
-                        oSceneGroup0Store = this.getSceneStore(firstZone.ZoneID, 0);
-                        iIndex=dss.staticDataModel.getZoneArray().length;
+                var zoneArray = dss.staticDataModel.getZoneArray();
+                if (zoneArray) {
+                    for (var iIndex=0;iIndex<zoneArray.length;iIndex++) {
+                        var firstZone=dss.staticDataModel.getZoneArray()[iIndex];
+                        if (firstZone.ZoneID!=0) {
+                            oSceneGroup0Store = this.getSceneStore(firstZone.ZoneID, 0);
+                            iIndex=dss.staticDataModel.getZoneArray().length;
+                        }
                     }
                 }
             }*/
diff --git a/js/dss/dss-components/dss-condition-selector.js b/js/dss/dss-components/dss-condition-selector.js
index 81071a71..58dafa7c 100644
--- a/js/dss/dss-components/dss-condition-selector.js
+++ b/js/dss/dss-components/dss-condition-selector.js
@@ -56,11 +56,11 @@ Ext.define('DSS.component.ConditionConfigurator', {
                 }
             });
             var oDeviceArray = dss.staticDataModel.getDevicesForZone(ZoneID, 0);
-            for (var iIndex=0;iIndex<oDeviceArray.length;iIndex++)
-            {
-                if ((oDeviceArray[iIndex].tasterMode==0)||(oDeviceArray[iIndex].tasterMode==15))
-                    Ext.data.StoreManager.lookup('conditionConfigurator_deviceStore_' + ZoneID).add(oDeviceArray[iIndex]);
-
+            if (oDeviceArray) {
+                for (var iIndex=0;iIndex<oDeviceArray.length;iIndex++) {
+                    if ((oDeviceArray[iIndex].tasterMode==0)||(oDeviceArray[iIndex].tasterMode==15))
+                        Ext.data.StoreManager.lookup('conditionConfigurator_deviceStore_' + ZoneID).add(oDeviceArray[iIndex]);
+                }
             }
         }
         return Ext.data.StoreManager.lookup('conditionConfigurator_deviceStore_' + ZoneID);
@@ -161,18 +161,20 @@ Ext.define('DSS.component.ConditionConfigurator', {
             break;
             case 'addon-state':
                 if (oAction.addonid=='system-addon-user-defined-states') {
-                    for (var iIndex=0;iIndex<dss.staticDataModel.userStates.length;iIndex++) {
-                        if (dss.staticDataModel.userStates[iIndex].name==oAction.stateName) {
-                            var valueText;
-                            var image;
-                            if (oAction.stateValue==1) {
-                                valueText=dss.staticDataModel.userStates[iIndex].setName;
-                                image=dss.staticDataModel.baseImagePath +  "state/uds_state_active.png";
-                            } else {
-                                valueText=dss.staticDataModel.userStates[iIndex].resetName;
-                                image=dss.staticDataModel.baseImagePath +  "state/uds_state_inactive.png";
+                    if (dss.staticDataModel.userStates) {
+                        for (var iIndex=0;iIndex<dss.staticDataModel.userStates.length;iIndex++) {
+                            if (dss.staticDataModel.userStates[iIndex].name==oAction.stateName) {
+                                var valueText;
+                                var image;
+                                if (oAction.stateValue==1) {
+                                    valueText=dss.staticDataModel.userStates[iIndex].setName;
+                                    image=dss.staticDataModel.baseImagePath +  "state/uds_state_active.png";
+                                } else {
+                                    valueText=dss.staticDataModel.userStates[iIndex].resetName;
+                                    image=dss.staticDataModel.baseImagePath +  "state/uds_state_inactive.png";
+                                }
+                                return '<table><tr><td style="padding-right:5px;"><img src="' + image + '"></td><td style="'+sError+'">' + Ext.String.format2(_("Customstate {state} is {value}"),{state:dss.staticDataModel.userStates[iIndex].displayName,value:valueText}) + '</td></tr></table>';
                             }
-                            return '<table><tr><td style="padding-right:5px;"><img src="' + image + '"></td><td style="'+sError+'">' + Ext.String.format2(_("Customstate {state} is {value}"),{state:dss.staticDataModel.userStates[iIndex].displayName,value:valueText}) + '</td></tr></table>';
                         }
                     }
                 }
@@ -463,15 +465,17 @@ Ext.define('DSS.component.ConditionConfigurator', {
                         }
                     }
                 }
-                for (var kIndex=0;kIndex<me.stateGridText.length;kIndex++) {
-                    if (me.stateGridText[kIndex].name==oAction.name)
-                        if (me.stateGridText[kIndex].value==oAction.value) {
-                            var sIcon=dss.staticDataModel.getImagePathForState(oAction.name,oAction.value);
-                            if (sIcon!=null)
-                                return '<table><tr><td style="padding-right:5px;" colspan="1"><img src="' + sIcon + '"></td><td>' + me.stateGridText[kIndex].gridText + '</td><tr></table>';
-                            else
-                                return '<table><tr><td style="padding-right:5px;" colspan="2">' + me.stateGridText[kIndex].gridText + '</td><tr></table>';
-                        }
+                if (me.stateGridText) {
+                    for (var kIndex=0;kIndex<me.stateGridText.length;kIndex++) {
+                        if (me.stateGridText[kIndex].name==oAction.name)
+                            if (me.stateGridText[kIndex].value==oAction.value) {
+                                var sIcon=dss.staticDataModel.getImagePathForState(oAction.name,oAction.value);
+                                if (sIcon!=null)
+                                    return '<table><tr><td style="padding-right:5px;" colspan="1"><img src="' + sIcon + '"></td><td>' + me.stateGridText[kIndex].gridText + '</td><tr></table>';
+                                else
+                                    return '<table><tr><td style="padding-right:5px;" colspan="2">' + me.stateGridText[kIndex].gridText + '</td><tr></table>';
+                            }
+                    }
                 }
                 if (oAction.name.indexOf('zone.0.group')>-1) {
                     var sIcon=dss.staticDataModel.getImagePathForState(oAction.name,oAction.value);
@@ -512,55 +516,57 @@ Ext.define('DSS.component.ConditionConfigurator', {
                var fSa = false;
                var fSo = false;
                var recObject=oAction.value;
-               if (recObject.length == 7)
-                   return sString + _("daily") + "</span></td></tr></table>";
-               for ( var iIndex = 0; iIndex < recObject.length; iIndex++) {
-                   if (recObject[iIndex] == 'MO')
-                       fMo = true;
-                   if (recObject[iIndex] == 'TU')
-                       fDi = true;
-                   if (recObject[iIndex] == 'WE')
-                       fMi = true;
-                   if (recObject[iIndex] == 'TH')
-                       fDo = true;
-                   if (recObject[iIndex] == 'FR')
-                       fFr = true;
-                   if (recObject[iIndex] == 'SA')
-                       fSa = true;
-                   if (recObject[iIndex] == 'SU')
-                       fSo = true;
-               }
-               sString += _('only ') ;
-               if (recObject.length == 2)
-                   if (fSa)
-                       if (fSo)
-                           return sString + _('on weekends')+'</span></td></tr></table>';
-
-               if (recObject.length == 5)
-                   if (fMo)
+               if (recObject) {
+                   if (recObject.length == 7)
+                       return sString + _("daily") + "</span></td></tr></table>";
+                   for ( var iIndex = 0; iIndex < recObject.length; iIndex++) {
+                       if (recObject[iIndex] == 'MO')
+                           fMo = true;
+                       if (recObject[iIndex] == 'TU')
+                           fDi = true;
+                       if (recObject[iIndex] == 'WE')
+                           fMi = true;
+                       if (recObject[iIndex] == 'TH')
+                           fDo = true;
+                       if (recObject[iIndex] == 'FR')
+                           fFr = true;
+                       if (recObject[iIndex] == 'SA')
+                           fSa = true;
+                       if (recObject[iIndex] == 'SU')
+                           fSo = true;
+                   }
+                   sString += _('only ') ;
+                   if (recObject.length == 2)
+                       if (fSa)
+                           if (fSo)
+                               return sString + _('on weekends')+'</span></td></tr></table>';
+
+                   if (recObject.length == 5)
+                       if (fMo)
+                           if (fDi)
+                               if (fMi)
+                                   if (fDo)
+                                       if (fFr)
+                                           return sString + _('MO-FR')+'</span></td></tr></table>';
+                   if (recObject.length == 1) {
+                       if (fMo)
+                           return sString + _("on monday")+"</span></td></tr></table>";
                        if (fDi)
-                           if (fMi)
-                               if (fDo)
-                                   if (fFr)
-                                       return sString + _('MO-FR')+'</span></td></tr></table>';
-               if (recObject.length == 1) {
-                   if (fMo)
-                       return sString + _("on monday")+"</span></td></tr></table>";
-                   if (fDi)
-                       return sString + _("on tuesday")+"</span></td></tr></table>";
-                   if (fMi)
-                       return sString + _("on wednesday")+"</span></td></tr></table>";
-                   if (fDo)
-                       return sString + _("on thursday")+"</span></td></tr></table>";
-                   if (fFr)
-                       return sString + _("on friday")+"</span></td></tr></table>";
-                   if (fSa)
-                       return sString + _("on saturday")+"</span></td></tr></table>";
-                   if (fSo)
-                       return sString + _("on sunday")+"</span></td></tr></table>";
-               }
-               if (recObject.length == 0) {
-                   return sString + _("no time defined")+"</span></td></tr></table>";
+                           return sString + _("on tuesday")+"</span></td></tr></table>";
+                       if (fMi)
+                           return sString + _("on wednesday")+"</span></td></tr></table>";
+                       if (fDo)
+                           return sString + _("on thursday")+"</span></td></tr></table>";
+                       if (fFr)
+                           return sString + _("on friday")+"</span></td></tr></table>";
+                       if (fSa)
+                           return sString + _("on saturday")+"</span></td></tr></table>";
+                       if (fSo)
+                           return sString + _("on sunday")+"</span></td></tr></table>";
+                   }
+                   if (recObject.length == 0) {
+                       return sString + _("no time defined")+"</span></td></tr></table>";
+                   }
                }
 
                if (fMo)
@@ -712,18 +718,18 @@ Ext.define('DSS.component.ConditionConfigurator', {
             });
 
             var oUserStates=dss.staticDataModel.getUserStates();
-
-            for (var iIndex=0;iIndex<oUserStates.length;iIndex++) {
-                var Aktionen = [{
-                    name : oUserStates[iIndex].displayName,
-                    _id : oUserStates[iIndex].name,
-                    next : true,
-                    icon : null
-                }];
-                Ext.data.StoreManager.lookup('conditionConfigurator_userStateStore').add(Aktionen);
+            if (oUserStates) {
+                for (var iIndex=0;iIndex<oUserStates.length;iIndex++) {
+                    var Aktionen = [{
+                        name : oUserStates[iIndex].displayName,
+                        _id : oUserStates[iIndex].name,
+                        next : true,
+                        icon : null
+                    }];
+                    Ext.data.StoreManager.lookup('conditionConfigurator_userStateStore').add(Aktionen);
+                }
             }
 
-
         }
 
         if (Ext.data.StoreManager.lookup('conditionConfigurator_l1Store') == null) {
@@ -745,395 +751,433 @@ Ext.define('DSS.component.ConditionConfigurator', {
         var Aktionen = [];
         this.stateGridText=[];
         var disID=0;
-        for (var iIndex=0;iIndex<conditionConfig.length;iIndex++) {
-            var oCondObject=conditionConfig[iIndex];
-            disID++;
-            switch (oCondObject.type) {
-            case 'enabler':
-                Aktionen.push({
-                    name : (oCondObject.title!=null)?oCondObject.title:_('Enabled'),
-                    type : 0,
-                    next : true,
-                    icon : null,
-                    passive:false,
-                    distiguishID:disID
-                });
-                  break;
-            case 'weekdays':
-                Aktionen.push({
-                    name : (oCondObject.title!=null)?oCondObject.title:_('Weekdays'),
-                    type : 1,
-                    next : true,
-                    icon : null,
-                    passive:false,
-                    distiguishID:disID
-                });
-                  break;
-            case 'timeframe':
-                 Aktionen.push({
-                     name : (oCondObject.title!=null)?oCondObject.title:_('Timeframe'),
-                     type : 2,
-                     next : true,
-                     icon : null,
-                     passive:false,
-                    distiguishID:disID
-                 });
-                break;
-            case 'dateframe':
+        if (conditionConfig && Object.prototype.toString.call(conditionConfig) === '[object Array]') {
+            for (var iIndex=0;iIndex<conditionConfig.length;iIndex++) {
+                var oCondObject=conditionConfig[iIndex];
+                disID++;
+                switch (oCondObject.type) {
+                case 'enabler':
                     Aktionen.push({
-                    name : (oCondObject.title!=null)?oCondObject.title:_('Dateframe'),
-                    type : 10,
-                    next : true,
-                    icon : null,
-                    passive:false,
-                    distiguishID:disID
-                });
-               break;
-            case 'zonestate':
-                Aktionen.push({
-                    name : (oCondObject.title!=null)?oCondObject.title:_('ZoneState'),
-                    type : 3,
-                    next : true,
-                    icon : null,
-                    passive:false,
-                    distiguishID:disID
-                });
-                  break;
-            case 'singleItem':
-                var oParameter=[];
-                for (var jIndex=0;jIndex<oCondObject.entry.length;jIndex++) {
-                    var fShouldAdd=true;
-                    if (oCondObject.entry[jIndex].type=='state') {
-                        fShouldAdd=false;
-                        for (var kIndex=0;kIndex<dss.staticDataModel.StateCache.length;kIndex++) {
-                            if (dss.staticDataModel.StateCache[kIndex].name == oCondObject.entry[jIndex].name)
-                                fShouldAdd=true;
-                            else
-                                for (var lIndex=0;lIndex<dss.staticDataModel.userGroups.length;lIndex++) {
-                                    if (dss.staticDataModel.StateCache[kIndex].name == oCondObject.entry[jIndex].name+".group" + dss.staticDataModel.userGroups[lIndex].id)
-                                        fShouldAdd=true;
-                                }
-                        }
-                    }
-                    if (fShouldAdd) {
-                        oParameter.push({name:oCondObject.entry[jIndex].name,value:oCondObject.entry[jIndex].value,title:oCondObject.entry[jIndex].title});
-                        this.stateGridText.push({name:oCondObject.entry[jIndex].name,value:oCondObject.entry[jIndex].value,gridText:oCondObject.entry[jIndex].gridText});
-                        for (var kIndex=0;kIndex<dss.staticDataModel.StateCache.length;kIndex++)
-                            for (var lIndex=0;lIndex<dss.staticDataModel.userGroups.length;lIndex++) {
-                                if (dss.staticDataModel.StateCache[kIndex].name == oCondObject.entry[jIndex].name+".group" + dss.staticDataModel.userGroups[lIndex].id) {
-                                    oParameter.push(
-                                            {name:dss.staticDataModel.StateCache[kIndex].name,
-                                             value:oCondObject.entry[jIndex].value,
-                                             title:oCondObject.entry[jIndex].title + ' ' + _('in') + ' ' + dss.staticDataModel.userGroups[lIndex].name});
-                                    this.stateGridText.push(
-                                            {name:dss.staticDataModel.StateCache[kIndex].name,
-                                             value:oCondObject.entry[jIndex].value,
-                                             gridText:oCondObject.entry[jIndex].gridText + ' ' + _('in') + ' ' + dss.staticDataModel.userGroups[lIndex].name});
-                                }
-                            }
-                    }
-                }
-                if (oParameter.length>0)
+                        name : (oCondObject.title!=null)?oCondObject.title:_('Enabled'),
+                        type : 0,
+                        next : true,
+                        icon : null,
+                        passive:false,
+                        distiguishID:disID
+                    });
+                      break;
+                case 'weekdays':
                     Aktionen.push({
-                        name : oCondObject.title,
-                        type : 4,
+                        name : (oCondObject.title!=null)?oCondObject.title:_('Weekdays'),
+                        type : 1,
                         next : true,
                         icon : null,
                         passive:false,
-                        parameter:oParameter,
                         distiguishID:disID
                     });
-                  break;
-            case 'multiItem':
-                var oParameter=[];
-                for (var jIndex=0;jIndex<oCondObject.entry.length;jIndex++) {
-
-                    var fShouldAdd=true;
-                    if (oCondObject.entry[jIndex].type=='state') {
-                        fShouldAdd=false;
-                        for (var kIndex=0;kIndex<dss.staticDataModel.StateCache.length;kIndex++) {
-                            if (dss.staticDataModel.StateCache[kIndex].name == oCondObject.entry[jIndex].name)
-                                fShouldAdd=true;
-                            else
-                                for (var lIndex=0;lIndex<dss.staticDataModel.userGroups.length;lIndex++) {
-                                    if (dss.staticDataModel.StateCache[kIndex].name == oCondObject.entry[jIndex].name+".group" + dss.staticDataModel.userGroups[lIndex].id)
-                                        fShouldAdd=true;
-                                }
-                        }
-                    }
-
-                    if (fShouldAdd) {
-                        oParameter.push({name:oCondObject.entry[jIndex].name,value:oCondObject.entry[jIndex].value,title:oCondObject.entry[jIndex].title,group:oCondObject.entry[jIndex].group});
-                        this.stateGridText.push({name:oCondObject.entry[jIndex].name,value:oCondObject.entry[jIndex].value,gridText:oCondObject.entry[jIndex].gridText});
-                        for (var kIndex=0;kIndex<dss.staticDataModel.StateCache.length;kIndex++)
-                            for (var lIndex=0;lIndex<dss.staticDataModel.userGroups.length;lIndex++) {
-                                if (dss.staticDataModel.StateCache[kIndex].name == oCondObject.entry[jIndex].name+".group" + dss.staticDataModel.userGroups[lIndex].id) {
-                                    oParameter.push(
-                                            {name:dss.staticDataModel.StateCache[kIndex].name,
-                                             value:oCondObject.entry[jIndex].value,
-                                             title:oCondObject.entry[jIndex].title + ' ' + _('in') + ' ' + dss.staticDataModel.userGroups[lIndex].name});
-                                    this.stateGridText.push(
-                                            {name:dss.staticDataModel.StateCache[kIndex].name,
-                                             value:oCondObject.entry[jIndex].value,
-                                             gridText:oCondObject.entry[jIndex].gridText + ' ' + _('in') + ' ' + dss.staticDataModel.userGroups[lIndex].name});
-                                }
-                            }
-                    }
-                }
-                if (oParameter.length>0)
+                      break;
+                case 'timeframe':
+                     Aktionen.push({
+                         name : (oCondObject.title!=null)?oCondObject.title:_('Timeframe'),
+                         type : 2,
+                         next : true,
+                         icon : null,
+                         passive:false,
+                        distiguishID:disID
+                     });
+                    break;
+                case 'dateframe':
+                        Aktionen.push({
+                        name : (oCondObject.title!=null)?oCondObject.title:_('Dateframe'),
+                        type : 10,
+                        next : true,
+                        icon : null,
+                        passive:false,
+                        distiguishID:disID
+                    });
+                   break;
+                case 'zonestate':
                     Aktionen.push({
-                        name : oCondObject.title,
-                        type : 5,
+                        name : (oCondObject.title!=null)?oCondObject.title:_('ZoneState'),
+                        type : 3,
                         next : true,
                         icon : null,
                         passive:false,
-                        parameter:oParameter,
-                        distiguishID:-1*disID
+                        distiguishID:disID
                     });
-                  break;
-            case 'plainStates':
-                var oParameter=[];
-                for (var jIndex=0;jIndex<oCondObject.entry.length;jIndex++) {
-
-                    var fShouldAdd=true;
-                    if (oCondObject.entry[jIndex].type=='state') {
-                        fShouldAdd=false;
-                        for (var kIndex=0;kIndex<dss.staticDataModel.StateCache.length;kIndex++) {
-                            if (dss.staticDataModel.StateCache[kIndex].name == oCondObject.entry[jIndex].name)
-                                fShouldAdd=true;
-                            else
-                                for (var lIndex=0;lIndex<dss.staticDataModel.userGroups.length;lIndex++) {
-                                    if (dss.staticDataModel.StateCache[kIndex].name == oCondObject.entry[jIndex].name+".group" + dss.staticDataModel.userGroups[lIndex].id)
-                                        fShouldAdd=true;
+                      break;
+                case 'singleItem':
+                    var oParameter=[];
+                    if (oCondObject && oCondObject.entry) {
+                        for (var jIndex=0;jIndex<oCondObject.entry.length;jIndex++) {
+                            var fShouldAdd=true;
+                            if (oCondObject.entry[jIndex].type=='state') {
+                                fShouldAdd=false;
+                                if (dss.staticDataModel.StateCache) {
+                                    for (var kIndex=0;kIndex<dss.staticDataModel.StateCache.length;kIndex++) {
+                                        if (dss.staticDataModel.StateCache[kIndex].name == oCondObject.entry[jIndex].name)
+                                            fShouldAdd=true;
+                                        else
+                                            if (dss.staticDataModel.userGroups) {
+                                                for (var lIndex=0;lIndex<dss.staticDataModel.userGroups.length;lIndex++) {
+                                                    if (dss.staticDataModel.StateCache[kIndex].name == oCondObject.entry[jIndex].name+".group" + dss.staticDataModel.userGroups[lIndex].id)
+                                                        fShouldAdd=true;
+                                                }
+                                            }
+                                    }
+                                }
+                            }
+                            if (fShouldAdd) {
+                                oParameter.push({name:oCondObject.entry[jIndex].name,value:oCondObject.entry[jIndex].value,title:oCondObject.entry[jIndex].title});
+                                this.stateGridText.push({name:oCondObject.entry[jIndex].name,value:oCondObject.entry[jIndex].value,gridText:oCondObject.entry[jIndex].gridText});
+                                if (dss.staticDataModel.StateCache) {
+                                    for (var kIndex=0;kIndex<dss.staticDataModel.StateCache.length;kIndex++) {
+                                        for (var lIndex=0;lIndex<dss.staticDataModel.userGroups.length;lIndex++) {
+                                            if (dss.staticDataModel.StateCache[kIndex].name == oCondObject.entry[jIndex].name+".group" + dss.staticDataModel.userGroups[lIndex].id) {
+                                                oParameter.push(
+                                                        {name:dss.staticDataModel.StateCache[kIndex].name,
+                                                         value:oCondObject.entry[jIndex].value,
+                                                         title:oCondObject.entry[jIndex].title + ' ' + _('in') + ' ' + dss.staticDataModel.userGroups[lIndex].name});
+                                                this.stateGridText.push(
+                                                        {name:dss.staticDataModel.StateCache[kIndex].name,
+                                                         value:oCondObject.entry[jIndex].value,
+                                                         gridText:oCondObject.entry[jIndex].gridText + ' ' + _('in') + ' ' + dss.staticDataModel.userGroups[lIndex].name});
+                                            }
+                                        }
+                                    }
                                 }
+                            }
                         }
                     }
+                    if (oParameter.length>0)
+                        Aktionen.push({
+                            name : oCondObject.title,
+                            type : 4,
+                            next : true,
+                            icon : null,
+                            passive:false,
+                            parameter:oParameter,
+                            distiguishID:disID
+                        });
+                      break;
+                case 'multiItem':
+                    var oParameter=[];
+                    if (oCondObject && oCondObject.entry) {
+                        for (var jIndex=0;jIndex<oCondObject.entry.length;jIndex++) {
+
+                            var fShouldAdd=true;
+                            if (oCondObject.entry[jIndex].type=='state') {
+                                fShouldAdd=false;
+                                if (dss.staticDataModel.StateCache) {
+                                    for (var kIndex=0;kIndex<dss.staticDataModel.StateCache.length;kIndex++) {
+                                        if (dss.staticDataModel.StateCache[kIndex].name == oCondObject.entry[jIndex].name)
+                                            fShouldAdd=true;
+                                        else
+                                            if (dss.staticDataModel.userGroups) {
+                                                for (var lIndex=0;lIndex<dss.staticDataModel.userGroups.length;lIndex++) {
+                                                    if (dss.staticDataModel.StateCache[kIndex].name == oCondObject.entry[jIndex].name+".group" + dss.staticDataModel.userGroups[lIndex].id)
+                                                        fShouldAdd=true;
+                                                }
+                                            }
+                                    }
+                                }
+                            }
 
-                    if (fShouldAdd) {
-                        oParameter.push({name:oCondObject.entry[jIndex].name,value:oCondObject.entry[jIndex].value,title:oCondObject.entry[jIndex].title,group:oCondObject.entry[jIndex].group});
-                        this.stateGridText.push({name:oCondObject.entry[jIndex].name,value:oCondObject.entry[jIndex].value,gridText:oCondObject.entry[jIndex].gridText});
-                        for (var kIndex=0;kIndex<dss.staticDataModel.StateCache.length;kIndex++)
-                            for (var lIndex=0;lIndex<dss.staticDataModel.userGroups.length;lIndex++) {
-                                if (dss.staticDataModel.StateCache[kIndex].name == oCondObject.entry[jIndex].name+".group" + dss.staticDataModel.userGroups[lIndex].id) {
-                                    oParameter.push(
-                                            {name:dss.staticDataModel.StateCache[kIndex].name,
-                                             value:oCondObject.entry[jIndex].value,
-                                             title:oCondObject.entry[jIndex].title + ' ' + _('in') + ' ' + dss.staticDataModel.userGroups[lIndex].name});
-                                    this.stateGridText.push(
-                                            {name:dss.staticDataModel.StateCache[kIndex].name,
-                                             value:oCondObject.entry[jIndex].value,
-                                             gridText:oCondObject.entry[jIndex].gridText + ' ' + _('in') + ' ' + dss.staticDataModel.userGroups[lIndex].name});
+                            if (fShouldAdd) {
+                                oParameter.push({name:oCondObject.entry[jIndex].name,value:oCondObject.entry[jIndex].value,title:oCondObject.entry[jIndex].title,group:oCondObject.entry[jIndex].group});
+                                this.stateGridText.push({name:oCondObject.entry[jIndex].name,value:oCondObject.entry[jIndex].value,gridText:oCondObject.entry[jIndex].gridText});
+                                if (dss.staticDataModel.StateCache && dss.staticDataModel.userGroups) {
+                                    for (var kIndex=0;kIndex<dss.staticDataModel.StateCache.length;kIndex++) {
+                                        for (var lIndex=0;lIndex<dss.staticDataModel.userGroups.length;lIndex++) {
+                                            if (dss.staticDataModel.StateCache[kIndex].name == oCondObject.entry[jIndex].name+".group" + dss.staticDataModel.userGroups[lIndex].id) {
+                                                oParameter.push(
+                                                        {name:dss.staticDataModel.StateCache[kIndex].name,
+                                                         value:oCondObject.entry[jIndex].value,
+                                                         title:oCondObject.entry[jIndex].title + ' ' + _('in') + ' ' + dss.staticDataModel.userGroups[lIndex].name});
+                                                this.stateGridText.push(
+                                                        {name:dss.staticDataModel.StateCache[kIndex].name,
+                                                         value:oCondObject.entry[jIndex].value,
+                                                         gridText:oCondObject.entry[jIndex].gridText + ' ' + _('in') + ' ' + dss.staticDataModel.userGroups[lIndex].name});
+                                            }
+                                        }
+                                    }
                                 }
                             }
+                        }
+                    }
+                    if (oParameter.length>0)
+                        Aktionen.push({
+                            name : oCondObject.title,
+                            type : 5,
+                            next : true,
+                            icon : null,
+                            passive:false,
+                            parameter:oParameter,
+                            distiguishID:-1*disID
+                        });
+                      break;
+                case 'plainStates':
+                    var oParameter=[];
+                    if (oCondObject && oCondObject.entry) {
+                        for (var jIndex=0;jIndex<oCondObject.entry.length;jIndex++) {
+
+                            var fShouldAdd=true;
+                            if (oCondObject.entry[jIndex].type=='state') {
+                                fShouldAdd=false;
+                                if (dss.staticDataModel.StateCache) {
+                                    for (var kIndex=0;kIndex<dss.staticDataModel.StateCache.length;kIndex++) {
+                                        if (dss.staticDataModel.StateCache[kIndex].name == oCondObject.entry[jIndex].name)
+                                            fShouldAdd=true;
+                                        else
+                                            if (dss.staticDataModel.userGroups) {
+                                                for (var lIndex=0;lIndex<dss.staticDataModel.userGroups.length;lIndex++) {
+                                                    if (dss.staticDataModel.StateCache[kIndex].name == oCondObject.entry[jIndex].name+".group" + dss.staticDataModel.userGroups[lIndex].id)
+                                                        fShouldAdd=true;
+                                                }
+                                            }
+                                    }
+                                }
+                            }
+
+                            if (fShouldAdd) {
+                                oParameter.push({name:oCondObject.entry[jIndex].name,value:oCondObject.entry[jIndex].value,title:oCondObject.entry[jIndex].title,group:oCondObject.entry[jIndex].group});
+                                this.stateGridText.push({name:oCondObject.entry[jIndex].name,value:oCondObject.entry[jIndex].value,gridText:oCondObject.entry[jIndex].gridText});
+                                if (dss.staticDataModel.StateCache && dss.staticDataModel.userGroups) {
+                                    for (var kIndex=0;kIndex<dss.staticDataModel.StateCache.length;kIndex++) {
+                                        for (var lIndex=0;lIndex<dss.staticDataModel.userGroups.length;lIndex++) {
+                                            if (dss.staticDataModel.StateCache[kIndex].name == oCondObject.entry[jIndex].name+".group" + dss.staticDataModel.userGroups[lIndex].id) {
+                                                oParameter.push(
+                                                        {name:dss.staticDataModel.StateCache[kIndex].name,
+                                                         value:oCondObject.entry[jIndex].value,
+                                                         title:oCondObject.entry[jIndex].title + ' ' + _('in') + ' ' + dss.staticDataModel.userGroups[lIndex].name});
+                                                this.stateGridText.push(
+                                                        {name:dss.staticDataModel.StateCache[kIndex].name,
+                                                         value:oCondObject.entry[jIndex].value,
+                                                         gridText:oCondObject.entry[jIndex].gridText + ' ' + _('in') + ' ' + dss.staticDataModel.userGroups[lIndex].name});
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
                     }
-                }
-                Aktionen.push({
-                    name : oCondObject.title,
-                    type : 8,
-                    next : true,
-                    icon : null,
-                    passive:false,
-                    parameter:oParameter,
-                    distiguishID:-1*disID
-                });
-                  break;
-            case 'userDefinedState':
-                Aktionen.push({
-                    name : (oCondObject.title!=null)?oCondObject.title:_('user state'),
-                    type : 7,
-                    next : true,
-                    icon : null,
-                    passive:(dss.staticDataModel.getUserStates().length==0),
-                    distiguishID:disID
-                });
-                  break;
-            case 'vdcDeviceState':
-                var fShowDeviceState=false;
-                for (var jIndex=0;jIndex<dss.staticDataModel.deviceCache.length;jIndex++) {
-                    if (dss.staticDataModel.deviceCache[jIndex].hasStates)
-                        if (dss.staticDataModel.deviceCache[jIndex].present)
-                            fShowDeviceState=true;
-                }
-                if (fShowDeviceState) {
                     Aktionen.push({
-                        name : (oCondObject.title!=null)?oCondObject.title:_('device states'),
-                        type : 11,
+                        name : oCondObject.title,
+                        type : 8,
                         next : true,
                         icon : null,
                         passive:false,
-                        distiguishID:disID
+                        parameter:oParameter,
+                        distiguishID:-1*disID
                     });
-                }
-                break;
-            case 'globalApplication':
-                if (dss.staticDataModel.globalApplicationsAvaible)
+                      break;
+                case 'userDefinedState':
                     Aktionen.push({
-                        name : (oCondObject.title!=null)?oCondObject.title:_('Enabled'),
-                        type : 12,
+                        name : (oCondObject.title!=null)?oCondObject.title:_('user state'),
+                        type : 7,
                         next : true,
                         icon : null,
-                        passive:false,
+                        passive:(dss.staticDataModel.getUserStates().length==0),
                         distiguishID:disID
                     });
-                break;
+                      break;
+                case 'vdcDeviceState':
+                    var fShowDeviceState=false;
+                    if (dss.staticDataModel.deviceCache) {
+                        for (var jIndex=0;jIndex<dss.staticDataModel.deviceCache.length;jIndex++) {
+                            if (dss.staticDataModel.deviceCache[jIndex].hasStates)
+                                if (dss.staticDataModel.deviceCache[jIndex].present)
+                                    fShowDeviceState=true;
+                        }
+                    }
+                    if (fShowDeviceState) {
+                        Aktionen.push({
+                            name : (oCondObject.title!=null)?oCondObject.title:_('device states'),
+                            type : 11,
+                            next : true,
+                            icon : null,
+                            passive:false,
+                            distiguishID:disID
+                        });
+                    }
+                    break;
+                case 'globalApplication':
+                    if (dss.staticDataModel.globalApplicationsAvaible)
+                        Aktionen.push({
+                            name : (oCondObject.title!=null)?oCondObject.title:_('Enabled'),
+                            type : 12,
+                            next : true,
+                            icon : null,
+                            passive:false,
+                            distiguishID:disID
+                        });
+                    break;
 
-            case 'deviceState':
-                var oStateDevices=[];
-                var fPassive=false;
-                for (var jIndex=0;jIndex<dss.staticDataModel.getAKMDeviceArray().length;jIndex++) {
-                    var fShouldAdd=true;
-                    if (oCondObject.filterFunc!=null)
-                        if (!oCondObject.filterFunc(dss.staticDataModel.getAKMDeviceArray()[jIndex]))
+                case 'deviceState':
+                    var oStateDevices=[];
+                    var fPassive=false;
+                    var akmDeviceArray = dss.staticDataModel.getAKMDeviceArray();
+                    if (akmDeviceArray) {
+                        for (var jIndex=0;jIndex<akmDeviceArray.length;jIndex++) {
+                            var fShouldAdd=true;
+                            if (oCondObject.filterFunc!=null)
+                                if (!oCondObject.filterFunc(akmDeviceArray[jIndex]))
+                                        fShouldAdd=false;
+
+                            if ((akmDeviceArray[jIndex].present!=true)&&(!this.fIgnorePresence))
                                 fShouldAdd=false;
 
-                    if ((dss.staticDataModel.getAKMDeviceArray()[jIndex].present!=true)&&(!this.fIgnorePresence))
-                        fShouldAdd=false;
-
 
-                    if (fShouldAdd)
-                        oStateDevices.push(dss.staticDataModel.getAKMDeviceArray()[jIndex]);
+                            if (fShouldAdd)
+                                oStateDevices.push(akmDeviceArray[jIndex]);
 
-                }
+                        }
+                    }
 
-                for (var jIndex=0;jIndex<dss.staticDataModel.deviceCache.length;jIndex++) {
-                    if (dss.staticDataModel.deviceCache[jIndex].specialActions!=null)
-                        if (dss.staticDataModel.deviceCache[jIndex].specialActions.conditions!=null)
-                            if (dss.staticDataModel.deviceCache[jIndex].specialActions.conditions.akmEvent!=null) {
-                                var fDataExisting=false;
-                                for (var kIndex=0;kIndex<oStateDevices.length;kIndex++) {
-                                    if (oStateDevices[kIndex].dSUID==dss.staticDataModel.deviceCache[jIndex].dSUID) {
-                                        fDataExisting=true;
+                    if (dss.staticDataModel.deviceCache) {
+                        for (var jIndex=0;jIndex<dss.staticDataModel.deviceCache.length;jIndex++) {
+                            if (dss.staticDataModel.deviceCache[jIndex].specialActions!=null)
+                                if (dss.staticDataModel.deviceCache[jIndex].specialActions.conditions!=null)
+                                    if (dss.staticDataModel.deviceCache[jIndex].specialActions.conditions.akmEvent!=null) {
+                                        var fDataExisting=false;
+                                        for (var kIndex=0;kIndex<oStateDevices.length;kIndex++) {
+                                            if (oStateDevices[kIndex].dSUID==dss.staticDataModel.deviceCache[jIndex].dSUID) {
+                                                fDataExisting=true;
+                                            }
+                                        }
+                                        if (!fDataExisting)
+                                            if ((dss.staticDataModel.deviceCache[jIndex].present!=false)||(this.fIgnorePresence))
+                                                oStateDevices.push(dss.staticDataModel.deviceCache[jIndex]);
                                     }
-                                }
-                                if (!fDataExisting)
-                                    if ((dss.staticDataModel.deviceCache[jIndex].present!=false)||(this.fIgnorePresence))
-                                        oStateDevices.push(dss.staticDataModel.deviceCache[jIndex]);
-                            }
-                }
+                        }
+                    }
 
-                if (Ext.data.StoreManager.lookup('conditionConfigurator_zoneAKMStore') == null) {
-                    Ext.create('Ext.data.Store', {
-                        storeId : 'conditionConfigurator_zoneAKMStore',
-                        fields : [ 'ZoneID', 'name' ],
-                        proxy : {
-                            type : 'memory',
-                            reader : {
-                                type : 'json',
-                                root : 'items'
+                    if (Ext.data.StoreManager.lookup('conditionConfigurator_zoneAKMStore') == null) {
+                        Ext.create('Ext.data.Store', {
+                            storeId : 'conditionConfigurator_zoneAKMStore',
+                            fields : [ 'ZoneID', 'name' ],
+                            proxy : {
+                                type : 'memory',
+                                reader : {
+                                    type : 'json',
+                                    root : 'items'
+                                }
                             }
-                        }
-                    });
-                    var oZone=[];
-                    for (var jIndex=0;jIndex<oStateDevices.length;jIndex++)
-                        if (oZone.indexOf(oStateDevices[jIndex].ZoneID)<0){
-                            oZone.push(oStateDevices[jIndex].ZoneID);
-                        }
-                    for (var jIndex=0;jIndex<oZone.length;jIndex++)
-                        Ext.data.StoreManager.lookup('conditionConfigurator_zoneAKMStore').add({
-                            ZoneID:oZone[jIndex],
-                            name:dss.staticDataModel.getNameForZone(oZone[jIndex])
                         });
-                }
+                        var oZone=[];
+                        for (var jIndex=0;jIndex<oStateDevices.length;jIndex++)
+                            if (oZone.indexOf(oStateDevices[jIndex].ZoneID)<0){
+                                oZone.push(oStateDevices[jIndex].ZoneID);
+                            }
+                        for (var jIndex=0;jIndex<oZone.length;jIndex++)
+                            Ext.data.StoreManager.lookup('conditionConfigurator_zoneAKMStore').add({
+                                ZoneID:oZone[jIndex],
+                                name:dss.staticDataModel.getNameForZone(oZone[jIndex])
+                            });
+                    }
 
-                if (Ext.data.StoreManager.lookup('conditionConfigurator_deviceAKMStore') == null) {
-                    Ext.create('Ext.data.Store', {
-                        storeId : 'conditionConfigurator_deviceAKMStore',
-                        fields : [ 'dSID', 'dSUID', 'name', 'icon', 'present' ],
-                        proxy : {
-                            type : 'memory',
-                            reader : {
-                                type : 'json',
-                                root : 'items'
+                    if (Ext.data.StoreManager.lookup('conditionConfigurator_deviceAKMStore') == null) {
+                        Ext.create('Ext.data.Store', {
+                            storeId : 'conditionConfigurator_deviceAKMStore',
+                            fields : [ 'dSID', 'dSUID', 'name', 'icon', 'present' ],
+                            proxy : {
+                                type : 'memory',
+                                reader : {
+                                    type : 'json',
+                                    root : 'items'
+                                }
                             }
+                        });
+                        for (var jIndex=0;jIndex<oStateDevices.length;jIndex++)
+                        {
+                            Ext.data.StoreManager.lookup('conditionConfigurator_deviceAKMStore').add(oStateDevices[jIndex] );
                         }
-                    });
-                    for (var jIndex=0;jIndex<oStateDevices.length;jIndex++)
-                    {
-                        Ext.data.StoreManager.lookup('conditionConfigurator_deviceAKMStore').add(oStateDevices[jIndex] );
                     }
-                }
 
 
-                if (oStateDevices.length==0)
-                    fPassive=true;
-                Aktionen.push({
-                    name : oCondObject.title,
-                    type : 6,
-                    next : true,
-                    icon : null,
-                    passive:fPassive,
-                    parameter:oStateDevices,
-                    distiguishID:-1*disID
-                });
-                  break;
-            case 'clusterstate':
-                if (!dss.staticDataModel.clusterAvaible)
-                    break;
-                var oClusters = [];
-                var fPassive = false;
-
-                var oUsergroups = dss.staticDataModel.getUsergroups();
-                for (var jIndex = 0; jIndex < oUsergroups.length; jIndex++) {
-                    var fShouldAdd = true;
-                    if (oCondObject.filterFunc != null) {
-                        if (!oCondObject.filterFunc(oUsergroups[jIndex])) {
-                            fShouldAdd = false;
+                    if (oStateDevices.length==0)
+                        fPassive=true;
+                    Aktionen.push({
+                        name : oCondObject.title,
+                        type : 6,
+                        next : true,
+                        icon : null,
+                        passive:fPassive,
+                        parameter:oStateDevices,
+                        distiguishID:-1*disID
+                    });
+                      break;
+                case 'clusterstate':
+                    if (!dss.staticDataModel.clusterAvaible)
+                        break;
+                    var oClusters = [];
+                    var fPassive = false;
+
+                    var oUsergroups = dss.staticDataModel.getUsergroups();
+                    if (oUsergroups) {
+                        for (var jIndex = 0; jIndex < oUsergroups.length; jIndex++) {
+                            var fShouldAdd = true;
+                            if (oCondObject.filterFunc != null) {
+                                if (!oCondObject.filterFunc(oUsergroups[jIndex])) {
+                                    fShouldAdd = false;
+                                }
+                            }
+                            if ((oUsergroups[jIndex].present == false) && (!this.fIgnorePresence)) {
+                                fShouldAdd = false;
+                            }
+                            if (fShouldAdd) {
+                                oClusters.push(oUsergroups[jIndex]);
+                            }
                         }
                     }
-                    if ((oUsergroups[jIndex].present == false) && (!this.fIgnorePresence)) {
-                        fShouldAdd = false;
-                    }
-                    if (fShouldAdd) {
-                        oClusters.push(oUsergroups[jIndex]);
-                    }
-                }
-                if (Ext.data.StoreManager.lookup('conditionConfigurator_clusterStore') == null) {
-                    Ext.create('Ext.data.Store', {
-                        storeId : 'conditionConfigurator_clusterStore',
-                        fields : [ '_id', 'name', 'reachable', 'color' ],
-                        proxy : {
-                            type : 'memory',
-                            reader : {
-                                type : 'json',
-                                root : 'items'
+                    if (Ext.data.StoreManager.lookup('conditionConfigurator_clusterStore') == null) {
+                        Ext.create('Ext.data.Store', {
+                            storeId : 'conditionConfigurator_clusterStore',
+                            fields : [ '_id', 'name', 'reachable', 'color' ],
+                            proxy : {
+                                type : 'memory',
+                                reader : {
+                                    type : 'json',
+                                    root : 'items'
+                                }
                             }
+                        });
+                        for (var jIndex = 0; jIndex < oClusters.length; jIndex++) {
+                            Ext.data.StoreManager.lookup('conditionConfigurator_clusterStore').add(oClusters[jIndex]);
                         }
+                    }
+                    Aktionen.push({
+                        name : (oCondObject.title != null) ? oCondObject.title : _('Cluster State'),
+                        type : 9,
+                        next : true,
+                        icon : null,
+                        passive: fPassive,
+                        parameter: oClusters,
+                        distiguishID: disID
                     });
-                    for (var jIndex = 0; jIndex < oClusters.length; jIndex++) {
-                        Ext.data.StoreManager.lookup('conditionConfigurator_clusterStore').add(oClusters[jIndex]);
-                    }
-                }
-                Aktionen.push({
-                    name : (oCondObject.title != null) ? oCondObject.title : _('Cluster State'),
-                    type : 9,
-                    next : true,
-                    icon : null,
-                    passive: fPassive,
-                    parameter: oClusters,
-                    distiguishID: disID
-                });
-                break;
-            case 'climateState':
-                // check if apartment_controller state exists - if not, the item should be non-selectable
-                var apartmentControllerStateExists = dss.ajaxSyncRequest('/json/property/query2', {
-                    'query' : '/usr/addon-states/heating-controller/apartment_controller(state)'
-                });
-                try {
-                    apartmentControllerStateExists = JSON.parse(apartmentControllerStateExists);
-                    apartmentControllerStateExists = apartmentControllerStateExists && apartmentControllerStateExists.ok &&
-                        apartmentControllerStateExists.result && Object.keys(apartmentControllerStateExists.result).length;
-                } catch (e) {
-                    apartmentControllerStateExists = false;
-                }
-                Aktionen.push({
-                    name: (oCondObject.title != null) ? oCondObject.title : _('Heating Modes'),
-                    type: 13,
-                    next: true,
-                    icon: null,
-                    passive: !apartmentControllerStateExists,
-                    distiguishID: disID
-                });
-                break;
+                    break;
+                case 'climateState':
+                    // check if apartment_controller state exists - if not, the item should be non-selectable
+                    var apartmentControllerStateExists = dss.ajaxSyncRequest('/json/property/query2', {
+                        'query' : '/usr/addon-states/heating-controller/apartment_controller(state)'
+                    });
+                    try {
+                        apartmentControllerStateExists = JSON.parse(apartmentControllerStateExists);
+                        apartmentControllerStateExists = apartmentControllerStateExists && apartmentControllerStateExists.ok &&
+                            apartmentControllerStateExists.result && Object.keys(apartmentControllerStateExists.result).length;
+                    } catch (e) {
+                        apartmentControllerStateExists = false;
+                    }
+                    Aktionen.push({
+                        name: (oCondObject.title != null) ? oCondObject.title : _('Heating Modes'),
+                        type: 13,
+                        next: true,
+                        icon: null,
+                        passive: !apartmentControllerStateExists,
+                        distiguishID: disID
+                    });
+                    break;
+                }
             }
         }
 
@@ -1256,19 +1300,20 @@ Ext.define('DSS.component.ConditionConfigurator', {
                 }
             });
             var oScenes = dss.staticDataModel.getScenes(ZoneID, groupID);
-            for ( var iIndex = 0; iIndex < oScenes.length; iIndex++) {
-                var oObject = {};
-                oObject.id = oScenes[iIndex].id;
-                oObject._id = oScenes[iIndex].id;
-                oObject.reachable = oScenes[iIndex].reachable;
-                oObject.icon = oScenes[iIndex].icon;
-                if (oScenes[iIndex].name == oScenes[iIndex].defaultName)
-                    oObject.name = oScenes[iIndex].name;
-                else
-                    oObject.name = oScenes[iIndex].defaultName + ' - ' + oScenes[iIndex].name;
-                Ext.data.StoreManager.lookup('conditionConfigurator_szeneStore_' + ZoneID + '_' + groupID).add(oObject);
+            if (oScenes) {
+                for ( var iIndex = 0; iIndex < oScenes.length; iIndex++) {
+                    var oObject = {};
+                    oObject.id = oScenes[iIndex].id;
+                    oObject._id = oScenes[iIndex].id;
+                    oObject.reachable = oScenes[iIndex].reachable;
+                    oObject.icon = oScenes[iIndex].icon;
+                    if (oScenes[iIndex].name == oScenes[iIndex].defaultName)
+                        oObject.name = oScenes[iIndex].name;
+                    else
+                        oObject.name = oScenes[iIndex].defaultName + ' - ' + oScenes[iIndex].name;
+                    Ext.data.StoreManager.lookup('conditionConfigurator_szeneStore_' + ZoneID + '_' + groupID).add(oObject);
+                }
             }
-
         }
         return Ext.data.StoreManager.lookup('conditionConfigurator_szeneStore_' + ZoneID + '_' + groupID);
 
@@ -1302,45 +1347,47 @@ Ext.define('DSS.component.ConditionConfigurator', {
                 }
         if (!fSkip) {
             var bIsWindowHandle = dss.staticDataModel.IsWindowHandle(oDevice);
-            for (var iIndex=0;iIndex<oDevice.binaryInputs.length;iIndex++) {
-                if (!bIsWindowHandle) {
-                    var oItem={
-                            'name':dss.staticDataModel.getNameForAKMValue(oDevice.binaryInputs[iIndex].type,false),
-                            '_id':2,
-                            'tooltip':dss.staticDataModel.getTooltipForState(oDevice.binaryInputs[iIndex].type,false),
-                            'icon': dss.staticDataModel.getImagePathForAKMValue(oDevice.binaryInputs[iIndex].type,false),
-                            'index':oDevice.binaryInputs[iIndex].index};
-                    oStore.add(oItem);
-                    oItem={
-                            'name':dss.staticDataModel.getNameForAKMValue(oDevice.binaryInputs[iIndex].type,true),
-                            '_id':1,
-                            'tooltip':dss.staticDataModel.getTooltipForState(oDevice.binaryInputs[iIndex].type,true),
-                            'icon': dss.staticDataModel.getImagePathForAKMValue(oDevice.binaryInputs[iIndex].type,true),
-                            'index':oDevice.binaryInputs[iIndex].index};
-                    oStore.add(oItem);
-                } else {
-                    if (oDevice.binaryInputs[iIndex].type == 15)  { // BinaryInputIDWindowTilt
+            if (oDevice.binaryInputs) {
+                for (var iIndex=0;iIndex<oDevice.binaryInputs.length;iIndex++) {
+                    if (!bIsWindowHandle) {
                         var oItem={
-                                'name':dss.staticDataModel.getNameForAKMValue(oDevice.binaryInputs[iIndex].type,dss.whState.WH_Closed),
-                                '_id':dss.whState.WH_Closed,
-                                'tooltip':dss.staticDataModel.getTooltipForState(oDevice.binaryInputs[iIndex].type,dss.whState.WH_Closed),
-                                'icon': dss.staticDataModel.getImagePathForAKMValue(oDevice.binaryInputs[iIndex].type,dss.whState.WH_Closed),
+                                'name':dss.staticDataModel.getNameForAKMValue(oDevice.binaryInputs[iIndex].type,false),
+                                '_id':2,
+                                'tooltip':dss.staticDataModel.getTooltipForState(oDevice.binaryInputs[iIndex].type,false),
+                                'icon': dss.staticDataModel.getImagePathForAKMValue(oDevice.binaryInputs[iIndex].type,false),
                                 'index':oDevice.binaryInputs[iIndex].index};
                         oStore.add(oItem);
                         oItem={
-                                'name':dss.staticDataModel.getNameForAKMValue(oDevice.binaryInputs[iIndex].type,dss.whState.WH_Open),
-                                '_id':dss.whState.WH_Open,
-                                'tooltip':dss.staticDataModel.getTooltipForState(oDevice.binaryInputs[iIndex].type,dss.whState.WH_Open),
-                                'icon': dss.staticDataModel.getImagePathForAKMValue(oDevice.binaryInputs[iIndex].type,dss.whState.WH_Open),
-                                'index':oDevice.binaryInputs[iIndex].index};
-                        oStore.add(oItem);
-                        oItem={
-                                'name':dss.staticDataModel.getNameForAKMValue(oDevice.binaryInputs[iIndex].type,dss.whState.WH_Tilted),
-                                '_id':dss.whState.WH_Tilted,
-                                'tooltip':dss.staticDataModel.getTooltipForState(oDevice.binaryInputs[iIndex].type,dss.whState.WH_Tilted),
-                                'icon': dss.staticDataModel.getImagePathForAKMValue(oDevice.binaryInputs[iIndex].type,dss.whState.WH_Tilted),
+                                'name':dss.staticDataModel.getNameForAKMValue(oDevice.binaryInputs[iIndex].type,true),
+                                '_id':1,
+                                'tooltip':dss.staticDataModel.getTooltipForState(oDevice.binaryInputs[iIndex].type,true),
+                                'icon': dss.staticDataModel.getImagePathForAKMValue(oDevice.binaryInputs[iIndex].type,true),
                                 'index':oDevice.binaryInputs[iIndex].index};
                         oStore.add(oItem);
+                    } else {
+                        if (oDevice.binaryInputs[iIndex].type == 15)  { // BinaryInputIDWindowTilt
+                            var oItem={
+                                    'name':dss.staticDataModel.getNameForAKMValue(oDevice.binaryInputs[iIndex].type,dss.whState.WH_Closed),
+                                    '_id':dss.whState.WH_Closed,
+                                    'tooltip':dss.staticDataModel.getTooltipForState(oDevice.binaryInputs[iIndex].type,dss.whState.WH_Closed),
+                                    'icon': dss.staticDataModel.getImagePathForAKMValue(oDevice.binaryInputs[iIndex].type,dss.whState.WH_Closed),
+                                    'index':oDevice.binaryInputs[iIndex].index};
+                            oStore.add(oItem);
+                            oItem={
+                                    'name':dss.staticDataModel.getNameForAKMValue(oDevice.binaryInputs[iIndex].type,dss.whState.WH_Open),
+                                    '_id':dss.whState.WH_Open,
+                                    'tooltip':dss.staticDataModel.getTooltipForState(oDevice.binaryInputs[iIndex].type,dss.whState.WH_Open),
+                                    'icon': dss.staticDataModel.getImagePathForAKMValue(oDevice.binaryInputs[iIndex].type,dss.whState.WH_Open),
+                                    'index':oDevice.binaryInputs[iIndex].index};
+                            oStore.add(oItem);
+                            oItem={
+                                    'name':dss.staticDataModel.getNameForAKMValue(oDevice.binaryInputs[iIndex].type,dss.whState.WH_Tilted),
+                                    '_id':dss.whState.WH_Tilted,
+                                    'tooltip':dss.staticDataModel.getTooltipForState(oDevice.binaryInputs[iIndex].type,dss.whState.WH_Tilted),
+                                    'icon': dss.staticDataModel.getImagePathForAKMValue(oDevice.binaryInputs[iIndex].type,dss.whState.WH_Tilted),
+                                    'index':oDevice.binaryInputs[iIndex].index};
+                            oStore.add(oItem);
+                        }
                     }
                 }
             }
@@ -1857,13 +1904,15 @@ Ext.define('DSS.component.ConditionConfigurator', {
                 }
             }
         });
-        for (var iIndex=0;iIndex<oParams.length;iIndex++) {
-            var oItem={name:oParams[iIndex].name,
-                        value:oParams[iIndex].value,
-                        title:oParams[iIndex].title,
-                        icon:dss.staticDataModel.getImagePathForState(oParams[iIndex].name,oParams[iIndex].value),
-                        passive:false};
-            oSystemStateControlStore.add(oItem);
+        if (oParams && Object.prototype.toString.call(oParams) === '[object Array]') {
+            for (var iIndex=0;iIndex<oParams.length;iIndex++) {
+                var oItem={name:oParams[iIndex].name,
+                            value:oParams[iIndex].value,
+                            title:oParams[iIndex].title,
+                            icon:dss.staticDataModel.getImagePathForState(oParams[iIndex].name,oParams[iIndex].value),
+                            passive:false};
+                oSystemStateControlStore.add(oItem);
+            }
         }
 
           this.grids.lvlSystemState = Ext.create('Ext.grid.Panel', {
@@ -1930,9 +1979,11 @@ Ext.define('DSS.component.ConditionConfigurator', {
          });
 
          var oState=null;
-         for (var iIndex=0;iIndex<dss.staticDataModel.userStates.length;iIndex++) {
-             if (dss.staticDataModel.userStates[iIndex].name==stateID) {
-                 oState = dss.staticDataModel.userStates[iIndex];
+         if (dss.staticDataModel.userStates) {
+             for (var iIndex=0;iIndex<dss.staticDataModel.userStates.length;iIndex++) {
+                 if (dss.staticDataModel.userStates[iIndex].name==stateID) {
+                     oState = dss.staticDataModel.userStates[iIndex];
+                 }
              }
          }
          if (oState!=null) {
@@ -1992,13 +2043,16 @@ Ext.define('DSS.component.ConditionConfigurator', {
             oCondiObject.stateName=record.get('name');
             oCondiObject.stateValue=(record.get('value')=='active')?1:2;
 
-            for (var iIndex=0;iIndex<dss.staticDataModel.userStates.length;iIndex++)
-                if (dss.staticDataModel.userStates[iIndex].name==oCondiObject.stateName) {
-                    if (record.get('value')=='active')
-                        oCondiObject.name= dss.staticDataModel.userStates[iIndex].setName;
-                    else
-                        oCondiObject.name= dss.staticDataModel.userStates[iIndex].resetName;
+            if (dss.staticDataModel.userStates) {
+                for (var iIndex=0;iIndex<dss.staticDataModel.userStates.length;iIndex++) {
+                    if (dss.staticDataModel.userStates[iIndex].name==oCondiObject.stateName) {
+                        if (record.get('value')=='active')
+                            oCondiObject.name= dss.staticDataModel.userStates[iIndex].setName;
+                        else
+                            oCondiObject.name= dss.staticDataModel.userStates[iIndex].resetName;
+                    }
                 }
+            }
 
             oCondiObject.addonid='system-addon-user-defined-states';
             this.parent.setSelectedSubItem(oCondiObject,distiguishID);
@@ -2189,20 +2243,22 @@ Ext.define('DSS.component.ConditionConfigurator', {
                 }
             }
         });
-        for (var iIndex=0;iIndex<oParams.length;iIndex++) {
-            var oItem={name:oParams[iIndex].name,
-                        value:oParams[iIndex].value,
-                        title:oParams[iIndex].title,
-                        group:oParams[iIndex].group,
-                        icon:dss.staticDataModel.getImagePathForState(oParams[iIndex].name,oParams[iIndex].value),
-                        passive:false};
-            this.gridStore.each(function (oRecord) {
-                if (oRecord.get('pos')==distiguishID)
-                    if (oRecord.get('condition').group==oParams[iIndex].group)
-                        if (ignoreGroup!=oParams[iIndex].group)
-                            oItem.passive=true;
-            });
-            oSystemStateControlStore.add(oItem);
+        if (oParams && Object.prototype.toString.call(oParams) === '[object Array]') {
+            for (var iIndex=0;iIndex<oParams.length;iIndex++) {
+                var oItem={name:oParams[iIndex].name,
+                            value:oParams[iIndex].value,
+                            title:oParams[iIndex].title,
+                            group:oParams[iIndex].group,
+                            icon:dss.staticDataModel.getImagePathForState(oParams[iIndex].name,oParams[iIndex].value),
+                            passive:false};
+                this.gridStore.each(function (oRecord) {
+                    if (oRecord.get('pos')==distiguishID)
+                        if (oRecord.get('condition').group==oParams[iIndex].group)
+                            if (ignoreGroup!=oParams[iIndex].group)
+                                oItem.passive=true;
+                });
+                oSystemStateControlStore.add(oItem);
+            }
         }
 
           this.grids.lvlSystemState = Ext.create('Ext.grid.Panel', {
@@ -2305,66 +2361,69 @@ Ext.define('DSS.component.ConditionConfigurator', {
         });
 
         var fSplitter=false;
-        for (var iIndex=0;iIndex<dss.staticDataModel.getStates().length;iIndex++) {
-            var oState=dss.staticDataModel.getStates()[iIndex];
-            var oStateArray=oState.name.split('.');
-            if (oStateArray[0]=='zone') {
-                if (oStateArray[1]==""+zoneID) {
-                    if ((oStateArray[2]!='light') && (oStateArray[2]!='heating')) {
-                        if (!fSplitter) {
+        var states = dss.staticDataModel.getStates();
+        if (states) {
+            for (var iIndex=0;iIndex<states.length;iIndex++) {
+                var oState=states[iIndex];
+                var oStateArray=oState.name.split('.');
+                if (oStateArray[0]=='zone') {
+                    if (oStateArray[1]==""+zoneID) {
+                        if ((oStateArray[2]!='light') && (oStateArray[2]!='heating')) {
+                            if (!fSplitter) {
+                                oGroupControlStore.add({
+                                    group : -1,
+                                    name : '-',
+                                    passive:'-',
+                                    icon : null,
+                                    reachable : true
+                                });
+                                fSplitter=true;
+                            }
+                            var sIcon,sText;
+                            if (oStateArray[2]=='motion') {
+                                sIcon=dss.staticDataModel.getImagePathForAKMValue(5,true);
+                                sText=Ext.String.format2(_("{#editor_trigger_zonestates}motion is active"));
+                            }
+                            else if (oStateArray[2]=='presence') {
+                                sIcon=dss.staticDataModel.getImagePathForAKMValue(1,true);
+                                sText=Ext.String.format2(_("{#editor_trigger_zonestates}presence is active"));
+                            }
+                            else {
+                                sIcon=dss.staticDataModel.getImagePathForAKMValue(0,true);
+                                sText=Ext.String.format2(_("{#editor_condition_zonestates_generic}{state} is active"),{state:oStateArray[2]});
+                            }
+
                             oGroupControlStore.add({
-                                group : -1,
-                                name : '-',
-                                passive:'-',
-                                icon : null,
-                                reachable : true
+                                id : -2,
+                                _id : -2,
+                                state : oState.name,
+                                name : sText,
+                                icon : sIcon,
+                                group:null
                             });
-                            fSplitter=true;
-                        }
-                        var sIcon,sText;
-                        if (oStateArray[2]=='motion') {
-                            sIcon=dss.staticDataModel.getImagePathForAKMValue(5,true);
-                            sText=Ext.String.format2(_("{#editor_trigger_zonestates}motion is active"));
-                        }
-                        else if (oStateArray[2]=='presence') {
-                            sIcon=dss.staticDataModel.getImagePathForAKMValue(1,true);
-                            sText=Ext.String.format2(_("{#editor_trigger_zonestates}presence is active"));
-                        }
-                        else {
-                            sIcon=dss.staticDataModel.getImagePathForAKMValue(0,true);
-                            sText=Ext.String.format2(_("{#editor_condition_zonestates_generic}{state} is active"),{state:oStateArray[2]});
-                        }
 
-                        oGroupControlStore.add({
-                            id : -2,
-                            _id : -2,
-                            state : oState.name,
-                            name : sText,
-                            icon : sIcon,
-                            group:null
-                        });
+                            if (oStateArray[2]=='motion') {
+                                sIcon=dss.staticDataModel.getImagePathForAKMValue(5,false);
+                                sText=Ext.String.format2(_("{#editor_trigger_zonestates}motion is inactive"));
+                            }
+                            else if (oStateArray[2]=='presence') {
+                                sIcon=dss.staticDataModel.getImagePathForAKMValue(1,true);
+                                sText=Ext.String.format2(_("{#editor_trigger_zonestates}presence is inactive"));
+                            }
+                            else {
+                                sIcon=dss.staticDataModel.getImagePathForAKMValue(0,false);
+                                sText=Ext.String.format2(_("{#editor_condition_zonestates_generic}{state} is inactive"),{state:oStateArray[2]});
+                            }
 
-                        if (oStateArray[2]=='motion') {
-                            sIcon=dss.staticDataModel.getImagePathForAKMValue(5,false);
-                            sText=Ext.String.format2(_("{#editor_trigger_zonestates}motion is inactive"));
-                        }
-                        else if (oStateArray[2]=='presence') {
-                            sIcon=dss.staticDataModel.getImagePathForAKMValue(1,true);
-                            sText=Ext.String.format2(_("{#editor_trigger_zonestates}presence is inactive"));
-                        }
-                        else {
-                            sIcon=dss.staticDataModel.getImagePathForAKMValue(0,false);
-                            sText=Ext.String.format2(_("{#editor_condition_zonestates_generic}{state} is inactive"),{state:oStateArray[2]});
+                            oGroupControlStore.add({
+                                id : -3,
+                                _id : -3,
+                                state : oState.name,
+                                name : sText,
+                                icon : sIcon,
+                                group:null
+                            });
                         }
-
-                        oGroupControlStore.add({
-                            id : -3,
-                            _id : -3,
-                            state : oState.name,
-                            name : sText,
-                            icon : sIcon,
-                            group:null
-                        });
                     }
                 }
             }
@@ -2813,12 +2872,14 @@ Ext.define('DSS.component.ConditionConfigurator', {
         });
 
         var oDeviceArray=[];
-        for (var iIndex=0;iIndex<dss.staticDataModel.deviceCache.length;iIndex++) {
-            if (dss.staticDataModel.deviceCache[iIndex].present)
-                if (dss.staticDataModel.deviceCache[iIndex].hasStates)
-                    if (dss.staticDataModel.deviceCache[iIndex].ZoneID==zoneID) {
-                        oDeviceControlStore.add(dss.staticDataModel.deviceCache[iIndex]);
-                    }
+        if (dss.staticDataModel.deviceCache) {
+            for (var iIndex=0;iIndex<dss.staticDataModel.deviceCache.length;iIndex++) {
+                if (dss.staticDataModel.deviceCache[iIndex].present)
+                    if (dss.staticDataModel.deviceCache[iIndex].hasStates)
+                        if (dss.staticDataModel.deviceCache[iIndex].ZoneID==zoneID) {
+                            oDeviceControlStore.add(dss.staticDataModel.deviceCache[iIndex]);
+                        }
+            }
         }
 
 
@@ -2854,12 +2915,14 @@ Ext.define('DSS.component.ConditionConfigurator', {
     },
     constructGridDeviceStateRoom: function (distiguishID) {
         var oRoomArray=[];
-        for (var iIndex=0;iIndex<dss.staticDataModel.deviceCache.length;iIndex++) {
-            if (dss.staticDataModel.deviceCache[iIndex].present)
-                if (dss.staticDataModel.deviceCache[iIndex].hasStates)
-                    if (oRoomArray.indexOf(dss.staticDataModel.deviceCache[iIndex].ZoneID)<0) {
-                        oRoomArray.push(dss.staticDataModel.deviceCache[iIndex].ZoneID);
-                    }
+        if (dss.staticDataModel.deviceCache) {
+            for (var iIndex=0;iIndex<dss.staticDataModel.deviceCache.length;iIndex++) {
+                if (dss.staticDataModel.deviceCache[iIndex].present)
+                    if (dss.staticDataModel.deviceCache[iIndex].hasStates)
+                        if (oRoomArray.indexOf(dss.staticDataModel.deviceCache[iIndex].ZoneID)<0) {
+                            oRoomArray.push(dss.staticDataModel.deviceCache[iIndex].ZoneID);
+                        }
+            }
         }
         var oRoomDeviceStateControlStore = Ext.create('Ext.data.Store', {
             fields : [ 'ZoneID', {name:'name',sortType:'asUCText'} ],
@@ -2946,7 +3009,7 @@ Ext.define('DSS.component.ConditionConfigurator', {
          oGAValueStore.add(oItem);
      }
      var scenes=dss.staticDataModel.getScenes(0,GroupID);
-     if (scenes.length>0){
+     if (scenes && scenes.length>0){
          oGAValueStore.add({
              name: '-',
              value: null,
@@ -3044,16 +3107,20 @@ Ext.define('DSS.component.ConditionConfigurator', {
             }
         });
         var oArray=[];
-        for (var iIndex=0;iIndex<dss.staticDataModel.nameCache.length;iIndex++) {
-            if (dss.staticDataModel.nameCache[iIndex].ZoneID==0)
-                for (var jIndex=0;jIndex<dss.staticDataModel.nameCache[iIndex].groups.length;jIndex++)
-                    if (dss.staticDataModel.nameCache[iIndex].groups[jIndex].group>63) {
-                        var oGroup={'GroupID':dss.staticDataModel.nameCache[iIndex].groups[jIndex].group,
-                                'name':dss.staticDataModel.nameCache[iIndex].groups[jIndex].name};
-                        if (dss.staticDataModel.getDevicesForZone(0,dss.staticDataModel.nameCache[iIndex].groups[jIndex].group).length==0)
-                            oGroup.passive=true;
-                        oArray.push(oGroup);
+        if (dss.staticDataModel.nameCache) {
+            for (var iIndex=0;iIndex<dss.staticDataModel.nameCache.length;iIndex++) {
+                if (dss.staticDataModel.nameCache[iIndex].ZoneID==0 && dss.staticDataModel.nameCache[iIndex].groups) {
+                    for (var jIndex=0;jIndex<dss.staticDataModel.nameCache[iIndex].groups.length;jIndex++) {
+                        if (dss.staticDataModel.nameCache[iIndex].groups[jIndex].group>63) {
+                            var oGroup={'GroupID':dss.staticDataModel.nameCache[iIndex].groups[jIndex].group,
+                                    'name':dss.staticDataModel.nameCache[iIndex].groups[jIndex].name};
+                            if (dss.staticDataModel.getDevicesForZone(0,dss.staticDataModel.nameCache[iIndex].groups[jIndex].group).length==0)
+                                oGroup.passive=true;
+                            oArray.push(oGroup);
+                        }
                     }
+                }
+            }
         }
         oGAControlStore.add(oArray);
         oGAControlStore.sort('name');
@@ -3368,9 +3435,11 @@ Ext.define('DSS.component.ConditionConfigurator', {
                         if (oDevice != null) {
                             var typeIndex = parseInt(nameArray[2], 10);
                             var type = 255;
-                            for (var k = 0; k < oDevice.binaryInputs.length; k++) {
-                                if (oDevice.binaryInputs[k].index == typeIndex) {
-                                    type = oDevice.binaryInputs[k].type;
+                            if (oDevice.binaryInputs) {
+                                for (var k = 0; k < oDevice.binaryInputs.length; k++) {
+                                    if (oDevice.binaryInputs[k].index == typeIndex) {
+                                        type = oDevice.binaryInputs[k].type;
+                                    }
                                 }
                             }
                             this.constructGridLvlAKM(-1);
@@ -3816,9 +3885,11 @@ Ext.define('DSS.component.ConditionConfigurator', {
                             if (oDevice!=null) {
                                 var typeIndex=parseInt(oArray[2],10);
                                 var type=255;
-                                for (var lIndex=0;lIndex<oDevice.binaryInputs.length;lIndex++)
-                                    if (oDevice.binaryInputs[lIndex].index==typeIndex)
-                                        type=oDevice.binaryInputs[lIndex].type;
+                                if (oDevice.binaryInputs) {
+                                    for (var lIndex=0;lIndex<oDevice.binaryInputs.length;lIndex++)
+                                        if (oDevice.binaryInputs[lIndex].index==typeIndex)
+                                            type=oDevice.binaryInputs[lIndex].type;
+                                }
 
                                 lvl1Store.each(function (record) {
                                     if (record.get('type')==6) {
@@ -3865,18 +3936,24 @@ Ext.define('DSS.component.ConditionConfigurator', {
                     if (!fAdded) {
                         lvl1Store.each(function (record) {
                             if (record.get('type')==4) {
-                                for (var lIndex=0;lIndex<record.get('parameter').length;lIndex++)
-                                    if (record.get('parameter')[lIndex].name==values.systemState[kIndex].name)
-                                        if (record.get('parameter')[lIndex].value==values.systemState[kIndex].value)
-                                            oObject.pos=record.get('distiguishID');
+                                var param = record.get('parameter');
+                                if (param) {
+                                    for (var lIndex=0;lIndex<param.length;lIndex++)
+                                        if (param[lIndex].name==values.systemState[kIndex].name)
+                                            if (param[lIndex].value==values.systemState[kIndex].value)
+                                                oObject.pos=record.get('distiguishID');
+                                }
                             }
                             if (record.get('type')==5) {
-                                for (var lIndex=0;lIndex<record.get('parameter').length;lIndex++)
-                                    if (record.get('parameter')[lIndex].name==values.systemState[kIndex].name)
-                                        if (record.get('parameter')[lIndex].value==values.systemState[kIndex].value) {
-                                            oObject.pos=record.get('distiguishID');
-                                            oObject.condition.group=record.get('parameter')[lIndex].group;
-                                        }
+                                var param = record.get('parameter');
+                                if (param) {
+                                    for (var lIndex=0;lIndex<param.length;lIndex++)
+                                        if (param[lIndex].name==values.systemState[kIndex].name)
+                                            if (param[lIndex].value==values.systemState[kIndex].value) {
+                                                oObject.pos=record.get('distiguishID');
+                                                oObject.condition.group=param[lIndex].group;
+                                            }
+                                }
                             }
                             if (record.get('type')==12) {
                                 if (values.systemState[kIndex].name.indexOf('zone.0.group')>-1) {
@@ -4038,46 +4115,45 @@ Ext.define('DSS.component.ConditionConfigurator', {
                 break;
             }
         });
-        if (this.hiddenValues!=null)
-            if (this.hiddenValues.length>0) {
-                for (var iIndex=0;iIndex<this.hiddenValues.length;iIndex++) {
-                    switch (this.hiddenValues[iIndex].condition.type) {
-                        case 'timeframe':
-                            if (localValues.timeframe==null)
-                                localValues.timeframe=[];
-                            localValues.timeframe.push(this.hiddenValues[iIndex].condition.value);
-                            break;
-                        case 'zonestate':
-                            if (localValues.zoneState==null)
-                                localValues.zoneState=[];
-                            localValues.zoneState.push(this.hiddenValues[iIndex].condition.value);
-                            break;
-                        case 'state':
-                            if (localValues.systemState==null)
-                                localValues.systemState=[];
-                            localValues.systemState.push({name:this.hiddenValues[iIndex].condition.name,value:this.hiddenValues[iIndex].condition.value});
-                            break;
-                        case 'enabler':
-                            localValues.enabled=this.hiddenValues[iIndex].condition.value;
-                            break;
-                        case 'weekdays':
-                            localValues.weekdays=this.hiddenValues[iIndex].condition.value;
-                            break;
-                        case 'addon-state':
-                            if (localValues.addonStates==null)
-                                localValues.addonStates={};
-                            if (localValues.addonStates[this.hiddenValues[iIndex].condition.addonid]==null)
-                                localValues.addonStates[this.hiddenValues[iIndex].condition.addonid]=[];
-                            localValues.addonStates[this.hiddenValues[iIndex].condition.addonid].push({name:this.hiddenValues[iIndex].condition.stateName,value:this.hiddenValues[iIndex].condition.stateValue,addonState:this.hiddenValues[iIndex].condition.addonid});
+        if (this.hiddenValues) {
+            for (var iIndex=0;iIndex<this.hiddenValues.length;iIndex++) {
+                switch (this.hiddenValues[iIndex].condition.type) {
+                    case 'timeframe':
+                        if (localValues.timeframe==null)
+                            localValues.timeframe=[];
+                        localValues.timeframe.push(this.hiddenValues[iIndex].condition.value);
                         break;
-                        case 'dateframe':
-                            if (localValues.date==null)
-                                localValues.date=[];
-                            localValues.date.push(this.hiddenValues[iIndex].condition.value);
+                    case 'zonestate':
+                        if (localValues.zoneState==null)
+                            localValues.zoneState=[];
+                        localValues.zoneState.push(this.hiddenValues[iIndex].condition.value);
                         break;
-                    }
+                    case 'state':
+                        if (localValues.systemState==null)
+                            localValues.systemState=[];
+                        localValues.systemState.push({name:this.hiddenValues[iIndex].condition.name,value:this.hiddenValues[iIndex].condition.value});
+                        break;
+                    case 'enabler':
+                        localValues.enabled=this.hiddenValues[iIndex].condition.value;
+                        break;
+                    case 'weekdays':
+                        localValues.weekdays=this.hiddenValues[iIndex].condition.value;
+                        break;
+                    case 'addon-state':
+                        if (localValues.addonStates==null)
+                            localValues.addonStates={};
+                        if (localValues.addonStates[this.hiddenValues[iIndex].condition.addonid]==null)
+                            localValues.addonStates[this.hiddenValues[iIndex].condition.addonid]=[];
+                        localValues.addonStates[this.hiddenValues[iIndex].condition.addonid].push({name:this.hiddenValues[iIndex].condition.stateName,value:this.hiddenValues[iIndex].condition.stateValue,addonState:this.hiddenValues[iIndex].condition.addonid});
+                    break;
+                    case 'dateframe':
+                        if (localValues.date==null)
+                            localValues.date=[];
+                        localValues.date.push(this.hiddenValues[iIndex].condition.value);
+                    break;
                 }
             }
+        }
         return localValues;
     }
 });
diff --git a/js/dss/dss-components/dss-device-selector.js b/js/dss/dss-components/dss-device-selector.js
index e2078046..c0a7f913 100644
--- a/js/dss/dss-components/dss-device-selector.js
+++ b/js/dss/dss-components/dss-device-selector.js
@@ -22,7 +22,7 @@ Ext.define('DSS.component.DeviceSelector', {
     },
     initStores : function() {
         if (Ext.data.StoreManager.lookup('deviceSelector_zoneStore'+this.myID) == null) {
-            
+
             Ext.create('Ext.data.Store', {
                 storeId : 'deviceSelector_zoneStore' + this.myID,
                 fields : [ 'ZoneID', 'name' , 'passive'],
@@ -35,43 +35,46 @@ Ext.define('DSS.component.DeviceSelector', {
                 }
             });
             var oArray=dss.staticDataModel.getZoneArray();
-            
-            for (var iIndex=0;iIndex<oArray.length;iIndex++) {
-                Ext.create('Ext.data.Store', {
-                    storeId : 'deviceSelector_deviceStore_' + oArray[iIndex].ZoneID + this.myID,
-                    fields : [ 'dSID', 'dSUID', 'name', 'icon', 'present' ],
-                    proxy : {
-                        type : 'memory',
-                        reader : {
-                            type : 'json',
-                            root : 'items'
+            if (oArray) {
+                for (var iIndex=0;iIndex<oArray.length;iIndex++) {
+                    Ext.create('Ext.data.Store', {
+                        storeId : 'deviceSelector_deviceStore_' + oArray[iIndex].ZoneID + this.myID,
+                        fields : [ 'dSID', 'dSUID', 'name', 'icon', 'present' ],
+                        proxy : {
+                            type : 'memory',
+                            reader : {
+                                type : 'json',
+                                root : 'items'
+                            }
                         }
-                    }
-                });
-                var oObject={
-                        ZoneID:oArray[iIndex].ZoneID,
-                        name:oArray[iIndex].name,
-                        passive:true
-                        };
-                
-                var oDeviceArray=dss.staticDataModel.getDevicesForZone(oArray[iIndex].ZoneID,0);
-                for (var jIndex=0;jIndex<oDeviceArray.length;jIndex++) {
-                    var oDeviceObject=oDeviceArray[jIndex];
-                    if (oDeviceObject.present) {
-                        if (this.filterFunc==null) {
-                            oObject.passive = false;                            
-                            Ext.data.StoreManager.lookup('deviceSelector_deviceStore_' + oArray[iIndex].ZoneID + this.myID).add(oDeviceObject);
-                        } else
-                            if (this.filterFunc(oDeviceArray[jIndex])) {
-                                oObject.passive = false;
-                                Ext.data.StoreManager.lookup('deviceSelector_deviceStore_' + oArray[iIndex].ZoneID + this.myID).add(oDeviceObject);
+                    });
+                    var oObject={
+                            ZoneID:oArray[iIndex].ZoneID,
+                            name:oArray[iIndex].name,
+                            passive:true
+                            };
+
+                    var oDeviceArray=dss.staticDataModel.getDevicesForZone(oArray[iIndex].ZoneID,0);
+                    if (oDeviceArray) {
+                        for (var jIndex=0;jIndex<oDeviceArray.length;jIndex++) {
+                            var oDeviceObject=oDeviceArray[jIndex];
+                            if (oDeviceObject.present) {
+                                if (this.filterFunc==null) {
+                                    oObject.passive = false;
+                                    Ext.data.StoreManager.lookup('deviceSelector_deviceStore_' + oArray[iIndex].ZoneID + this.myID).add(oDeviceObject);
+                                } else
+                                    if (this.filterFunc(oDeviceArray[jIndex])) {
+                                        oObject.passive = false;
+                                        Ext.data.StoreManager.lookup('deviceSelector_deviceStore_' + oArray[iIndex].ZoneID + this.myID).add(oDeviceObject);
+                                    }
                             }
+                        }
                     }
+                    Ext.data.StoreManager.lookup('deviceSelector_zoneStore' + this.myID).add(oObject);
                 }
-                Ext.data.StoreManager.lookup('deviceSelector_zoneStore' + this.myID).add(oObject);
             }
         }
-    },   
+    },
     defMacGridRenderer : function(val, metadata, record, colIdx, store, view) {
         var fHasIcon=false;
         if (record.get('icon') != null)
@@ -82,22 +85,22 @@ Ext.define('DSS.component.DeviceSelector', {
         if ((record.get('dSID') != null) || (record.get('dSUID') != null))   // ist ein device -> kein weiterbutton
         {
             fHasNext=false;
-        } 
+        }
 
-        var fIsPassive=false;        
+        var fIsPassive=false;
         if (record.get('passive')!=null)
             if (record.get('passive'))
                 fIsPassive=true;
-        
+
         if (fIsPassive) {
             fHasNext=false;               // spalte disabled -> niemals weiterbutton
         }
-        
+
         var sReturn='<table style="height:16px;width:100%"><tr>';
         var iColspaceCounter=3;
         if (fHasIcon)
         {
-            iColspaceCounter--;  
+            iColspaceCounter--;
             sReturn+='<td><img src="' + record.get('icon') + '" style="margin-right: 5px;"></td>';
         }
 
@@ -111,7 +114,7 @@ Ext.define('DSS.component.DeviceSelector', {
         if (fHasNext) {
             sReturn+='<td>&gt;</td>';
         }
-        return sReturn +'</tr></table>';      
+        return sReturn +'</tr></table>';
     },
     getDeviceStore : function (zoneID) {
         return Ext.data.StoreManager.lookup('deviceSelector_deviceStore_' + zoneID + this.myID);
@@ -164,7 +167,7 @@ Ext.define('DSS.component.DeviceSelector', {
         });
         this.macPanel.add(this.grids.lvlDevice);
 
-    
+
     },
     constructMacGrids : function() {
         var oZoneStore;
@@ -180,7 +183,7 @@ Ext.define('DSS.component.DeviceSelector', {
 	                }
 	            }
 	        });
-	
+
 	        oZoneStore = Ext.data.StoreManager.lookup('deviceSelector_zoneStore'+this.myID);
 	        oZoneStore.each(function(record) {
 	            var oNewRecord = record.copy();
@@ -188,7 +191,7 @@ Ext.define('DSS.component.DeviceSelector', {
 	                oZoneControlStore.add(oNewRecord);
 	        });
 	        oZoneControlStore.sort('name');
-	
+
 	        this.grids.lvlRoom = Ext.create('Ext.grid.Panel', {
 	            hideHeaders:true,
 	            height : this.iDefaultHeight,
@@ -205,22 +208,22 @@ Ext.define('DSS.component.DeviceSelector', {
 	                dataIndex : 'name',
 	                flex : 1,
 	                renderer :function(val, metadata, record, colIdx, store, view) {
-	                    var fIsPassive=false;        
+	                    var fIsPassive=false;
 	                    if (record.get('passive')!=null)
 	                        if (record.get('passive'))
 	                            fIsPassive=true;
-	                    
+
 	                    var sReturn='<table style="height:16px;width:100%"><tr>';
 	                    if (fIsPassive) {
 	                        sReturn+='<td style="color:#888888;" colspan="2" width="100%">' + record.get('name') + '</td>';
 	                    } else {
 	                        sReturn+='<td width="100%">' + record.get('name') + '</td><td>&gt;</td>';
 	                    }
-	                    return sReturn +'</tr></table>';      
+	                    return sReturn +'</tr></table>';
 	                }
 	            } ]
 	        });
-	
+
 	        this.grids.lvlRoom.parent = this;
 	        this.grids.lvlRoom.on('itemclick', function(grid, record) {
 	            this.up().remove(this.up().up().grids.lvlDevice);
@@ -232,26 +235,26 @@ Ext.define('DSS.component.DeviceSelector', {
 	        this.macPanel.add(this.grids.lvlRoom);
         } else {
         	this.grids.lvlRoom.getStore().removeAll();
-        	var mThis=this;        	
+        	var mThis=this;
 	        oZoneStore = Ext.data.StoreManager.lookup('deviceSelector_zoneStore'+this.myID);
 	        oZoneStore.each(function(record) {
 	            var oNewRecord = record.copy();
 	            if (oNewRecord.get('ZoneID') != 0)
 	            	mThis.grids.lvlRoom.getStore().add(oNewRecord);
-	        });	              	
+	        });
         }
     },
     constructor : function (config) {
         this.macPanel = null;
         this.selectedDSUID=null;
-    	
+
     	this.grids={};
         if (config.filterFunc!=null)
             this.filterFunc=config.filterFunc;
         else
             this.filterFunc=null;
         if (config.specialDeviceRenderer!=null)
-            this.specialDeviceRenderer=config.specialDeviceRenderer;        
+            this.specialDeviceRenderer=config.specialDeviceRenderer;
         else
             this.specialDeviceRenderer=null;
         if (config.myID==null)
@@ -279,7 +282,7 @@ Ext.define('DSS.component.DeviceSelector', {
         });
 
         this.callParent(arguments);
-  
+
     },
     reset : function() {
         this.setValue(null);
@@ -294,7 +297,7 @@ Ext.define('DSS.component.DeviceSelector', {
         if (oRecordZone != -1) {
             this.grids.lvlRoom.getSelectionModel().select(oRecordZone);
             this.constructGridLvlDevice(oDevice.ZoneID);
-            
+
             var oRecordDevice = this.grids.lvlDevice.store.find('dSUID', values,0,false,false,true);
             if (oRecordDevice != -1) {
                 this.grids.lvlDevice.getSelectionModel().select(oRecordDevice);
@@ -310,8 +313,10 @@ Ext.define('DSS.component.DeviceSelector', {
             if ( this.grids.lvlDevice) {
                 var recordList = this.grids.lvlDevice.getSelectionModel().getSelection();
                 var dSUID = [];
-                for (var jIndex = 0; jIndex < recordList.length; jIndex++) {
-                    dSUID.push(recordList[jIndex].get('dSUID'));
+                if (recordList) {
+                    for (var jIndex = 0; jIndex < recordList.length; jIndex++) {
+                        dSUID.push(recordList[jIndex].get('dSUID'));
+                    }
                 }
                 return dSUID;
             } else {
@@ -321,4 +326,4 @@ Ext.define('DSS.component.DeviceSelector', {
             return this.selectedDSUID;
         }
     }
-});
\ No newline at end of file
+});
diff --git a/js/dss/dss-components/dss-radiogroup.js b/js/dss/dss-components/dss-radiogroup.js
index 8e6fee33..c7a9b867 100644
--- a/js/dss/dss-components/dss-radiogroup.js
+++ b/js/dss/dss-components/dss-radiogroup.js
@@ -9,15 +9,17 @@ Ext.define('DSS.component.RadioControl', {
     	if (config.labelWidth==null)
     		config.labelWidth=100;
         var subItems=[];
-    	for (var iIndex=0;iIndex<config.data.length;iIndex++) {
-    		var pValue=config.data[iIndex];
-    		if (pValue.value!=null)
-    			if (pValue.label!=null)
-    				subItems.push({
-    					name:config.radioid,
-    					boxLabel:pValue.label,
-    					inputValue:pValue.value});
-    	}
+        if (config.data && Object.prototype.toString.call(config.data) === '[object Array]') {
+        	for (var iIndex=0;iIndex<config.data.length;iIndex++) {
+        		var pValue=config.data[iIndex];
+        		if (pValue.value!=null)
+        			if (pValue.label!=null)
+        				subItems.push({
+        					name:config.radioid,
+        					boxLabel:pValue.label,
+        					inputValue:pValue.value});
+        	}
+        }
     	this.radioCntrl=Ext.create('Ext.form.RadioGroup', {
     		fieldLabel : config.label,
     		items : subItems,
@@ -31,13 +33,13 @@ Ext.define('DSS.component.RadioControl', {
 	    		align: 'left'
     		},
     		style : {
-                color: '#005138'            	
+                color: '#005138'
             },
             height:75,
             listeners: {
             	'change': function() {mThis.fireEvent('change');}
             }
-    	});    	
+    	});
         Ext.apply(this, {
             items : [ this.radioCntrl ]
         });
@@ -55,4 +57,4 @@ Ext.define('DSS.component.RadioControl', {
     getValue : function(){
     	return this.radioCntrl.getValue();
     }
-});
\ No newline at end of file
+});
diff --git a/js/dss/dss-components/dss-timereference-control.js b/js/dss/dss-components/dss-timereference-control.js
index f1d99a6a..f19eb819 100644
--- a/js/dss/dss-components/dss-timereference-control.js
+++ b/js/dss/dss-components/dss-timereference-control.js
@@ -50,7 +50,7 @@ Ext.define('DSS.component.TimeReference', {
             if (config.fFeatureEnabled.fSunriseEnabled!=null)
                 this.fFeatureEnabled.fSunriseEnabled=config.fFeatureEnabled.fSunriseEnabled;
         }
-        
+
         if (config.fAlternativeDisplay!=null)
             this.fAlternativeDisplay=config.fAlternativeDisplay;
         if (this.fAlternativeDisplay==true) {
@@ -61,7 +61,7 @@ Ext.define('DSS.component.TimeReference', {
                 width:250,
                 padding: "0 0 0 0"
             });
-            
+
         } else {
             this.lblSummary = Ext.create('Ext.form.field.Display', {
                 border : 0,
@@ -182,8 +182,8 @@ Ext.define('DSS.component.TimeReference', {
                 }
             }
 
-        });     
-        
+        });
+
         this.oDeltaCylcer= Ext.create('Ext.button.Cycle', {
             margin : '0 5 0 0',
             menu : {
@@ -207,8 +207,8 @@ Ext.define('DSS.component.TimeReference', {
             }
 
         });
-     
-        
+
+
         var oDateTypeItemArray = [];
         var fChecked=false;
         if (this.fFeatureEnabled.fStaticEnabled) {
@@ -229,7 +229,7 @@ Ext.define('DSS.component.TimeReference', {
                 oObject.checked=true;
             fChecked=true;
             oDateTypeItemArray.push(oObject);
-        } 
+        }
         if (this.fFeatureEnabled.fSunsetEnabled)
         {
             var oObject={
@@ -246,7 +246,7 @@ Ext.define('DSS.component.TimeReference', {
             var oObject={
                 itemId : 'chk-dawn',
                 text : _('dawn')
-            };            
+            };
             if (!fChecked )
                 oObject.checked=true;
             fChecked=true;
@@ -263,14 +263,14 @@ Ext.define('DSS.component.TimeReference', {
             fChecked=true;
             oDateTypeItemArray.push(oObject);
         }
-        
-        if (config.additionalAbsoluteValues!=null) {
+
+        if (config.additionalAbsoluteValues) {
             for (var iIndex=0;iIndex<config.additionalAbsoluteValues.length;iIndex++) {
                 oDateTypeItemArray.push({itemId:config.additionalAbsoluteValues[iIndex].id,
                                          text: _(config.additionalAbsoluteValues[iIndex].label)});
             }
         }
-        
+
         this.oDateTypeCylcer = Ext.create('Ext.button.Cycle', {
             margin : '0 5 0 0',
             menu : {
@@ -283,11 +283,11 @@ Ext.define('DSS.component.TimeReference', {
                 change : function(btn,item) {
                     var basePanel=this.up().up();
                     if ((basePanel.oDeltaCylcer.isVisible()) && (item.getItemId()=='chk-time')){
-                        basePanel.oControlHour.setValue(12);                  
-                        basePanel.oControlMinute.setValue(0);                       
-                    } 
+                        basePanel.oControlHour.setValue(12);
+                        basePanel.oControlMinute.setValue(0);
+                    }
                     if ((!basePanel.oDeltaCylcer.isVisible()) && (item.getItemId()!='chk-time')){
-                        basePanel.oControlHour.setValue(0);                  
+                        basePanel.oControlHour.setValue(0);
                         basePanel.oControlMinute.setValue(0);
                     }
                     basePanel.oDeltaCylcer.setVisible(item.getItemId()!='chk-time');
@@ -300,7 +300,7 @@ Ext.define('DSS.component.TimeReference', {
                 }
             }
         });
-        
+
         this.oControlHour = Ext.create('Ext.form.field.Number', {
             allowBlank : false,
             blankText : _('This field is required'),
@@ -339,16 +339,16 @@ Ext.define('DSS.component.TimeReference', {
                     me.fireEvent('change');
                 }
             }
-        });     
+        });
+
 
-        
         this.pnlDiff = Ext.create('Ext.panel.Panel', {
             heigth : 0,
             border : "1 0 0 0",
             width : "100%",
             padding: "7 0 15 0"
          });
-        
+
         this.oLimitPanel.add(this.oLimitType);
         this.oLimitPanel.add(this.oLimitHour);
         this.oLimitPanel.add(this.oLimitMinute);
@@ -356,33 +356,33 @@ Ext.define('DSS.component.TimeReference', {
             this.oLimitPanel.add(this.lblLimitAnzeige);
         else
             this.oLimitPanel.add(this.lblSummary);
-        
+
         this.oDatePanel.add(this.oDateTypeCylcer);
         this.oDatePanel.add(this.oControlHour);
-        this.oDatePanel.add(this.oControlMinute);         
+        this.oDatePanel.add(this.oControlMinute);
         this.oDatePanel.add(this.lblAnzeige);
-        
+
         this.oDatePanel.add(this.oDeltaCylcer);
         var oItemsArray=[this.lblSummary, this.pnlDiff, this.oDatePanel ,this.oLimitPanel];
-        
+
         if (this.fAlternativeDisplay==true)
             oItemsArray=[ this.oDatePanel ,this.oLimitPanel];
-        
+
         if (this.randomize!=null)
             oItemsArray.push(this.oControlRandom);
-        Ext.apply(this, {           
+        Ext.apply(this, {
             items : oItemsArray
         });
         if (this.fAlternativeDisplay==true)
-            Ext.apply(this, {           
+            Ext.apply(this, {
                 padding: "7 0 7 0"
             });
         var me=this;
         var oReplay=function() {me.updateSummary();};
-        
+
         window.setInterval(oReplay,30*1000);
         me.updateSummary();
-        this.callParent(arguments);         
+        this.callParent(arguments);
         this.mixins.observable.constructor.call(this, config);
         this.addEvents({
             "change" : true
@@ -392,12 +392,12 @@ Ext.define('DSS.component.TimeReference', {
     	var sTimeNow = "";
     	var timeArray = new Array();
     	var sText = "";
-    	
+
         var oDateNow=dss.staticDataModel.getDSSTime();
         var nHours = oDateNow.getHours();
         var nMinutes = oDateNow.getMinutes();
         sTimeNow = ((nHours > 9)?''+nHours : '0'+nHours) + ":" + ((nMinutes > 9)?''+nMinutes : '0'+nMinutes);
-    	
+
     	sText=Ext.String.format2(_("Time now: {TimeNow}"), {TimeNow:sTimeNow});
         if (this.fAlternativeDisplay==true) {
             sText=_("");
@@ -407,7 +407,7 @@ Ext.define('DSS.component.TimeReference', {
                 sText+=" " + Ext.String.format2(_("Sunrise of the present day at {time}"),{time:dss.staticDataModel.nowSunrise});
                 break;
             case 'chk-sunset':
-                sText+=" " + Ext.String.format2(_("Sunset of the present day at {time}"),{time:dss.staticDataModel.nowSunset}); 
+                sText+=" " + Ext.String.format2(_("Sunset of the present day at {time}"),{time:dss.staticDataModel.nowSunset});
                 break;
             case 'chk-dawn':
                 sText+=" " + Ext.String.format2(_("Dawn of the present day at {time}"),{time:dss.staticDataModel.nowDawn});
@@ -422,7 +422,7 @@ Ext.define('DSS.component.TimeReference', {
         this.oDateTypeCylcer.setActiveItem('chk-time');
         this.oLimitType.setActiveItem('chk-limitNo');
         this.oDeltaCylcer.setActiveItem('chk-after');
-        this.oControlHour.setValue(12);                  
+        this.oControlHour.setValue(12);
         this.oControlMinute.setValue(0);
         this.oLimitHour.setValue(0);
         this.oLimitMinute.setValue(0);
@@ -436,38 +436,38 @@ Ext.define('DSS.component.TimeReference', {
         if (value.offset<0)
             this.oDeltaCylcer.setActiveItem('chk-before');
         else
-            this.oDeltaCylcer.setActiveItem('chk-after');     
+            this.oDeltaCylcer.setActiveItem('chk-after');
         switch (value.timeBase)
         {
             case 'daily':
                 this.oDateTypeCylcer.setActiveItem('chk-time');
                 this.oControlMinute.setValue(min);
-                this.oControlHour.setValue(hou);                  
+                this.oControlHour.setValue(hou);
             break;
             case 'sunset':
                 this.oDateTypeCylcer.setActiveItem('chk-sunset');
                 this.oControlMinute.setValue(min);
-                this.oControlHour.setValue(hou);          
+                this.oControlHour.setValue(hou);
             break;
             case 'sunrise':
                 this.oDateTypeCylcer.setActiveItem('chk-sunrise');
                 this.oControlMinute.setValue(min);
-                this.oControlHour.setValue(hou);                  
+                this.oControlHour.setValue(hou);
             break;
             case 'dusk':
                 this.oDateTypeCylcer.setActiveItem('chk-dusk');
                 this.oControlMinute.setValue(min);
-                this.oControlHour.setValue(hou);                  
+                this.oControlHour.setValue(hou);
             break;
             case 'dawn':
                 this.oDateTypeCylcer.setActiveItem('chk-dawn');
                 this.oControlMinute.setValue(min);
-                this.oControlHour.setValue(hou);                  
+                this.oControlHour.setValue(hou);
             break;
             default:
                 this.oDateTypeCylcer.setActiveItem(value.timeBase);
                 this.oControlMinute.setValue(min);
-                this.oControlHour.setValue(hou);                  
+                this.oControlHour.setValue(hou);
             break;
         }
 
@@ -490,8 +490,8 @@ Ext.define('DSS.component.TimeReference', {
         } else {
             this.oLimitType.setActiveItem('chk-limitNo');
         }
-        
-        if (this.randomize!=null) {            
+
+        if (this.randomize!=null) {
             if (value.random!=null)
                 this.oControlRandom.setValue(true);
             else
@@ -519,7 +519,7 @@ Ext.define('DSS.component.TimeReference', {
         if (this.oLimitType.getActiveItem().getItemId()=='chk-limitBefore') {
         	fValid &= this.oLimitHour.isValid() && this.oLimitMinute.isValid();
         }
-        	
+
         return true;
     },
     getValue: function () {
diff --git a/js/dss/dss-components/dss-trigger-selector.js b/js/dss/dss-components/dss-trigger-selector.js
index a85874ce..bd8851da 100644
--- a/js/dss/dss-components/dss-trigger-selector.js
+++ b/js/dss/dss-components/dss-trigger-selector.js
@@ -15,8 +15,8 @@ Ext.define('DSS.component.TriggerConfigurator', {
     defMacGridRenderer : function(val, metadata, record, colIdx, store, view) {
         if (record.get('name') == '-') {
         	return '<table style="height:10px;width:100%;"><tr style="height:10px;"><td width="100%"><hr></td></tr></table>';
-        } 
-        var fHasIcon=false; 
+        }
+        var fHasIcon=false;
         if (record.get('icon') != null)
         {
             fHasIcon=true;
@@ -48,7 +48,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
             fIsCheckable=true;
         }
 
-        var fIsPassive=false;        
+        var fIsPassive=false;
         if (record.get('passive')!=null)
             if (record.get('passive'))
                 fIsPassive=true;
@@ -56,17 +56,17 @@ Ext.define('DSS.component.TriggerConfigurator', {
             fHasNext=false;               // spalte disabled -> niemals weiterbutton
             fIsChecked=false;             // spalte disabled -> kann nicht gechecked sein
         }
-        
+
         var sReturn='<table style="height:16px;width:100%;"><tr>';
         var iColspaceCounter=3;
         if (fHasIcon)
         {
-            iColspaceCounter--;  
+            iColspaceCounter--;
             sReturn+='<td><img src="' + record.get('icon') + '" style="margin-right: 5px;"></td>';
         }
         if (fIsCheckable)
         {
-            iColspaceCounter--;  
+            iColspaceCounter--;
             if (record.get('checked') == true)
             {
                 sReturn+='<td style="padding-right: 5px;"><div style="width:13px;height:13px;background-image:url(' + dss.staticDataModel.baseImagePath + 'dss/checkbox.gif); background-position: 0px -13px;" /></td>';
@@ -84,7 +84,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
         if (fHasNext) {
             sReturn+='<td>&gt;</td>';
         }
-        return sReturn +'</tr></table>';      
+        return sReturn +'</tr></table>';
     },
     initStores : function(fShowUserstates) {
         if (Ext.data.StoreManager.lookup('triggerConfigurator_l1Store') == null) {
@@ -107,7 +107,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
                 icon : null,
                 passive: (dss.staticDataModel.getAKMDeviceArray().length==0)
             }];
-            
+
             Aktionen.push({
                 name : _("consumptionmessage"),
                 _id : 3,
@@ -121,7 +121,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
                 next : true,
                 icon : null
             });
-            
+
             if (dss.staticDataModel.clusterAvaible)
             	Aktionen.push({
                     name : _('cluster trigger'),
@@ -130,7 +130,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
                     icon : null,
                     passive:(dss.staticDataModel.getUsergroups().length==0)
                 });
-            
+
             Aktionen.push({
                 name : '-',
                 _id : -1,
@@ -138,7 +138,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
                 next : false,
                 icon : null
             });
-            
+
             Aktionen.push({
                 name : _('user def. actions'),
                 _id : 2,
@@ -147,16 +147,16 @@ Ext.define('DSS.component.TriggerConfigurator', {
                 passive:(dss.staticDataModel.getHLE().length==0)
             });
             if (dss.staticDataModel.getUserStates().length>0) {
-	            Aktionen.push( { 
+	            Aktionen.push( {
 	                name : _('user states'),
 	                _id : 8,
 	                next : true,
 	                icon : null,
-	                passive:(dss.staticDataModel.getUserStates().length==0)            	
+	                passive:(dss.staticDataModel.getUserStates().length==0)
 	            });
             }
-            
- 
+
+
             Aktionen.push({
                 name : '-',
                 _id : -1,
@@ -164,7 +164,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
                 next : false,
                 icon : null
             });
-            
+
             Aktionen.push( {
                 name : _("access trigger"),
                 _id : 4,
@@ -196,9 +196,9 @@ Ext.define('DSS.component.TriggerConfigurator', {
             });
             Ext.data.StoreManager.lookup('triggerConfigurator_l1Store').add(Aktionen);
         }
-        
+
     	if (Ext.data.StoreManager.lookup('triggerConfigurator_userStateStore') == null) {
-    		
+
     		Ext.create('Ext.data.Store', {
                 storeId : 'triggerConfigurator_userStateStore',
                 fields : [ '_id', 'name', 'next', 'icon' ,'type'],
@@ -210,20 +210,20 @@ Ext.define('DSS.component.TriggerConfigurator', {
                     }
                 }
             });
-            
+
     		var oUserStates=dss.staticDataModel.getUserStates();
-    		
-    		for (var iIndex=0;iIndex<oUserStates.length;iIndex++) {
-    			var Aktionen = [{
-                    name : oUserStates[iIndex].displayName,
-                    _id : oUserStates[iIndex].name,
-                    next : true,
-                    icon : null,
-                    type: oUserStates[iIndex].type
-                }];
-    			Ext.data.StoreManager.lookup('triggerConfigurator_userStateStore').add(Aktionen);
-    		}
-            
+            if (oUserStates) {
+        		for (var iIndex=0;iIndex<oUserStates.length;iIndex++) {
+        			var Aktionen = [{
+                        name : oUserStates[iIndex].displayName,
+                        _id : oUserStates[iIndex].name,
+                        next : true,
+                        icon : null,
+                        type: oUserStates[iIndex].type
+                    }];
+        			Ext.data.StoreManager.lookup('triggerConfigurator_userStateStore').add(Aktionen);
+        		}
+            }
 
     	}
         if (Ext.data.StoreManager.lookup('triggerConfigurator_zoneZoneStore') == null) {
@@ -252,13 +252,16 @@ Ext.define('DSS.component.TriggerConfigurator', {
                     }
                 }
             });
-            for (var iIndex=0;iIndex<dss.staticDataModel.getZoneArray().length;iIndex++) {
-            	if (this.getDeviceStore(dss.staticDataModel.getZoneArray()[iIndex].ZoneID).count()>0) {
-            		Ext.data.StoreManager.lookup('triggerConfigurator_deviceZoneStore').add(dss.staticDataModel.getZoneArray()[iIndex]);            		
-            	}
+            var zoneArray = dss.staticDataModel.getZoneArray();
+            if (zoneArray) {
+                for (var iIndex=0;iIndex<zoneArray.length;iIndex++) {
+                	if (this.getDeviceStore(zoneArray[iIndex].ZoneID).count()>0) {
+                		Ext.data.StoreManager.lookup('triggerConfigurator_deviceZoneStore').add(zoneArray[iIndex]);
+                	}
+                }
             }
         }
-        
+
         if (Ext.data.StoreManager.lookup('triggerConfigurator_clusterStore') == null) {
             Ext.create('Ext.data.Store', {
                 storeId : 'triggerConfigurator_clusterStore',
@@ -287,19 +290,23 @@ Ext.define('DSS.component.TriggerConfigurator', {
             });
             var oArray=dss.staticDataModel.getZoneArray();
             var deviceArray=dss.staticDataModel.getSensorDeviceArray();
-            for (var iIndex=0;iIndex<oArray.length;iIndex++) {
-                var fAdd=false;                
-                for (var jIndex=0;jIndex<deviceArray.length;jIndex++) {
-                    if (deviceArray[jIndex].ZoneID==oArray[iIndex].ZoneID)
-                        fAdd=true;
-                }                    
-                if (fAdd) {
-                    Ext.data.StoreManager.lookup('triggerConfigurator_zoneSensorStore').add(oArray[iIndex]);
+            if (oArray) {
+                for (var iIndex=0;iIndex<oArray.length;iIndex++) {
+                    var fAdd=false;
+                    if (deviceArray) {
+                        for (var jIndex=0;jIndex<deviceArray.length;jIndex++) {
+                            if (deviceArray[jIndex].ZoneID==oArray[iIndex].ZoneID)
+                                fAdd=true;
+                        }
+                    }
+                    if (fAdd) {
+                        Ext.data.StoreManager.lookup('triggerConfigurator_zoneSensorStore').add(oArray[iIndex]);
+                    }
                 }
             }
         }
         if (Ext.data.StoreManager.lookup('triggerConfigurator_zoneAKMStore') == null) {
-        
+
             Ext.create('Ext.data.Store', {
                 storeId : 'triggerConfigurator_zoneAKMStore',
                 fields : [ 'ZoneID', 'name' ],
@@ -313,28 +320,34 @@ Ext.define('DSS.component.TriggerConfigurator', {
             });
             var oArray=dss.staticDataModel.getZoneArray();
             var deviceArray=dss.staticDataModel.getAKMDeviceArray();
-            for (var iIndex=0;iIndex<oArray.length;iIndex++) {
-                var fAdd=false;                
-                for (var jIndex=0;jIndex<deviceArray.length;jIndex++) {
-                    if (deviceArray[jIndex].ZoneID==oArray[iIndex].ZoneID)
-                        fAdd=true;
-                }  
-                for (var jIndex=0;jIndex<dss.staticDataModel.deviceCache.length;jIndex++) {
-                	if (dss.staticDataModel.deviceCache[jIndex].present)
-                		if (dss.staticDataModel.deviceCache[jIndex].ZoneID==oArray[iIndex].ZoneID)
-		                	if (dss.staticDataModel.deviceCache[jIndex].specialActions!=null)
-		                		if (dss.staticDataModel.deviceCache[jIndex].specialActions.triggers!=null)
-		                			if (dss.staticDataModel.deviceCache[jIndex].specialActions.triggers.binaryInputs!=null) 
-		                				for (var sKey in dss.staticDataModel.deviceCache[jIndex].specialActions.triggers.binaryInputs) {                				
-			                				fAdd=true;                				
-			                			}
-                }
-                if (fAdd) {
-                    Ext.data.StoreManager.lookup('triggerConfigurator_zoneAKMStore').add(oArray[iIndex]);
+            if (oArray) {
+                for (var iIndex=0;iIndex<oArray.length;iIndex++) {
+                    var fAdd=false;
+                    if (deviceArray) {
+                        for (var jIndex=0;jIndex<deviceArray.length;jIndex++) {
+                            if (deviceArray[jIndex].ZoneID==oArray[iIndex].ZoneID)
+                                fAdd=true;
+                        }
+                    }
+                    if (dss.staticDataModel.deviceCache) {
+                        for (var jIndex=0;jIndex<dss.staticDataModel.deviceCache.length;jIndex++) {
+                        	if (dss.staticDataModel.deviceCache[jIndex].present)
+                        		if (dss.staticDataModel.deviceCache[jIndex].ZoneID==oArray[iIndex].ZoneID)
+        		                	if (dss.staticDataModel.deviceCache[jIndex].specialActions!=null)
+        		                		if (dss.staticDataModel.deviceCache[jIndex].specialActions.triggers!=null)
+        		                			if (dss.staticDataModel.deviceCache[jIndex].specialActions.triggers.binaryInputs!=null)
+        		                				for (var sKey in dss.staticDataModel.deviceCache[jIndex].specialActions.triggers.binaryInputs) {
+        			                				fAdd=true;
+        			                			}
+                        }
+                    }
+                    if (fAdd) {
+                        Ext.data.StoreManager.lookup('triggerConfigurator_zoneAKMStore').add(oArray[iIndex]);
+                    }
                 }
             }
         }
-                
+
         if (Ext.data.StoreManager.lookup('triggerConfigurator_accessStore') == null) {
             var Aktionen = [{
                 name : dss.staticDataModel.getNameForScene(0, 0, 73),
@@ -365,7 +378,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
             });
             Ext.data.StoreManager.lookup('triggerConfigurator_accessStore').add(Aktionen);
         }
-        
+
         if (Ext.data.StoreManager.lookup('triggerConfigurator_weatherStore') == null) {
             var Aktionen = [{
                 name : _("Sun protection"),
@@ -403,24 +416,26 @@ Ext.define('DSS.component.TriggerConfigurator', {
                 next : false,
                 icon : dss.staticDataModel.getImagePathForState('hail', 'inactive')
             }];
-            
+
             var fFrost=false;
             var fSun=false;
             var fHeating=false;
             var fService=false;
-            for (var iIndex=0;iIndex<dss.staticDataModel.StateCache.length;iIndex++) {
-            	if (dss.staticDataModel.StateCache[iIndex].name=='frost')
-            		fFrost=true;
-            	if (dss.staticDataModel.StateCache[iIndex].name=='sun')
-            		fSun=true;
-            	if (dss.staticDataModel.StateCache[iIndex].name=='heating_mode')
-            		fHeating=true;
-            	if (dss.staticDataModel.StateCache[iIndex].name=='service')
-            		fService=true;
+            if (dss.staticDataModel.StateCache) {
+                for (var iIndex=0;iIndex<dss.staticDataModel.StateCache.length;iIndex++) {
+                	if (dss.staticDataModel.StateCache[iIndex].name=='frost')
+                		fFrost=true;
+                	if (dss.staticDataModel.StateCache[iIndex].name=='sun')
+                		fSun=true;
+                	if (dss.staticDataModel.StateCache[iIndex].name=='heating_mode')
+                		fHeating=true;
+                	if (dss.staticDataModel.StateCache[iIndex].name=='service')
+                		fService=true;
+                }
             }
-            	
+
             if (fFrost) {
-            	Aktionen.push({            
+            	Aktionen.push({
 	                name : dss.staticDataModel.getNameForState('frost', 'active'),
 	                _id : 'frost_active',
 	                next : false,
@@ -433,7 +448,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
 	                icon : dss.staticDataModel.getImagePathForState('frost', 'inactive')
 	            });
             }
-            
+
             if (fSun) {
 	            Aktionen.push({
 	                name : dss.staticDataModel.getNameForState('sun', 'active'),
@@ -448,7 +463,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
 	                icon : dss.staticDataModel.getImagePathForState('sun', 'inactive')
 	            });
             }
-            
+
             if (fHeating) {
 	            Aktionen.push({
 	                name : dss.staticDataModel.getNameForState('heating_mode', 'off'),
@@ -475,7 +490,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
 	                icon : dss.staticDataModel.getImagePathForState('heating_mode', 'auto')
 	            });
             }
-            
+
             if (fService) {
 	            Aktionen.push({
 	                name : dss.staticDataModel.getNameForState('service', 'active'),
@@ -490,7 +505,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
 	                icon : dss.staticDataModel.getImagePathForState('service', 'inactive')
 	            });
             }
-            
+
             Ext.create('Ext.data.Store', {
                 storeId : 'triggerConfigurator_weatherStore',
                 fields : [ '_id', 'name', 'next', 'icon' ],
@@ -618,7 +633,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
             });
             Ext.data.StoreManager.lookup('triggerConfigurator_securityStore').add(Aktionen);
         }
-        
+
     },
     getGroupStore : function(ZoneID) {
         if (Ext.data.StoreManager.lookup('triggerConfigurator_groupStore_' + ZoneID) == null) {
@@ -653,80 +668,84 @@ Ext.define('DSS.component.TriggerConfigurator', {
             });
             if ((ZoneID==0)&& (groupID==64)) {
             	var fSplitter=false;
-            	for (var iIndex=0;iIndex<dss.staticDataModel.StateCache.length;iIndex++) {
-            		if (dss.staticDataModel.StateCache[iIndex].name.indexOf('zone.0.group.64')>-1) {
-            			var oState=dss.staticDataModel.StateCache[iIndex];
-            			
-                        Ext.data.StoreManager.lookup('triggerConfigurator_szeneStore_' + ZoneID + '_' + groupID).add({                        	
-	                		'stateid':oState.name,
-	                		'reachable':true,
-	                		'name':dss.staticDataModel.getNameForState(oState.name, 'inactive'),
-	                		'value':'inactive',
-	                		'icon': dss.staticDataModel.getImagePathForState(oState.name, 'inactive'),
-	                		'valueandstate':oState.name+'_inactive'});
-                        Ext.data.StoreManager.lookup('triggerConfigurator_szeneStore_' + ZoneID + '_' + groupID).add({
-                        	'stateid':oState.name,
-	                		'name':dss.staticDataModel.getNameForState(oState.name, 'active'),
-	                		'reachable':true,
-	                		'value':'active',
-	                		'icon': dss.staticDataModel.getImagePathForState(oState.name, 'active'),
-	                		'valueandstate':oState.name+'_active'});
-            			
-            		}
-            		fSplitter=true;
-            	}
+                if (dss.staticDataModel.StateCache) {
+                	for (var iIndex=0;iIndex<dss.staticDataModel.StateCache.length;iIndex++) {
+                		if (dss.staticDataModel.StateCache[iIndex].name.indexOf('zone.0.group.64')>-1) {
+                			var oState=dss.staticDataModel.StateCache[iIndex];
+
+                            Ext.data.StoreManager.lookup('triggerConfigurator_szeneStore_' + ZoneID + '_' + groupID).add({
+    	                		'stateid':oState.name,
+    	                		'reachable':true,
+    	                		'name':dss.staticDataModel.getNameForState(oState.name, 'inactive'),
+    	                		'value':'inactive',
+    	                		'icon': dss.staticDataModel.getImagePathForState(oState.name, 'inactive'),
+    	                		'valueandstate':oState.name+'_inactive'});
+                            Ext.data.StoreManager.lookup('triggerConfigurator_szeneStore_' + ZoneID + '_' + groupID).add({
+                            	'stateid':oState.name,
+    	                		'name':dss.staticDataModel.getNameForState(oState.name, 'active'),
+    	                		'reachable':true,
+    	                		'value':'active',
+    	                		'icon': dss.staticDataModel.getImagePathForState(oState.name, 'active'),
+    	                		'valueandstate':oState.name+'_active'});
+
+                		}
+                		fSplitter=true;
+                	}
+                }
             	if (fSplitter) {
-            		Ext.data.StoreManager.lookup('triggerConfigurator_szeneStore_' + ZoneID + '_' + groupID).add( 
-            			{'_id':'','reachable':true,'name':'-','stateid':''});            		
+            		Ext.data.StoreManager.lookup('triggerConfigurator_szeneStore_' + ZoneID + '_' + groupID).add(
+            			{'_id':'','reachable':true,'name':'-','stateid':''});
             	}
             }
-            
+
             var oScenes = dss.staticDataModel.getScenes(ZoneID, groupID);
-            for ( var iIndex = 0; iIndex < oScenes.length; iIndex++) {
-                var oObject = {};
-                oObject._id = oScenes[iIndex].id;
-                oObject.reachable = oScenes[iIndex].reachable;
-                oObject.icon = oScenes[iIndex].icon;
-                oObject.stateid='';                	
-                if (oScenes[iIndex].name == oScenes[iIndex].defaultName)
-                    oObject.name = oScenes[iIndex].name;
-                else
-                    oObject.name = oScenes[iIndex].defaultName + ' - ' + oScenes[iIndex].name;
-                Ext.data.StoreManager.lookup('triggerConfigurator_szeneStore_' + ZoneID + '_' + groupID).add(oObject);
-                
-                if (oObject.undoable) {
-                    oObject = {};
-                    oObject._id = -1 * oScenes[iIndex].id;
+            if (oScenes) {
+                for ( var iIndex = 0; iIndex < oScenes.length; iIndex++) {
+                    var oObject = {};
+                    oObject._id = oScenes[iIndex].id;
                     oObject.reachable = oScenes[iIndex].reachable;
                     oObject.icon = oScenes[iIndex].icon;
+                    oObject.stateid='';
                     if (oScenes[iIndex].name == oScenes[iIndex].defaultName)
-                        oObject.name = _('Undo ') + oScenes[iIndex].name;
+                        oObject.name = oScenes[iIndex].name;
                     else
-                        oObject.name = _('Undo ') + oScenes[iIndex].defaultName + ' - ' + oScenes[iIndex].name;
+                        oObject.name = oScenes[iIndex].defaultName + ' - ' + oScenes[iIndex].name;
                     Ext.data.StoreManager.lookup('triggerConfigurator_szeneStore_' + ZoneID + '_' + groupID).add(oObject);
-                }
-                
-                if (oScenes[iIndex].id==0) {
-                	if (groupID>63) {
-                		
-                	} else if (groupID==2) {
-                    	Ext.data.StoreManager.lookup('triggerConfigurator_szeneStore_' + ZoneID + '_' + groupID).add({
-                            _id:0,
-                            name:_('all closed'),
-                            icon: oScenes[iIndex].icon,
-                            reachable : oScenes[iIndex].reachable,
-                            forced:true
-                        });
-                    } else {
-                    	Ext.data.StoreManager.lookup('triggerConfigurator_szeneStore_' + ZoneID + '_' + groupID).add({
-                            _id:0,
-                            name:_('all off'),
-                            icon: oScenes[iIndex].icon,
-                            reachable : oScenes[iIndex].reachable,
-                            forced:true
-                        });
+
+                    if (oObject.undoable) {
+                        oObject = {};
+                        oObject._id = -1 * oScenes[iIndex].id;
+                        oObject.reachable = oScenes[iIndex].reachable;
+                        oObject.icon = oScenes[iIndex].icon;
+                        if (oScenes[iIndex].name == oScenes[iIndex].defaultName)
+                            oObject.name = _('Undo ') + oScenes[iIndex].name;
+                        else
+                            oObject.name = _('Undo ') + oScenes[iIndex].defaultName + ' - ' + oScenes[iIndex].name;
+                        Ext.data.StoreManager.lookup('triggerConfigurator_szeneStore_' + ZoneID + '_' + groupID).add(oObject);
+                    }
+
+                    if (oScenes[iIndex].id==0) {
+                    	if (groupID>63) {
+
+                    	} else if (groupID==2) {
+                        	Ext.data.StoreManager.lookup('triggerConfigurator_szeneStore_' + ZoneID + '_' + groupID).add({
+                                _id:0,
+                                name:_('all closed'),
+                                icon: oScenes[iIndex].icon,
+                                reachable : oScenes[iIndex].reachable,
+                                forced:true
+                            });
+                        } else {
+                        	Ext.data.StoreManager.lookup('triggerConfigurator_szeneStore_' + ZoneID + '_' + groupID).add({
+                                _id:0,
+                                name:_('all off'),
+                                icon: oScenes[iIndex].icon,
+                                reachable : oScenes[iIndex].reachable,
+                                forced:true
+                            });
+                        }
                     }
-                }                
+                }
             }
         }
         return Ext.data.StoreManager.lookup('triggerConfigurator_szeneStore_' + ZoneID + '_' + groupID);
@@ -746,13 +765,16 @@ Ext.define('DSS.component.TriggerConfigurator', {
                 }
             });
             var oDeviceArray =  dss.staticDataModel.getSensorDeviceArray();
-            for (var iIndex=0;iIndex<oDeviceArray.length;iIndex++)
-            {
-                if ((dSUID==-1) || (oDeviceArray[iIndex].dSUID==dSUID)) {                
-                    for (var jIndex=0;jIndex<oDeviceArray[iIndex].sensorEvents.length;jIndex++)
-                        Ext.data.StoreManager.lookup('triggerConfigurator_sensorMessageStore_' + dSUID).add({name:oDeviceArray[iIndex].sensorEvents[jIndex].name,_id:oDeviceArray[iIndex].sensorEvents[jIndex].id});
+            if (oDeviceArray) {
+                for (var iIndex=0;iIndex<oDeviceArray.length;iIndex++) {
+                    if ((dSUID==-1) || (oDeviceArray[iIndex].dSUID==dSUID)) {
+                        if (oDeviceArray[iIndex].sensorEvents) {
+                            for (var jIndex=0;jIndex<oDeviceArray[iIndex].sensorEvents.length;jIndex++)
+                                Ext.data.StoreManager.lookup('triggerConfigurator_sensorMessageStore_' + dSUID).add({name:oDeviceArray[iIndex].sensorEvents[jIndex].name,_id:oDeviceArray[iIndex].sensorEvents[jIndex].id});
+                        }
+                    }
                 }
-            }            
+            }
         }
         return Ext.data.StoreManager.lookup('triggerConfigurator_sensorMessageStore_' + dSUID);
     },
@@ -770,15 +792,15 @@ Ext.define('DSS.component.TriggerConfigurator', {
                 }
             });
             var oDeviceArray =  dss.staticDataModel.getSensorDeviceArray();
-            for (var iIndex=0;iIndex<oDeviceArray.length;iIndex++)
-            {
-                if ((ZoneID==0) || (ZoneID==oDeviceArray[iIndex].ZoneID))     
-                        Ext.data.StoreManager.lookup('triggerConfigurator_deviceSensorStore_' + ZoneID).add(oDeviceArray[iIndex]);
+            if (oDeviceArray) {
+                for (var iIndex=0;iIndex<oDeviceArray.length;iIndex++) {
+                    if ((ZoneID==0) || (ZoneID==oDeviceArray[iIndex].ZoneID))
+                            Ext.data.StoreManager.lookup('triggerConfigurator_deviceSensorStore_' + ZoneID).add(oDeviceArray[iIndex]);
+                }
             }
-            
         }
         return Ext.data.StoreManager.lookup('triggerConfigurator_deviceSensorStore_' + ZoneID);
-    },    
+    },
     getDeviceAKMStore : function(ZoneID) {
         if (Ext.data.StoreManager.lookup('triggerConfigurator_deviceAKMStore_' + ZoneID) == null) {
             Ext.create('Ext.data.Store', {
@@ -794,34 +816,37 @@ Ext.define('DSS.component.TriggerConfigurator', {
             });
             var oDeviceArray =  dss.staticDataModel.getAKMDeviceArray();
             var targetArray=[];
-            for (var iIndex=0;iIndex<oDeviceArray.length;iIndex++)
-            {
-                if ((ZoneID==0) || (ZoneID==oDeviceArray[iIndex].ZoneID))     
-                	targetArray.push(oDeviceArray[iIndex]);
+            if (oDeviceArray) {
+                for (var iIndex=0;iIndex<oDeviceArray.length;iIndex++) {
+                    if ((ZoneID==0) || (ZoneID==oDeviceArray[iIndex].ZoneID))
+                    	targetArray.push(oDeviceArray[iIndex]);
+                }
             }
-                                                     
-            for (var iIndex=0;iIndex<dss.staticDataModel.deviceCache.length;iIndex++) {
-            	var fAdd=false;
-            	if (dss.staticDataModel.deviceCache[iIndex].present)
-            		if (dss.staticDataModel.deviceCache[iIndex].ZoneID==ZoneID)
-	            		if (dss.staticDataModel.deviceCache[iIndex].specialActions!=null)
-	            			if (dss.staticDataModel.deviceCache[iIndex].specialActions.triggers!=null)
-	            				if (dss.staticDataModel.deviceCache[iIndex].specialActions.triggers.binaryInputs!=null)
-	                				for (var sKey in dss.staticDataModel.deviceCache[iIndex].specialActions.triggers.binaryInputs) {                				
-		                				fAdd=true;                				
-		                			}
-            	if (fAdd) 
-            		for (var jIndex=0;jIndex<targetArray.length;jIndex++) {
-            			if (targetArray[jIndex].dSUID==dss.staticDataModel.deviceCache[iIndex].dSUID)
-            				fAdd=false;
-            		}
-            	if (fAdd) {            		
-            		targetArray.push(dss.staticDataModel.deviceCache[iIndex]);
-            	}
+
+            if (dss.staticDataModel.deviceCache) {
+                for (var iIndex=0;iIndex<dss.staticDataModel.deviceCache.length;iIndex++) {
+                	var fAdd=false;
+                	if (dss.staticDataModel.deviceCache[iIndex].present)
+                		if (dss.staticDataModel.deviceCache[iIndex].ZoneID==ZoneID)
+    	            		if (dss.staticDataModel.deviceCache[iIndex].specialActions!=null)
+    	            			if (dss.staticDataModel.deviceCache[iIndex].specialActions.triggers!=null)
+    	            				if (dss.staticDataModel.deviceCache[iIndex].specialActions.triggers.binaryInputs!=null)
+    	                				for (var sKey in dss.staticDataModel.deviceCache[iIndex].specialActions.triggers.binaryInputs) {
+    		                				fAdd=true;
+    		                			}
+                	if (fAdd)
+                		for (var jIndex=0;jIndex<targetArray.length;jIndex++) {
+                			if (targetArray[jIndex].dSUID==dss.staticDataModel.deviceCache[iIndex].dSUID)
+                				fAdd=false;
+                		}
+                	if (fAdd) {
+                		targetArray.push(dss.staticDataModel.deviceCache[iIndex]);
+                	}
+                }
             }
             Ext.data.StoreManager.lookup('triggerConfigurator_deviceAKMStore_' + ZoneID).add(targetArray);
-        }        
-        
+        }
+
         return Ext.data.StoreManager.lookup('triggerConfigurator_deviceAKMStore_' + ZoneID);
     },
     getDeviceStore : function(ZoneID) {
@@ -838,53 +863,56 @@ Ext.define('DSS.component.TriggerConfigurator', {
                 }
             });
             var oDeviceArray = dss.staticDataModel.getDevicesForZone(ZoneID, 0);
-            for (var iIndex=0;iIndex<oDeviceArray.length;iIndex++)
-            {
-            	var fShouldAdd=false;
-            	if (oDeviceArray[iIndex].hasStates)
-            		fShouldAdd=true;
-            	if (oDeviceArray[iIndex].deviceEvents!=null)
-            		if (Object.keys(oDeviceArray[iIndex].deviceEvents).length>0)
-            			fShouldAdd=true;
-            	if (oDeviceArray[iIndex].deviceCustomActions!=null)
-            		if (Object.keys(oDeviceArray[iIndex].deviceCustomActions).length>0)
-            			fShouldAdd=true;
-            	if (oDeviceArray[iIndex].deviceStandardActions!=null)
-            		if (Object.keys(oDeviceArray[iIndex].deviceStandardActions).length>0)
-            			fShouldAdd=true;
-                if (oDeviceArray[iIndex].deviceActions!=null)
-                    if (Object.keys(oDeviceArray[iIndex].deviceActions).length>0)
-                        fShouldAdd=true;
-
-                if (((oDeviceArray[iIndex].tasterMode == 0) && (oDeviceArray[iIndex].buttonType != 65))||(oDeviceArray[iIndex].tasterMode==15))
-                	fShouldAdd=true;
-                else
-                	if (oDeviceArray[iIndex].specialActions!=null)
-                    	if (oDeviceArray[iIndex].specialActions.triggers!=null) {
-                        	if (oDeviceArray[iIndex].specialActions.triggers.deviceMsg!=null)
-                        		fShouldAdd=true;
-                        	if (oDeviceArray[iIndex].specialActions.triggers.deviceAction!=null)
-                        		fShouldAdd=true;                        	
-                    	}
-                if (fShouldAdd)
-                	Ext.data.StoreManager.lookup('triggerConfigurator_deviceStore_' + ZoneID).add(oDeviceArray[iIndex]);
+            if (oDeviceArray) {
+                for (var iIndex=0;iIndex<oDeviceArray.length;iIndex++) {
+                	var fShouldAdd=false;
+                	if (oDeviceArray[iIndex].hasStates)
+                		fShouldAdd=true;
+                	if (oDeviceArray[iIndex].deviceEvents!=null)
+                		if (Object.keys(oDeviceArray[iIndex].deviceEvents).length>0)
+                			fShouldAdd=true;
+                	if (oDeviceArray[iIndex].deviceCustomActions!=null)
+                		if (Object.keys(oDeviceArray[iIndex].deviceCustomActions).length>0)
+                			fShouldAdd=true;
+                	if (oDeviceArray[iIndex].deviceStandardActions!=null)
+                		if (Object.keys(oDeviceArray[iIndex].deviceStandardActions).length>0)
+                			fShouldAdd=true;
+                    if (oDeviceArray[iIndex].deviceActions!=null)
+                        if (Object.keys(oDeviceArray[iIndex].deviceActions).length>0)
+                            fShouldAdd=true;
+
+                    if (((oDeviceArray[iIndex].tasterMode == 0) && (oDeviceArray[iIndex].buttonType != 65))||(oDeviceArray[iIndex].tasterMode==15))
+                    	fShouldAdd=true;
+                    else
+                    	if (oDeviceArray[iIndex].specialActions!=null)
+                        	if (oDeviceArray[iIndex].specialActions.triggers!=null) {
+                            	if (oDeviceArray[iIndex].specialActions.triggers.deviceMsg!=null)
+                            		fShouldAdd=true;
+                            	if (oDeviceArray[iIndex].specialActions.triggers.deviceAction!=null)
+                            		fShouldAdd=true;
+                        	}
+                    if (fShouldAdd)
+                    	Ext.data.StoreManager.lookup('triggerConfigurator_deviceStore_' + ZoneID).add(oDeviceArray[iIndex]);
+                }
             }
-        }        
+        }
         return Ext.data.StoreManager.lookup('triggerConfigurator_deviceStore_' + ZoneID);
     },
     constructGridLvlRoomStateState: function (zoneID) {
     	var oStates=dss.staticDataModel.getStates();
     	var oShowStates=[];
-    	for (var iIndex=0;iIndex<oStates.length;iIndex++) {
-    		var sSplitName=oStates[iIndex].name.split(".");
-    		if (sSplitName.length==3)
-    			if (sSplitName[0]=='zone')
-    				if ((sSplitName[1]==''+zoneID) && (sSplitName[2] != 'heating')){
-    					oShowStates.push(oStates[iIndex]);
-    				}
-    	}
+        if (oStates) {
+        	for (var iIndex=0;iIndex<oStates.length;iIndex++) {
+        		var sSplitName=oStates[iIndex].name.split(".");
+        		if (sSplitName.length==3)
+        			if (sSplitName[0]=='zone')
+        				if ((sSplitName[1]==''+zoneID) && (sSplitName[2] != 'heating')){
+        					oShowStates.push(oStates[iIndex]);
+        				}
+        	}
+        }
     	oShowStates.sort(function (o1,o2) {if (o1.name.toUpperCase()<o2.name.toUpperCase())return -1; else return 1;});
-    		
+
         var oRoomStateStateControlStore = Ext.create('Ext.data.Store', {
             fields : [  'name','stateid','value','icon','tooltip','valueandstate'],
             proxy : {
@@ -907,21 +935,21 @@ Ext.define('DSS.component.TriggerConfigurator', {
             if (oNameArray[2]=='light') {
             	oItem.icon=dss.staticDataModel.getImagePathForScene(0,1,5);
             	oItem.name=Ext.String.format2(_("{#editor_trigger_zonestates}light is active"),{});
-            }            	
+            }
             else if (oNameArray[2]=='motion') {
             	oItem.icon=dss.staticDataModel.getImagePathForAKMValue(5,true);
             	oItem.name=Ext.String.format2(_("{#editor_trigger_zonestates}motion is active"),{});
-            }            	
+            }
             else if (oNameArray[2]=='presence') {
             	oItem.icon=dss.staticDataModel.getImagePathForAKMValue(1,true);
             	oItem.name=Ext.String.format2(_("{#editor_trigger_zonestates}presence is active"),{});
-            }            	
+            }
             else {
             	oItem.icon=dss.staticDataModel.getImagePathForAKMValue(0,true);
             	oItem.name=Ext.String.format2(_("{#editor_trigger_zonestates}{state} is active"),{'state':oNameArray[2]});
-            }            	
+            }
             oNewArray.push(oItem);
-            
+
             oItem={
             		'stateid':oShowStates[iIndex].name,
             		'value':'inactive',
@@ -939,12 +967,12 @@ Ext.define('DSS.component.TriggerConfigurator', {
             else if (oNameArray[2]=='presence') {
             	oItem.icon=dss.staticDataModel.getImagePathForAKMValue(1,false);
             	oItem.name=Ext.String.format2(_("{#editor_trigger_zonestates}presence is inactive"),{});
-            }            	
+            }
             else {
             	oItem.icon=dss.staticDataModel.getImagePathForAKMValue(0,false);
             	oItem.name=Ext.String.format2(_("{#editor_trigger_zonestates}{state} is inactive"),{'state':oNameArray[2]});
-            }            	
-            oNewArray.push(oItem);            
+            }
+            oNewArray.push(oItem);
     	}
         oRoomStateStateControlStore.add(oNewArray);
 
@@ -962,34 +990,36 @@ Ext.define('DSS.component.TriggerConfigurator', {
                 hideable : false,
                 text : _('room'),
                 dataIndex : 'name',
-                flex : 1,                
-                renderer : this.defMacGridRenderer                
+                flex : 1,
+                renderer : this.defMacGridRenderer
             } ]
         });
 
         this.grids.lvlRoomStateState.parent = this;
 
-        
+
         var me=this;
         this.grids.lvlRoomStateState.on('itemdblclick', function(grid, record) {
         	if (me.isValid())
         		me.fireEvent('valueDoubleClicked', me);
         });
 
-        
+
         this.macPanel.add(this.grids.lvlRoomStateState);
-    	
+
     },
     constructGridLvlClusterStateState: function (clusterID) {
         var oStates = dss.staticDataModel.getStates();
         var oShowStates = [];
-        for (var iIndex = 0; iIndex < oStates.length; iIndex++) {
-            var sSplitName = oStates[iIndex].name.split(".");
-            if ((sSplitName.length != 3) && (sSplitName[0] != 'cluster')) {
-                continue;
-            }
-            if ((sSplitName[1] == ''+clusterID) && (sSplitName[2] == 'operation_lock')) {
-                oShowStates.push(oStates[iIndex]);
+        if (oStates) {
+            for (var iIndex = 0; iIndex < oStates.length; iIndex++) {
+                var sSplitName = oStates[iIndex].name.split(".");
+                if ((sSplitName.length != 3) && (sSplitName[0] != 'cluster')) {
+                    continue;
+                }
+                if ((sSplitName[1] == ''+clusterID) && (sSplitName[2] == 'operation_lock')) {
+                    oShowStates.push(oStates[iIndex]);
+                }
             }
         }
         oShowStates.sort(function (o1,o2) { if (o1.name.toUpperCase() < o2.name.toUpperCase()) return -1; else return 1;});
@@ -1058,14 +1088,14 @@ Ext.define('DSS.component.TriggerConfigurator', {
         		me.fireEvent('valueDoubleClicked', me);
         });
 
-        
+
         this.grids.lvlClusterStateState.parent = this;
 
         this.macPanel.add(this.grids.lvlClusterStateState);
     },
     constructGridLvlDeviceStateValue: function (dSUID,type) {
     	var oStates=dss.staticDataModel.getDeviceStates(dSUID);
-    	
+
         var oStateDeviceValueControlStore = Ext.create('Ext.data.Store', {
             fields : [ 'type', {name:'name',sortType:'asUCText'},'selector' ],
             proxy : {
@@ -1081,15 +1111,15 @@ Ext.define('DSS.component.TriggerConfigurator', {
     		if (sKey==type) {
     			for (var sSubKey in oStates[sKey].options)
     			oValueArray.push({type:sSubKey,name:oStates[sKey].options[sSubKey],selector:'dev.' + dSUID + '.' + type});
-    		}    		
+    		}
     	}
-    	oStateDeviceValueControlStore.add(oValueArray);    	
+    	oStateDeviceValueControlStore.add(oValueArray);
     	oStateDeviceValueControlStore.sort('name');
 
         var width=(this.getWidth()-(this.iDefaultWidth*4))-2;
-        if (this.grids.lvlDeviceActionClass.store.count()==1) 
+        if (this.grids.lvlDeviceActionClass.store.count()==1)
        	 width+=this.iDefaultWidth;
-        
+
     	 this.grids.lvlDeviceStateValue = Ext.create('Ext.grid.Panel', {
              hideHeaders:true,
              height : this.iDefaultHeight,
@@ -1107,7 +1137,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
                  hideable : false,
                  text : _('room'),
                  dataIndex : 'name',
-                 flex : 1,                
+                 flex : 1,
                  renderer : function(val, metadata, record, colIdx, store, view) {
                      return '<table style="height:16px;width:100%"><tr><td width="100%">' + record.get('name') + '</td></tr></table>';
                  }
@@ -1124,13 +1154,13 @@ Ext.define('DSS.component.TriggerConfigurator', {
          	if (me.isValid())
          		me.fireEvent('valueDoubleClicked', me);
          });
-         
+
          this.macPanel.add(this.grids.lvlDeviceStateValue);
     },
     /*
     constructGridLvlDeviceStateState: function (dSUID) {
     	var oStates=dss.staticDataModel.getDeviceStates(dSUID);
-    	
+
         var oStateDeviceStateControlStore = Ext.create('Ext.data.Store', {
             fields : [ 'type', 'name' ],
             proxy : {
@@ -1146,9 +1176,9 @@ Ext.define('DSS.component.TriggerConfigurator', {
     		oStateArray.push({type:sKey,name:oStates[sKey].title});
     	}
     	oStateDeviceStateControlStore.add(oStateArray);
-    	
+
     	oStateDeviceStateControlStore.sort('name');
-         
+
          this.grids.lvlDeviceStateState = Ext.create('Ext.grid.Panel', {
              hideHeaders:true,
              height : this.iDefaultHeight,
@@ -1163,7 +1193,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
                  hideable : false,
                  text : _('room'),
                  dataIndex : 'name',
-                 flex : 1,                
+                 flex : 1,
                  renderer : function(val, metadata, record, colIdx, store, view) {
                      return '<table style="height:16px;width:100%"><tr><td width="100%">' + record.get('name') + '</td><td>&gt;</td></tr></table>';
                  }
@@ -1174,11 +1204,11 @@ Ext.define('DSS.component.TriggerConfigurator', {
          this.grids.lvlDeviceStateState.on('itemclick', function(grid, record) {
              this.parent.macPanel.remove(this.parent.grids.lvlDeviceStateValue);
              var type = record.get('type');
-             this.parent.constructGridLvlDeviceStateValue(dSUID,type);           
+             this.parent.constructGridLvlDeviceStateValue(dSUID,type);
          });
          this.macPanel.add(this.grids.lvlDeviceStateState);
-         
-    	
+
+
     },
     *//*
     constructGridLvlDeviceStateDevice: function (zoneID) {
@@ -1192,15 +1222,17 @@ Ext.define('DSS.component.TriggerConfigurator', {
                 }
             }
         });
-    	
+
     	var oDeviceArray=[];
-    	for (var iIndex=0;iIndex<dss.staticDataModel.deviceCache.length;iIndex++) {
-    		if (dss.staticDataModel.deviceCache[iIndex].present)
-    			if (dss.staticDataModel.deviceCache[iIndex].hasStates)
-    				if (dss.staticDataModel.deviceCache[iIndex].ZoneID==zoneID) {
-    					oDeviceControlStore.add(dss.staticDataModel.deviceCache[iIndex]);    					
-    				}
-    	}
+        if (dss.staticDataModel.deviceCache) {
+        	for (var iIndex=0;iIndex<dss.staticDataModel.deviceCache.length;iIndex++) {
+        		if (dss.staticDataModel.deviceCache[iIndex].present)
+        			if (dss.staticDataModel.deviceCache[iIndex].hasStates)
+        				if (dss.staticDataModel.deviceCache[iIndex].ZoneID==zoneID) {
+        					oDeviceControlStore.add(dss.staticDataModel.deviceCache[iIndex]);
+        				}
+        	}
+        }
 
 
     	oDeviceControlStore.sort('name');
@@ -1231,17 +1263,19 @@ Ext.define('DSS.component.TriggerConfigurator', {
         });
         this.macPanel.add(this.grids.lvlDeviceStateDevice);
 
-		
+
     },*//*
     constructGridLvlDeviceStateRoom: function () {
     	var oRoomArray=[];
-    	for (var iIndex=0;iIndex<dss.staticDataModel.deviceCache.length;iIndex++) {
-    		if (dss.staticDataModel.deviceCache[iIndex].present)
-    			if (dss.staticDataModel.deviceCache[iIndex].hasStates)
-    				if (oRoomArray.indexOf(dss.staticDataModel.deviceCache[iIndex].ZoneID)<0) {
-    					oRoomArray.push(dss.staticDataModel.deviceCache[iIndex].ZoneID);
-    				}
-    	}
+        if (dss.staticDataModel.deviceCache) {
+        	for (var iIndex=0;iIndex<dss.staticDataModel.deviceCache.length;iIndex++) {
+        		if (dss.staticDataModel.deviceCache[iIndex].present)
+        			if (dss.staticDataModel.deviceCache[iIndex].hasStates)
+        				if (oRoomArray.indexOf(dss.staticDataModel.deviceCache[iIndex].ZoneID)<0) {
+        					oRoomArray.push(dss.staticDataModel.deviceCache[iIndex].ZoneID);
+        				}
+        	}
+        }
         var oRoomDeviceStateControlStore = Ext.create('Ext.data.Store', {
             fields : [ 'ZoneID', 'name' ],
             proxy : {
@@ -1258,7 +1292,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
         }
         oRoomDeviceStateControlStore.add(oArray);
         oRoomDeviceStateControlStore.sort('name');
-        
+
         this.grids.lvlDeviceStateRoom = Ext.create('Ext.grid.Panel', {
             hideHeaders:true,
             height : this.iDefaultHeight,
@@ -1273,7 +1307,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
                 hideable : false,
                 text : _('room'),
                 dataIndex : 'name',
-                flex : 1,                
+                flex : 1,
                 renderer : function(val, metadata, record, colIdx, store, view) {
                     return '<table style="height:16px;width:100%"><tr><td width="100%">' + record.get('name') + '</td><td>&gt;</td></tr></table>';
                 }
@@ -1286,10 +1320,10 @@ Ext.define('DSS.component.TriggerConfigurator', {
             this.parent.macPanel.remove(this.parent.grids.lvlDeviceStateState);
             this.parent.macPanel.remove(this.parent.grids.lvlDeviceStateValue);
             var zoneID = record.get('ZoneID');
-            this.parent.constructGridLvlDeviceStateDevice(zoneID);           
+            this.parent.constructGridLvlDeviceStateDevice(zoneID);
         });
         this.macPanel.add(this.grids.lvlDeviceStateRoom);
-        
+
     },*/
     constructGridLvlRoomStateRoom: function () {
         var oRoomStateControlStore = Ext.create('Ext.data.Store', {
@@ -1310,7 +1344,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
             	oRoomStateControlStore.add(oNewRecord);
         });
         oRoomStateControlStore.sort('name');
-      
+
         this.grids.lvlRoomStateRoom = Ext.create('Ext.grid.Panel', {
             hideHeaders:true,
             height : this.iDefaultHeight,
@@ -1325,7 +1359,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
                 hideable : false,
                 text : _('room'),
                 dataIndex : 'name',
-                flex : 1,                
+                flex : 1,
                 renderer : function(val, metadata, record, colIdx, store, view) {
                     return '<table style="height:16px;width:100%"><tr><td width="100%">' + record.get('name') + '</td><td>&gt;</td></tr></table>';
                 }
@@ -1335,15 +1369,15 @@ Ext.define('DSS.component.TriggerConfigurator', {
         this.grids.lvlRoomStateRoom.parent = this;
         this.grids.lvlRoomStateRoom.on('itemclick', function(grid, record) {
             this.parent.macPanel.remove(this.parent.grids.lvlRoomStateState);
-           
+
             var zoneID = record.get('ZoneID');
-            this.parent.constructGridLvlRoomStateState(zoneID);           
+            this.parent.constructGridLvlRoomStateState(zoneID);
         });
         this.macPanel.add(this.grids.lvlRoomStateRoom);
-    },  
+    },
     constructGridLvlDeviceEventEvent: function (dSUID) {
     	var oEvents=dss.staticDataModel.getDevice(dSUID).deviceEvents;
-    	
+
         var oStateDeviceEventControlStore = Ext.create('Ext.data.Store', {
             fields : [ 'event','dSUID', {name:'name',sortType:'asUCText'} ],
             proxy : {
@@ -1359,10 +1393,10 @@ Ext.define('DSS.component.TriggerConfigurator', {
     		oEventArray.push({event:sKey,dSUID:dSUID,name:oEvents[sKey].title});
     	}
     	oStateDeviceEventControlStore.add(oEventArray);
-    	
+
     	oStateDeviceEventControlStore.sort('name');
          var width=(this.getWidth()-(this.iDefaultWidth*3))-2;
-         if (this.grids.lvlDeviceActionClass.store.count()==1) 
+         if (this.grids.lvlDeviceActionClass.store.count()==1)
         	 width+=this.iDefaultWidth;
          this.grids.lvlDeviceEventEvent = Ext.create('Ext.grid.Panel', {
              hideHeaders:true,
@@ -1381,7 +1415,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
                  hideable : false,
                  text : _('room'),
                  dataIndex : 'name',
-                 flex : 1,                
+                 flex : 1,
                  renderer : function(val, metadata, record, colIdx, store, view) {
                      return '<table style="height:16px;width:100%"><tr><td width="100%">' + record.get('name') + '</td></tr></table>';
                  }
@@ -1408,10 +1442,10 @@ Ext.define('DSS.component.TriggerConfigurator', {
         		 me.grids[sKey].setHeight(me.iDefaultHeight);
         	 }
           });
-         
+
          this.macPanel.add(this.grids.lvlDeviceEventEvent);
-         
-    	
+
+
     },
     /*
     constructGridLvlDeviceEventDevice: function (zoneID) {
@@ -1426,16 +1460,18 @@ Ext.define('DSS.component.TriggerConfigurator', {
                 }
             }
         });
-    	
+
     	var oDeviceArray=[];
-    	for (var iIndex=0;iIndex<dss.staticDataModel.deviceCache.length;iIndex++) {
-    		if (dss.staticDataModel.deviceCache[iIndex].present)
-    			if (dss.staticDataModel.deviceCache[iIndex].deviceEvents!=null)  
-	    			if (Object.keys(dss.staticDataModel.deviceCache[iIndex].deviceEvents).length>0)
-	    				if (dss.staticDataModel.deviceCache[iIndex].ZoneID==zoneID) {
-	    					oDeviceControlStore.add(dss.staticDataModel.deviceCache[iIndex]);    					
-	    				}
-    	}
+        if (dss.staticDataModel.deviceCache) {
+        	for (var iIndex=0;iIndex<dss.staticDataModel.deviceCache.length;iIndex++) {
+        		if (dss.staticDataModel.deviceCache[iIndex].present)
+        			if (dss.staticDataModel.deviceCache[iIndex].deviceEvents!=null)
+    	    			if (Object.keys(dss.staticDataModel.deviceCache[iIndex].deviceEvents).length>0)
+    	    				if (dss.staticDataModel.deviceCache[iIndex].ZoneID==zoneID) {
+    	    					oDeviceControlStore.add(dss.staticDataModel.deviceCache[iIndex]);
+    	    				}
+        	}
+        }
 
 
     	oDeviceControlStore.sort('name');
@@ -1465,18 +1501,20 @@ Ext.define('DSS.component.TriggerConfigurator', {
         });
         this.macPanel.add(this.grids.lvlDeviceEventDevice);
 
-		
+
     },*//*
     constructGridLvlDeviceEventRoom: function () {
     	var oRoomArray=[];
-    	for (var iIndex=0;iIndex<dss.staticDataModel.deviceCache.length;iIndex++) {
-    		if (dss.staticDataModel.deviceCache[iIndex].present)
-    			if (dss.staticDataModel.deviceCache[iIndex].deviceEvents!=null)    				
-        			if (Object.keys(dss.staticDataModel.deviceCache[iIndex].deviceEvents).length>0)    				
-	    				if (oRoomArray.indexOf(dss.staticDataModel.deviceCache[iIndex].ZoneID)<0) {
-	    					oRoomArray.push(dss.staticDataModel.deviceCache[iIndex].ZoneID);
-	    				}
-    	}
+        if (dss.staticDataModel.deviceCache) {
+        	for (var iIndex=0;iIndex<dss.staticDataModel.deviceCache.length;iIndex++) {
+        		if (dss.staticDataModel.deviceCache[iIndex].present)
+        			if (dss.staticDataModel.deviceCache[iIndex].deviceEvents!=null)
+            			if (Object.keys(dss.staticDataModel.deviceCache[iIndex].deviceEvents).length>0)
+    	    				if (oRoomArray.indexOf(dss.staticDataModel.deviceCache[iIndex].ZoneID)<0) {
+    	    					oRoomArray.push(dss.staticDataModel.deviceCache[iIndex].ZoneID);
+    	    				}
+        	}
+        }
         var oRoomDeviceEventControlStore = Ext.create('Ext.data.Store', {
             fields : [ 'ZoneID', 'name' ],
             proxy : {
@@ -1493,7 +1531,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
         }
         oRoomDeviceEventControlStore.add(oArray);
         oRoomDeviceEventControlStore.sort('name');
-        
+
         this.grids.lvlDeviceEventRoom = Ext.create('Ext.grid.Panel', {
             hideHeaders:true,
             height : this.iDefaultHeight,
@@ -1508,7 +1546,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
                 hideable : false,
                 text : _('room'),
                 dataIndex : 'name',
-                flex : 1,                
+                flex : 1,
                 renderer : function(val, metadata, record, colIdx, store, view) {
                     return '<table style="height:16px;width:100%"><tr><td width="100%">' + record.get('name') + '</td><td>&gt;</td></tr></table>';
                 }
@@ -1520,12 +1558,12 @@ Ext.define('DSS.component.TriggerConfigurator', {
             this.parent.macPanel.remove(this.parent.grids.lvlDeviceEventDevice);
             this.parent.macPanel.remove(this.parent.grids.lvlDeviceEventEvent);
             var zoneID = record.get('ZoneID');
-            this.parent.constructGridLvlDeviceEventDevice(zoneID);           
+            this.parent.constructGridLvlDeviceEventDevice(zoneID);
         });
         this.macPanel.add(this.grids.lvlDeviceEventRoom);
     },*/
     constructGridLvlDeviceActionAction: function (dSUID) {
-    	
+
         var oStateDeviceActionControlStore = Ext.create('Ext.data.Store', {
             fields : [ 'action','dSUID', 'name' ],
             proxy : {
@@ -1549,7 +1587,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
     	if (Object.keys(oDeviceActions).length>0)
     		if (Object.keys(oStandard).length>0)
     			oActionArray.push({action:'',dSUID:dSUID,name:'-'});
-    	
+
         for (var sKey in oDeviceActions) {
             oActionArray.push({action:sKey,dSUID:dSUID,name:oDeviceActions[sKey].title});
         }
@@ -1557,18 +1595,18 @@ Ext.define('DSS.component.TriggerConfigurator', {
         if (Object.keys(oCustom).length>0)
             if (Object.keys(oDeviceActions).length>0)
                 oActionArray.push({action:'',dSUID:dSUID,name:'-'});
-    	
+
     	for (var sKey in oCustom) {
     		oActionArray.push({action:sKey,dSUID:dSUID,name:oCustom[sKey].title});
     	}
-    	
-    	
+
+
     	oStateDeviceActionControlStore.add(oActionArray);
-    	     
+
         var width=(this.getWidth()-(this.iDefaultWidth*4))-2;
-        if (this.grids.lvlDeviceActionClass.store.count()==1) 
+        if (this.grids.lvlDeviceActionClass.store.count()==1)
        	 width+=this.iDefaultWidth;
-    	
+
          this.grids.lvlDeviceActionAction = Ext.create('Ext.grid.Panel', {
              hideHeaders:true,
              height : this.iDefaultHeight,
@@ -1586,7 +1624,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
                  hideable : false,
                  text : _('room'),
                  dataIndex : 'name',
-                 flex : 1,                
+                 flex : 1,
                  renderer : function(val, metadata, record, colIdx, store, view) {
                 	 if (record.get('name')=='-')
                 		 return '<table style="height:16px;width:100%;"><tr style="height:16px;"><td width="100%"><hr></td></tr></table>';
@@ -1606,10 +1644,10 @@ Ext.define('DSS.component.TriggerConfigurator', {
          	if (me.isValid())
          		me.fireEvent('valueDoubleClicked', me);
          });
-         
+
          this.macPanel.add(this.grids.lvlDeviceActionAction);
-         
-    	
+
+
     },
     /*
     constructGridLvlDeviceActionDevice: function (zoneID) {
@@ -1624,25 +1662,27 @@ Ext.define('DSS.component.TriggerConfigurator', {
                 }
             }
         });
-    	
+
     	var oDeviceArray=[];
-    	for (var iIndex=0;iIndex<dss.staticDataModel.deviceCache.length;iIndex++) {
-    		var fSkip=false;
-    		if (dss.staticDataModel.deviceCache[iIndex].present)
-    			if (dss.staticDataModel.deviceCache[iIndex].deviceCustomActions!=null)  
-	    			if (Object.keys(dss.staticDataModel.deviceCache[iIndex].deviceCustomActions).length>0)
-	    				if (dss.staticDataModel.deviceCache[iIndex].ZoneID==zoneID) {
-	    					oDeviceControlStore.add(dss.staticDataModel.deviceCache[iIndex]);
-	    					fSkip=true;
-	    				}
-    		if (!fSkip)
-	    		if (dss.staticDataModel.deviceCache[iIndex].present)
-	    			if (dss.staticDataModel.deviceCache[iIndex].deviceStandardActions!=null)  
-		    			if (Object.keys(dss.staticDataModel.deviceCache[iIndex].deviceStandardActions).length>0)
-		    				if (dss.staticDataModel.deviceCache[iIndex].ZoneID==zoneID) {
-		    					oDeviceControlStore.add(dss.staticDataModel.deviceCache[iIndex]);    					
-		    				}
-    	}
+        if (dss.staticDataModel.deviceCache) {
+        	for (var iIndex=0;iIndex<dss.staticDataModel.deviceCache.length;iIndex++) {
+        		var fSkip=false;
+        		if (dss.staticDataModel.deviceCache[iIndex].present)
+        			if (dss.staticDataModel.deviceCache[iIndex].deviceCustomActions!=null)
+    	    			if (Object.keys(dss.staticDataModel.deviceCache[iIndex].deviceCustomActions).length>0)
+    	    				if (dss.staticDataModel.deviceCache[iIndex].ZoneID==zoneID) {
+    	    					oDeviceControlStore.add(dss.staticDataModel.deviceCache[iIndex]);
+    	    					fSkip=true;
+    	    				}
+        		if (!fSkip)
+    	    		if (dss.staticDataModel.deviceCache[iIndex].present)
+    	    			if (dss.staticDataModel.deviceCache[iIndex].deviceStandardActions!=null)
+    		    			if (Object.keys(dss.staticDataModel.deviceCache[iIndex].deviceStandardActions).length>0)
+    		    				if (dss.staticDataModel.deviceCache[iIndex].ZoneID==zoneID) {
+    		    					oDeviceControlStore.add(dss.staticDataModel.deviceCache[iIndex]);
+    		    				}
+        	}
+        }
 
 
     	oDeviceControlStore.sort('name');
@@ -1672,25 +1712,27 @@ Ext.define('DSS.component.TriggerConfigurator', {
         });
         this.macPanel.add(this.grids.lvlDeviceActionDevice);
 
-		
+
     },*//*
     constructGridLvlDeviceActionRoom: function () {
     	var oRoomArray=[];
-    	for (var iIndex=0;iIndex<dss.staticDataModel.deviceCache.length;iIndex++) {
-    		if (dss.staticDataModel.deviceCache[iIndex].present)
-    			if (dss.staticDataModel.deviceCache[iIndex].deviceCustomActions!=null)    				
-	    			if (Object.keys(dss.staticDataModel.deviceCache[iIndex].deviceCustomActions).length>0)
-	    				if (oRoomArray.indexOf(dss.staticDataModel.deviceCache[iIndex].ZoneID)<0) {
-	    					oRoomArray.push(dss.staticDataModel.deviceCache[iIndex].ZoneID);
-	    				}
-
-    		if (dss.staticDataModel.deviceCache[iIndex].present)
-    			if (dss.staticDataModel.deviceCache[iIndex].deviceStandardActions!=null)    				
-	    			if (Object.keys(dss.staticDataModel.deviceCache[iIndex].deviceStandardActions).length>0)
-	    				if (oRoomArray.indexOf(dss.staticDataModel.deviceCache[iIndex].ZoneID)<0) {
-	    					oRoomArray.push(dss.staticDataModel.deviceCache[iIndex].ZoneID);
-	    				}
-    	}
+        if (dss.staticDataModel.deviceCache) {
+        	for (var iIndex=0;iIndex<dss.staticDataModel.deviceCache.length;iIndex++) {
+        		if (dss.staticDataModel.deviceCache[iIndex].present)
+        			if (dss.staticDataModel.deviceCache[iIndex].deviceCustomActions!=null)
+    	    			if (Object.keys(dss.staticDataModel.deviceCache[iIndex].deviceCustomActions).length>0)
+    	    				if (oRoomArray.indexOf(dss.staticDataModel.deviceCache[iIndex].ZoneID)<0) {
+    	    					oRoomArray.push(dss.staticDataModel.deviceCache[iIndex].ZoneID);
+    	    				}
+
+        		if (dss.staticDataModel.deviceCache[iIndex].present)
+        			if (dss.staticDataModel.deviceCache[iIndex].deviceStandardActions!=null)
+    	    			if (Object.keys(dss.staticDataModel.deviceCache[iIndex].deviceStandardActions).length>0)
+    	    				if (oRoomArray.indexOf(dss.staticDataModel.deviceCache[iIndex].ZoneID)<0) {
+    	    					oRoomArray.push(dss.staticDataModel.deviceCache[iIndex].ZoneID);
+    	    				}
+        	}
+        }
         var oRoomDeviceActionControlStore = Ext.create('Ext.data.Store', {
             fields : [ 'ZoneID', 'name' ],
             proxy : {
@@ -1707,7 +1749,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
         }
         oRoomDeviceActionControlStore.add(oArray);
         oRoomDeviceActionControlStore.sort('name');
-        
+
         this.grids.lvlDeviceActionRoom = Ext.create('Ext.grid.Panel', {
             hideHeaders:true,
             height : this.iDefaultHeight,
@@ -1722,7 +1764,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
                 hideable : false,
                 text : _('room'),
                 dataIndex : 'name',
-                flex : 1,                
+                flex : 1,
                 renderer : function(val, metadata, record, colIdx, store, view) {
                     return '<table style="height:16px;width:100%"><tr><td width="100%">' + record.get('name') + '</td><td>&gt;</td></tr></table>';
                 }
@@ -1734,11 +1776,11 @@ Ext.define('DSS.component.TriggerConfigurator', {
             this.parent.macPanel.remove(this.parent.grids.lvlDeviceActionDevice);
             this.parent.macPanel.remove(this.parent.grids.lvlDeviceActionAction);
             var zoneID = record.get('ZoneID');
-            this.parent.constructGridLvlDeviceActionDevice(zoneID);           
+            this.parent.constructGridLvlDeviceActionDevice(zoneID);
         });
         this.macPanel.add(this.grids.lvlDeviceActionRoom);
-        
-    },    
+
+    },
     */
     constructGridLvlClusterStateCluster: function () {
         var oClusterStateControlStore = Ext.create('Ext.data.Store', {
@@ -1803,13 +1845,13 @@ Ext.define('DSS.component.TriggerConfigurator', {
         });
 
         var oDevice=dss.staticDataModel.getDevice(dSUID);
-        
+
         var fSkip=false;
         if (oDevice.specialActions!=null)
         	if (oDevice.specialActions.triggers!=null)
-        		if (oDevice.specialActions.triggers.binaryInputs!=null) {        			
-        			for (var sKey in oDevice.specialActions.triggers.binaryInputs) 	                			
-            			if (oDevice.specialActions.triggers.binaryInputs[sKey].id==type) {            				 
+        		if (oDevice.specialActions.triggers.binaryInputs!=null) {
+        			for (var sKey in oDevice.specialActions.triggers.binaryInputs)
+            			if (oDevice.specialActions.triggers.binaryInputs[sKey].id==type) {
             				var oItem={
      	                            'index':oDevice.specialActions.triggers.binaryInputs[sKey].id,
      	                            'name':oDevice.specialActions.triggers.binaryInputs[sKey].name,
@@ -1817,77 +1859,80 @@ Ext.define('DSS.component.TriggerConfigurator', {
      	                            'tooltip':'',
      	                            'icon': null};
      	                    oStore.add(oItem);
-     	                    
+
             				fSkip=true;
                 		}
         		}
-        
-        if (!fSkip) {        
+
+        if (!fSkip) {
 	        if (dss.staticDataModel.getDeviceType(oDevice) == 10) { //TNY
-	            for (var iIndex=0;iIndex<oDevice.binaryInputs.length;iIndex++) {
-	                if (oDevice.binaryInputs[iIndex].type == type) {
-	                    var oItem={
-	                            'index':oDevice.binaryInputs[iIndex].index,
-	                            'name':dss.staticDataModel.getNameForAKMValue(oDevice.binaryInputs[iIndex].type,false),
-	                            '_id':false,
-	                            'tooltip':dss.staticDataModel.getTooltipForState(oDevice.binaryInputs[iIndex].type,false),
-	                            'icon': dss.staticDataModel.getImagePathForAKMValue(oDevice.binaryInputs[iIndex].type,false)};
-	                    oStore.add(oItem);
-	                    oItem={
-	                            'index':oDevice.binaryInputs[iIndex].index,
-	                            'name':dss.staticDataModel.getNameForAKMValue(oDevice.binaryInputs[iIndex].type,true),
-	                            '_id':true,
-	                            'tooltip':dss.staticDataModel.getTooltipForState(oDevice.binaryInputs[iIndex].type,true),
-	                            'icon': dss.staticDataModel.getImagePathForAKMValue(oDevice.binaryInputs[iIndex].type,true)};
-	                    oStore.add(oItem);
-	                }
-	            }
-	            
+                if (oDevice.binaryInputs) {
+    	            for (var iIndex=0;iIndex<oDevice.binaryInputs.length;iIndex++) {
+    	                if (oDevice.binaryInputs[iIndex].type == type) {
+    	                    var oItem={
+    	                            'index':oDevice.binaryInputs[iIndex].index,
+    	                            'name':dss.staticDataModel.getNameForAKMValue(oDevice.binaryInputs[iIndex].type,false),
+    	                            '_id':false,
+    	                            'tooltip':dss.staticDataModel.getTooltipForState(oDevice.binaryInputs[iIndex].type,false),
+    	                            'icon': dss.staticDataModel.getImagePathForAKMValue(oDevice.binaryInputs[iIndex].type,false)};
+    	                    oStore.add(oItem);
+    	                    oItem={
+    	                            'index':oDevice.binaryInputs[iIndex].index,
+    	                            'name':dss.staticDataModel.getNameForAKMValue(oDevice.binaryInputs[iIndex].type,true),
+    	                            '_id':true,
+    	                            'tooltip':dss.staticDataModel.getTooltipForState(oDevice.binaryInputs[iIndex].type,true),
+    	                            'icon': dss.staticDataModel.getImagePathForAKMValue(oDevice.binaryInputs[iIndex].type,true)};
+    	                    oStore.add(oItem);
+    	                }
+    	            }
+                }
 	        } else {
 	            var bIsWindowHandle = dss.staticDataModel.IsWindowHandle(oDevice);
-	            for (var iIndex=0;iIndex<oDevice.binaryInputs.length;iIndex++) {
-	                if (!bIsWindowHandle) {
-	                    var oItem={
-	                            'index':oDevice.binaryInputs[iIndex].index,
-	                            'name':dss.staticDataModel.getNameForAKMValue(oDevice.binaryInputs[iIndex].type,false),
-	                            '_id':false,
-	                            'tooltip':dss.staticDataModel.getTooltipForState(oDevice.binaryInputs[iIndex].type,false),
-	                            'icon': dss.staticDataModel.getImagePathForAKMValue(oDevice.binaryInputs[iIndex].type,false)};
-	                    oStore.add(oItem);
-	
-	                    oItem={
-	                            'index':oDevice.binaryInputs[iIndex].index,
-	                            'name':dss.staticDataModel.getNameForAKMValue(oDevice.binaryInputs[iIndex].type,true),
-	                            '_id':true,
-	                            'tooltip':dss.staticDataModel.getTooltipForState(oDevice.binaryInputs[iIndex].type,true),
-	                            'icon': dss.staticDataModel.getImagePathForAKMValue(oDevice.binaryInputs[iIndex].type,true)};
-	                    oStore.add(oItem);
-	                } else {
-	                    if (oDevice.binaryInputs[iIndex].type == 15)  { // BinaryInputIDWindowTilt
-	                        var oItem={
-	                                'name':dss.staticDataModel.getNameForAKMValue(oDevice.binaryInputs[iIndex].type,dss.whState.WH_Closed),
-	                                '_id':dss.whState.WH_Closed,
-	                                'tooltip':dss.staticDataModel.getTooltipForState(oDevice.binaryInputs[iIndex].type,dss.whState.WH_Closed),
-	                                'icon': dss.staticDataModel.getImagePathForAKMValue(oDevice.binaryInputs[iIndex].type,dss.whState.WH_Closed),
-	                                'index':oDevice.binaryInputs[iIndex].index};
-	                        oStore.add(oItem);
-	                        oItem={
-	                                'name':dss.staticDataModel.getNameForAKMValue(oDevice.binaryInputs[iIndex].type,dss.whState.WH_Open),
-	                                '_id':dss.whState.WH_Open,
-	                                'tooltip':dss.staticDataModel.getTooltipForState(oDevice.binaryInputs[iIndex].type,dss.whState.WH_Open),
-	                                'icon': dss.staticDataModel.getImagePathForAKMValue(oDevice.binaryInputs[iIndex].type,dss.whState.WH_Open),
-	                                'index':oDevice.binaryInputs[iIndex].index};
-	                        oStore.add(oItem);
-	                        oItem={
-	                                'name':dss.staticDataModel.getNameForAKMValue(oDevice.binaryInputs[iIndex].type,dss.whState.WH_Tilted),
-	                                '_id':dss.whState.WH_Tilted,
-	                                'tooltip':dss.staticDataModel.getTooltipForState(oDevice.binaryInputs[iIndex].type,dss.whState.WH_Tilted),
-	                                'icon': dss.staticDataModel.getImagePathForAKMValue(oDevice.binaryInputs[iIndex].type,dss.whState.WH_Tilted),
-	                                'index':oDevice.binaryInputs[iIndex].index};
-	                        oStore.add(oItem);
-	                    }
-	                }
-	            }
+                if (oDevice.binaryInputs) {
+    	            for (var iIndex=0;iIndex<oDevice.binaryInputs.length;iIndex++) {
+    	                if (!bIsWindowHandle) {
+    	                    var oItem={
+    	                            'index':oDevice.binaryInputs[iIndex].index,
+    	                            'name':dss.staticDataModel.getNameForAKMValue(oDevice.binaryInputs[iIndex].type,false),
+    	                            '_id':false,
+    	                            'tooltip':dss.staticDataModel.getTooltipForState(oDevice.binaryInputs[iIndex].type,false),
+    	                            'icon': dss.staticDataModel.getImagePathForAKMValue(oDevice.binaryInputs[iIndex].type,false)};
+    	                    oStore.add(oItem);
+
+    	                    oItem={
+    	                            'index':oDevice.binaryInputs[iIndex].index,
+    	                            'name':dss.staticDataModel.getNameForAKMValue(oDevice.binaryInputs[iIndex].type,true),
+    	                            '_id':true,
+    	                            'tooltip':dss.staticDataModel.getTooltipForState(oDevice.binaryInputs[iIndex].type,true),
+    	                            'icon': dss.staticDataModel.getImagePathForAKMValue(oDevice.binaryInputs[iIndex].type,true)};
+    	                    oStore.add(oItem);
+    	                } else {
+    	                    if (oDevice.binaryInputs[iIndex].type == 15)  { // BinaryInputIDWindowTilt
+    	                        var oItem={
+    	                                'name':dss.staticDataModel.getNameForAKMValue(oDevice.binaryInputs[iIndex].type,dss.whState.WH_Closed),
+    	                                '_id':dss.whState.WH_Closed,
+    	                                'tooltip':dss.staticDataModel.getTooltipForState(oDevice.binaryInputs[iIndex].type,dss.whState.WH_Closed),
+    	                                'icon': dss.staticDataModel.getImagePathForAKMValue(oDevice.binaryInputs[iIndex].type,dss.whState.WH_Closed),
+    	                                'index':oDevice.binaryInputs[iIndex].index};
+    	                        oStore.add(oItem);
+    	                        oItem={
+    	                                'name':dss.staticDataModel.getNameForAKMValue(oDevice.binaryInputs[iIndex].type,dss.whState.WH_Open),
+    	                                '_id':dss.whState.WH_Open,
+    	                                'tooltip':dss.staticDataModel.getTooltipForState(oDevice.binaryInputs[iIndex].type,dss.whState.WH_Open),
+    	                                'icon': dss.staticDataModel.getImagePathForAKMValue(oDevice.binaryInputs[iIndex].type,dss.whState.WH_Open),
+    	                                'index':oDevice.binaryInputs[iIndex].index};
+    	                        oStore.add(oItem);
+    	                        oItem={
+    	                                'name':dss.staticDataModel.getNameForAKMValue(oDevice.binaryInputs[iIndex].type,dss.whState.WH_Tilted),
+    	                                '_id':dss.whState.WH_Tilted,
+    	                                'tooltip':dss.staticDataModel.getTooltipForState(oDevice.binaryInputs[iIndex].type,dss.whState.WH_Tilted),
+    	                                'icon': dss.staticDataModel.getImagePathForAKMValue(oDevice.binaryInputs[iIndex].type,dss.whState.WH_Tilted),
+    	                                'index':oDevice.binaryInputs[iIndex].index};
+    	                        oStore.add(oItem);
+    	                    }
+    	                }
+    	            }
+                }
 	        }
         }
         this.grids.lvlDeviceAKMValue = Ext.create('Ext.grid.Panel', {
@@ -1897,7 +1942,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
             autoScroll : true,
             viewConfig : {
                 stripeRows : true
-            },           
+            },
             store : oStore,
             columns : [ {
                 sortable : false,
@@ -1914,11 +1959,11 @@ Ext.define('DSS.component.TriggerConfigurator', {
         		me.fireEvent('valueDoubleClicked', me);
         });
 
-        
+
         this.grids.lvlDeviceAKMValue.parent = this;
 
         this.macPanel.add(this.grids.lvlDeviceAKMValue);
-    }, 
+    },
     constructGridLvlDeviceAKMs : function(zoneID) {
         var oDeviceControlStore = Ext.create('Ext.data.Store', {
             fields : [ 'dSID', 'dSUID', {name:'name',sortType:'asUCText'}, 'icon', 'present','type' ],
@@ -1941,7 +1986,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
                 	if (oDevice.specialActions.triggers!=null)
                 		if (oDevice.specialActions.triggers.binaryInputs!=null) {
                 			var typeArray=[];
-                			for (var sKey in oDevice.specialActions.triggers.binaryInputs) 	                			
+                			for (var sKey in oDevice.specialActions.triggers.binaryInputs)
 	                			if (typeArray.indexOf(oDevice.specialActions.triggers.binaryInputs[sKey].id)==-1) {
 	                				var oObject={
 	                					dSUID:oNewRecord.get('dSUID'),
@@ -1957,16 +2002,18 @@ Ext.define('DSS.component.TriggerConfigurator', {
                 		}
                 if (!fSkip) {
 	                if (dss.staticDataModel.getDeviceType(oDevice) == 10 /*TNY*/) {
-	                    for (var kIndex=0;kIndex<oDevice.binaryInputs.length;kIndex++) {
-	                            type=oDevice.binaryInputs[kIndex].type;
-	                            if (type!=255) {
-	                                var oInput = oNewRecord.copy();
-	                                var typeName = dss.staticDataModel.getNameForAKMType(type);
-	                                oInput.data.name = typeName;
-	                                oInput.data.type = type;
-	                                oDeviceControlStore.add(oInput);
-	                            }
-	                    }
+                        if (oDevice.binaryInputs) {
+    	                    for (var kIndex=0;kIndex<oDevice.binaryInputs.length;kIndex++) {
+    	                            type=oDevice.binaryInputs[kIndex].type;
+    	                            if (type!=255) {
+    	                                var oInput = oNewRecord.copy();
+    	                                var typeName = dss.staticDataModel.getNameForAKMType(type);
+    	                                oInput.data.name = typeName;
+    	                                oInput.data.type = type;
+    	                                oDeviceControlStore.add(oInput);
+    	                            }
+    	                    }
+                        }
 	                } else {
 	                	oDeviceControlStore.add(oNewRecord);
 	                }
@@ -2054,7 +2101,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
             this.parent.macPanel.remove(this.parent.grids.lvlAKMDevice);
             this.parent.macPanel.remove(this.parent.grids.lvlUserstate);
             this.parent.macPanel.remove(this.parent.grids.lvlUserstateValue);
-            this.parent.macPanel.remove(this.parent.grids.lvlDeviceActionClass);            
+            this.parent.macPanel.remove(this.parent.grids.lvlDeviceActionClass);
             this.parent.macPanel.remove(this.parent.grids.lvlDeviceEventEvent);
             this.parent.macPanel.remove(this.parent.grids.lvlDeviceActionAction);
             var zoneID = record.get('ZoneID');
@@ -2080,7 +2127,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
         if (oDeviceObject.specialActions.triggers!=null) {
             if (oDeviceObject.specialActions.triggers.deviceMsg!=null) {
             	fSpecial=true;
-            	for (var sKey in oDeviceObject.specialActions.triggers.deviceMsg) {            		
+            	for (var sKey in oDeviceObject.specialActions.triggers.deviceMsg) {
                 	oDeviceActionControlStore.add({
                         _id : oDeviceObject.specialActions.triggers.deviceMsg[sKey].id,
                         name : oDeviceObject.specialActions.triggers.deviceMsg[sKey].name,
@@ -2089,10 +2136,10 @@ Ext.define('DSS.component.TriggerConfigurator', {
                         type:'deviceMSG'
                    });
             	}
-            } 
+            }
             if (oDeviceObject.specialActions.triggers.deviceAction!=null) {
             	fSpecial=true;
-            	for (var sKey in oDeviceObject.specialActions.triggers.deviceAction) {            		
+            	for (var sKey in oDeviceObject.specialActions.triggers.deviceAction) {
                 	oDeviceActionControlStore.add({
                         _id : oDeviceObject.specialActions.triggers.deviceAction[sKey].id,
                         name : oDeviceObject.specialActions.triggers.deviceAction[sKey].name,
@@ -2101,10 +2148,10 @@ Ext.define('DSS.component.TriggerConfigurator', {
                         type:'deviceMSG'
                    });
             	}
-            } 
+            }
             if (oDeviceObject.specialActions.triggers.deviceActions!=null) {
             	fSpecial=true;
-            	for (var sKey in oDeviceObject.specialActions.triggers.deviceActions) {            		
+            	for (var sKey in oDeviceObject.specialActions.triggers.deviceActions) {
                 	oDeviceActionControlStore.add({
                         _id : oDeviceObject.specialActions.triggers.deviceActions[sKey].action,
                         name : oDeviceObject.specialActions.triggers.deviceActions[sKey].name,
@@ -2113,7 +2160,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
                         type:'deviceMSG'
                    });
             	}
-            } 
+            }
         }
         if (!fSpecial)
         	if (oDeviceObject.tasterMode == 15) {
@@ -2183,8 +2230,8 @@ Ext.define('DSS.component.TriggerConfigurator', {
                     next : false,
                     type:'deviceMSG'
                 });
-            	
-                
+
+
                 oDeviceActionControlStore.add({
                     _id : 1200,
                     name : _('1x click upper switch'),
@@ -2220,9 +2267,9 @@ Ext.define('DSS.component.TriggerConfigurator', {
                     next : false,
                     type:'deviceMSG'
                 });
-            	
-                
-            } else {                        
+
+
+            } else {
                 oDeviceActionControlStore.add({
                     _id : 0,
                     name : _('1x click'),
@@ -2282,7 +2329,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
             });
         }
         var width=(this.getWidth()-(this.iDefaultWidth*4))-2;
-        if (this.grids.lvlDeviceActionClass.store.count()==1) 
+        if (this.grids.lvlDeviceActionClass.store.count()==1)
        	 width+=this.iDefaultWidth;
         this.grids.lvlDeviceAction = Ext.create('Ext.grid.Panel', {
             hideHeaders:true,
@@ -2312,12 +2359,12 @@ Ext.define('DSS.component.TriggerConfigurator', {
         	if (me.isValid())
         		me.fireEvent('valueDoubleClicked', me);
         });
-        
+
         this.macPanel.add(this.grids.lvlDeviceAction);
 
-    },    
+    },
     constructGridLvlAccess : function() {
-    	
+
         this.grids.lvlAccess = Ext.create('Ext.grid.Panel', {
             hideHeaders:true,
             height : this.iDefaultHeight,
@@ -2345,15 +2392,15 @@ Ext.define('DSS.component.TriggerConfigurator', {
         this.grids.lvlAccess.on('itemclick', function(grid, record) {
             if (record.get('_id') == -1) {
                 this.getSelectionModel().deselect(record);
-            }           
+            }
         });
-        
+
         var me=this;
         this.grids.lvlAccess.on('itemdblclick', function(grid, record) {
         	if (me.isValid())
         		me.fireEvent('valueDoubleClicked', me);
         });
-        
+
         this.macPanel.add(this.grids.lvlAccess);
 
     },
@@ -2390,7 +2437,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
                 this.parent.constructGridLvlSunProtection();
             }
         });
-        
+
         var me=this;
         this.grids.lvlWeather.on('itemdblclick', function(grid, record) {
         	if (me.isValid())
@@ -2428,7 +2475,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
                 this.getSelectionModel().deselect(record);
             }
         });
-        
+
         var me=this;
         this.grids.lvlSunProtection.on('itemdblclick', function(grid, record) {
         	if (me.isValid())
@@ -2447,13 +2494,15 @@ Ext.define('DSS.component.TriggerConfigurator', {
 			        }
 			    }
 		});
-        	 
+
     	var oState=null;
-    	for (var iIndex=0;iIndex<dss.staticDataModel.userStates.length;iIndex++) {
-    		if (dss.staticDataModel.userStates[iIndex].name==stateID) {
-    			oState = dss.staticDataModel.userStates[iIndex];
-    		}
-    	}
+        if (dss.staticDataModel.userStates) {
+        	for (var iIndex=0;iIndex<dss.staticDataModel.userStates.length;iIndex++) {
+        		if (dss.staticDataModel.userStates[iIndex].name==stateID) {
+        			oState = dss.staticDataModel.userStates[iIndex];
+        		}
+        	}
+        }
     	if (oState!=null) {
 	        var oItem={
 	        	_id: 'active',
@@ -2467,8 +2516,8 @@ Ext.define('DSS.component.TriggerConfigurator', {
 	            passive: false};
 	        oAddonStateStore.add(oItem);
     	}
-    		
-    	
+
+
         this.grids.lvlUserstateValue = Ext.create('Ext.grid.Panel', {
             hideHeaders:true,
             height : this.iDefaultHeight,
@@ -2496,15 +2545,15 @@ Ext.define('DSS.component.TriggerConfigurator', {
         this.grids.lvlUserstateValue.on('itemclick', function(grid, record) {
             if (record.get('_id') == -1) {
                 this.getSelectionModel().deselect(record);
-            }           
+            }
         });
-        
+
         var me=this;
         this.grids.lvlUserstateValue.on('itemdblclick', function(grid, record) {
         	if (me.isValid())
         		me.fireEvent('valueDoubleClicked', me);
         });
-        
+
         this.macPanel.add(this.grids.lvlUserstateValue);
     },
     constructGridLvlUserstate : function() {
@@ -2537,8 +2586,8 @@ Ext.define('DSS.component.TriggerConfigurator', {
         	this.parent.macPanel.remove(this.parent.grids.lvlUserstateValue);
             this.parent.constructGridLvlUserstateValue(record.get('_id') );
         });
-        
-      
+
+
         this.macPanel.add(this.grids.lvlUserstate);
     },
     constructGridLvlPanic : function() {
@@ -2570,15 +2619,15 @@ Ext.define('DSS.component.TriggerConfigurator', {
         this.grids.lvlPanic.on('itemclick', function(grid, record) {
             if (record.get('_id') == -1) {
                 this.getSelectionModel().deselect(record);
-            }           
+            }
         });
-        
+
         var me=this;
         this.grids.lvlPanic.on('itemdblclick', function(grid, record) {
         	if (me.isValid())
         		me.fireEvent('valueDoubleClicked', me);
         });
-        
+
         this.macPanel.add(this.grids.lvlPanic);
     },
     constructGridLvlDeviceActionClass: function(dSUID) {
@@ -2598,14 +2647,14 @@ Ext.define('DSS.component.TriggerConfigurator', {
 
         var dsidActions=false;
         if (((oDevice.tasterMode == 0) && (oDevice.buttonType != 65))||(oDevice.tasterMode==15))
-        	dsidActions=true;      
-        
+        	dsidActions=true;
+
         if (oDevice.deviceEvents!=null)
     		if (Object.keys(oDevice.deviceEvents).length>0) {
     			oDeviceControlStore.add({_id:1,name:_('device events'),dsuid:dSUID});
     			dsidActions=false;
     		}
-        
+
         var actions=false;
         if (oDevice.deviceCustomActions!=null)
     		if (Object.keys(oDevice.deviceCustomActions).length>0)
@@ -2633,11 +2682,11 @@ Ext.define('DSS.component.TriggerConfigurator', {
             	if (oDevice.specialActions.triggers.deviceMsg!=null)
             		dsidActions=true;
             	if (oDevice.specialActions.triggers.deviceAction!=null)
-            		dsidActions=true;                        	
+            		dsidActions=true;
         	}
         if (dsidActions)
         	oDeviceControlStore.add({_id:4,name:_('taster action'),dsuid:dSUID});
-        
+
         this.grids.lvlDeviceActionClass = Ext.create('Ext.grid.Panel', {
             hideHeaders:true,
             height : this.iDefaultHeight,
@@ -2673,7 +2722,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
         		this.parent.constructGridLvlDeviceActionAction(dSUID);
             	break;
         	case 3: //device states
-        		this.parent.constructGridLvlDeviceStateValue(dSUID,record.get('type')); 
+        		this.parent.constructGridLvlDeviceStateValue(dSUID,record.get('type'));
             	break;
         	case 4: //device messages
         		this.parent.constructGridLvlDeviceActions(dSUID);
@@ -2688,12 +2737,12 @@ Ext.define('DSS.component.TriggerConfigurator', {
             switch (oRecordDeviceClass.get('_id')) {
             	case 1: //device events
             		this.constructGridLvlDeviceEventEvent(dSUID);
-            		return true;                	
+            		return true;
             	case 2: // device actions
             		this.constructGridLvlDeviceActionAction(dSUID);
             		return true;
             	case 3: //device states
-            		this.constructGridLvlDeviceStateValue(dSUID,record.get('type')); 
+            		this.constructGridLvlDeviceStateValue(dSUID,record.get('type'));
             		return true;
             	case 4: //device messages
             		this.constructGridLvlDeviceActions(dSUID);
@@ -2718,10 +2767,13 @@ Ext.define('DSS.component.TriggerConfigurator', {
         oDeviceStore.each(function(record) {
             var oNewRecord = record.copy();
             var fAKM=false;
-            for (var iIndex=0;iIndex<dss.staticDataModel.getAKMDeviceArray().length;iIndex++) {
-            	if (oNewRecord.get('dSUID')==dss.staticDataModel.getAKMDeviceArray()[iIndex].dSUID)
-            		fAKM=true;
-            }            
+            var akmDeviceArray = dss.staticDataModel.getAKMDeviceArray();
+            if (akmDeviceArray) {
+                for (var iIndex=0;iIndex<akmDeviceArray.length;iIndex++) {
+                	if (oNewRecord.get('dSUID')==akmDeviceArray[iIndex].dSUID)
+                		fAKM=true;
+                }
+            }
             if (!fAKM)
                 if ((oNewRecord.get('present'))||me.fIgnorePresence)
                     oDeviceControlStore.add(oNewRecord);
@@ -2755,7 +2807,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
             this.parent.macPanel.remove(this.parent.grids.lvlDeviceScene);
             this.parent.macPanel.remove(this.parent.grids.lvlDeviceStateValue);
 
-            
+
             var dSID = record.get('dSID');
             var dSUID = record.get('dSUID');
             this.parent.constructGridLvlDeviceActionClass(dSUID);
@@ -2781,7 +2833,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
             zoneID=0;
         var oSceneStore = this.getSceneStore(zoneID, groupID);
         if ((zoneID==0) && (groupID>63)) {
-        	
+
         } else {
 	        oSceneControlStore.add({
 	            _id : -3,
@@ -2790,7 +2842,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
 	            reachable : true,
 	            checkable : true,
 	            checked : fAll
-	
+
 	        });
 	        oSceneControlStore.add({
 	            _id : -1,
@@ -2806,7 +2858,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
                 if (oNewRecord.get('_id') < 64)
                     oSceneControlStore.add(oNewRecord);
         });
-       
+
         this.grids.lvlScene = Ext.create('Ext.grid.Panel', {
             hideHeaders:true,
             height : this.iDefaultHeight,
@@ -2836,8 +2888,8 @@ Ext.define('DSS.component.TriggerConfigurator', {
         	if (me.isValid())
         		me.fireEvent('valueDoubleClicked', me);
         });
-        
-        
+
+
         this.grids.lvlScene.on('itemclick', function(grid, record) {
             if (record.get('_id') == -1) {
                 this.getSelectionModel().deselect(record);
@@ -2923,7 +2975,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
                 hideable : false,
                 text : _('room'),
                 dataIndex : 'name',
-                flex : 1,                
+                flex : 1,
                 renderer : function(val, metadata, record, colIdx, store, view) {
                     return '<table style="height:16px;width:100%"><tr><td width="100%">' + record.get('name') + '</td><td>&gt;</td></tr></table>';
                 }
@@ -2939,7 +2991,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
                 zoneID = 0;
             this.parent.constructGridLvlGroup(zoneID);
         });
-        
+
         var me=this;
         this.grids.lvlRoomRoom.on('itemdblclick', function(grid, record) {
         	if (me.isValid())
@@ -2987,7 +3039,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
                 hideable : false,
                 text : _('room'),
                 dataIndex : 'name',
-                flex : 1,                
+                flex : 1,
                 renderer : function(val, metadata, record, colIdx, store, view) {
                     return '<table style="height:16px;width:100%"><tr><td width="100%">' + record.get('name') + '</td><td>&gt;</td></tr></table>';
                 }
@@ -3009,7 +3061,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
                 zoneID = 0;
             this.parent.constructGridLvlDevice(zoneID);
         });
-        
+
         var me=this;
         this.grids.lvlDeviceRoom.on('itemdblclick', function(grid, record) {
         	if (me.isValid())
@@ -3028,14 +3080,14 @@ Ext.define('DSS.component.TriggerConfigurator', {
                 }
             }
         });
-        if (dss.staticDataModel.HLECache!=null)
-            if (dss.staticDataModel.HLECache.length>0) {
-                for (var iIndex=0;iIndex<dss.staticDataModel.HLECache.length;iIndex++)
-                    oStore.add( {   
-                        name:dss.staticDataModel.HLECache[iIndex].name,
-                        _id:dss.staticDataModel.HLECache[iIndex].id
-                    });
+        if (dss.staticDataModel.HLECache) {
+            for (var iIndex=0;iIndex<dss.staticDataModel.HLECache.length;iIndex++) {
+                oStore.add( {
+                    name:dss.staticDataModel.HLECache[iIndex].name,
+                    _id:dss.staticDataModel.HLECache[iIndex].id
+                });
             }
+        }
         oStore.sort('name','ASC');
         this.grids.lvlHighLevelEvent = Ext.create('Ext.grid.Panel', {
             hideHeaders:true,
@@ -3061,8 +3113,8 @@ Ext.define('DSS.component.TriggerConfigurator', {
             } ]
         });
         this.grids.lvlHighLevelEvent.parent = this;
-        
-        
+
+
         var me=this;
         this.grids.lvlHighLevelEvent.on('itemdblclick', function(grid, record) {
         	if (me.isValid())
@@ -3101,7 +3153,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
 	            	case 22:
 	            	case 23:
 		            	fOK=false;
-		            	break; 
+		            	break;
             	}
                 if (fOK) {
                     oGroupControlStore.add(oNewRecord);
@@ -3171,7 +3223,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
                 }
             }
         });
-        
+
         var me=this;
         this.grids.lvlGroup.on('itemdblclick', function(grid, record) {
         	if (me.isValid())
@@ -3198,7 +3250,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
             var oNewRecord = record.copy();
             oStore.add(oNewRecord);
         });
-        
+
         this.grids.lvlSensorMessage = Ext.create('Ext.grid.Panel', {
             hideHeaders:true,
             height : this.iDefaultHeight,
@@ -3224,13 +3276,13 @@ Ext.define('DSS.component.TriggerConfigurator', {
         });
         this.grids.lvlSensorMessage.parent = this;
         this.macPanel.add(this.grids.lvlSensorMessage);
-        
+
         var me=this;
         this.grids.lvlSensorMessage.on('itemdblclick', function(grid, record) {
         	if (me.isValid())
         		me.fireEvent('valueDoubleClicked', me);
         });
-        
+
     },
     constructGridLvlSensorDevice:function(zoneID) {
         var oDeviceControlStore = Ext.create('Ext.data.Store', {
@@ -3350,7 +3402,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
 	                }
 	            }
 	        });
-	
+
 	        lvl1Store = Ext.data.StoreManager.lookup('triggerConfigurator_l1Store');
 	        lvl1Store.each(function(record) {
 	            var oNewRecord = record.copy();
@@ -3379,7 +3431,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
 	        });
 	        this.grids.lvl1.getSelectionModel().store = this.grids.lvl1.store;
 	        this.grids.lvl1.parent = this;
-	
+
 	        this.grids.lvl1.on('itemclick', function(grid, record) {
 	            this.parent.macPanel.remove(this.parent.grids.lvlDeviceAction);
 	            this.parent.macPanel.remove(this.parent.grids.lvlRoomRoom);
@@ -3390,7 +3442,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
 	            this.parent.macPanel.remove(this.parent.grids.lvlDevice);
 	            this.parent.macPanel.remove(this.parent.grids.lvlSensorRoom);
 	            this.parent.macPanel.remove(this.parent.grids.lvlSensorDevice);
-	            this.parent.macPanel.remove(this.parent.grids.lvlSensorMessage);            
+	            this.parent.macPanel.remove(this.parent.grids.lvlSensorMessage);
 	            this.parent.macPanel.remove(this.parent.grids.lvlWeather);
 	            this.parent.macPanel.remove(this.parent.grids.lvlPanic);
 	            this.parent.macPanel.remove(this.parent.grids.lvlAccess);
@@ -3412,7 +3464,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
                 this.parent.macPanel.remove(this.parent.grids.lvlDeviceEventEvent);
                 this.parent.macPanel.remove(this.parent.grids.lvlDeviceActionAction);
 
-                
+
 	            var fIsPassive=false;
 	            if (record.get('passive')!=null) {
 	                if (record.get('passive')==true) {
@@ -3459,11 +3511,11 @@ Ext.define('DSS.component.TriggerConfigurator', {
 	                    this.parent.constructGridLvlUserstate();
 	                } else if (record.get('_id') == 9) {
 	                    this.getSelectionModel().deselectAll();
-	                    this.getSelectionModel().select(record);	                    
+	                    this.getSelectionModel().select(record);
 	                    this.parent.constructGridLvlRoomStateRoom();
 	                } else if (record.get('_id') == 10) {
 	                    this.getSelectionModel().deselectAll();
-	                    this.getSelectionModel().select(record);	                    
+	                    this.getSelectionModel().select(record);
 	                    this.parent.constructGridLvlDeviceStateRoom();
 	                } else if (record.get('_id') == 11) {
 	                    this.getSelectionModel().deselectAll();
@@ -3477,10 +3529,10 @@ Ext.define('DSS.component.TriggerConfigurator', {
 	                }
 	            }
 	            this.parent.macPanel.doLayout();
-	        }); 
+	        });
     	} else {
         	this.grids.lvl1.getStore().removeAll();
-        	var mThis=this;        	
+        	var mThis=this;
 	        lvl1Store = Ext.data.StoreManager.lookup('triggerConfigurator_l1Store');
 	        lvl1Store.each(function(record) {
 	            var oNewRecord = record.copy();
@@ -3496,11 +3548,11 @@ Ext.define('DSS.component.TriggerConfigurator', {
         this.fEnableUsergroup=false;
         if (config.enableUsergroup!=null)
         	this.fEnableUsergroup=config.enableUsergroup;
-        
+
     	this.ShowUserstates=true;
         if (config.userStates)
         	this.ShowUserstates=config.userStates;
-        
+
         this.fHeatingOperationMode=false;
         if (config.heatingOperationMode!=null)
         	this.fHeatingOperationMode=config.heatingOperationMode;
@@ -3509,9 +3561,9 @@ Ext.define('DSS.component.TriggerConfigurator', {
         if (config.ignorePresence!=null)
         	this.fIgnorePresence=config.ignorePresence;
 
-        
+
         Ext.data.StoreManager.on('clear',function () {mThis.initStores(mThis.ShowUserstates);mThis.constructMacGrids();});
-        
+
         this.initStores(this.ShowUserstates);
         this.constructMacGrids();
 
@@ -3548,7 +3600,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
         this.macPanel.remove(this.grids.lvlSensorMessage);
         this.macPanel.remove(this.grids.lvlWeather);
         this.macPanel.remove(this.grids.lvlPanic);
-        this.macPanel.remove(this.grids.lvlAccess);        
+        this.macPanel.remove(this.grids.lvlAccess);
         this.macPanel.remove(this.grids.lvlDeviceAKMValue);
         this.macPanel.remove(this.grids.lvlAKMDevice);
         this.macPanel.remove(this.grids.lvlAKMRoom);
@@ -3567,7 +3619,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
         this.macPanel.remove(this.grids.lvlDeviceEventEvent);
         this.macPanel.remove(this.grids.lvlDeviceActionAction);
 
-        
+
         var fGridConstructed = false;
 
         this.grids.lvl1.getSelectionModel().deselectAll();
@@ -3576,7 +3628,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
         {
         	return;
         }
-        
+
         for ( var vIndex = 0; vIndex < values.length; vIndex++) {
             var oValue = values[vIndex];
             switch (oValue.type) {
@@ -3588,7 +3640,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
 	                    var oRecordZone = this.grids.lvlDeviceRoom.store.find('ZoneID', zoneID,0,false,false,true);
 	                    if (oRecordZone != -1)
 	                        this.grids.lvlDeviceRoom.getSelectionModel().select(oRecordZone);
-	                    else 
+	                    else
 	                        break;
 	                    this.constructGridLvlDevice(zoneID);
 	                    var oRecordDevice = this.grids.lvlDevice.store.find('dSUID', oValue.dsuid,0,false,false,true);
@@ -3617,7 +3669,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
 	                    var oRecordZone = this.grids.lvlDeviceRoom.store.find('ZoneID', zoneID,0,false,false,true);
 	                    if (oRecordZone != -1)
 	                        this.grids.lvlDeviceRoom.getSelectionModel().select(oRecordZone);
-	                    else 
+	                    else
 	                        break;
 	                    this.constructGridLvlDevice(zoneID);
 	                    var oRecordDevice = this.grids.lvlDevice.store.find('dSUID', oValue.dsuid,0,false,false,true);
@@ -3626,11 +3678,11 @@ Ext.define('DSS.component.TriggerConfigurator', {
                         else
                             break;
                         var fConstructed=this.constructGridLvlDeviceActionClass(oValue.dsuid);
-	                    
+
 	                    var oRecordDevice = this.grids.lvlDeviceActionClass.store.find('_id', 2,0,false,false,true);
 	                    if (oRecordDevice != -1)
 	                        this.grids.lvlDeviceActionClass.getSelectionModel().select(oRecordDevice);
-	                    else 
+	                    else
 	                        break;
 	                    if (!fConstructed)
 	                    this.constructGridLvlDeviceActionAction(oValue.dsuid);
@@ -3642,18 +3694,18 @@ Ext.define('DSS.component.TriggerConfigurator', {
                 case 'device-sensor':
                     var zoneID = dss.staticDataModel.getDevice(oValue.dsuid).ZoneID;
                     if (!fGridConstructed) {
-                    	this.grids.lvl1.getSelectionModel().select(this.grids.lvl1.store.find('_id',3,false,false,true),true);                    	
+                    	this.grids.lvl1.getSelectionModel().select(this.grids.lvl1.store.find('_id',3,false,false,true),true);
                         this.constructGridLvlSensor();
                         var oRecordZone = this.grids.lvlSensorRoom.store.find('ZoneID', zoneID,0,false,false,true);
                         if (oRecordZone != -1)
                             this.grids.lvlSensorRoom.getSelectionModel().select(oRecordZone);
-                        else 
+                        else
                             break;
                         this.constructGridLvlSensorDevice(zoneID);
                         var oRecordDevice = this.grids.lvlSensorDevice.store.find('dSUID', oValue.dsuid,0,false,false,true);
                         if (oRecordDevice != -1)
                             this.grids.lvlSensorDevice.getSelectionModel().select(oRecordDevice);
-                        else 
+                        else
                             break;
                         this.constructGridLvlSensorMessage(oValue.dsuid);
                     }
@@ -3665,7 +3717,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
                 case 'device-binary-input':
                     var zoneID = dss.staticDataModel.getDevice(oValue.dsuid).ZoneID;
                     if (!fGridConstructed) {
-                    	this.grids.lvl1.getSelectionModel().select(this.grids.lvl1.store.find('_id',1,false,false,true),true);                    	
+                    	this.grids.lvl1.getSelectionModel().select(this.grids.lvl1.store.find('_id',1,false,false,true),true);
                         this.constructGridLvlRoom();
                         var oRecordZone = this.grids.lvlDeviceRoom.store.find('ZoneID', zoneID,0,false,false,true);
                         if (oRecordZone != -1)
@@ -3681,22 +3733,22 @@ Ext.define('DSS.component.TriggerConfigurator', {
                         this.constructGridLvlDeviceActions(oValue.dsuid);
                     }
                      if (oValue.state==1) {
-                        var iIndex = this.grids.lvlDeviceAction.store.find('_id', 1002,0,false,false,true);      
+                        var iIndex = this.grids.lvlDeviceAction.store.find('_id', 1002,0,false,false,true);
                         if (iIndex!=-1)
                             this.grids.lvlDeviceAction.getSelectionModel().select(iIndex,true);
                     }
                     if (oValue.state==0) {
-                        var iIndex = this.grids.lvlDeviceAction.store.find('_id', 1003,0,false,false,true);      
+                        var iIndex = this.grids.lvlDeviceAction.store.find('_id', 1003,0,false,false,true);
                         if (iIndex!=-1)
                             this.grids.lvlDeviceAction.getSelectionModel().select(iIndex,true);
                     }
-                    
+
                 break;
                 case 'device-action':
                 case 'device-msg':
                     var zoneID = dss.staticDataModel.getDevice(oValue.dsuid).ZoneID;
                     if (!fGridConstructed) {
-                    	this.grids.lvl1.getSelectionModel().select(this.grids.lvl1.store.find('_id',1,false,false,true),true);                    	
+                    	this.grids.lvl1.getSelectionModel().select(this.grids.lvl1.store.find('_id',1,false,false,true),true);
 
                         this.constructGridLvlDeviceRoom();
                         var oRecordZone = this.grids.lvlDeviceRoom.store.find('ZoneID', zoneID,0,false,false,true);
@@ -3726,17 +3778,17 @@ Ext.define('DSS.component.TriggerConfigurator', {
                     } else
                     if ((oValue.msg == 0) && (oValue.buttonIndex!=null)) {
                         if (oValue.buttonIndex==2) {
-                            var iIndex = this.grids.lvlDeviceAction.store.find('_id', 1000,0,false,false,true);      
+                            var iIndex = this.grids.lvlDeviceAction.store.find('_id', 1000,0,false,false,true);
                             if (iIndex!=-1)
                                 this.grids.lvlDeviceAction.getSelectionModel().select(iIndex,true);
                         }
                         if (oValue.buttonIndex==1) {
-                            var iIndex = this.grids.lvlDeviceAction.store.find('_id', 1001,0,false,false,true);      
+                            var iIndex = this.grids.lvlDeviceAction.store.find('_id', 1001,0,false,false,true);
                             if (iIndex!=-1)
                                 this.grids.lvlDeviceAction.getSelectionModel().select(iIndex,true);
                         }
                     } else if (oValue.msg == 7) {
-                        var iIndex = this.grids.lvlDeviceAction.store.find('_id', 0,0,false,false,true);      
+                        var iIndex = this.grids.lvlDeviceAction.store.find('_id', 0,0,false,false,true);
                         if (iIndex!=-1)
                             this.grids.lvlDeviceAction.getSelectionModel().select(iIndex,true);
                     } else if (oValue.msg == 8) {
@@ -3755,15 +3807,15 @@ Ext.define('DSS.component.TriggerConfigurator', {
 
                 break;
                 case 'undo-zone-scene': {
-                    if (oValue.zone == 0)                    	
+                    if (oValue.zone == 0)
                     	switch (oValue.scene) {
-		                	case 65:		                	
+		                	case 65:
 		                	case 74:
 		                	case 83:
 		                	case 84:
 		                	case 85:
 		                		if (!fGridConstructed) {
-		                        	this.grids.lvl1.getSelectionModel().select(this.grids.lvl1.store.find('_id',6,false,false,true),true);                    	
+		                        	this.grids.lvl1.getSelectionModel().select(this.grids.lvl1.store.find('_id',6,false,false,true),true);
 			                        this.constructGridLvlPanic();
 		                		}
 	                    		var oRecordScene = this.grids.lvlPanic.store.find('_id', 1000+oValue.scene,0,false,false,true);
@@ -3777,7 +3829,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
                 	if (oValue["addon-id"]=='system-addon-user-defined-states') {
                 		var stateName=oValue.name;
                 		if (!fGridConstructed) {
-                        	this.grids.lvl1.getSelectionModel().select(this.grids.lvl1.store.find('_id',8,false,false,true),true);                    	
+                        	this.grids.lvl1.getSelectionModel().select(this.grids.lvl1.store.find('_id',8,false,false,true),true);
                             this.constructGridLvlUserstate();
                 		}
                 		var oRecordScene = this.grids.lvlUserstate.store.find('_id', stateName,0,false,false,true);
@@ -3788,66 +3840,68 @@ Ext.define('DSS.component.TriggerConfigurator', {
                             if (oRecordValue != -1)
                             	this.grids.lvlUserstateValue.getSelectionModel().select(oRecordValue,true);
                         }
-                        break;                    	
+                        break;
                 	}
                 	break;
                 }
                 case 'state-change':
-                	
+
         			var idString =oValue.name;
         			var valueString=oValue.state;
         			var oUserStates=dss.staticDataModel.getUserStates();
         			var oParameter={};
         			var fSkipAfterUserstateFound=false;
-        			for (var jIndex=0;jIndex<oUserStates.length;jIndex++) {
-            			if (oUserStates[jIndex].name==idString) {
-            				if (!fGridConstructed) {
-                            	this.grids.lvl1.getSelectionModel().select(this.grids.lvl1.store.find('_id',8,false,false,true),true);                    	
-                                this.constructGridLvlUserstate();
-                    		}
-                    		var oRecordScene = this.grids.lvlUserstate.store.find('_id', idString,0,false,false,true);
-                            if (oRecordScene != -1) {
-                                this.grids.lvlUserstate.getSelectionModel().select(oRecordScene,true);
-                                this.constructGridLvlUserstateValue(idString);
-                                var oRecordValue = this.grids.lvlUserstateValue.store.find('_id', valueString,0,false,false,true);
-                                if (oRecordValue != -1)
-                                	this.grids.lvlUserstateValue.getSelectionModel().select(oRecordValue,true);
-                            }
-                            fSkipAfterUserstateFound=true;                            
-            			}
-            		}
+                    if (oUserStates) {
+            			for (var jIndex=0;jIndex<oUserStates.length;jIndex++) {
+                			if (oUserStates[jIndex].name==idString) {
+                				if (!fGridConstructed) {
+                                	this.grids.lvl1.getSelectionModel().select(this.grids.lvl1.store.find('_id',8,false,false,true),true);
+                                    this.constructGridLvlUserstate();
+                        		}
+                        		var oRecordScene = this.grids.lvlUserstate.store.find('_id', idString,0,false,false,true);
+                                if (oRecordScene != -1) {
+                                    this.grids.lvlUserstate.getSelectionModel().select(oRecordScene,true);
+                                    this.constructGridLvlUserstateValue(idString);
+                                    var oRecordValue = this.grids.lvlUserstateValue.store.find('_id', valueString,0,false,false,true);
+                                    if (oRecordValue != -1)
+                                    	this.grids.lvlUserstateValue.getSelectionModel().select(oRecordValue,true);
+                                }
+                                fSkipAfterUserstateFound=true;
+                			}
+                		}
+                    }
         			if (fSkipAfterUserstateFound)
         				break;
-                	
+
                 	if (idString.indexOf('zone.0.group')>-1) {
                 		if (idString.indexOf('zone.0.group.64')>-1) {
-                			
-                        	this.grids.lvl1.getSelectionModel().select(this.grids.lvl1.store.find('_id',0,false,false,true),true);                    	
-                            if (!fGridConstructed) {                        	
+
+                        	this.grids.lvl1.getSelectionModel().select(this.grids.lvl1.store.find('_id',0,false,false,true),true);
+                            if (!fGridConstructed) {
                                 this.constructGridLvlRoomRoom();
                                 var oRecordZone = this.grids.lvlRoomRoom.store.find('ZoneID', -1,0,false,false,true);
                                 if (oRecordZone != -1)
                                     this.grids.lvlRoomRoom.getSelectionModel().select(oRecordZone);
-                                else {                               
+                                else {
                                 	break;
-                                }                                    
+                                }
                                 this.constructGridLvlGroup(0);
                             }
                             var oRecordGroup = this.grids.lvlGroup.store.find('group', 64,0,false,false,true);
                             if (oRecordGroup != -1)
                                 this.grids.lvlGroup.getSelectionModel().select(oRecordGroup);
-                            else {                            	
+                            else {
                                 break;
                             }
                             if (!fGridConstructed) {
                                 this.constructGridLvlGroupScene(0, 64, false, false);
                             }
-                            
+
                             var oRecordScene = this.grids.lvlScene.store.find('valueandstate', oValue.name + '_' + oValue.state,0,false,false,true);
                             if (oRecordScene != -1) {
                                 this.grids.lvlScene.getSelectionModel().select(oRecordScene,true);
                             }
-                    		break;                			
+                    		break;
                 		}
                 	}
                 	//  name, state : 'active', 'inactive'
@@ -3864,7 +3918,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
 	            	                    var oRecordZone = this.grids.lvlDeviceRoom.store.find('ZoneID', oDevice.ZoneID,0,false,false,true);
 	            	                    if (oRecordZone != -1)
 	            	                        this.grids.lvlDeviceRoom.getSelectionModel().select(oRecordZone);
-	            	                    else 
+	            	                    else
 	            	                        break;
 	            	                    this.constructGridLvlDevice(oDevice.ZoneID);
 	            	                    var oRecordDevice = this.grids.lvlDevice.store.find('dSUID', oDevice.dSUID,0,false,false,true);
@@ -3878,7 +3932,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
 	                                    	if (this.grids.lvlDeviceActionClass.store.getAt(iIndex).get('_id')==3)
 	                                    		if (this.grids.lvlDeviceActionClass.store.getAt(iIndex).get('type')==oArray[2])
 	                                    			oRecordDeviceClass=iIndex;
-	                                    }	                                    
+	                                    }
 	                                    if (oRecordDeviceClass != -1)
 	                                        this.grids.lvlDeviceActionClass.getSelectionModel().select(oRecordDeviceClass);
 	                                    else
@@ -3893,7 +3947,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
 		                            break;
 	                			} else {
 		                			if (!fGridConstructed) {
-		                            	this.grids.lvl1.getSelectionModel().select(this.grids.lvl1.store.find('_id',7,false,false,true),true);                    	
+		                            	this.grids.lvl1.getSelectionModel().select(this.grids.lvl1.store.find('_id',7,false,false,true),true);
 		                                this.constructGridLvlAKM();
 			                			var oRecordZone=this.grids.lvlAKMRoom.store.find('ZoneID', oDevice.ZoneID,0,false,false,true);
 			                            if (oRecordZone != -1) {
@@ -3909,7 +3963,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
 			                                			oRecordDevice=iIndex;
 			                                	}
 			                                }
-			                                if (oRecordDevice != -1) 
+			                                if (oRecordDevice != -1)
 			                                	oRecordDevice=this.grids.lvlAKMDevice.store.find('dSUID', oArray[1],0,false,false,true);
 				                            if (oRecordDevice != -1) {
 				                            	this.grids.lvlAKMDevice.getSelectionModel().select(oRecordDevice,true);
@@ -3917,7 +3971,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
 				                            }
 			                            }
 		                			}
-		                				                			                			
+
 		                			var oRecordValue=this.grids.lvlDeviceAKMValue.store.findBy(function(record) {
 		                				if ((""+record.get('index'))==(""+oArray[2])) {
 		                					if (record.get('_id')===true)
@@ -3935,7 +3989,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
 		                				}
 		                				return false;
 		                			});
-	
+
 		                			if (oRecordValue != -1)
 		                				this.grids.lvlDeviceAKMValue.getSelectionModel().select(oRecordValue,true);
 		                			break;
@@ -3953,7 +4007,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
 	                            	var oRecordState=this.grids.lvlRoomStateState.getStore().find('valueandstate',oValue.name+'_'+oValue.state);
 	                            	if (oRecordState!=null)
 	                            		this.grids.lvlRoomStateState.getSelectionModel().select(oRecordState);
-	                            	
+
 	                            }
 	                            break;
 	                		}
@@ -3977,7 +4031,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
                 	}
                 	if (oValue.name=='fire') {
                 		if (!fGridConstructed) {
-                        	this.grids.lvl1.getSelectionModel().select(this.grids.lvl1.store.find('_id',6,false,false,true),true);                    	
+                        	this.grids.lvl1.getSelectionModel().select(this.grids.lvl1.store.find('_id',6,false,false,true),true);
                             this.constructGridLvlPanic();
                 		}
                 		var oRecordScene = this.grids.lvlPanic.store.find('_id', oValue.name + '_' + oValue.state,0,false,false,true);
@@ -3985,18 +4039,18 @@ Ext.define('DSS.component.TriggerConfigurator', {
                             this.grids.lvlPanic.getSelectionModel().select(oRecordScene,true);
                 	} else {
                 		if (!fGridConstructed) {
-                        	this.grids.lvl1.getSelectionModel().select(this.grids.lvl1.store.find('_id',5,false,false,true),true);                    	
+                        	this.grids.lvl1.getSelectionModel().select(this.grids.lvl1.store.find('_id',5,false,false,true),true);
                             this.constructGridLvlWeather();
                 		}
                 		var oRecordScene = this.grids.lvlWeather.store.find('_id', oValue.name + '_' + oValue.state,0,false,false,true);
                         if (oRecordScene != -1)
-                            this.grids.lvlWeather.getSelectionModel().select(oRecordScene,true);                		
+                            this.grids.lvlWeather.getSelectionModel().select(oRecordScene,true);
                 	}
-                	
+
                 break;
                 case 'zone-scene':
                     if (oValue.zone == 0) {
-                    	
+
                     	switch (oValue.scene) {
 	                    	case 65:
 	                    	case 74:
@@ -4004,7 +4058,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
 	                    	case 84:
 	                    	case 85:
 	                    		if (!fGridConstructed) {
-	                            	this.grids.lvl1.getSelectionModel().select(this.grids.lvl1.store.find('_id',6,false,false,true),true);                    	
+	                            	this.grids.lvl1.getSelectionModel().select(this.grids.lvl1.store.find('_id',6,false,false,true),true);
 		                            this.constructGridLvlPanic();
 	                    		}
 	                    		var oRecordScene = this.grids.lvlPanic.store.find('_id', oValue.scene,0,false,false,true);
@@ -4015,7 +4069,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
 	                    	case 72:
 	                    	case 71:
 	                    		if (!fGridConstructed) {
-	                            	this.grids.lvl1.getSelectionModel().select(this.grids.lvl1.store.find('_id',4,false,false,true),true);                    	
+	                            	this.grids.lvl1.getSelectionModel().select(this.grids.lvl1.store.find('_id',4,false,false,true),true);
 		                            this.constructGridLvlAccess();
 	                    		}
 	                    		var oRecordScene = this.grids.lvlAccess.store.find('_id', oValue.scene,0,false,false,true);
@@ -4023,21 +4077,21 @@ Ext.define('DSS.component.TriggerConfigurator', {
                                     this.grids.lvlAccess.getSelectionModel().select(oRecordScene,true);
                     		break;
                     	}
-                    	
-                    	
-                    
+
+
+
                     } else {
-                    	this.grids.lvl1.getSelectionModel().select(this.grids.lvl1.store.find('_id',0,false,false,true),true);                    	
-                        if (!fGridConstructed) {                        	
+                    	this.grids.lvl1.getSelectionModel().select(this.grids.lvl1.store.find('_id',0,false,false,true),true);
+                        if (!fGridConstructed) {
                             this.constructGridLvlRoomRoom();
                             var oRecordZone = this.grids.lvlRoomRoom.store.find('ZoneID', oValue.zone,0,false,false,true);
                             if (oRecordZone != -1)
                                 this.grids.lvlRoomRoom.getSelectionModel().select(oRecordZone);
                             else {
-                           
+
                             	break;
                             }
-                                
+
                             if (oValue.zone == -1)
                                 this.constructGridLvlGroup(0);
                             else
@@ -4048,7 +4102,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
                             if (oRecordGroup != -1)
                                 this.grids.lvlGroup.getSelectionModel().select(oRecordGroup,true);
                             else {
-                            	
+
                                 break;
                             }
                         } else {
@@ -4056,7 +4110,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
                             if (oRecordGroup != -1)
                                 this.grids.lvlGroup.getSelectionModel().select(oRecordGroup);
                             else {
-                            	
+
                                 break;
                             }
                             if (!fGridConstructed) {
@@ -4080,19 +4134,19 @@ Ext.define('DSS.component.TriggerConfigurator', {
                                 			oRecordScene++;
                                     this.grids.lvlScene.getSelectionModel().select(oRecordScene,true);
                                 } else {
-                                
+
                                     break;
                                 }
                             }
 
                         }
                     }
-                  
+
                 break;
                 case 'device-scene':
                     var zoneID = dss.staticDataModel.getDevice(oValue.dsuid).ZoneID;
                     if (!fGridConstructed) {
-                    	this.grids.lvl1.getSelectionModel().select(this.grids.lvl1.store.find('_id',1,false,false,true),true);                    	
+                    	this.grids.lvl1.getSelectionModel().select(this.grids.lvl1.store.find('_id',1,false,false,true),true);
                         this.constructGridLvlDeviceRoom();
                         var oRecordZone = this.grids.lvlDeviceRoom.store.find('ZoneID', zoneID,0,false,false,true);
                         if (oRecordZone != -1)
@@ -4103,9 +4157,9 @@ Ext.define('DSS.component.TriggerConfigurator', {
                         var oRecordDevice = this.grids.lvlDevice.store.find('dSUID', oValue.dsuid,0,false,false,true);
                         if (oRecordDevice != -1)
                             this.grids.lvlDevice.getSelectionModel().select(oRecordDevice);
-                        else 
+                        else
                             break;
-                        
+
                         var fConstructed = this.constructGridLvlDeviceActionClass(oValue.dsuid);
 	                    var oRecordDeviceClass = this.grids.lvlDeviceActionClass.store.find('_id', 4,0,false,false,true);
                         if (oRecordDeviceClass != -1)
@@ -4124,17 +4178,17 @@ Ext.define('DSS.component.TriggerConfigurator', {
                     		if (oDevice.buttonType==65) {
                     			switch (oValue.scene) {
                 				case 15:
-                					 var iIndex = this.grids.lvlDeviceAction.store.find('_id', 1004,0,false,false,true);      
+                					 var iIndex = this.grids.lvlDeviceAction.store.find('_id', 1004,0,false,false,true);
                                      if (iIndex!=-1)
                                          this.grids.lvlDeviceAction.getSelectionModel().select(iIndex,true);
                     				break;
                 				case 50:
-                					 var iIndex = this.grids.lvlDeviceAction.store.find('_id', 1006,0,false,false,true);      
+                					 var iIndex = this.grids.lvlDeviceAction.store.find('_id', 1006,0,false,false,true);
                                      if (iIndex!=-1)
                                          this.grids.lvlDeviceAction.getSelectionModel().select(iIndex,true);
                     				break;
                 				case 51:
-                					 var iIndex = this.grids.lvlDeviceAction.store.find('_id', 1005,0,false,false,true);      
+                					 var iIndex = this.grids.lvlDeviceAction.store.find('_id', 1005,0,false,false,true);
                                      if (iIndex!=-1)
                                          this.grids.lvlDeviceAction.getSelectionModel().select(iIndex,true);
                     				break;
@@ -4146,7 +4200,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
                 case 'custom-event':
                     if (!fGridConstructed)
                         this.constructGridLvlHigh();
-                	this.grids.lvl1.getSelectionModel().select(this.grids.lvl1.store.find('_id',2,false,false,true),true);                    	
+                	this.grids.lvl1.getSelectionModel().select(this.grids.lvl1.store.find('_id',2,false,false,true),true);
                     var oRecord = this.grids.lvlHighLevelEvent.store.find('_id', oValue.event,0,false,false,true);
                     if (oRecord != -1)
                         this.grids.lvlHighLevelEvent.getSelectionModel().select(oRecord,true);
@@ -4178,69 +4232,74 @@ Ext.define('DSS.component.TriggerConfigurator', {
         var oReturnValue = [];
         try {
             var oSelectionLVL1 = this.grids.lvl1.getSelectionModel().getSelection();
-            for ( var iIndex = 0; iIndex < oSelectionLVL1.length; iIndex++) {
-            
+            for ( var iIndex = 0; oSelectionLVL1 && iIndex < oSelectionLVL1.length; iIndex++) {
+
                 if (oSelectionLVL1[iIndex].get('_id') == 4) {
                 	// access trigger
                 	var oSelectionScene = this.grids.lvlAccess.getSelectionModel().getSelection();
-                	 
-                    for ( var kIndex = 0; kIndex < oSelectionScene.length; kIndex++) {
-                    	if (oSelectionScene[kIndex].get('_id')<1000) {
-	                    	var oObject = {
-	                            type : 'zone-scene',
-	                            zone : 0,
-	                            group : 0,
-	                            scene : oSelectionScene[kIndex].get('_id')
-	                        };
-	                        oReturnValue.push(oObject);
-                    	} else {
-                    		 var oObject = {
-                				 type : 'undo-zone-scene',
-                				 zone : 0,
-                				 group : 0,
-                				 scene : oSelectionScene[kIndex].get('_id')-1000
-            				 }; 
-                    		 oReturnValue.push(oObject);
-                    	}
+                    if (oSelectionScene) {
+                        for ( var kIndex = 0; kIndex < oSelectionScene.length; kIndex++) {
+                        	if (oSelectionScene[kIndex].get('_id')<1000) {
+    	                    	var oObject = {
+    	                            type : 'zone-scene',
+    	                            zone : 0,
+    	                            group : 0,
+    	                            scene : oSelectionScene[kIndex].get('_id')
+    	                        };
+    	                        oReturnValue.push(oObject);
+                        	} else {
+                        		 var oObject = {
+                    				 type : 'undo-zone-scene',
+                    				 zone : 0,
+                    				 group : 0,
+                    				 scene : oSelectionScene[kIndex].get('_id')-1000
+                				 };
+                        		 oReturnValue.push(oObject);
+                        	}
+                        }
                     }
                 }
                 if (oSelectionLVL1[iIndex].get('_id') == 9) {
                 	var oSelectionScene = this.grids.lvlRoomStateState.getSelectionModel().getSelection();
                 	// zonestate
-                 	//  name, state : 'active', 'inactive' 	 
-                    for ( var kIndex = 0; kIndex < oSelectionScene.length; kIndex++) {
-                    	var sValue=oSelectionScene[kIndex].get('value');
-                    	var stateName=oSelectionScene[kIndex].get('stateid');
-                    	var oObject = {
-	                            type : 'state-change',
-	                            name : stateName,
-	                            state : sValue
-	                        };
-	                    oReturnValue.push(oObject);                    	
+                 	//  name, state : 'active', 'inactive'
+                 	if (oSelectionScene) {
+                        for ( var kIndex = 0; kIndex < oSelectionScene.length; kIndex++) {
+                        	var sValue=oSelectionScene[kIndex].get('value');
+                        	var stateName=oSelectionScene[kIndex].get('stateid');
+                        	var oObject = {
+    	                            type : 'state-change',
+    	                            name : stateName,
+    	                            state : sValue
+    	                        };
+    	                    oReturnValue.push(oObject);
+                        }
                     }
-                }                
+                }
                 if (oSelectionLVL1[iIndex].get('_id') == 11) {
                     var oSelectionScene = this.grids.lvlClusterStateState.getSelectionModel().getSelection();
                     // clusterstate
                     //  name, state : 'active', 'inactive'
-                    for (var kIndex = 0; kIndex < oSelectionScene.length; kIndex++) {
-                        var sValue = oSelectionScene[kIndex].get('value');
-                        var stateName = oSelectionScene[kIndex].get('stateid');
-                        var oObject = {
-                                type : 'state-change',
-                                name : stateName,
-                                state : sValue
-                            };
-                        oReturnValue.push(oObject);
+                    if (oSelectionScene) {
+                        for (var kIndex = 0; kIndex < oSelectionScene.length; kIndex++) {
+                            var sValue = oSelectionScene[kIndex].get('value');
+                            var stateName = oSelectionScene[kIndex].get('stateid');
+                            var oObject = {
+                                    type : 'state-change',
+                                    name : stateName,
+                                    state : sValue
+                                };
+                            oReturnValue.push(oObject);
+                        }
                     }
                 }
                 if (oSelectionLVL1[iIndex].get('_id') == 8) {
                 	var stateName = this.grids.lvlUserstate.getSelectionModel().getSelection()[0].get('_id');
                 	var stateType = this.grids.lvlUserstate.getSelectionModel().getSelection()[0].get('type');
                 	var stateValue = this.grids.lvlUserstateValue.getSelectionModel().getSelection()[0].get('_id');
-                	
+
                 	// usertate
-                 	//  name, state : 'active', 'inactive' 	 
+                 	//  name, state : 'active', 'inactive'
                 	if ((stateType=='zone-sensor-states')||(stateType=='device-sensor-states')) {
 	                	var oObject = {
 	                            type : 'state-change',
@@ -4252,78 +4311,82 @@ Ext.define('DSS.component.TriggerConfigurator', {
 	                	var oObject = {
 	                            type : 'addon-state-change',
 	                            name : stateName,
-	                            state : stateValue, 
+	                            state : stateValue,
 	                            "addon-id":"system-addon-user-defined-states",
 	                            "addonId":"system-addon-user-defined-states"
 	                        };
 	                    oReturnValue.push(oObject);
                 	}
-                }                
+                }
                 if (oSelectionLVL1[iIndex].get('_id') == 5) {
                 	var oSelectionScene = this.grids.lvlWeather.getSelectionModel().getSelection();
                 	// weather
-                 	//  name, state : 'active', 'inactive' 	 
-                    for ( var kIndex = 0; kIndex < oSelectionScene.length; kIndex++) {
-                    	var sValue=oSelectionScene[kIndex].get('_id');
-                    	if (sValue !== 'sun') {
-                        	var stateName=sValue.substr(0,sValue.lastIndexOf('_'));
-                        	var stateValue=sValue.substr(sValue.lastIndexOf('_')+1);
-                        	var oObject = {
-    	                            type : 'state-change',
-    	                            name : stateName,
-    	                            state : stateValue
-    	                        };
-                        } else {
-                            var oSelectionSunProtection = this.grids.lvlSunProtection.getSelectionModel().getSelection();
-                            for ( var pIndex = 0; pIndex < oSelectionSunProtection.length; pIndex++) {
-                                var eventName = oSelectionSunProtection[pIndex].get('eventName');
-                                var direction = oSelectionSunProtection[pIndex].get('direction');
-                                var value = oSelectionSunProtection[pIndex].get('value');
-                                var oObject = {
-                                        type : 'event',
-                                        name : eventName,
-                                        parameter : {
-                                            value : value,
-                                            direction : direction
-                                        }
-                                    };
+                 	//  name, state : 'active', 'inactive'
+                 	if (oSelectionScene) {
+                        for ( var kIndex = 0; kIndex < oSelectionScene.length; kIndex++) {
+                        	var sValue=oSelectionScene[kIndex].get('_id');
+                        	if (sValue !== 'sun') {
+                            	var stateName=sValue.substr(0,sValue.lastIndexOf('_'));
+                            	var stateValue=sValue.substr(sValue.lastIndexOf('_')+1);
+                            	var oObject = {
+        	                            type : 'state-change',
+        	                            name : stateName,
+        	                            state : stateValue
+        	                        };
+                            } else {
+                                var oSelectionSunProtection = this.grids.lvlSunProtection.getSelectionModel().getSelection();
+                                for ( var pIndex = 0; pIndex < oSelectionSunProtection.length; pIndex++) {
+                                    var eventName = oSelectionSunProtection[pIndex].get('eventName');
+                                    var direction = oSelectionSunProtection[pIndex].get('direction');
+                                    var value = oSelectionSunProtection[pIndex].get('value');
+                                    var oObject = {
+                                            type : 'event',
+                                            name : eventName,
+                                            parameter : {
+                                                value : value,
+                                                direction : direction
+                                            }
+                                        };
+                                }
                             }
+    	                    oReturnValue.push(oObject);
                         }
-	                    oReturnValue.push(oObject);
                     }
                 }
                 if (oSelectionLVL1[iIndex].get('_id') == 6) {
                 	var oSelectionScene = this.grids.lvlPanic.getSelectionModel().getSelection();
                 	// panic
-                    for ( var kIndex = 0; kIndex < oSelectionScene.length; kIndex++) {
-                    	if ((""+oSelectionScene[kIndex].get('_id')).indexOf('_')>=0) {
-                        	var sValue=oSelectionScene[kIndex].get('_id');
-                        	var stateName=sValue.substr(0,sValue.lastIndexOf('_'));
-                        	var stateValue=sValue.substr(sValue.lastIndexOf('_')+1);
-                        	var oObject = {
-    	                            type : 'state-change',
-    	                            name : stateName,
-    	                            state : stateValue
+                	if (oSelectionScene) {
+                        for ( var kIndex = 0; kIndex < oSelectionScene.length; kIndex++) {
+                        	if ((""+oSelectionScene[kIndex].get('_id')).indexOf('_')>=0) {
+                            	var sValue=oSelectionScene[kIndex].get('_id');
+                            	var stateName=sValue.substr(0,sValue.lastIndexOf('_'));
+                            	var stateValue=sValue.substr(sValue.lastIndexOf('_')+1);
+                            	var oObject = {
+        	                            type : 'state-change',
+        	                            name : stateName,
+        	                            state : stateValue
+        	                        };
+        	                    oReturnValue.push(oObject);
+                        	} else
+                        	if (oSelectionScene[kIndex].get('_id')<1000) {
+    	                    	var oObject = {
+    	                            type : 'zone-scene',
+    	                            zone : 0,
+    	                            group : 0,
+    	                            scene : oSelectionScene[kIndex].get('_id')
     	                        };
-    	                    oReturnValue.push(oObject);                    	
-                    	} else 
-                    	if (oSelectionScene[kIndex].get('_id')<1000) {
-	                    	var oObject = {
-	                            type : 'zone-scene',
-	                            zone : 0,
-	                            group : 0,
-	                            scene : oSelectionScene[kIndex].get('_id')
-	                        };
-	                        oReturnValue.push(oObject);
-                    	} else {
-                    		 var oObject = {
-                				 type : 'undo-zone-scene',
-                				 zone : 0,
-                				 group : 0,
-                				 scene : oSelectionScene[kIndex].get('_id')-1000
-            				 }; 
-                    		 oReturnValue.push(oObject);
-                    	}
+    	                        oReturnValue.push(oObject);
+                        	} else {
+                        		 var oObject = {
+                    				 type : 'undo-zone-scene',
+                    				 zone : 0,
+                    				 group : 0,
+                    				 scene : oSelectionScene[kIndex].get('_id')-1000
+                				 };
+                        		 oReturnValue.push(oObject);
+                        	}
+                        }
                     }
                 }
                 if (oSelectionLVL1[iIndex].get('_id') == 7) {
@@ -4360,43 +4423,47 @@ Ext.define('DSS.component.TriggerConfigurator', {
                 if (oSelectionLVL1[iIndex].get('_id') == 0) { // zone scene
                     var iZoneID = this.grids.lvlRoomRoom.getSelectionModel().getSelection()[0].get('ZoneID');
                     var oSelectionGroup = this.grids.lvlGroup.getSelectionModel().getSelection();
-                    for ( var jIndex = 0; jIndex < oSelectionGroup.length; jIndex++) {
-                        if (oSelectionGroup[jIndex].get('group') == null) {
-                            var oObject = {
-                                type : 'zone-scene',
-                                zone : iZoneID,
-                                group : 0,
-                                scene : oSelectionGroup[jIndex].get('_id')
-                            };
-                            oReturnValue.push(oObject);
-                        } else {
-                            var iGroupID = oSelectionGroup[jIndex].get('group');
-                            var oSelectionScene = this.grids.lvlScene.getSelectionModel().getSelection();
-                            for ( var kIndex = 0; kIndex < oSelectionScene.length; kIndex++) {
-                            	
-                            	if (oSelectionScene[kIndex].get('stateid')!='') {
-                            		oObject = {
-            	                            type : 'state-change',
-            	                            name : oSelectionScene[kIndex].get('stateid'),
-            	                            state : oSelectionScene[kIndex].get('value')
-            	                        };
-            	                    oReturnValue.push(oObject);        
-                            	} else {
-                            	
-	                                var oObject = {
-	                                    type : 'zone-scene',
-	                                    zone : iZoneID,
-	                                    group : iGroupID,
-	                                    scene : oSelectionScene[kIndex].get('_id')                                    
-	                                };
-	                                if (oSelectionScene[kIndex].get('forced')!=null)
-	                                    if (oSelectionScene[kIndex].get('forced')!="")
-	                                    	oObject.forced=oSelectionScene[kIndex].get('forced');
-	                                
-	                                //else
-	                                //	oObject.forced=false;
-	                                oReturnValue.push(oObject);
-                            	}
+                    if (oSelectionGroup) {
+                        for ( var jIndex = 0; jIndex < oSelectionGroup.length; jIndex++) {
+                            if (oSelectionGroup[jIndex].get('group') == null) {
+                                var oObject = {
+                                    type : 'zone-scene',
+                                    zone : iZoneID,
+                                    group : 0,
+                                    scene : oSelectionGroup[jIndex].get('_id')
+                                };
+                                oReturnValue.push(oObject);
+                            } else {
+                                var iGroupID = oSelectionGroup[jIndex].get('group');
+                                var oSelectionScene = this.grids.lvlScene.getSelectionModel().getSelection();
+                                if (oSelectionScene) {
+                                    for ( var kIndex = 0; kIndex < oSelectionScene.length; kIndex++) {
+
+                                    	if (oSelectionScene[kIndex].get('stateid')!='') {
+                                    		oObject = {
+                    	                            type : 'state-change',
+                    	                            name : oSelectionScene[kIndex].get('stateid'),
+                    	                            state : oSelectionScene[kIndex].get('value')
+                    	                        };
+                    	                    oReturnValue.push(oObject);
+                                    	} else {
+
+        	                                var oObject = {
+        	                                    type : 'zone-scene',
+        	                                    zone : iZoneID,
+        	                                    group : iGroupID,
+        	                                    scene : oSelectionScene[kIndex].get('_id')
+        	                                };
+        	                                if (oSelectionScene[kIndex].get('forced')!=null)
+        	                                    if (oSelectionScene[kIndex].get('forced')!="")
+        	                                    	oObject.forced=oSelectionScene[kIndex].get('forced');
+
+        	                                //else
+        	                                //	oObject.forced=false;
+        	                                oReturnValue.push(oObject);
+                                    	}
+                                    }
+                                }
                             }
                         }
                     }
@@ -4404,54 +4471,63 @@ Ext.define('DSS.component.TriggerConfigurator', {
                 if (oSelectionLVL1[iIndex].get('_id') == 1) { // taster
                     var oDSID = this.grids.lvlDevice.getSelectionModel().getSelection()[0].get('dSID');
                     var oDSUID = this.grids.lvlDevice.getSelectionModel().getSelection()[0].get('dSUID');
-    
-                    
+
+
                     var actionType=this.grids.lvlDeviceActionClass.getSelectionModel().getSelection()[0].get('_id');
                     if (actionType==1) {
                     	//device events
-                    	for ( var jIndex = 0; jIndex < this.grids.lvlDeviceEventEvent.getSelectionModel().getSelection().length; jIndex++) {
-	                    	var event=this.grids.lvlDeviceEventEvent.getSelectionModel().getSelection()[jIndex].get('event');
-	                    	var oObject = {
-		                            type : 'device-named-event',
-		                            dsuid : oDSUID,
-		                            id : event
-		                        };
-		                    oReturnValue.push(oObject);
-                    	}
+                    	var selection = this.grids.lvlDeviceEventEvent.getSelectionModel().getSelection();
+                        if (selection) {
+                        	for ( var jIndex = 0; jIndex < selection.length; jIndex++) {
+    	                    	var event=selection[jIndex].get('event');
+    	                    	var oObject = {
+    		                            type : 'device-named-event',
+    		                            dsuid : oDSUID,
+    		                            id : event
+    		                        };
+    		                    oReturnValue.push(oObject);
+                        	}
+                        }
                     }
                     if (actionType==2) {
                     	//device actions
-                    	for ( var jIndex = 0; jIndex < this.grids.lvlDeviceActionAction.getSelectionModel().getSelection().length; jIndex++) {
-	                    	var action=this.grids.lvlDeviceActionAction.getSelectionModel().getSelection()[jIndex].get('action');
-		                    var oObject = {
-		                            type : 'device-named-action',
-		                            dsuid : oDSUID,
-		                            id : action
-		                        };
-		                    oReturnValue.push(oObject);
-                    	}
+                    	var selection = this.grids.lvlDeviceActionAction.getSelectionModel().getSelection();
+                        if (selection) {
+                        	for ( var jIndex = 0; jIndex < selection.length; jIndex++) {
+    	                    	var action=selection[jIndex].get('action');
+    		                    var oObject = {
+    		                            type : 'device-named-action',
+    		                            dsuid : oDSUID,
+    		                            id : action
+    		                        };
+    		                    oReturnValue.push(oObject);
+                        	}
+                        }
                     }
                     if (actionType==3) {
                     	//device states
-                    	for ( var jIndex = 0; jIndex < this.grids.lvlDeviceStateValue.getSelectionModel().getSelection().length; jIndex++) {
-		                	var value=this.grids.lvlDeviceStateValue.getSelectionModel().getSelection()[jIndex].get('type');
-		                	var state=this.grids.lvlDeviceStateValue.getSelectionModel().getSelection()[jIndex].get('selector');
-		                    var oObject = {
-		                            type : 'state-change',
-		                            name : state,
-		                            state : value
-		                        };
-		                    oReturnValue.push(oObject);
-                    	}
+                    	var selection = this.grids.lvlDeviceStateValue.getSelectionModel().getSelection();
+                        if (selection) {
+                        	for ( var jIndex = 0; jIndex < selection.length; jIndex++) {
+    		                	var value=selection[jIndex].get('type');
+    		                	var state=selection[jIndex].get('selector');
+    		                    var oObject = {
+    		                            type : 'state-change',
+    		                            name : state,
+    		                            state : value
+    		                        };
+    		                    oReturnValue.push(oObject);
+                        	}
+                        }
                     }
                     if (actionType==4) {
 	                    var oSelectionDeviceAction = this.grids.lvlDeviceAction.getSelectionModel().getSelection();
-	                    
+
 	                    var oDevice = dss.staticDataModel.getDevice(oDSUID);
-	
-	                    
-	                    for ( var jIndex = 0; jIndex < oSelectionDeviceAction.length; jIndex++) {
-	
+
+
+	                    for ( var jIndex = 0; oSelectionDeviceAction && jIndex < oSelectionDeviceAction.length; jIndex++) {
+
 	                        var fSpecial=false;
 	                        if (oDevice.specialActions.triggers!=null) {
 	                            if (oDevice.specialActions.triggers.deviceMsg!=null) {
@@ -4478,7 +4554,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
 	                                                 type : 'device-action',
 	                                                 action : oDevice.specialActions.triggers.deviceAction[sKey].id
 	                                             };
-	                                         oReturnValue.push(oObject);                                         
+	                                         oReturnValue.push(oObject);
 	                            		}
 	                            	}
 	                            }
@@ -4492,13 +4568,13 @@ Ext.define('DSS.component.TriggerConfigurator', {
 	                                                 type : 'device-action',
 	                                                 action : oDevice.specialActions.triggers.deviceActions[sKey].action
 	                                             };
-	                                         oReturnValue.push(oObject);                                         
+	                                         oReturnValue.push(oObject);
 	                            		}
 	                            	}
 	                            }
-	                        	
+
 	                        }
-	                    	if (!fSpecial) {                    	
+	                    	if (!fSpecial) {
 		                    	if ((oSelectionDeviceAction[jIndex].get('_id') > 15) && (oSelectionDeviceAction[jIndex].get('_id') < 1000)) {
 		                            var oObject = {
 		                                dsid : oDSID,
@@ -4673,7 +4749,7 @@ Ext.define('DSS.component.TriggerConfigurator', {
 		                                    msg : 3
 		                                };
 		                                oReturnValue.push(oObject1);
-	
+
 		                            } else if (oSelectionDeviceAction[jIndex].get('_id') == 1106) {
 		                                var oObject1 = {
 		                                    dsid : oDSID,
@@ -4768,32 +4844,35 @@ Ext.define('DSS.component.TriggerConfigurator', {
                 }
                 if (oSelectionLVL1[iIndex].get('_id') == 2) { // highlvl
                     var oSelectionHighLVL = this.grids.lvlHighLevelEvent.getSelectionModel().getSelection();
-                    for ( var jIndex = 0; jIndex < oSelectionHighLVL.length; jIndex++) {
-                        var oObject = {
-                            type : 'custom-event',
-                            event : oSelectionHighLVL[jIndex].get('_id')
-                        };
-                        oReturnValue.push(oObject);
+                    if (oSelectionHighLVL) {
+                        for ( var jIndex = 0; jIndex < oSelectionHighLVL.length; jIndex++) {
+                            var oObject = {
+                                type : 'custom-event',
+                                event : oSelectionHighLVL[jIndex].get('_id')
+                            };
+                            oReturnValue.push(oObject);
+                        }
                     }
                 }
                 if (oSelectionLVL1[iIndex].get('_id') == 3) { // sensor
                     var oDSID = this.grids.lvlSensorDevice.getSelectionModel().getSelection()[0].get('dSID');
                     var oDSUID = this.grids.lvlSensorDevice.getSelectionModel().getSelection()[0].get('dSUID');
                     var oSelectionMSG = this.grids.lvlSensorMessage.getSelectionModel().getSelection();
-                    for ( var jIndex = 0; jIndex < oSelectionMSG.length; jIndex++) {
-                        var oObject = {
-                            type : 'device-sensor',
-                            dsid :oDSID, 
-                            dsuid :oDSUID, 
-                            eventid : oSelectionMSG[jIndex].get('_id')
-                        };
-                        oReturnValue.push(oObject);
+                    if (oSelectionMSG) {
+                        for ( var jIndex = 0; jIndex < oSelectionMSG.length; jIndex++) {
+                            var oObject = {
+                                type : 'device-sensor',
+                                dsid :oDSID,
+                                dsuid :oDSUID,
+                                eventid : oSelectionMSG[jIndex].get('_id')
+                            };
+                            oReturnValue.push(oObject);
+                        }
                     }
                 }
             }
-        } 
+        }
         catch (e){}
         return oReturnValue;
     }
 }); // DSS.component.Trigger
-
diff --git a/js/dss/dss-components/dss-weekday-selection.js b/js/dss/dss-components/dss-weekday-selection.js
index ee5871b5..56ba8ba4 100644
--- a/js/dss/dss-components/dss-weekday-selection.js
+++ b/js/dss/dss-components/dss-weekday-selection.js
@@ -19,7 +19,7 @@ Ext.define('DSS.component.WeekdaySelection', {
     oControlSO:null,
     fOnlyWeekdays:false,
     setHeight:function(iHeight) {
-    	
+
     },
     updateDisplay:function(){
         var fMo=this.up().oControlMO.pressed;
@@ -37,43 +37,43 @@ Ext.define('DSS.component.WeekdaySelection', {
             sText+=_('MO') + ', ';
             sSingular=_('on monday');
         }
-        
+
         if (fDi) {
             iCount++;
             sText+=_('TU') + ', ';
-            sSingular=_('on tuesday');                  
+            sSingular=_('on tuesday');
         }
-        
+
         if (fMi) {
             iCount++;
             sText+=_('WE') + ', ';
-            sSingular=_('on wednesday');                  
+            sSingular=_('on wednesday');
         }
-        
+
         if (fDo) {
             iCount++;
             sText+=_('TH') + ', ';
-            sSingular=_('on thursday');                
+            sSingular=_('on thursday');
         }
-        
+
         if (fFr) {
             iCount++;
             sText+=_('FR') + ', ';
-            sSingular=_('on friday');                   
+            sSingular=_('on friday');
         }
-        
+
         if (fSa) {
             iCount++;
             sText+=_('SA') + ', ';
-            sSingular=_('on saturday');               
+            sSingular=_('on saturday');
         }
-        
+
         if (fSo) {
             iCount++;
             sText+=_('SU') + ', ';
-            sSingular=_('on sunday');                   
+            sSingular=_('on sunday');
         }
-        
+
         if (iCount==2)
             if (fSa)
                 if (fSo) {
@@ -95,13 +95,13 @@ Ext.define('DSS.component.WeekdaySelection', {
         if (iCount==1)
             this.up().lblAnzeige.setValue("("+sSingular+")");
         else
-            this.up().lblAnzeige.setValue("("+sText.substring(0,sText.length-2)+")");       
+            this.up().lblAnzeige.setValue("("+sText.substring(0,sText.length-2)+")");
         this.up().fireEvent('change',this.up().getValue());
     },
     constructor : function(config) {
         if (config.fOnlyWeekdays!=null)
             this.fOnlyWeekdays=config.fOnlyWeekdays;
-        
+
         this.lblAnzeige = Ext.create('Ext.form.field.Display', {
             border : 0,
             width:200,
@@ -128,7 +128,7 @@ Ext.define('DSS.component.WeekdaySelection', {
                 }
             }
         });
-        
+
         this.oControlMO = Ext.create('Ext.button.Button', {
             width : 26,
             margin : '0 3 0 0',
@@ -178,7 +178,7 @@ Ext.define('DSS.component.WeekdaySelection', {
             enableToggle : true,
             listeners: {toggle:this.updateDisplay}
         });
-        
+
         this.oControlDate = Ext.create('Ext.form.field.Date', {
             allowBlank : false,
             blankText : _('This field is required'),
@@ -204,7 +204,7 @@ Ext.define('DSS.component.WeekdaySelection', {
                 fieldLabel : config.label,
                 labelWidth : config.labelWidth,
                 border : 1,
-                layout :{type: 'hbox',align:'top'},                
+                layout :{type: 'hbox',align:'top'},
                 margin : '10 0 0 10',
                 items : [this.oControlType, this.oControlMO, this.oControlDI, this.oControlMI, this.oControlDO, this.oControlFR, this.oControlSA, this.oControlSO,this.lblAnzeige,this.oControlDate]
             });
@@ -243,7 +243,9 @@ Ext.define('DSS.component.WeekdaySelection', {
         if (value.recurrenceBase=="absolute") {
             this.toggleRecurring(false);
             this.oControlType.setActiveItem('chk-static');
-            this.oControlDate.setValue(new Date(value.timeArray[0]));
+            if (value.timeArray && value.timeArray.length) {
+                this.oControlDate.setValue(new Date(value.timeArray[0]));
+            }
         } else {
             this.toggleRecurring(true);
             if (!this.fOnlyWeekdays)
@@ -255,29 +257,31 @@ Ext.define('DSS.component.WeekdaySelection', {
             this.oControlFR.toggle(false);
             this.oControlSA.toggle(false);
             this.oControlSO.toggle(false);
-            for ( var jIndex = 0; jIndex < value.timeArray.length; jIndex++) {
-                var dataFragment=value.timeArray[jIndex];
-                if (dataFragment == 'MO')
-                    this.oControlMO.toggle(true);
-                if (dataFragment == 'TU')
-                    this.oControlDI.toggle(true);
-                if (dataFragment == 'WE')
-                    this.oControlMI.toggle(true);
-                if (dataFragment == 'TH')
-                    this.oControlDO.toggle(true);
-                if (dataFragment == 'FR')
-                    this.oControlFR.toggle(true);
-                if (dataFragment == 'SA')
-                    this.oControlSA.toggle(true);
-                if (dataFragment == 'SU')
-                    this.oControlSO.toggle(true);
+            if (value.timeArray) {
+                for ( var jIndex = 0; jIndex < value.timeArray.length; jIndex++) {
+                    var dataFragment=value.timeArray[jIndex];
+                    if (dataFragment == 'MO')
+                        this.oControlMO.toggle(true);
+                    if (dataFragment == 'TU')
+                        this.oControlDI.toggle(true);
+                    if (dataFragment == 'WE')
+                        this.oControlMI.toggle(true);
+                    if (dataFragment == 'TH')
+                        this.oControlDO.toggle(true);
+                    if (dataFragment == 'FR')
+                        this.oControlFR.toggle(true);
+                    if (dataFragment == 'SA')
+                        this.oControlSA.toggle(true);
+                    if (dataFragment == 'SU')
+                        this.oControlSO.toggle(true);
+                }
             }
         }
     },
     isValid:function() {
         if (this.oControlType.getActiveItem().getItemId()=="chk-static") {
             return this.oControlDate.validate();
-        } else {            
+        } else {
             if (this.oControlMO.pressed)
                 return true;
             if (this.oControlDI.pressed)
@@ -300,7 +304,7 @@ Ext.define('DSS.component.WeekdaySelection', {
         if (this.oControlType.getActiveItem().getItemId()=="chk-static") {
             oValue={timeArray:[],recurrenceBase:"absolute"};
             oValue.timeArray.push(Ext.Date.format(this.oControlDate.getValue(), "Y-m-d"));
-        } else { 
+        } else {
            oValue={timeArray:[],recurrenceBase:"weekly"};
            if (this.oControlMO.pressed)
                oValue.timeArray.push('MO');
diff --git a/js/dss/dss-datamodel.js b/js/dss/dss-datamodel.js
index f6305fb0..8e9ad603 100644
--- a/js/dss/dss-datamodel.js
+++ b/js/dss/dss-datamodel.js
@@ -65,7 +65,7 @@ dss.validValue = {
 	completlyWrong : 2
 };
 
-dss.whState = 
+dss.whState =
 {
     WH_Invalid : 0,
     WH_Closed  : 1,
@@ -83,7 +83,7 @@ dss.getCookie = function(cname) {
         if (c.indexOf(name) == 0) return c.substring(name.length,c.length);
     }
     return "";
-}; 
+};
 
 dss.ajaxSyncRequest = function(surl, params) {
 	var xmlHttp = null;
@@ -111,7 +111,7 @@ dss.ajaxSyncRequest = function(surl, params) {
 	}
 	if (xmlHttp) {
 		xmlHttp.open('GET', surl + paramString, false);
-		if (csrf!="") 
+		if (csrf!="")
 			xmlHttp.setRequestHeader("X-Csrf-Token", csrf);
 		xmlHttp.send(null);
 		return xmlHttp.responseText.replace(/-nan/g, '0');
@@ -149,7 +149,7 @@ dss.ajaxAssyncRequestWithoutAnswer = function(surl, params, callback) {
 					callback(xmlHttp.responseText.replace(/-nan/g, '0'));
 			};
 		xmlHttp.open('GET', surl + paramString, true);
-		if (csrf!="") 
+		if (csrf!="")
 			xmlHttp.setRequestHeader("X-Csrf-Token", csrf);
 		xmlHttp.send(null);
 	}
@@ -186,7 +186,7 @@ dss.ajaxAssyncRequestWithoutAnswerPost = function(surl, params, callback) {
 					callback(xmlHttp.responseText.replace(/-nan/g, '0'));
 			};
 		xmlHttp.open('POST', surl, true);
-		if (csrf!="") 
+		if (csrf!="")
 			xmlHttp.setRequestHeader("X-Csrf-Token", csrf);
 		xmlHttp.send(paramString);
 	}
@@ -276,30 +276,36 @@ dss.staticDataModel.getUserStates = function() {
 };
 
 dss.staticDataModel.getUserStateValueName = function (state) {
-	for (var iIndex=0;iIndex<dss.staticDataModel.userStates.length;iIndex++)
-		if (dss.staticDataModel.userStates[iIndex].name==state) {
-			if (dss.staticDataModel.userStates[iIndex].value==1)
-				return dss.staticDataModel.userStates[iIndex].setName;
-			if (dss.staticDataModel.userStates[iIndex].value==2)
-				return dss.staticDataModel.userStates[iIndex].resetName;
-		}
+    if (dss.staticDataModel.userStates) {
+    	for (var iIndex=0;iIndex<dss.staticDataModel.userStates.length;iIndex++)
+    		if (dss.staticDataModel.userStates[iIndex].name==state) {
+    			if (dss.staticDataModel.userStates[iIndex].value==1)
+    				return dss.staticDataModel.userStates[iIndex].setName;
+    			if (dss.staticDataModel.userStates[iIndex].value==2)
+    				return dss.staticDataModel.userStates[iIndex].resetName;
+    		}
+    }
 };
 
 dss.staticDataModel.getUserStateValue = function (state) {
-	for (var iIndex=0;iIndex<dss.staticDataModel.userStates.length;iIndex++)
-		if (dss.staticDataModel.userStates[iIndex].name==state) {
-			if (dss.staticDataModel.userStates[iIndex].value==1)
-				return true;
-			if (dss.staticDataModel.userStates[iIndex].value==2)
-				return false;
-		}
+    if (dss.staticDataModel.userStates) {
+    	for (var iIndex=0;iIndex<dss.staticDataModel.userStates.length;iIndex++)
+    		if (dss.staticDataModel.userStates[iIndex].name==state) {
+    			if (dss.staticDataModel.userStates[iIndex].value==1)
+    				return true;
+    			if (dss.staticDataModel.userStates[iIndex].value==2)
+    				return false;
+    		}
+    }
 };
 
 dss.staticDataModel.getHLENameFromId = function(id) {
-	for (var iIndex = 0; iIndex < dss.staticDataModel.HLECache.length; iIndex++) {
-		if (dss.staticDataModel.HLECache[iIndex].id == id)
-			return dss.staticDataModel.HLECache[iIndex].name;
-	}
+    if (dss.staticDataModel.HLECache) {
+    	for (var iIndex = 0; iIndex < dss.staticDataModel.HLECache.length; iIndex++) {
+    		if (dss.staticDataModel.HLECache[iIndex].id == id)
+    			return dss.staticDataModel.HLECache[iIndex].name;
+    	}
+    }
 	return id;
 };
 
@@ -332,7 +338,7 @@ dss.staticDataModel.initHeatingCache = function() {
 
 	var sString = dss.ajaxSyncRequest('/json/apartment/getTemperatureControlConfig', {});
 	var result = Ext.JSON.decode(sString);
-	if (result.ok) {
+	if (result.ok && result.result && result.result.zones) {
 		for (var iIndex = 0; iIndex < result.result.zones.length; iIndex++) {
 			var zoneNode = result.result.zones[iIndex];
 			dss.staticDataModel.heating[zoneNode.id] = {
@@ -387,127 +393,133 @@ dss.staticDataModel.initSpecialActions = function() {
 	var resultObj = Ext.JSON.decode(sResult);
 	if (resultObj.ok) {
 		dss.staticDataModel.specialAction={};
-		for (var iIndex=0;iIndex<resultObj.result.data.length;iIndex++) {
-			var gtin=resultObj.result.data[iIndex].gtin;
-			var type=resultObj.result.data[iIndex].type;
-			var elementid=resultObj.result.data[iIndex].id;
-			var value=resultObj.result.data[iIndex].value;
-			if (dss.staticDataModel.specialAction[gtin]==null)
-				dss.staticDataModel.specialAction[gtin]={};
-			switch (type) {
-				case "0": {
-						if (dss.staticDataModel.specialAction[gtin].triggers==null)
-							dss.staticDataModel.specialAction[gtin].triggers={};
-						switch (value) {
-							case "zone-scene":
-								if (dss.staticDataModel.specialAction[gtin].triggers.zoneScene==null)
-									dss.staticDataModel.specialAction[gtin].triggers.zoneScene={};
-								dss.staticDataModel.specialAction[gtin].triggers.zoneScene[elementid]={};
-								break;
-							case "device": {
-								if (dss.staticDataModel.specialAction[gtin].triggers.deviceMsg==null)
-									dss.staticDataModel.specialAction[gtin].triggers.deviceMsg={};
-								dss.staticDataModel.specialAction[gtin].triggers.deviceMsg[elementid]={};
-								break;
-							}								
-							case "device-binary-input":
-								// not supportet yet -> RK ist hier zu faul vorab zu denken
-								if (dss.staticDataModel.specialAction[gtin].triggers.binaryInputs==null)
-									dss.staticDataModel.specialAction[gtin].triggers.binaryInputs={};
-								dss.staticDataModel.specialAction[gtin].triggers.binaryInputs[elementid]={};
-								break;
-							case "device-sensor":								
-								if (dss.staticDataModel.specialAction[gtin].triggers.deviceEvents==null)
-									dss.staticDataModel.specialAction[gtin].triggers.deviceEvents={};
-								dss.staticDataModel.specialAction[gtin].triggers.deviceEvents[elementid]={};
-								break;
-							case "device-action": {
-								if (dss.staticDataModel.specialAction[gtin].triggers.deviceActions==null)
-									dss.staticDataModel.specialAction[gtin].triggers.deviceActions={};
-								dss.staticDataModel.specialAction[gtin].triggers.deviceActions[elementid]={};
-								break;
-							}
-						}
-						break;
-					}
-				case "1": {
-						if (dss.staticDataModel.specialAction[gtin].actions==null)
-							dss.staticDataModel.specialAction[gtin].actions={};
-						switch (value) {
-							case "zone-action":
-								if (dss.staticDataModel.specialAction[gtin].actions.zoneScene==null)
-									dss.staticDataModel.specialAction[gtin].actions.zoneScene={};
-								dss.staticDataModel.specialAction[gtin].actions.zoneScene[elementid]={};
-								break;
-							case "device-action-scene":{
-								if (dss.staticDataModel.specialAction[gtin].actions.deviceActions==null)
-									dss.staticDataModel.specialAction[gtin].actions.deviceActions={};
-								dss.staticDataModel.specialAction[gtin].actions.deviceActions[elementid]={};
-								break;
-							}							
-							case "device-action-value":{
-								if (dss.staticDataModel.specialAction[gtin].actions.deviceActions==null)
-									dss.staticDataModel.specialAction[gtin].actions.deviceActions={};
-								dss.staticDataModel.specialAction[gtin].actions.deviceActions[elementid]={};
-								break;
-							}			
-						}
-						break;
-					}
-				case "2": {
-						if (dss.staticDataModel.specialAction[gtin].conditions==null)
-							dss.staticDataModel.specialAction[gtin].conditions={};
-						switch (value) {
-							case "sensor-event":
-							// not supportet yet -> RK ist hier zu faul vorab zu denken
-								if (dss.staticDataModel.specialAction[gtin].conditions.akmEvent==null)
-									dss.staticDataModel.specialAction[gtin].conditions.akmEvent={};
-								dss.staticDataModel.specialAction[gtin].conditions.akmEvent[elementid]={};
-							break;
-						}
-						break;
-					}
-			}
-		}
+        if (resultObj.result && resultObj.result.data) {
+    		for (var iIndex=0;iIndex<resultObj.result.data.length;iIndex++) {
+    			var gtin=resultObj.result.data[iIndex].gtin;
+    			var type=resultObj.result.data[iIndex].type;
+    			var elementid=resultObj.result.data[iIndex].id;
+    			var value=resultObj.result.data[iIndex].value;
+    			if (dss.staticDataModel.specialAction[gtin]==null)
+    				dss.staticDataModel.specialAction[gtin]={};
+    			switch (type) {
+    				case "0": {
+    						if (dss.staticDataModel.specialAction[gtin].triggers==null)
+    							dss.staticDataModel.specialAction[gtin].triggers={};
+    						switch (value) {
+    							case "zone-scene":
+    								if (dss.staticDataModel.specialAction[gtin].triggers.zoneScene==null)
+    									dss.staticDataModel.specialAction[gtin].triggers.zoneScene={};
+    								dss.staticDataModel.specialAction[gtin].triggers.zoneScene[elementid]={};
+    								break;
+    							case "device": {
+    								if (dss.staticDataModel.specialAction[gtin].triggers.deviceMsg==null)
+    									dss.staticDataModel.specialAction[gtin].triggers.deviceMsg={};
+    								dss.staticDataModel.specialAction[gtin].triggers.deviceMsg[elementid]={};
+    								break;
+    							}
+    							case "device-binary-input":
+    								// not supportet yet -> RK ist hier zu faul vorab zu denken
+    								if (dss.staticDataModel.specialAction[gtin].triggers.binaryInputs==null)
+    									dss.staticDataModel.specialAction[gtin].triggers.binaryInputs={};
+    								dss.staticDataModel.specialAction[gtin].triggers.binaryInputs[elementid]={};
+    								break;
+    							case "device-sensor":
+    								if (dss.staticDataModel.specialAction[gtin].triggers.deviceEvents==null)
+    									dss.staticDataModel.specialAction[gtin].triggers.deviceEvents={};
+    								dss.staticDataModel.specialAction[gtin].triggers.deviceEvents[elementid]={};
+    								break;
+    							case "device-action": {
+    								if (dss.staticDataModel.specialAction[gtin].triggers.deviceActions==null)
+    									dss.staticDataModel.specialAction[gtin].triggers.deviceActions={};
+    								dss.staticDataModel.specialAction[gtin].triggers.deviceActions[elementid]={};
+    								break;
+    							}
+    						}
+    						break;
+    					}
+    				case "1": {
+    						if (dss.staticDataModel.specialAction[gtin].actions==null)
+    							dss.staticDataModel.specialAction[gtin].actions={};
+    						switch (value) {
+    							case "zone-action":
+    								if (dss.staticDataModel.specialAction[gtin].actions.zoneScene==null)
+    									dss.staticDataModel.specialAction[gtin].actions.zoneScene={};
+    								dss.staticDataModel.specialAction[gtin].actions.zoneScene[elementid]={};
+    								break;
+    							case "device-action-scene":{
+    								if (dss.staticDataModel.specialAction[gtin].actions.deviceActions==null)
+    									dss.staticDataModel.specialAction[gtin].actions.deviceActions={};
+    								dss.staticDataModel.specialAction[gtin].actions.deviceActions[elementid]={};
+    								break;
+    							}
+    							case "device-action-value":{
+    								if (dss.staticDataModel.specialAction[gtin].actions.deviceActions==null)
+    									dss.staticDataModel.specialAction[gtin].actions.deviceActions={};
+    								dss.staticDataModel.specialAction[gtin].actions.deviceActions[elementid]={};
+    								break;
+    							}
+    						}
+    						break;
+    					}
+    				case "2": {
+    						if (dss.staticDataModel.specialAction[gtin].conditions==null)
+    							dss.staticDataModel.specialAction[gtin].conditions={};
+    						switch (value) {
+    							case "sensor-event":
+    							// not supportet yet -> RK ist hier zu faul vorab zu denken
+    								if (dss.staticDataModel.specialAction[gtin].conditions.akmEvent==null)
+    									dss.staticDataModel.specialAction[gtin].conditions.akmEvent={};
+    								dss.staticDataModel.specialAction[gtin].conditions.akmEvent[elementid]={};
+    							break;
+    						}
+    						break;
+    					}
+    			}
+    		}
+        }
 	}
-	
+
 	var sResult = dss.ajaxSyncRequest('/json/database/query', {
 		'sql' : "select parameter.value,parameter.name,parameter.element_id from parameter where not(parameter.name='type')",
 		'database' : 'system-addon-scene-responder'
 	});
-	
+
 	var resultObj = Ext.JSON.decode(sResult);
 	if (resultObj.ok) {
 		for (var gtin in dss.staticDataModel.specialAction)
 			for (var type in dss.staticDataModel.specialAction[gtin])
 				for (var subtype in dss.staticDataModel.specialAction[gtin][type])
 					for (var elementID in dss.staticDataModel.specialAction[gtin][type][subtype]) {
-						for (var iIndex=0;iIndex<resultObj.result.data.length;iIndex++) {
-							if (elementID==resultObj.result.data[iIndex].element_id) {
-								dss.staticDataModel.specialAction[gtin][type][subtype][elementID][resultObj.result.data[iIndex].name]=resultObj.result.data[iIndex].value;
-							}
-						}
+                        if (resultObj.result && resultObj.result.data) {
+    						for (var iIndex=0;iIndex<resultObj.result.data.length;iIndex++) {
+    							if (elementID==resultObj.result.data[iIndex].element_id) {
+    								dss.staticDataModel.specialAction[gtin][type][subtype][elementID][resultObj.result.data[iIndex].name]=resultObj.result.data[iIndex].value;
+    							}
+    						}
+                        }
 					}
 	}
-	
+
 	sResult=dss.ajaxSyncRequest('/json/database/query', {
 		'sql' : "select name.name,name.langcode,name.element_id from name",
 		'database' : 'system-addon-scene-responder'
 	});
-	
+
 	var resultObj = Ext.JSON.decode(sResult);
 	if (resultObj.ok) {
 		for (var gtin in dss.staticDataModel.specialAction)
 			for (var type in dss.staticDataModel.specialAction[gtin])
 				for (var subtype in dss.staticDataModel.specialAction[gtin][type])
 					for (var elementID in dss.staticDataModel.specialAction[gtin][type][subtype]) {
-						for (var iIndex=0;iIndex<resultObj.result.data.length;iIndex++) {
-							if (elementID==resultObj.result.data[iIndex].element_id) {
-								if (dss.staticDataModel.specialAction[gtin][type][subtype][elementID].name==null)
-									dss.staticDataModel.specialAction[gtin][type][subtype][elementID].name={};
-								dss.staticDataModel.specialAction[gtin][type][subtype][elementID].name[resultObj.result.data[iIndex].langcode]=resultObj.result.data[iIndex].name;
-							}
-						}
+                        if (resultObj.result && resultObj.result.data) {
+    						for (var iIndex=0;iIndex<resultObj.result.data.length;iIndex++) {
+    							if (elementID==resultObj.result.data[iIndex].element_id) {
+    								if (dss.staticDataModel.specialAction[gtin][type][subtype][elementID].name==null)
+    									dss.staticDataModel.specialAction[gtin][type][subtype][elementID].name={};
+    								dss.staticDataModel.specialAction[gtin][type][subtype][elementID].name[resultObj.result.data[iIndex].langcode]=resultObj.result.data[iIndex].name;
+    							}
+    						}
+                        }
 					}
 	}
 
@@ -515,7 +527,7 @@ dss.staticDataModel.initSpecialActions = function() {
 		if (dss.staticDataModel.specialAction[sEANKey].actions != null) {
 			for ( var sActionType in dss.staticDataModel.specialAction[sEANKey].actions) {
 				for ( var sActionIndex in dss.staticDataModel.specialAction[sEANKey].actions[sActionType]) {
-					dss.staticDataModel.specialAction[sEANKey].actions[sActionType][sActionIndex].name = 
+					dss.staticDataModel.specialAction[sEANKey].actions[sActionType][sActionIndex].name =
 						dss.staticDataModel.localizeName(dss.staticDataModel.specialAction[sEANKey].actions[sActionType][sActionIndex].name);
 				}
 
@@ -576,7 +588,7 @@ dss.staticDataModel.initUserStateCache = function() {
 		'query' : '/usr/addon-states/system-addon-user-defined-states/*(name,displayName,setName,resetName,value,type)'
 	});
 	var result = Ext.JSON.decode(sString);
-	if (result.ok) {
+	if (result.ok && result.result) {
 		dss.staticDataModel.userStates = result.result["system-addon-user-defined-states"];
 		if (dss.staticDataModel.userStates === undefined) {
 		    dss.staticDataModel.userStates = [];
@@ -616,25 +628,29 @@ dss.staticDataModel.getMeter = function(dSUID) {
 	if (dss.staticDataModel.MeterCache === null)
 		dss.staticDataModel.initCaches();
 	if (DSS.types.dsuid.isDSUID(dSUID)) {
-		for (var iIndex = 0; iIndex < dss.staticDataModel.MeterCache.length; iIndex++) {
-			if (dss.staticDataModel.MeterCache[iIndex].dSUID && (dss.staticDataModel.MeterCache[iIndex].dSUID === dSUID)) {
-				return dss.staticDataModel.MeterCache[iIndex];
-			}
-		}
+        if (dss.staticDataModel.MeterCache) {
+    		for (var iIndex = 0; iIndex < dss.staticDataModel.MeterCache.length; iIndex++) {
+    			if (dss.staticDataModel.MeterCache[iIndex].dSUID && (dss.staticDataModel.MeterCache[iIndex].dSUID === dSUID)) {
+    				return dss.staticDataModel.MeterCache[iIndex];
+    			}
+    		}
+        }
 	} else {
 		// we still got a dSID so lets try whether we find a matching
-		for (var iIndex = 0; iIndex < dss.staticDataModel.MeterCache.length; iIndex++) {
-			if (dss.staticDataModel.MeterCache[iIndex].dSID && (dss.staticDataModel.MeterCache[iIndex].dSID === dSUID)) {
-				return dss.staticDataModel.MeterCache[iIndex];
-			} else {
-				if (dss.staticDataModel.MeterCache[iIndex].dSUID) {
-					tempdSUID = DSS.types.dsuid.dsid_to_dsuid(dSUID);
-					if (dss.staticDataModel.MeterCache[iIndex].dSUID === tempdSUID) {
-						return dss.staticDataModel.MeterCache[iIndex];
-					}
-				}
-			}
-		}
+		if (dss.staticDataModel.MeterCache) {
+    		for (var iIndex = 0; iIndex < dss.staticDataModel.MeterCache.length; iIndex++) {
+    			if (dss.staticDataModel.MeterCache[iIndex].dSID && (dss.staticDataModel.MeterCache[iIndex].dSID === dSUID)) {
+    				return dss.staticDataModel.MeterCache[iIndex];
+    			} else {
+    				if (dss.staticDataModel.MeterCache[iIndex].dSUID) {
+    					tempdSUID = DSS.types.dsuid.dsid_to_dsuid(dSUID);
+    					if (dss.staticDataModel.MeterCache[iIndex].dSUID === tempdSUID) {
+    						return dss.staticDataModel.MeterCache[iIndex];
+    					}
+    				}
+    			}
+    		}
+        }
 	}
 	return null;
 };
@@ -646,10 +662,12 @@ dss.staticDataModel.getMeterName = function(MeterDSUID) {
 		dsuid : DSS.types.dsuid.shortdSUID(MeterDSUID)
 	});
 
-	for (var iIndex = 0; iIndex < dss.staticDataModel.MeterCache.length; iIndex++)
-		if (dss.staticDataModel.MeterCache[iIndex].dSUID == MeterDSUID)
-			if (dss.staticDataModel.MeterCache[iIndex].name != "")
-				return dss.staticDataModel.MeterCache[iIndex].name;
+    if (dss.staticDataModel.MeterCache) {
+    	for (var iIndex = 0; iIndex < dss.staticDataModel.MeterCache.length; iIndex++)
+    		if (dss.staticDataModel.MeterCache[iIndex].dSUID == MeterDSUID)
+    			if (dss.staticDataModel.MeterCache[iIndex].name != "")
+    				return dss.staticDataModel.MeterCache[iIndex].name;
+    }
 	return baseName;
 };
 
@@ -668,7 +686,7 @@ dss.staticDataModel.getImagePathForState = function(stateName, stateValue) {
 		if ((stateValue == 'inactive') || (stateValue == '2'))
 			return dss.staticDataModel.baseImagePath + 'state/akm_service_no.png';
 	}
-	
+
 	switch (stateName.split('.')[0]) {
 	case 'rain':
 		if ((stateValue == 'active') || (stateValue == '1'))
@@ -826,7 +844,7 @@ dss.staticDataModel.getImagePathForConditionState = function(ConditionActive) {
 
 dss.staticDataModel.getNameForState = function(stateName, stateValue) {
 	switch (stateName) {
-	
+
 	case 'zone.0.group.64.status.malfunction':
 		if (stateValue == 'active')
 			return _('Malfunction detected');
@@ -839,7 +857,7 @@ dss.staticDataModel.getNameForState = function(stateName, stateValue) {
 		if (stateValue == 'inactive')
 			return _('no Service needed');
 		break;
-	
+
 	case 'rain':
 		if (stateValue == 'active')
 			return _('rain active');
@@ -892,7 +910,7 @@ dss.staticDataModel.getNameForState = function(stateName, stateValue) {
 		if (stateValue == 'auto')
 			return _('heating mode auto');
 		break;
-	
+
 	case 'heating_mode':
 		if (stateValue == 'off')
 			return _('heating mode off');
@@ -1004,7 +1022,7 @@ dss.staticDataModel.initSunriseTimes = function() {
 /**
  * Returns the distroVersion of the dSS. If not yet stored it will be read from
  * the property tree.
- * 
+ *
  * @return distroVersionString
  */
 dss.staticDataModel.getdSSVersion = function() {
@@ -1025,7 +1043,7 @@ dss.staticDataModel.getdSSVersion = function() {
 /**
  * Returns the distroVersion of the dSS. If not yet stored it will be read from
  * the property tree.
- * 
+ *
  * @return distroVersionString
  */
 dss.staticDataModel.getdSSFeed = function() {
@@ -1068,11 +1086,11 @@ dss.staticDataModel.initDeviceCache = function() {
         if (resultObj.result.devices!=null) {
             for ( var iIndex = 0; iIndex < resultObj.result.devices.length; iIndex++) {
                 var oDevObject = resultObj.result.devices[iIndex];
-                
+
                 if (oDevObject.ZoneID === 65534) {
                     continue;
                 }
-                
+
                 var newObject = {
                     dSID : oDevObject.dSID,
                     dSUID : oDevObject.dSUID,
@@ -1097,22 +1115,24 @@ dss.staticDataModel.initDeviceCache = function() {
                 	newObject.hasActions=oDevObject.hasActions;
                 } else
                 	newObject.hasActions=false;
-                
+
                 newObject.hasStates=false;
                 newObject.hasEvents=false;
                 if (oDevObject.isVdcDevice) {
                 	if (oDevObject[oDevObject.dSUID]!=null) {
                 		oVDC_DSID.push(oDevObject.dSUID);
                 		var oArray=oDevObject[oDevObject.dSUID];
-                		for (var jIndex=0;jIndex<oArray.length;jIndex++) {
-                			if (oArray[jIndex].states!=null)
-                				if (oArray[jIndex].states.length>0)
-                					newObject.hasStates=true;		
-                		}
+                        if (oArray) {
+                    		for (var jIndex=0;jIndex<oArray.length;jIndex++) {
+                    			if (oArray[jIndex].states!=null)
+                    				if (oArray[jIndex].states.length>0)
+                    					newObject.hasStates=true;
+                    		}
+                        }
                 	}
                 }
 				var subObject = oDevObject[oDevObject.dSUID];
-				for (var jIndex = 0; jIndex < subObject.length; jIndex++) {
+				for (var jIndex = 0; subObject && jIndex < subObject.length; jIndex++) {
 					if (subObject[jIndex].outputChannels != null) {
 						for (var kIndex=0;kIndex<subObject[jIndex].outputChannels.length;kIndex++) {
 							newObject.moc.push(subObject[jIndex].outputChannels[kIndex].channelID);
@@ -1160,7 +1180,7 @@ dss.staticDataModel.initDeviceCache = function() {
 									newObject.specialActions.actions={};
 								if (newObject.specialActions.actions[sKeyType]==null)
 									newObject.specialActions.actions[sKeyType]={};
-								for (var sSubSubKey in dss.staticDataModel.specialDSIDAction[oDevObject.dSUID].actions[sKeyType]) 
+								for (var sSubSubKey in dss.staticDataModel.specialDSIDAction[oDevObject.dSUID].actions[sKeyType])
 									newObject.specialActions.actions[sKeyType][sSubSubKey]= dss.staticDataModel.specialDSIDAction[oDevObject.dSUID].actions[sKeyType][sSubSubKey];
 							}
 						}
@@ -1171,10 +1191,10 @@ dss.staticDataModel.initDeviceCache = function() {
 								if (newObject.specialActions.triggers[sKeyType]==null)
 									newObject.specialActions.triggers[sKeyType]={};
 								newObject.specialActions.triggers[sKeyType]=[];
-								for (var sSubSubKey in dss.staticDataModel.specialDSIDAction[oDevObject.dSUID].triggers[sKeyType]) 
+								for (var sSubSubKey in dss.staticDataModel.specialDSIDAction[oDevObject.dSUID].triggers[sKeyType])
 									newObject.specialActions.triggers[sKeyType][sSubSubKey]=dss.staticDataModel.specialDSIDAction[oDevObject.dSUID].triggers[sKeyType][sSubSubKey];
 							}
-						}						
+						}
 					}
 					if (subObject[jIndex].modelFeatures!= null) {
 						for (var sKey in subObject[jIndex]) {
@@ -1182,7 +1202,7 @@ dss.staticDataModel.initDeviceCache = function() {
 								newObject.modelFeatures[sKey]=subObject[jIndex][sKey];
 						}
 					}
-					
+
 					if (subObject[jIndex].button != null) {
 						if (subObject[jIndex].id != null)
 							newObject.tasterMode = subObject[jIndex].id;
@@ -1262,71 +1282,83 @@ dss.staticDataModel.initDeviceCache = function() {
 	}
 	var zone0Index = -1;
 	var groupToAdd = [];
-	for (var iIndex = 0; iIndex < dss.staticDataModel.nameCache.length; iIndex++) {
-		var oZone = dss.staticDataModel.nameCache[iIndex];
-		if (oZone.ZoneID === 0) {
-			zone0Index = iIndex;
-		}
-		if (oZone.name == "") {
-			if (oZone.ZoneID == 0)
-				oZone.name = _('All rooms');
-			else
-				oZone.name = Ext.String.format2(_("Room ID {zone}"), {
-					zone : oZone.ZoneID
-				});
-		}
-		for (var jIndex = 0; jIndex < oZone.groups.length; jIndex++) {
-			var oGroup = oZone.groups[jIndex];
-			oGroup.icon = dss.staticDataModel.getImagePathForGroup(oZone.ZoneID, oGroup.group);
-			oGroup.name = dss.staticDataModel.getNameForGroup(oZone.ZoneID, oGroup.group);
-			oGroup.sensors = [];
-			oGroup.reachable = false;
-			if (oGroup.group == 0)
-				oGroup.reachable = true;
-			if (0 < oGroup.connectedDevices) {
-				oGroup.reachable = true;
-				if (-1 === groupToAdd.indexOf(oGroup.group)) {
-					groupToAdd.push(oGroup.group);
-				}
-			}
-			for (var iDeviceIndex = 0; iDeviceIndex < dss.staticDataModel.deviceCache.length; iDeviceIndex++)
-				if ((dss.staticDataModel.deviceCache[iDeviceIndex].ZoneID == oZone.ZoneID) || (oZone.ZoneID == 0))
-					if (dss.staticDataModel.deviceCache[iDeviceIndex].GroupMembership != null)
-						for (var iDeviceGroupIndex = 0; iDeviceGroupIndex < dss.staticDataModel.deviceCache[iDeviceIndex].GroupMembership.length; iDeviceGroupIndex++)
-							if (dss.staticDataModel.deviceCache[iDeviceIndex].GroupMembership[iDeviceGroupIndex] == oGroup.group)
-								oGroup.reachable = true;
-			dss.staticDataModel.nameCache[iIndex].groups[jIndex] = oGroup;
-		}
-	}
+    if (dss.staticDataModel.nameCache) {
+    	for (var iIndex = 0; iIndex < dss.staticDataModel.nameCache.length; iIndex++) {
+    		var oZone = dss.staticDataModel.nameCache[iIndex];
+    		if (oZone && oZone.ZoneID === 0) {
+    			zone0Index = iIndex;
+    		}
+    		if (oZone && oZone.name == "") {
+    			if (oZone.ZoneID == 0)
+    				oZone.name = _('All rooms');
+    			else
+    				oZone.name = Ext.String.format2(_("Room ID {zone}"), {
+    					zone : oZone.ZoneID
+    				});
+    		}
+            if (oZone && oZone.groups) {
+        		for (var jIndex = 0; jIndex < oZone.groups.length; jIndex++) {
+        			var oGroup = oZone.groups[jIndex];
+        			oGroup.icon = dss.staticDataModel.getImagePathForGroup(oZone.ZoneID, oGroup.group);
+        			oGroup.name = dss.staticDataModel.getNameForGroup(oZone.ZoneID, oGroup.group);
+        			oGroup.sensors = [];
+        			oGroup.reachable = false;
+        			if (oGroup.group == 0)
+        				oGroup.reachable = true;
+        			if (0 < oGroup.connectedDevices) {
+        				oGroup.reachable = true;
+        				if (-1 === groupToAdd.indexOf(oGroup.group)) {
+        					groupToAdd.push(oGroup.group);
+        				}
+        			}
+                    if (dss.staticDataModel.deviceCache) {
+            			for (var iDeviceIndex = 0; iDeviceIndex < dss.staticDataModel.deviceCache.length; iDeviceIndex++)
+            				if ((dss.staticDataModel.deviceCache[iDeviceIndex].ZoneID == oZone.ZoneID) || (oZone.ZoneID == 0))
+            					if (dss.staticDataModel.deviceCache[iDeviceIndex].GroupMembership != null)
+            						for (var iDeviceGroupIndex = 0; iDeviceGroupIndex < dss.staticDataModel.deviceCache[iDeviceIndex].GroupMembership.length; iDeviceGroupIndex++)
+            							if (dss.staticDataModel.deviceCache[iDeviceIndex].GroupMembership[iDeviceGroupIndex] == oGroup.group)
+            								oGroup.reachable = true;
+                    }
+        			dss.staticDataModel.nameCache[iIndex].groups[jIndex] = oGroup;
+        		}
+            }
+    	}
+    }
 	if (groupToAdd.length > 0) {
 		oZone = dss.staticDataModel.nameCache[zone0Index];
-		for (var jIndex = 0; jIndex < oZone.groups.length; jIndex++) {
-			var oGroup = oZone.groups[jIndex];
-			if (-1 !== groupToAdd.indexOf(oGroup.group)) {
-				oGroup.icon = dss.staticDataModel.getImagePathForGroup(oZone.ZoneID, oGroup.group);
-				oGroup.name = dss.staticDataModel.getNameForGroup(oZone.ZoneID, oGroup.group);
-				oGroup.reachable = true;
-				dss.staticDataModel.nameCache[zone0Index].groups[jIndex] = oGroup;
-			}
-		}
+        if (oZone && oZone.groups) {
+    		for (var jIndex = 0; jIndex < oZone.groups.length; jIndex++) {
+    			var oGroup = oZone.groups[jIndex];
+    			if (-1 !== groupToAdd.indexOf(oGroup.group)) {
+    				oGroup.icon = dss.staticDataModel.getImagePathForGroup(oZone.ZoneID, oGroup.group);
+    				oGroup.name = dss.staticDataModel.getNameForGroup(oZone.ZoneID, oGroup.group);
+    				oGroup.reachable = true;
+    				dss.staticDataModel.nameCache[zone0Index].groups[jIndex] = oGroup;
+    			}
+    		}
+        }
 	}
 
 	dss.staticDataModel.userGroups = [];
-	for (var iIndex = 0; iIndex < dss.staticDataModel.nameCache.length; iIndex++) {
-		if (dss.staticDataModel.nameCache[iIndex].ZoneID == 0) {
-			for (var jIndex = 0; jIndex < dss.staticDataModel.nameCache[iIndex].groups.length; jIndex++) {
-				if (dss.staticDataModel.isClusterGroup(dss.staticDataModel.nameCache[iIndex].groups[jIndex].group))
-					if (dss.staticDataModel.nameCache[iIndex].groups[jIndex].color !== 0) {
-						dss.staticDataModel.userGroups.push({
-							id : dss.staticDataModel.nameCache[iIndex].groups[jIndex].group,
-							name : dss.staticDataModel.nameCache[iIndex].groups[jIndex].name,
-							reachable : dss.staticDataModel.nameCache[iIndex].groups[jIndex].reachable,
-							color : dss.staticDataModel.nameCache[iIndex].groups[jIndex].color
-						});
-					}
-			}
-		}
-	}
+    if (dss.staticDataModel.nameCache) {
+    	for (var iIndex = 0; iIndex < dss.staticDataModel.nameCache.length; iIndex++) {
+    		if (dss.staticDataModel.nameCache[iIndex].ZoneID == 0) {
+                if (dss.staticDataModel.nameCache[iIndex].groups) {
+        			for (var jIndex = 0; jIndex < dss.staticDataModel.nameCache[iIndex].groups.length; jIndex++) {
+        				if (dss.staticDataModel.isClusterGroup(dss.staticDataModel.nameCache[iIndex].groups[jIndex].group))
+        					if (dss.staticDataModel.nameCache[iIndex].groups[jIndex].color !== 0) {
+        						dss.staticDataModel.userGroups.push({
+        							id : dss.staticDataModel.nameCache[iIndex].groups[jIndex].group,
+        							name : dss.staticDataModel.nameCache[iIndex].groups[jIndex].name,
+        							reachable : dss.staticDataModel.nameCache[iIndex].groups[jIndex].reachable,
+        							color : dss.staticDataModel.nameCache[iIndex].groups[jIndex].color
+        						});
+        					}
+        			}
+                }
+    		}
+    	}
+    }
 	for (var iIndex=0;iIndex<oVDC_DSID.length;iIndex++)
 		dss.staticDataModel.getActions(oVDC_DSID[iIndex]);
 
@@ -1336,7 +1368,7 @@ dss.staticDataModel.getActions = function(dsid) {
 	var device=dss.staticDataModel.getDevice(dsid);
 	if (device==null)
 		return;
-	if (!device.hasActions)		
+	if (!device.hasActions)
 		return;
 	if (device.deviceStandardActions==null) {
 		var sResult = Ext.JSON.decode(dss.ajaxSyncRequest('/json/device/getInfo', {
@@ -1359,7 +1391,7 @@ dss.staticDataModel.getActions = function(dsid) {
 			device.deviceEvents=[];
             device.deviceActions=[];
 		}
-	}	
+	}
 }
 
 dss.staticDataModel.getStandardActions = function(dsid) {
@@ -1404,7 +1436,7 @@ dss.staticDataModel.getDeviceStates = function (dsid) {
 
 dss.staticDataModel.initZoneSensorCache = function() {
 	// json/property/query2?query=/apartment/zones/*(ZoneID)/groups/*(group)/sensor/*(*)
-	
+
 	var sResult = dss.ajaxSyncRequest('/json/property/query2', {
 		'query' : dss.staticDataModel.sQueryStringZoneSensor
 	});
@@ -1425,14 +1457,17 @@ dss.staticDataModel.initZoneSensorCache = function() {
 							}
 						}
 					}
-					for (var iIndex = 0; iIndex < dss.staticDataModel.nameCache.length; iIndex++) {
-						if (dss.staticDataModel.nameCache[iIndex].ZoneID==zoneID)			
-							for (var jIndex=0;jIndex<dss.staticDataModel.nameCache[iIndex].groups.length;jIndex++) {
-								if (dss.staticDataModel.nameCache[iIndex].groups[jIndex].group==groupID)
-									if (dss.staticDataModel.nameCache[iIndex].groups[jIndex]!=null)
-										dss.staticDataModel.nameCache[iIndex].groups[jIndex].sensors=sensorObj;
-							}
-					}
+                    if (dss.staticDataModel.nameCache) {
+    					for (var iIndex = 0; iIndex < dss.staticDataModel.nameCache.length; iIndex++) {
+    						if (dss.staticDataModel.nameCache[iIndex].ZoneID==zoneID && dss.staticDataModel.nameCache[iIndex].groups) {
+    							for (var jIndex=0;jIndex<dss.staticDataModel.nameCache[iIndex].groups.length;jIndex++) {
+    								if (dss.staticDataModel.nameCache[iIndex].groups[jIndex].group==groupID)
+    									if (dss.staticDataModel.nameCache[iIndex].groups[jIndex]!=null)
+    										dss.staticDataModel.nameCache[iIndex].groups[jIndex].sensors=sensorObj;
+    							}
+                            }
+    					}
+                    }
 				}
 			}
 		}
@@ -1483,17 +1518,19 @@ dss.staticDataModel.getNameForSensortype = function(type) {
             return _("Time");
 		default:
 			return _("Sensor type") + " " + type;
-	}	
+	}
 };
 
 
 dss.staticDataModel.hasDeviceStates = function(dsuid) {
 	var states = dss.staticDataModel.getStates();
-	for (var iIndex = 0; iIndex < states.length; iIndex++) {
-		var oState = states[iIndex];
-		if (oState.name.indexOf(dsuid) != -1)
-			return true;
-	}
+    if (states) {
+    	for (var iIndex = 0; iIndex < states.length; iIndex++) {
+    		var oState = states[iIndex];
+    		if (oState.name.indexOf(dsuid) != -1)
+    			return true;
+    	}
+    }
 	return false;
 };
 
@@ -1525,14 +1562,16 @@ dss.staticDataModel.initHLECache = function() {
 				for ( var sKey in resultObj.result.states[iIndex]) {
 					if (sKey != 'name')
 						if (sKey != 'value') {
-							for (var jIndex = 0; jIndex < resultObj.result.states[iIndex][sKey].length; jIndex++)
-								for ( var sSubKey in resultObj.result.states[iIndex][sKey][jIndex]) {
-									var oValue = {
-										name : sSubKey,
-										value : resultObj.result.states[iIndex][sKey][jIndex][sSubKey]
-									};
-									oObjectState.valuerange.push(oValue);
-								}
+                            if (resultObj.result.states[iIndex][sKey]) {
+    							for (var jIndex = 0; jIndex < resultObj.result.states[iIndex][sKey].length; jIndex++)
+    								for ( var sSubKey in resultObj.result.states[iIndex][sKey][jIndex]) {
+    									var oValue = {
+    										name : sSubKey,
+    										value : resultObj.result.states[iIndex][sKey][jIndex][sSubKey]
+    									};
+    									oObjectState.valuerange.push(oValue);
+    								}
+                            }
 						}
 				}
 				if (oObjectState.valuerange.length == 0) {
@@ -1583,20 +1622,24 @@ dss.staticDataModel.getStates = function() {
 		dss.staticDataModel.initHLECache();
 
 	var oResult = [];
-	for (var iIndex = 0; iIndex < dss.staticDataModel.StateCache.length; iIndex++) {
-		var valuerange = [];
-		for (var jIndex = 0; jIndex < dss.staticDataModel.StateCache[iIndex].valuerange.length; jIndex++) {
-			valuerange.push({
-				name : dss.staticDataModel.StateCache[iIndex].valuerange[jIndex].name,
-				value : dss.staticDataModel.StateCache[iIndex].valuerange[jIndex].value
-			});
-		}
-		oResult.push({
-			value : dss.staticDataModel.StateCache[iIndex].value,
-			name : dss.staticDataModel.StateCache[iIndex].name,
-			valuerange : valuerange
-		});
-	}
+    if (dss.staticDataModel.StateCache) {
+    	for (var iIndex = 0; iIndex < dss.staticDataModel.StateCache.length; iIndex++) {
+    		var valuerange = [];
+            if (dss.staticDataModel.StateCache[iIndex].valuerange) {
+        		for (var jIndex = 0; jIndex < dss.staticDataModel.StateCache[iIndex].valuerange.length; jIndex++) {
+        			valuerange.push({
+        				name : dss.staticDataModel.StateCache[iIndex].valuerange[jIndex].name,
+        				value : dss.staticDataModel.StateCache[iIndex].valuerange[jIndex].value
+        			});
+        		}
+            }
+    		oResult.push({
+    			value : dss.staticDataModel.StateCache[iIndex].value,
+    			name : dss.staticDataModel.StateCache[iIndex].name,
+    			valuerange : valuerange
+    		});
+    	}
+    }
 	return oResult;
 };
 
@@ -1617,15 +1660,17 @@ dss.staticDataModel.getZoneArray = function() {
 		dss.staticDataModel.initCaches();
 
 	var oResult = [];
-	for (var iIndex = 0; iIndex < dss.staticDataModel.nameCache.length; iIndex++) {
-	    if (dss.staticDataModel.nameCache[iIndex].ZoneID === 65534) {
-	        continue;
-	    }
-		oResult.push({
-			ZoneID : dss.staticDataModel.nameCache[iIndex].ZoneID,
-			name : dss.staticDataModel.nameCache[iIndex].name
-		});
-	}
+    if (dss.staticDataModel.nameCache) {
+    	for (var iIndex = 0; iIndex < dss.staticDataModel.nameCache.length; iIndex++) {
+    	    if (dss.staticDataModel.nameCache[iIndex].ZoneID === 65534) {
+    	        continue;
+    	    }
+    		oResult.push({
+    			ZoneID : dss.staticDataModel.nameCache[iIndex].ZoneID,
+    			name : dss.staticDataModel.nameCache[iIndex].name
+    		});
+    	}
+    }
 	return oResult;
 };
 
@@ -1633,21 +1678,25 @@ dss.staticDataModel.getDevicesForZone = function(zoneID, groupID) {
 	if (dss.staticDataModel.nameCache == null)
 		dss.staticDataModel.initCaches();
 	var oRetArray = [];
-	for (var i = 0; i < dss.staticDataModel.deviceCache.length; i++) {
-		var oDeviceObject = dss.staticDataModel.deviceCache[i];
-		var fAdded = false;
-		for (var j = 0; j < oDeviceObject.GroupMembership.length; j++) {
-			var oDeviceGroup = oDeviceObject.GroupMembership[j];
-			if (oDeviceGroup == 8)
-				oDeviceGroup = oDeviceObject.buttonActiveGroup;
-			if ((oDeviceObject.ZoneID == zoneID) || (zoneID == 0))
-				if ((oDeviceGroup == groupID) || (groupID == 0))
-					if (!fAdded) {
-						oRetArray.push(oDeviceObject);
-						fAdded = true;
-					}
-		}
-	}
+    if (dss.staticDataModel.deviceCache) {
+    	for (var i = 0; i < dss.staticDataModel.deviceCache.length; i++) {
+    		var oDeviceObject = dss.staticDataModel.deviceCache[i];
+    		var fAdded = false;
+            if (oDeviceObject.GroupMembership) {
+        		for (var j = 0; j < oDeviceObject.GroupMembership.length; j++) {
+        			var oDeviceGroup = oDeviceObject.GroupMembership[j];
+        			if (oDeviceGroup == 8)
+        				oDeviceGroup = oDeviceObject.buttonActiveGroup;
+        			if ((oDeviceObject.ZoneID == zoneID) || (zoneID == 0))
+        				if ((oDeviceGroup == groupID) || (groupID == 0))
+        					if (!fAdded) {
+        						oRetArray.push(oDeviceObject);
+        						fAdded = true;
+        					}
+        		}
+            }
+    	}
+    }
 	return oRetArray;
 };
 dss.staticDataModel.getNameForSensorEvent = function(device, eventid) {
@@ -2026,13 +2075,16 @@ dss.staticDataModel.getNameForGroup = function(zoneID, group) {
 		break;
 	}
 
-	for (var iZoneIndex = 0; iZoneIndex < dss.staticDataModel.nameCache.length; iZoneIndex++)
-		if (dss.staticDataModel.nameCache[iZoneIndex].ZoneID == zoneID)
-			for (var iGroupIndex = 0; iGroupIndex < dss.staticDataModel.nameCache[iZoneIndex].groups.length; iGroupIndex++)
-				if (dss.staticDataModel.nameCache[iZoneIndex].groups[iGroupIndex].group == group)
-					if (dss.staticDataModel.nameCache[iZoneIndex].groups[iGroupIndex].name && (dss.staticDataModel.nameCache[iZoneIndex].groups[iGroupIndex].name != baseName))
-						if (dss.staticDataModel.nameCache[iZoneIndex].groups[iGroupIndex].name && (dss.staticDataModel.nameCache[iZoneIndex].groups[iGroupIndex].name != baseName2))
-							return dss.staticDataModel.nameCache[iZoneIndex].groups[iGroupIndex].name;
+    if (dss.staticDataModel.nameCache) {
+    	for (var iZoneIndex = 0; iZoneIndex < dss.staticDataModel.nameCache.length; iZoneIndex++)
+    		if (dss.staticDataModel.nameCache[iZoneIndex].ZoneID == zoneID)
+                if (dss.staticDataModel.nameCache[iZoneIndex].groups)
+        			for (var iGroupIndex = 0; iGroupIndex < dss.staticDataModel.nameCache[iZoneIndex].groups.length; iGroupIndex++)
+        				if (dss.staticDataModel.nameCache[iZoneIndex].groups[iGroupIndex].group == group)
+        					if (dss.staticDataModel.nameCache[iZoneIndex].groups[iGroupIndex].name && (dss.staticDataModel.nameCache[iZoneIndex].groups[iGroupIndex].name != baseName))
+        						if (dss.staticDataModel.nameCache[iZoneIndex].groups[iGroupIndex].name && (dss.staticDataModel.nameCache[iZoneIndex].groups[iGroupIndex].name != baseName2))
+        							return dss.staticDataModel.nameCache[iZoneIndex].groups[iGroupIndex].name;
+    }
 	return defaultName;
 };
 
@@ -2076,7 +2128,7 @@ dss.staticDataModel.getDefaultNameForScene = function(zoneID, group, scene) {
         case 73:
             defaultName = _('Bell');
         break;
-        
+
         case 74:
             defaultName = _('Alarm 1');
         break;
@@ -2110,7 +2162,7 @@ dss.staticDataModel.getDefaultNameForScene = function(zoneID, group, scene) {
         case 76:
             defaultName = _('Fire');
         break;
-                
+
         case 65:
             defaultName = _('Panic');
         break;
@@ -2424,17 +2476,20 @@ dss.staticDataModel.getNameForScene = function(zoneID, group, scene) {
 		break;
 	}
 
-	for (var iZoneIndex = 0; iZoneIndex < dss.staticDataModel.nameCache.length; iZoneIndex++)
-		if (dss.staticDataModel.nameCache[iZoneIndex].ZoneID == zoneID)
-			for (var iGroupIndex = 0; iGroupIndex < dss.staticDataModel.nameCache[iZoneIndex].groups.length; iGroupIndex++)
-				if ((dss.staticDataModel.nameCache[iZoneIndex].groups[iGroupIndex].group == group) && (dss.staticDataModel.nameCache[iZoneIndex].groups[iGroupIndex].scenes !== undefined))
-					if (dss.staticDataModel.nameCache[iZoneIndex].groups[iGroupIndex].scenes.length !== undefined)
-						for (var iSceneIndex = 0; iSceneIndex < dss.staticDataModel.nameCache[iZoneIndex].groups[iGroupIndex].scenes.length; iSceneIndex++)
-							if (dss.staticDataModel.nameCache[iZoneIndex].groups[iGroupIndex].scenes[iSceneIndex].scene == scene)
-								if (dss.staticDataModel.nameCache[iZoneIndex].groups[iGroupIndex].scenes[iSceneIndex].name != null)
-									if (dss.staticDataModel.nameCache[iZoneIndex].groups[iGroupIndex].scenes[iSceneIndex].name != '')
-										if (dss.staticDataModel.nameCache[iZoneIndex].groups[iGroupIndex].scenes[iSceneIndex].name != baseName)
-											return dss.staticDataModel.nameCache[iZoneIndex].groups[iGroupIndex].scenes[iSceneIndex].name;
+    if (dss.staticDataModel.nameCache) {
+    	for (var iZoneIndex = 0; iZoneIndex < dss.staticDataModel.nameCache.length; iZoneIndex++)
+    		if (dss.staticDataModel.nameCache[iZoneIndex].ZoneID == zoneID)
+                if (dss.staticDataModel.nameCache[iZoneIndex].groups)
+        			for (var iGroupIndex = 0; iGroupIndex < dss.staticDataModel.nameCache[iZoneIndex].groups.length; iGroupIndex++)
+        				if ((dss.staticDataModel.nameCache[iZoneIndex].groups[iGroupIndex].group == group) && (dss.staticDataModel.nameCache[iZoneIndex].groups[iGroupIndex].scenes !== undefined))
+        					if (dss.staticDataModel.nameCache[iZoneIndex].groups[iGroupIndex].scenes.length !== undefined)
+        						for (var iSceneIndex = 0; iSceneIndex < dss.staticDataModel.nameCache[iZoneIndex].groups[iGroupIndex].scenes.length; iSceneIndex++)
+        							if (dss.staticDataModel.nameCache[iZoneIndex].groups[iGroupIndex].scenes[iSceneIndex].scene == scene)
+        								if (dss.staticDataModel.nameCache[iZoneIndex].groups[iGroupIndex].scenes[iSceneIndex].name != null)
+        									if (dss.staticDataModel.nameCache[iZoneIndex].groups[iGroupIndex].scenes[iSceneIndex].name != '')
+        										if (dss.staticDataModel.nameCache[iZoneIndex].groups[iGroupIndex].scenes[iSceneIndex].name != baseName)
+        											return dss.staticDataModel.nameCache[iZoneIndex].groups[iGroupIndex].scenes[iSceneIndex].name;
+    }
 	return dss.staticDataModel.getDefaultNameForScene(zoneID, group, scene);
 };
 
@@ -2448,44 +2503,54 @@ dss.staticDataModel.getNameForZone = function(zoneID) {
 		baseName = _('whole installation');
 	if (zoneID == -1)
 		baseName = _('any room');
-	for (var iZoneIndex = 0; iZoneIndex < dss.staticDataModel.nameCache.length; iZoneIndex++)
-		if (dss.staticDataModel.nameCache[iZoneIndex].ZoneID == zoneID)
-			if (dss.staticDataModel.nameCache[iZoneIndex].name != "")
-				return dss.staticDataModel.nameCache[iZoneIndex].name;
+    if (dss.staticDataModel.nameCache) {
+    	for (var iZoneIndex = 0; iZoneIndex < dss.staticDataModel.nameCache.length; iZoneIndex++)
+    		if (dss.staticDataModel.nameCache[iZoneIndex].ZoneID == zoneID)
+    			if (dss.staticDataModel.nameCache[iZoneIndex].name != "")
+    				return dss.staticDataModel.nameCache[iZoneIndex].name;
+    }
 	return baseName;
 };
 
 dss.staticDataModel.hasConnectedDevicesForGroup = function(zoneID, group) {
-
-	for (var iZoneIndex = 0; iZoneIndex < dss.staticDataModel.nameCache.length; iZoneIndex++)
-		if (dss.staticDataModel.nameCache[iZoneIndex].ZoneID == zoneID)
-			for (var iGroupIndex = 0; iGroupIndex < dss.staticDataModel.nameCache[iZoneIndex].groups.length; iGroupIndex++)
-				if (dss.staticDataModel.nameCache[iZoneIndex].groups[iGroupIndex].group == group)
-						return (dss.staticDataModel.nameCache[iZoneIndex].groups[iGroupIndex].connectedDevices!=0);
+    if (dss.staticDataModel.nameCache == null)
+		dss.staticDataModel.initCaches();
+    if (dss.staticDataModel.nameCache) {
+    	for (var iZoneIndex = 0; iZoneIndex < dss.staticDataModel.nameCache.length; iZoneIndex++)
+    		if (dss.staticDataModel.nameCache[iZoneIndex].ZoneID == zoneID)
+                if (dss.staticDataModel.nameCache[iZoneIndex].groups)
+        			for (var iGroupIndex = 0; iGroupIndex < dss.staticDataModel.nameCache[iZoneIndex].groups.length; iGroupIndex++)
+        				if (dss.staticDataModel.nameCache[iZoneIndex].groups[iGroupIndex].group == group)
+        						return (dss.staticDataModel.nameCache[iZoneIndex].groups[iGroupIndex].connectedDevices!=0);
+    }
 	return false;
 }
 
 dss.staticDataModel.getGroupForZone = function(zoneID) {
 	if (dss.staticDataModel.nameCache == null)
 		dss.staticDataModel.initCaches();
-	for (var iZoneIndex = 0; iZoneIndex < dss.staticDataModel.nameCache.length; iZoneIndex++)
-		if (dss.staticDataModel.nameCache[iZoneIndex].ZoneID == zoneID) {
-			var oResult = [];
-			for (var iIndex = 0; iIndex < dss.staticDataModel.nameCache[iZoneIndex].groups.length; iIndex++)
-				if (dss.staticDataModel.nameCache[iZoneIndex].groups[iIndex].group != 6)
-					if (dss.staticDataModel.nameCache[iZoneIndex].groups[iIndex].group != 7)
-						if ((dss.staticDataModel.nameCache[iZoneIndex].groups[iIndex].group < 16)
-							 || ((zoneID == 0) && dss.staticDataModel.isClusterGroup(dss.staticDataModel.nameCache[iZoneIndex].groups[iIndex].group))
-							 || ((zoneID == 0) && dss.staticDataModel.nameCache[iZoneIndex].groups[iIndex].group>63))
-							oResult.push({
-								'group' : dss.staticDataModel.nameCache[iZoneIndex].groups[iIndex].group,
-								'name' : dss.staticDataModel.nameCache[iZoneIndex].groups[iIndex].name,
-								'icon' : dss.staticDataModel.nameCache[iZoneIndex].groups[iIndex].icon,
-								'reachable' : dss.staticDataModel.nameCache[iZoneIndex].groups[iIndex].reachable,
-								'connectedDevices' : dss.staticDataModel.nameCache[iZoneIndex].groups[iIndex].connectedDevices
-							});
-			return oResult;
-		}
+    if (dss.staticDataModel.nameCache) {
+    	for (var iZoneIndex = 0; iZoneIndex < dss.staticDataModel.nameCache.length; iZoneIndex++)
+    		if (dss.staticDataModel.nameCache[iZoneIndex].ZoneID == zoneID) {
+    			var oResult = [];
+                if (dss.staticDataModel.nameCache[iZoneIndex].groups) {
+        			for (var iIndex = 0; iIndex < dss.staticDataModel.nameCache[iZoneIndex].groups.length; iIndex++)
+        				if (dss.staticDataModel.nameCache[iZoneIndex].groups[iIndex].group != 6)
+        					if (dss.staticDataModel.nameCache[iZoneIndex].groups[iIndex].group != 7)
+        						if ((dss.staticDataModel.nameCache[iZoneIndex].groups[iIndex].group < 16)
+        							 || ((zoneID == 0) && dss.staticDataModel.isClusterGroup(dss.staticDataModel.nameCache[iZoneIndex].groups[iIndex].group))
+        							 || ((zoneID == 0) && dss.staticDataModel.nameCache[iZoneIndex].groups[iIndex].group>63))
+        							oResult.push({
+        								'group' : dss.staticDataModel.nameCache[iZoneIndex].groups[iIndex].group,
+        								'name' : dss.staticDataModel.nameCache[iZoneIndex].groups[iIndex].name,
+        								'icon' : dss.staticDataModel.nameCache[iZoneIndex].groups[iIndex].icon,
+        								'reachable' : dss.staticDataModel.nameCache[iZoneIndex].groups[iIndex].reachable,
+        								'connectedDevices' : dss.staticDataModel.nameCache[iZoneIndex].groups[iIndex].connectedDevices
+        							});
+                }
+    			return oResult;
+    		}
+    }
 	return null;
 };
 
@@ -2494,10 +2559,12 @@ dss.staticDataModel.getDevice = function(dSUID) {
 		dss.staticDataModel.initCaches();
 	}
 	if (DSS.types.dsuid.isDSUID(dSUID)) {
-		for (var i = 0; i < dss.staticDataModel.deviceCache.length; i++) {
-			if (dSUID == dss.staticDataModel.deviceCache[i].dSUID)
-				return dss.staticDataModel.deviceCache[i];
-		}
+        if (dss.staticDataModel.deviceCache) {
+    		for (var i = 0; i < dss.staticDataModel.deviceCache.length; i++) {
+    			if (dSUID == dss.staticDataModel.deviceCache[i].dSUID)
+    				return dss.staticDataModel.deviceCache[i];
+    		}
+        }
 		return {
 			dSID : DSS.types.dsuid.dsuid_to_dsid(dSUID),
 			dSUID : dSUID,
@@ -2506,10 +2573,12 @@ dss.staticDataModel.getDevice = function(dSUID) {
 			specialActions: {}
 		};
 	} else {
-		for (var i = 0; i < dss.staticDataModel.deviceCache.length; i++) {
-			if (dSUID == dss.staticDataModel.deviceCache[i].dSID)
-				return dss.staticDataModel.deviceCache[i];
-		}
+        if (dss.staticDataModel.deviceCache) {
+    		for (var i = 0; i < dss.staticDataModel.deviceCache.length; i++) {
+    			if (dSUID == dss.staticDataModel.deviceCache[i].dSID)
+    				return dss.staticDataModel.deviceCache[i];
+    		}
+        }
 		return {
 			dSID : dSUID,
 			dSUID : DSS.types.dsuid.dsuid_from_dsid(dSUID),
@@ -2693,18 +2762,20 @@ dss.staticDataModel.getImagePathForScene = function(zoneID, groupID, sceneID, fU
 
 dss.staticDataModel.getScene = function(zoneId, groupId, sceneID) {
 	var oSceneArray = dss.staticDataModel.getScenes(zoneId, groupId);
-	for (var iIndex = 0; iIndex < oSceneArray.length; iIndex++) {
-		if (oSceneArray[iIndex].id == sceneID)
-			return oSceneArray[iIndex];
-	}
+    if (oSceneArray) {
+    	for (var iIndex = 0; iIndex < oSceneArray.length; iIndex++) {
+    		if (oSceneArray[iIndex].id == sceneID)
+    			return oSceneArray[iIndex];
+    	}
+    }
 	return null;
 };
 
 dss.staticDataModel.getScenes = function(zoneId, groupId) {
 	if (dss.staticDataModel.nameCache == null)
 		dss.staticDataModel.initCaches();
-	
-	
+
+
 	var oDeviceArray = dss.staticDataModel.getDevicesForZone(zoneId, groupId);
 
     var oRetArray = [];
@@ -2726,19 +2797,21 @@ dss.staticDataModel.getScenes = function(zoneId, groupId) {
 
 	if (zoneId==0)
 		if (groupId>63) {
-			for (var iIndex=0;iIndex<dss.staticDataModel.nameCache.length;iIndex++) {
-				if ( dss.staticDataModel.nameCache[iIndex].ZoneID==0) {
-					for (var jIndex=0;jIndex<dss.staticDataModel.nameCache[iIndex].groups.length;jIndex++) {
-						if (dss.staticDataModel.nameCache[iIndex].groups[jIndex].group==64) {
-							if (dss.staticDataModel.nameCache[iIndex].groups[jIndex].activeBasicScenes!=null)
-								sceneArray= JSON.parse('[' +dss.staticDataModel.nameCache[iIndex].groups[jIndex].activeBasicScenes+']');
-						}
-					}
-				}
-			}
+            if (dss.staticDataModel.nameCache) {
+    			for (var iIndex=0;iIndex<dss.staticDataModel.nameCache.length;iIndex++) {
+    				if ( dss.staticDataModel.nameCache[iIndex].ZoneID==0 && dss.staticDataModel.nameCache[iIndex].groups) {
+    					for (var jIndex=0;jIndex<dss.staticDataModel.nameCache[iIndex].groups.length;jIndex++) {
+    						if (dss.staticDataModel.nameCache[iIndex].groups[jIndex].group==64) {
+    							if (dss.staticDataModel.nameCache[iIndex].groups[jIndex].activeBasicScenes!=null)
+    								sceneArray= JSON.parse('[' +dss.staticDataModel.nameCache[iIndex].groups[jIndex].activeBasicScenes+']');
+    						}
+    					}
+    				}
+    			}
+            }
 		}
-    
-    
+
+
 	for (var iIndex = 0; iIndex < sceneArray.length; iIndex++) {
 		var oSzeneObject = {
 			id : sceneArray[iIndex],
@@ -2755,149 +2828,150 @@ dss.staticDataModel.getScenes = function(zoneId, groupId) {
 		oRetArray.push(oSzeneObject);
 	}
 
-    
+
     function searchAndEnableScene(id) {
         for ( var iIndex = 0; iIndex < oRetArray.length; iIndex++)
             if (oRetArray[iIndex].id == id)
                 oRetArray[iIndex].reachable = true;
     }
-    
+
     function searchAndSetUndo(id,undo) {
         for ( var iIndex = 0; iIndex < oRetArray.length; iIndex++)
             if (oRetArray[iIndex].id == id)
                 oRetArray[iIndex].undoable = undo;
     }
-    
+
     if (groupId != 7)
     	if (groupId != 6)
     if (groupId != 0) {
-        for ( var iDeviceIndex = 0; iDeviceIndex < oDeviceArray.length; iDeviceIndex++) {
-            var oDev = oDeviceArray[iDeviceIndex];
-            
-			if (oDev.productID == 12488)
-				if ((oDev.functionID == 33052) || (oDev.functionID == 33044))
-					if (groupId != 8) {
-						searchAndEnableScene(0);
-						searchAndEnableScene(5);
-						searchAndEnableScene(17);
-						searchAndEnableScene(18);
-						searchAndEnableScene(19);
-					}
-            
-            if (oDev.tasterMode>0) {
-                if (groupId == 2)
-                {
-                    searchAndEnableScene(56);
-                    searchAndEnableScene(15);
+        if (oDeviceArray) {
+            for ( var iDeviceIndex = 0; iDeviceIndex < oDeviceArray.length; iDeviceIndex++) {
+                var oDev = oDeviceArray[iDeviceIndex];
+
+    			if (oDev.productID == 12488)
+    				if ((oDev.functionID == 33052) || (oDev.functionID == 33044))
+    					if (groupId != 8) {
+    						searchAndEnableScene(0);
+    						searchAndEnableScene(5);
+    						searchAndEnableScene(17);
+    						searchAndEnableScene(18);
+    						searchAndEnableScene(19);
+    					}
+
+                if (oDev.tasterMode>0) {
+                    if (groupId == 2)
+                    {
+                        searchAndEnableScene(56);
+                        searchAndEnableScene(15);
+                    }
+                    if (groupId == 1)
+                    {
+                    	searchAndEnableScene(40);
+                    }
                 }
-                if (groupId == 1) 
-                {
-                	searchAndEnableScene(40);
+
+                switch (oDev.tasterMode) {
+                    case 0:
+                        searchAndEnableScene(17);
+                        searchAndEnableScene(18);
+                        searchAndEnableScene(19);
+                        searchAndEnableScene(5);
+                        searchAndEnableScene(0);
+                    break;
+                    case 1:
+                        searchAndEnableScene(1);
+                        searchAndEnableScene(6);
+                        searchAndEnableScene(17);
+                        searchAndEnableScene(18);
+                        searchAndEnableScene(19);
+                    break;
+                    case 2:
+                        searchAndEnableScene(2);
+                        searchAndEnableScene(7);
+                        searchAndEnableScene(17);
+                        searchAndEnableScene(18);
+                        searchAndEnableScene(19);
+                    break;
+                    case 3:
+                        searchAndEnableScene(3);
+                        searchAndEnableScene(8);
+                        searchAndEnableScene(17);
+                        searchAndEnableScene(18);
+                        searchAndEnableScene(19);
+                    break;
+                    case 4:
+                        searchAndEnableScene(4);
+                        searchAndEnableScene(9);
+                        searchAndEnableScene(17);
+                        searchAndEnableScene(18);
+                        searchAndEnableScene(19);
+                    break;
+                    case 5:
+                        searchAndEnableScene(0);
+                        searchAndEnableScene(5);
+                        searchAndEnableScene(17);
+                        searchAndEnableScene(18);
+                        searchAndEnableScene(19);
+                    break;
+                    case 6:
+                        searchAndEnableScene(32);
+                        searchAndEnableScene(33);
+                        searchAndEnableScene(20);
+                        searchAndEnableScene(21);
+                        searchAndEnableScene(22);
+                    break;
+                    case 7:
+                        searchAndEnableScene(34);
+                        searchAndEnableScene(35);
+                        searchAndEnableScene(23);
+                        searchAndEnableScene(24);
+                        searchAndEnableScene(25);
+                    break;
+                    case 8:
+                        searchAndEnableScene(36);
+                        searchAndEnableScene(37);
+                        searchAndEnableScene(26);
+                        searchAndEnableScene(27);
+                        searchAndEnableScene(28);
+                    break;
+                    case 9:
+                        searchAndEnableScene(38);
+                        searchAndEnableScene(39);
+                        searchAndEnableScene(29);
+                        searchAndEnableScene(30);
+                        searchAndEnableScene(31);
+                    break;
+                    case 10:
+                        searchAndEnableScene(1);
+                        searchAndEnableScene(6);
+                        searchAndEnableScene(20);
+                        searchAndEnableScene(21);
+                        searchAndEnableScene(22);
+                    break;
+                    case 11:
+                        searchAndEnableScene(2);
+                        searchAndEnableScene(7);
+                        searchAndEnableScene(23);
+                        searchAndEnableScene(24);
+                        searchAndEnableScene(25);
+                    break;
+                    case 12:
+                        searchAndEnableScene(3);
+                        searchAndEnableScene(8);
+                        searchAndEnableScene(26);
+                        searchAndEnableScene(27);
+                        searchAndEnableScene(28);
+                    break;
+                    case 13:
+                        searchAndEnableScene(4);
+                        searchAndEnableScene(9);
+                        searchAndEnableScene(29);
+                        searchAndEnableScene(30);
+                        searchAndEnableScene(31);
+                    break;
                 }
             }
-            
-            switch (oDev.tasterMode) {
-                case 0:
-                    searchAndEnableScene(17);
-                    searchAndEnableScene(18);
-                    searchAndEnableScene(19);
-                    searchAndEnableScene(5);
-                    searchAndEnableScene(0);
-                break;
-                case 1:
-                    searchAndEnableScene(1);
-                    searchAndEnableScene(6);
-                    searchAndEnableScene(17);
-                    searchAndEnableScene(18);
-                    searchAndEnableScene(19);
-                break;
-                case 2:
-                    searchAndEnableScene(2);
-                    searchAndEnableScene(7);
-                    searchAndEnableScene(17);
-                    searchAndEnableScene(18);
-                    searchAndEnableScene(19);
-                break;
-                case 3:
-                    searchAndEnableScene(3);
-                    searchAndEnableScene(8);
-                    searchAndEnableScene(17);
-                    searchAndEnableScene(18);
-                    searchAndEnableScene(19);
-                break;
-                case 4:
-                    searchAndEnableScene(4);
-                    searchAndEnableScene(9);
-                    searchAndEnableScene(17);
-                    searchAndEnableScene(18);
-                    searchAndEnableScene(19);
-                break;
-                case 5:
-                    searchAndEnableScene(0);
-                    searchAndEnableScene(5);
-                    searchAndEnableScene(17);
-                    searchAndEnableScene(18);
-                    searchAndEnableScene(19);
-                break;
-                case 6:
-                    searchAndEnableScene(32);
-                    searchAndEnableScene(33);
-                    searchAndEnableScene(20);
-                    searchAndEnableScene(21);
-                    searchAndEnableScene(22);
-                break;
-                case 7:
-                    searchAndEnableScene(34);
-                    searchAndEnableScene(35);
-                    searchAndEnableScene(23);
-                    searchAndEnableScene(24);
-                    searchAndEnableScene(25);
-                break;
-                case 8:
-                    searchAndEnableScene(36);
-                    searchAndEnableScene(37);
-                    searchAndEnableScene(26);
-                    searchAndEnableScene(27);
-                    searchAndEnableScene(28);
-                break;
-                case 9:
-                    searchAndEnableScene(38);
-                    searchAndEnableScene(39);
-                    searchAndEnableScene(29);
-                    searchAndEnableScene(30);
-                    searchAndEnableScene(31);
-                break;
-                case 10:
-                    searchAndEnableScene(1);
-                    searchAndEnableScene(6);
-                    searchAndEnableScene(20);
-                    searchAndEnableScene(21);
-                    searchAndEnableScene(22);
-                break;
-                case 11:
-                    searchAndEnableScene(2);
-                    searchAndEnableScene(7);
-                    searchAndEnableScene(23);
-                    searchAndEnableScene(24);
-                    searchAndEnableScene(25);
-                break;
-                case 12:
-                    searchAndEnableScene(3);
-                    searchAndEnableScene(8);
-                    searchAndEnableScene(26);
-                    searchAndEnableScene(27);
-                    searchAndEnableScene(28);
-                break;
-                case 13:
-                    searchAndEnableScene(4);
-                    searchAndEnableScene(9);
-                    searchAndEnableScene(29);
-                    searchAndEnableScene(30);
-                    searchAndEnableScene(31);
-                break;
-            }
         }
-        
     }
     if ((zoneId != 0) && (groupId == 0)) {
         searchAndEnableScene(67);
@@ -2908,18 +2982,20 @@ dss.staticDataModel.getScenes = function(zoneId, groupId) {
 
 
 	if ((zoneId == 0) && (groupId == 0)) {
-		for (var i = 0; i < dss.staticDataModel.deviceCache.length; i++) {
-			var oDeviceObject = dss.staticDataModel.deviceCache[i];
-			if (oDeviceObject.functionID == 0x7010)
-				searchAndEnableScene(73); // klingel
-			if (oDeviceObject.functionID == 0x6001) {
-				searchAndEnableScene(65); // panik
-			}
-			if (oDeviceObject.functionID == 0x7050) {
-				searchAndEnableScene(71); // kommen
-				searchAndEnableScene(72); // gehen
-			}
-		}
+        if (dss.staticDataModel.deviceCache) {
+    		for (var i = 0; i < dss.staticDataModel.deviceCache.length; i++) {
+    			var oDeviceObject = dss.staticDataModel.deviceCache[i];
+    			if (oDeviceObject.functionID == 0x7010)
+    				searchAndEnableScene(73); // klingel
+    			if (oDeviceObject.functionID == 0x6001) {
+    				searchAndEnableScene(65); // panik
+    			}
+    			if (oDeviceObject.functionID == 0x7050) {
+    				searchAndEnableScene(71); // kommen
+    				searchAndEnableScene(72); // gehen
+    			}
+    		}
+        }
 		searchAndEnableScene(67);
 		searchAndEnableScene(68);
 		searchAndEnableScene(69);
@@ -2941,16 +3017,16 @@ dss.staticDataModel.getScenes = function(zoneId, groupId) {
 		searchAndEnableScene(19); // preset4
 	}
 
-	
+
     if (dss.staticDataModel.hasConnectedDevicesForGroup(zoneId, groupId)) {
 		searchAndEnableScene(0); // preset0
 		searchAndEnableScene(5); // preset1
 		searchAndEnableScene(17); // preset2
 		searchAndEnableScene(18); // preset3
-		searchAndEnableScene(19); // preset4	
+		searchAndEnableScene(19); // preset4
     }
 
-	
+
 	searchAndSetUndo(76, true);
 	searchAndSetUndo(74, true);
 	searchAndSetUndo(83, true);
@@ -2972,10 +3048,12 @@ dss.staticDataModel.getUserGroupColor = function(groupID) {
 
 dss.staticDataModel.getUserGroupName = function(groupID) {
 	var oArray = dss.staticDataModel.getUsergroups();
-	for (var iIndex = 0; iIndex < oArray.length; iIndex++) {
-		if (oArray[iIndex].id == groupID)
-			return oArray[iIndex].name;
-	}
+    if (oArray) {
+    	for (var iIndex = 0; iIndex < oArray.length; iIndex++) {
+    		if (oArray[iIndex].id == groupID)
+    			return oArray[iIndex].name;
+    	}
+    }
 	return "";
 };
 
@@ -3221,21 +3299,25 @@ dss.staticDataModel.getTooltipForState = function(type, value) {
 
 dss.staticDataModel.IsWindowHandle = function(oDevice) {
 	var bResult = false;
-	for (var iIndex = 0; iIndex < oDevice.binaryInputs.length; iIndex++) {
-		if (oDevice.binaryInputs[iIndex].type == 15) {
-			bResult = true;
-			break;
-		}
-	}
+    if (oDevice && oDevice.binaryInputs) {
+    	for (var iIndex = 0; iIndex < oDevice.binaryInputs.length; iIndex++) {
+    		if (oDevice.binaryInputs[iIndex].type == 15) {
+    			bResult = true;
+    			break;
+    		}
+    	}
+    }
 	return bResult;
 };
 
 dss.staticDataModel.GetWindowHandleBinaryInputIndex = function(oDevice) {
-	for (var iIndex = 0; iIndex < oDevice.binaryInputs.length; iIndex++) {
-		if (oDevice.binaryInputs[iIndex].type == 15) {
-			return iIndex;
-		}
-	}
+    if (oDevice && oDevice.binaryInputs) {
+    	for (var iIndex = 0; iIndex < oDevice.binaryInputs.length; iIndex++) {
+    		if (oDevice.binaryInputs[iIndex].type == 15) {
+    			return iIndex;
+    		}
+    	}
+    }
 	return -1;
 };
 
@@ -3254,7 +3336,7 @@ dss.parsePropertyQueryAnswer = function(oJsonObject, paramDef) {
 	var oReturnArray = [];
 	for ( var sKey in oJsonObject.result) {
 		var oRootArray = oJsonObject.result[sKey];
-		for (var iIndex = 0; iIndex < oRootArray.length; iIndex++) {
+		for (var iIndex = 0; oRootArray && iIndex < oRootArray.length; iIndex++) {
 			var oObject = {};
 			var oIteratorObject = oRootArray[iIndex];
 			for (var sIndex = 0; sIndex < paramDef.length; sIndex++) {
@@ -3274,27 +3356,29 @@ dss.parsePropertyQueryAnswer = function(oJsonObject, paramDef) {
 					for ( var subIndex in oIteratorObject) {
 						if (typeof (oIteratorObject[subIndex]) == "object") {
 							var aArray = oIteratorObject[subIndex];
-							for (var jIndex = 0; jIndex < aArray.length; jIndex++) {
-								var oArrayObject = aArray[jIndex];
-								if (oArrayObject[oKeyParameter] != null) {
-
-									for (var kIndex = 0; kIndex < oArrayObject[oKeyParameter].length; kIndex++) {
-										var resultObject = oArrayObject[oKeyParameter][kIndex];
-										var oActionObject = {};
-										for ( var oKey in resultObject) {
-											oActionObject[oKey] = resultObject[oKey];
-											if (oKey == 'type')
-												if (oActionObject[oKey] == 'bus-zone-scene')
-													oActionObject[oKey] = 'zone-scene';
-											if (oKey == 'addon-id') {
-												oActionObject['addonId']=oActionObject[oKey];
-											}
-										}
-										oObject[oKeyParameter].push(oActionObject);
-									}
-
-								}
-							}
+                            if (aArray) {
+    							for (var jIndex = 0; jIndex < aArray.length; jIndex++) {
+    								var oArrayObject = aArray[jIndex];
+    								if (oArrayObject[oKeyParameter] != null) {
+
+    									for (var kIndex = 0; kIndex < oArrayObject[oKeyParameter].length; kIndex++) {
+    										var resultObject = oArrayObject[oKeyParameter][kIndex];
+    										var oActionObject = {};
+    										for ( var oKey in resultObject) {
+    											oActionObject[oKey] = resultObject[oKey];
+    											if (oKey == 'type')
+    												if (oActionObject[oKey] == 'bus-zone-scene')
+    													oActionObject[oKey] = 'zone-scene';
+    											if (oKey == 'addon-id') {
+    												oActionObject['addonId']=oActionObject[oKey];
+    											}
+    										}
+    										oObject[oKeyParameter].push(oActionObject);
+    									}
+
+    								}
+    							}
+                            }
 						}
 					}
 				} else if ((paramDef[sIndex].type == 'condition')) {
@@ -3309,21 +3393,20 @@ dss.parsePropertyQueryAnswer = function(oJsonObject, paramDef) {
 					for ( var subIndex in oIteratorObject) {
 						if (typeof (oIteratorObject[subIndex]) == "object") {
 							var aArray = oIteratorObject[subIndex];
-							for (var jIndex = 0; jIndex < aArray.length; jIndex++) {
+							for (var jIndex = 0; aArray && jIndex < aArray.length; jIndex++) {
 								var oArrayObject = aArray[jIndex];
 								if (oArrayObject[oKeyParameter] != null) {
 									if (oArrayObject['enabled'] != null) {
 										oConditionObject.enabled = oArrayObject['enabled'];
 									}
-									if (oArrayObject['conditions']!=null)
-										if (oArrayObject['conditions']!=null) {
-											for (var kIndex=0;kIndex<oArrayObject['conditions'].length;kIndex++) {
-												if (oArrayObject['conditions'][kIndex]!=null)
-													if (oArrayObject['conditions'][kIndex].date!=null) {
-														oConditionObject.date=oArrayObject['conditions'][kIndex].date;
-													}
-											}
+									if (oArrayObject['conditions']!=null) {
+										for (var kIndex=0;kIndex<oArrayObject['conditions'].length;kIndex++) {
+											if (oArrayObject['conditions'][kIndex]!=null)
+												if (oArrayObject['conditions'][kIndex].date!=null) {
+													oConditionObject.date=oArrayObject['conditions'][kIndex].date;
+												}
 										}
+									}
 									if ((oArrayObject['time-start'] != null) && (oArrayObject['time-end'] != null)) {
 										var startArray = oArrayObject['time-start'].split(':');
 										var iStart = parseInt(startArray[0], 10) * 3600 + parseInt(startArray[1], 10) * 60 + parseInt(startArray[2], 10);
@@ -3339,7 +3422,7 @@ dss.parsePropertyQueryAnswer = function(oJsonObject, paramDef) {
 												offset : iEnd
 											}
 										} ];
-									}									
+									}
 									if (oArrayObject['weekdays'] != null) {
 										var weekArray = oArrayObject['weekdays'].split(',');
 										oConditionObject.weekdays = [];
@@ -3428,45 +3511,51 @@ dss.parsePropertyQueryAnswer = function(oJsonObject, paramDef) {
 					for ( var subIndex in oIteratorObject) {
 						if (typeof (oIteratorObject[subIndex]) == "object") {
 							var aArray = oIteratorObject[subIndex];
-							for (var jIndex = 0; jIndex < aArray.length; jIndex++) {
-								var oArrayObject = aArray[jIndex];
-								if (oArrayObject.conditions != null)
-									if (oArrayObject.enabled != null)
-										oObject[oKeyParameter] = !oArrayObject.enabled;
-							}
+                            if (aArray) {
+    							for (var jIndex = 0; jIndex < aArray.length; jIndex++) {
+    								var oArrayObject = aArray[jIndex];
+    								if (oArrayObject.conditions != null)
+    									if (oArrayObject.enabled != null)
+    										oObject[oKeyParameter] = !oArrayObject.enabled;
+    							}
+                            }
 						}
 					}
 				} else if ((paramDef[sIndex].type == 'condition/state')) {
 					for ( var subIndex in oIteratorObject) {
 						if (typeof (oIteratorObject[subIndex]) == "object") {
 							var aArray = oIteratorObject[subIndex];
-							for (var jIndex = 0; jIndex < aArray.length; jIndex++) {
-								var oArrayObject = aArray[jIndex];
-								if (oArrayObject.conditions != null) {
-									for (var kIndex = 0; kIndex < oArrayObject.conditions.length; kIndex++) {
-										if (oArrayObject.conditions[kIndex] != null) {
-											if (oArrayObject.conditions[kIndex][paramDef[sIndex].name] != null)
-												oObject[oKeyParameter] = oArrayObject.conditions[kIndex][paramDef[sIndex].name];
-										}
-									}
-								}
-							}
+                            if (aArray) {
+    							for (var jIndex = 0; jIndex < aArray.length; jIndex++) {
+    								var oArrayObject = aArray[jIndex];
+    								if (oArrayObject.conditions != null) {
+    									for (var kIndex = 0; kIndex < oArrayObject.conditions.length; kIndex++) {
+    										if (oArrayObject.conditions[kIndex] != null) {
+    											if (oArrayObject.conditions[kIndex][paramDef[sIndex].name] != null)
+    												oObject[oKeyParameter] = oArrayObject.conditions[kIndex][paramDef[sIndex].name];
+    										}
+    									}
+    								}
+    							}
+                            }
 						}
 					}
 				} else if ((paramDef[sIndex].type == 'message')) {
 					for ( var subIndex in oIteratorObject) {
 						if (typeof (oIteratorObject[subIndex]) == "object") {
 							var aArray = oIteratorObject[subIndex];
-							for (var jIndex = 0; jIndex < aArray.length; jIndex++) {
-								var oArrayObject = aArray[jIndex];
-								if (oArrayObject.message != null) {
-									oObject[oKeyParameter] = {};
-									oObject[oKeyParameter].messageType = oArrayObject.messageType;
-									oObject[oKeyParameter].receiver = oArrayObject.receiver;
-									oObject[oKeyParameter].subject = escape(dss.unescapeProperty(oArrayObject.subject));
-									oObject[oKeyParameter].message = escape(dss.unescapeProperty(oArrayObject.messageBody));
-								}
-							}
+                            if (aArray) {
+    							for (var jIndex = 0; jIndex < aArray.length; jIndex++) {
+    								var oArrayObject = aArray[jIndex];
+    								if (oArrayObject.message != null) {
+    									oObject[oKeyParameter] = {};
+    									oObject[oKeyParameter].messageType = oArrayObject.messageType;
+    									oObject[oKeyParameter].receiver = oArrayObject.receiver;
+    									oObject[oKeyParameter].subject = escape(dss.unescapeProperty(oArrayObject.subject));
+    									oObject[oKeyParameter].message = escape(dss.unescapeProperty(oArrayObject.messageBody));
+    								}
+    							}
+                            }
 						}
 					}
 				} else if ((paramDef[sIndex].type == 'recurrence')) {
@@ -3474,23 +3563,25 @@ dss.parsePropertyQueryAnswer = function(oJsonObject, paramDef) {
 					for ( var subIndex in oIteratorObject) {
 						if (typeof (oIteratorObject[subIndex]) == "object") {
 							var aArray = oIteratorObject[subIndex];
-							for (var jIndex = 0; jIndex < aArray.length; jIndex++) {
-								var oArrayObject = aArray[jIndex];
-								if (oArrayObject.recurrenceBase != null)
-									oTimeObject.recurrenceBase = oArrayObject.recurrenceBase;
-								if (oArrayObject.time != null) {
-									oTimeObject.timeArray = [];
-									for ( var oKey in oArrayObject.time) {
-										var oSubArray = oArrayObject.time[oKey];
-										for ( var aKey in oSubArray) {
-											if (oSubArray[aKey] != null)
-												if (typeof (oSubArray[aKey]) == 'string')
-													oTimeObject.timeArray.push(oSubArray[aKey]);
-
-										}
-									}
-								}
-							}
+                            if (aArray) {
+    							for (var jIndex = 0; jIndex < aArray.length; jIndex++) {
+    								var oArrayObject = aArray[jIndex];
+    								if (oArrayObject.recurrenceBase != null)
+    									oTimeObject.recurrenceBase = oArrayObject.recurrenceBase;
+    								if (oArrayObject.time != null) {
+    									oTimeObject.timeArray = [];
+    									for ( var oKey in oArrayObject.time) {
+    										var oSubArray = oArrayObject.time[oKey];
+    										for ( var aKey in oSubArray) {
+    											if (oSubArray[aKey] != null)
+    												if (typeof (oSubArray[aKey]) == 'string')
+    													oTimeObject.timeArray.push(oSubArray[aKey]);
+
+    										}
+    									}
+    								}
+    							}
+                            }
 						}
 					}
 					oObject[oKeyParameter] = oTimeObject;
@@ -3499,19 +3590,21 @@ dss.parsePropertyQueryAnswer = function(oJsonObject, paramDef) {
 					for ( var subIndex in oIteratorObject) {
 						if (typeof (oIteratorObject[subIndex]) == "object") {
 							var aArray = oIteratorObject[subIndex];
-							for (var jIndex = 0; jIndex < aArray.length; jIndex++) {
-								var oArrayObject = aArray[jIndex];
-								if (oArrayObject.timeBase != null)
-									oTimeObject.timeBase = oArrayObject.timeBase;
-								if (oArrayObject.offset != null)
-									oTimeObject.offset = oArrayObject.offset;
-								if (oArrayObject.limitBefore != null)
-									oTimeObject.limitBefore = oArrayObject.limitBefore;
-								if (oArrayObject.limitAfter != null)
-									oTimeObject.limitAfter = oArrayObject.limitAfter;
-								if (oArrayObject.random != null)
-									oTimeObject.random = oArrayObject.random;
-							}
+                            if (aArray) {
+    							for (var jIndex = 0; jIndex < aArray.length; jIndex++) {
+    								var oArrayObject = aArray[jIndex];
+    								if (oArrayObject.timeBase != null)
+    									oTimeObject.timeBase = oArrayObject.timeBase;
+    								if (oArrayObject.offset != null)
+    									oTimeObject.offset = oArrayObject.offset;
+    								if (oArrayObject.limitBefore != null)
+    									oTimeObject.limitBefore = oArrayObject.limitBefore;
+    								if (oArrayObject.limitAfter != null)
+    									oTimeObject.limitAfter = oArrayObject.limitAfter;
+    								if (oArrayObject.random != null)
+    									oTimeObject.random = oArrayObject.random;
+    							}
+                            }
 						}
 					}
 					oObject[oKeyParameter] = oTimeObject;
@@ -3531,14 +3624,16 @@ dss.validateTriggerObject = function(oTriggerObject) {
 			var stateName = oTriggerObject.name;
 			var oUserStates = dss.staticDataModel.getUserStates();
 			var stateValue = oTriggerObject.state;
-			for (var iIndex = 0; iIndex < oUserStates.length; iIndex++) {
-				if (oUserStates[iIndex].name == stateName) {
-					if (stateValue == 'active')
-						return dss.validValue.ok;
-					if (stateValue == 'inactive')
-						return dss.validValue.ok;
-				}
-			}
+            if (oUserStates) {
+    			for (var iIndex = 0; iIndex < oUserStates.length; iIndex++) {
+    				if (oUserStates[iIndex].name == stateName) {
+    					if (stateValue == 'active')
+    						return dss.validValue.ok;
+    					if (stateValue == 'inactive')
+    						return dss.validValue.ok;
+    				}
+    			}
+            }
 			return dss.validValue.completlyWrong;
 		} else {
 			if (oTriggerObject.state!=null)
@@ -3546,7 +3641,7 @@ dss.validateTriggerObject = function(oTriggerObject) {
 					return dss.validValue.ok;
 			return dss.validValue.completlyWrong;
 		}
-	}	
+	}
 	case 'device-named-event': {
       	var idString =oTriggerObject['id'];
       	var oDevice=dss.staticDataModel.getDevice(oTriggerObject.dsuid);
@@ -3558,10 +3653,10 @@ dss.validateTriggerObject = function(oTriggerObject) {
 			return dss.validValue.temporaryWrong; // nicht vorhandene Geraete
 		}
 		if (oDevice!=null)
-  			if (oDevice.deviceEvents!=null) 
+  			if (oDevice.deviceEvents!=null)
   				if (oDevice.deviceEvents[oTriggerObject.id]!=null)
   					return dss.validValue.ok;
-		return dss.validValue.completlyWrong; 
+		return dss.validValue.completlyWrong;
 	}
 	case 'device-named-action': {
       	var idString =oTriggerObject['id'];
@@ -3574,18 +3669,18 @@ dss.validateTriggerObject = function(oTriggerObject) {
 			return dss.validValue.temporaryWrong; // nicht vorhandene Geraete
 		}
 		if (oDevice!=null)
-  			if (oDevice.deviceCustomActions!=null) 
+  			if (oDevice.deviceCustomActions!=null)
   				if (oDevice.deviceCustomActions[oTriggerObject.id]!=null)
   					return dss.validValue.ok;
 		if (oDevice!=null)
-  			if (oDevice.deviceStandardActions!=null) 
+  			if (oDevice.deviceStandardActions!=null)
   				if (oDevice.deviceStandardActions[oTriggerObject.id]!=null)
   					return dss.validValue.ok;
         if (oDevice!=null)
-            if (oDevice.deviceActions!=null) 
+            if (oDevice.deviceActions!=null)
                 if (oDevice.deviceActions[oTriggerObject.id]!=null)
                     return dss.validValue.ok;
-		return dss.validValue.completlyWrong; 
+		return dss.validValue.completlyWrong;
 	}
 	case 'event': {
 	    switch (oTriggerObject.name) {
@@ -3602,53 +3697,55 @@ dss.validateTriggerObject = function(oTriggerObject) {
 		var stateName = oTriggerObject.name;
 		var oUserStates = dss.staticDataModel.getUserStates();
 		var stateValue = oTriggerObject.state;
-		for (var iIndex = 0; iIndex < oUserStates.length; iIndex++) {
-			if (oUserStates[iIndex].name == stateName) {
-				if (stateValue == 'active')
-					return dss.validValue.ok;
-				if (stateValue == 'inactive')
-					return dss.validValue.ok;
-			}
-		}
+        if (oUserStates) {
+    		for (var iIndex = 0; iIndex < oUserStates.length; iIndex++) {
+    			if (oUserStates[iIndex].name == stateName) {
+    				if (stateValue == 'active')
+    					return dss.validValue.ok;
+    				if (stateValue == 'inactive')
+    					return dss.validValue.ok;
+    			}
+    		}
+        }
 
 		var oArray = oTriggerObject.name.split('.');
 		if (oArray.length == 3)
 			if (oArray[0] == 'dev') {
 				var oDevice = dss.staticDataModel.getDevice(oArray[1]);
 				if (oDevice != null) {
-					
+
 	            	if ((oDevice.hasStates) && (dss.staticDataModel.getDeviceStates(oArray[1]))) {
 	                    var states=dss.staticDataModel.getDeviceStates(oArray[1]);
 	                    for (var sKey in states) {
 	                    	if (sKey==oArray[2]) {
 	                    		for (var sSubkey in states[sKey].options) {
 	                    			if (sSubkey==oTriggerObject.state) {
-	                    				return dss.validValue.ok;	                    				
+	                    				return dss.validValue.ok;
 	                    			}
 	                    		}
 	                    	}
 	                    }
-	            	}					
-					
-					
-					var typeIndex = parseInt(oArray[2], 10);					
+	            	}
+
+
+					var typeIndex = parseInt(oArray[2], 10);
 	                if (oDevice.specialActions!=null)
 	                	if (oDevice.specialActions.triggers!=null)
-	                		if (oDevice.specialActions.triggers.binaryInputs!=null) {                                			
-	                			for (var sKey in oDevice.specialActions.triggers.binaryInputs) 	                			
+	                		if (oDevice.specialActions.triggers.binaryInputs!=null) {
+	                			for (var sKey in oDevice.specialActions.triggers.binaryInputs)
 		                			if (("" + oDevice.specialActions.triggers.binaryInputs[sKey].id)==("" + typeIndex)) {
 		                				if (oTriggerObject.state=='active')
 		                					if (oDevice.specialActions.triggers.binaryInputs[sKey].value==2) {
 		                						return dss.validValue.ok;
 		                					}
-		                						
+
 		                				if (oTriggerObject.state=='inactive')
 		                					if (oDevice.specialActions.triggers.binaryInputs[sKey].value==1) {
 		                						return dss.validValue.ok;
-		                					}	                				
+		                					}
 		                			}
 	                			}
-					
+
 					if (oDevice.binaryInputs != null) {
 						var type = 255;
 						for (var kIndex = 0; kIndex < oDevice.binaryInputs.length; kIndex++)
@@ -3677,26 +3774,32 @@ dss.validateTriggerObject = function(oTriggerObject) {
 				return dss.validValue.completlyWrong;
 			}
 		if (oArray[0] == 'zone') {
-			for (var iIndex = 0; iIndex < dss.staticDataModel.getStates().length; iIndex++)
-				if (dss.staticDataModel.getStates()[iIndex].name == oTriggerObject.name) {
-					if (oTriggerObject.state == 'active')
-						return dss.validValue.ok;
-					if (oTriggerObject.state == 'inactive')
-						return dss.validValue.ok;
-				}
+            var states = dss.staticDataModel.getStates();
+            if (states) {
+    			for (var iIndex = 0; iIndex < states.length; iIndex++)
+    				if (states[iIndex].name == oTriggerObject.name) {
+    					if (oTriggerObject.state == 'active')
+    						return dss.validValue.ok;
+    					if (oTriggerObject.state == 'inactive')
+    						return dss.validValue.ok;
+    				}
+            }
 			return dss.validValue.completlyWrong;
 		}
 		if (oArray[0] == 'cluster') {
-			for (var iIndex = 0; iIndex < dss.staticDataModel.getStates().length; iIndex++) {
-				if (dss.staticDataModel.getStates()[iIndex].name == oTriggerObject.name) {
-					if (oTriggerObject.state == 'active') {
-						return dss.validValue.ok;
-					}
-					if (oTriggerObject.state == 'inactive') {
-						return dss.validValue.ok;
-					}
-				}
-			}
+            var states = dss.staticDataModel.getStates();
+            if (states) {
+    			for (var iIndex = 0; iIndex < states.length; iIndex++) {
+    				if (states[iIndex].name == oTriggerObject.name) {
+    					if (oTriggerObject.state == 'active') {
+    						return dss.validValue.ok;
+    					}
+    					if (oTriggerObject.state == 'inactive') {
+    						return dss.validValue.ok;
+    					}
+    				}
+    			}
+            }
 			return dss.validValue.completlyWrong;
 		}
 
@@ -3772,7 +3875,7 @@ dss.validateTriggerObject = function(oTriggerObject) {
 					return dss.validValue.ok;
 				case 15:
 					return dss.validValue.ok;
-			}			
+			}
 		}
 		if (oDevice.tasterMode != 0) {
 			return dss.validValue.completlyWrong; // reconfigured device
@@ -3798,8 +3901,8 @@ dss.validateTriggerObject = function(oTriggerObject) {
 			return dss.validValue.temporaryWrong; // nicht vorhandene Geraete
 													// -> Fehler
 		}
-		
-		
+
+
         var fSpecial=false;
         if (oDevice.specialActions!=null)
         	if (oDevice.specialActions.triggers!=null)
@@ -3808,10 +3911,10 @@ dss.validateTriggerObject = function(oTriggerObject) {
         				if (oDevice.specialActions.triggers.deviceMsg[sKey].id==oTriggerObject.msg) {
         					return dss.validValue.ok;
         				}
-        			}                    				
+        			}
         		}
-		
-		
+
+
 		if (oDevice.tasterMode != 15) { // the device is not anymore configured
 										// as pushbutton
 			return dss.validValue.completlyWrong;
@@ -3855,7 +3958,7 @@ dss.validateTriggerObject = function(oTriggerObject) {
 		if (dss.staticDataModel.specialDSIDAction[oTriggerObject.dsuid]!=null)
 			if (dss.staticDataModel.specialDSIDAction[oTriggerObject.dsuid].triggers!=null)
 				if (dss.staticDataModel.specialDSIDAction[oTriggerObject.dsuid].triggers.deviceAction!=null){
-					for (var sKey in dss.staticDataModel.specialDSIDAction[oTriggerObject.dsuid].triggers.deviceAction) 
+					for (var sKey in dss.staticDataModel.specialDSIDAction[oTriggerObject.dsuid].triggers.deviceAction)
 						if (dss.staticDataModel.specialDSIDAction[oTriggerObject.dsuid].triggers.deviceAction[sKey].id==oTriggerObject.action)
 							return dss.validValue.ok;
 				}
@@ -3866,14 +3969,14 @@ dss.validateTriggerObject = function(oTriggerObject) {
 						if (oDevice.specialActions.triggers.deviceActions[sKey].action==oTriggerObject.action) {
 							return dss.validValue.ok;
 						}
-					}                    				
+					}
 				}
-	
+
 		if (oDevice.tasterMode != 15) { // the device is not anymore configured
 										// as pushbutton
 			return dss.validValue.completlyWrong;
 		}
-	
+
 		return dss.validValue.completlyWrong;
 	}
 	case 'device-binary-input': {
@@ -3916,16 +4019,18 @@ dss.validateTriggerObject = function(oTriggerObject) {
 															// sind
 				// immer falsch
 				var oGroups = dss.staticDataModel.getGroupForZone(oTriggerObject.zone);
-				for (var iIndex = 0; iIndex < oGroups.length; iIndex++) {
-					if (oGroups[iIndex].group == oTriggerObject.group)
-						return (oGroups[iIndex].reachable ? dss.validValue.ok : dss.validValue.temporaryWrong); // nur
-																												// wenn
-					// gruppe
-					// erreichbar
-					// ist, dann
-					// kann aktion
-					// laufen
-				}
+                if (oGroups) {
+    				for (var iIndex = 0; iIndex < oGroups.length; iIndex++) {
+    					if (oGroups[iIndex].group == oTriggerObject.group)
+    						return (oGroups[iIndex].reachable ? dss.validValue.ok : dss.validValue.temporaryWrong); // nur
+    																												// wenn
+    					// gruppe
+    					// erreichbar
+    					// ist, dann
+    					// kann aktion
+    					// laufen
+    				}
+                }
 				return dss.validValue.completlyWrong; // gruppe ist nicht in
 														// der liste mit drin
 			} else {
@@ -3940,10 +4045,12 @@ dss.validateTriggerObject = function(oTriggerObject) {
 			// Zone
 			var oZones = dss.staticDataModel.getZoneArray();
 			var fValue = false;
-			for (var iIndex = 0; iIndex < oZones.length; iIndex++) {
-				if (oZones[iIndex].ZoneID == oTriggerObject.zone)
-					fValue = true;
-			}
+            if (oZones) {
+    			for (var iIndex = 0; iIndex < oZones.length; iIndex++) {
+    				if (oZones[iIndex].ZoneID == oTriggerObject.zone)
+    					fValue = true;
+    			}
+            }
 			if (oTriggerObject.zone == -1)
 				fValue = true;
 
@@ -3971,16 +4078,18 @@ dss.validateTriggerObject = function(oTriggerObject) {
 					return dss.validValue.ok;
 
 				var oGroups = dss.staticDataModel.getGroupForZone(oTriggerObject.zone);
-				for (var iIndex = 0; iIndex < oGroups.length; iIndex++) {
-					if (oGroups[iIndex].group == oTriggerObject.group)
-						return (oGroups[iIndex].reachable ? dss.validValue.ok : dss.validValue.temporaryWrong); // nur
-																												// wenn
-					// gruppe
-					// erreichbar
-					// ist, dann
-					// kann aktion
-					// laufen
-				}
+                if (oGroups) {
+    				for (var iIndex = 0; iIndex < oGroups.length; iIndex++) {
+    					if (oGroups[iIndex].group == oTriggerObject.group)
+    						return (oGroups[iIndex].reachable ? dss.validValue.ok : dss.validValue.temporaryWrong); // nur
+    																												// wenn
+    					// gruppe
+    					// erreichbar
+    					// ist, dann
+    					// kann aktion
+    					// laufen
+    				}
+                }
 				return dss.validValue.completlyWrong; // gruppe ist nicht in
 														// der liste mit drin
 			}
@@ -3988,11 +4097,14 @@ dss.validateTriggerObject = function(oTriggerObject) {
 
 		break;
 	case 'custom-event': {
-		for (var iIndex = 0; iIndex < dss.staticDataModel.getHLE().length; iIndex++) {
-			if ("" + dss.staticDataModel.getHLE()[iIndex].id == oTriggerObject.event) {
-				return dss.validValue.ok;
-			}
-		}
+        var hle = dss.staticDataModel.getHLE();
+        if (hle) {
+    		for (var iIndex = 0; iIndex < hle.length; iIndex++) {
+    			if ("" + hle[iIndex].id == oTriggerObject.event) {
+    				return dss.validValue.ok;
+    			}
+    		}
+        }
 		return dss.validValue.completlyWrong;
 	}
 	}
@@ -4019,7 +4131,7 @@ dss.validateActionObject = function(oActionObject) {
         		return dss.validValue.completlyWrong;
         	iIndex++;
         }
-        return dss.validValue.ok;	
+        return dss.validValue.ok;
         }
 	case 'device-action': {
 		var oDevice = dss.staticDataModel.getDevice(oActionObject.dsuid);
@@ -4031,7 +4143,7 @@ dss.validateActionObject = function(oActionObject) {
 			return dss.validValue.temporaryWrong; // nicht vorhandene Geraete
 													// -> Fehler
 		}
-		
+
 		var actions=dss.staticDataModel.getStandardActions(oActionObject.dsuid);
      	for (var sKey in actions) {
      		if (sKey==oActionObject.id)
@@ -4042,7 +4154,7 @@ dss.validateActionObject = function(oActionObject) {
             if (sKey==oActionObject.id)
                 return dss.validValue.ok;
         }
-     	actions=dss.staticDataModel.getCustomActions(oActionObject.dsuid);            	
+     	actions=dss.staticDataModel.getCustomActions(oActionObject.dsuid);
      	for (var sKey in actions) {
      		if (sKey==oActionObject.id)
      			return dss.validValue.ok;
@@ -4054,14 +4166,16 @@ dss.validateActionObject = function(oActionObject) {
 			var stateName = oActionObject.statename;
 			var oUserStates = dss.staticDataModel.getUserStates();
 			var stateValue = oActionObject.state;
-			for (var iIndex = 0; iIndex < oUserStates.length; iIndex++) {
-				if (oUserStates[iIndex].name == stateName) {
-					if (oActionObject.state == 'active')
-						return dss.validValue.ok;
-					if (oActionObject.state == 'inactive')
-						return dss.validValue.ok;
-				}
-			}
+            if (oUserStates) {
+    			for (var iIndex = 0; iIndex < oUserStates.length; iIndex++) {
+    				if (oUserStates[iIndex].name == stateName) {
+    					if (oActionObject.state == 'active')
+    						return dss.validValue.ok;
+    					if (oActionObject.state == 'inactive')
+    						return dss.validValue.ok;
+    				}
+    			}
+            }
 			return dss.validValue.completlyWrong;
 		} else {
 			if (oActionObject.state!=null)
@@ -4070,20 +4184,20 @@ dss.validateActionObject = function(oActionObject) {
 			return dss.validValue.completlyWrong;
 		}
 	}
-		
+
 	case 'change-state': {
 		switch (oActionObject.statename) {
 			case 'fire':
 			case 'hail':
 			case 'rain':
-			case 'wind': 
+			case 'wind':
 				if (oActionObject.state == 'active')
 					return dss.validValue.ok;
 				if (oActionObject.state == 'inactive')
 					return dss.validValue.ok;
-				break;		
-			
-			case 'heating_water_system':  
+				break;
+
+			case 'heating_water_system':
 				if (oActionObject.state=='off')
 					return dss.validValue.ok;
 				if (oActionObject.state=='cold water')
@@ -4092,7 +4206,7 @@ dss.validateActionObject = function(oActionObject) {
 					return dss.validValue.ok;
 				return dss.validValue.completlyWrong;
 				break;
-			
+
 		}
 	}
 	case 'zone-value': {
@@ -4102,14 +4216,14 @@ dss.validateActionObject = function(oActionObject) {
 	case 'heating-mode': {
 		if (dss.staticDataModel.ClimateControllerSettingsCache != null &&
 		    (dss.staticDataModel.ClimateControllerSettingsCache.capabilities.heatingSupported == true ||
-		     dss.staticDataModel.ClimateControllerSettingsCache.capabilities.coolingSupported == true) && 
+		     dss.staticDataModel.ClimateControllerSettingsCache.capabilities.coolingSupported == true) &&
 		    dss.staticDataModel.heating[oActionObject.zone].receiveOperationMode &&
 		    oActionObject.mode < 7) {
 			return dss.validValue.ok;
 		}
 		return dss.validValue.completlyWrong;
 		break;
-	}	
+	}
 	case 'zone-scene': {
 		if (oActionObject.zone == 0) {
 			// Apartment
@@ -4127,16 +4241,18 @@ dss.validateActionObject = function(oActionObject) {
 															// sind
 				// immer falsch
 				var oGroups = dss.staticDataModel.getGroupForZone(oActionObject.zone);
-				for (var iIndex = 0; iIndex < oGroups.length; iIndex++) {
-					if (oGroups[iIndex].group == oActionObject.group)
-						return (oGroups[iIndex].reachable ? dss.validValue.ok : dss.validValue.temporaryWrong); // nur
-																												// wenn
-					// gruppe
-					// erreichbar
-					// ist, dann
-					// kann aktion
-					// laufen
-				}
+                if (oGroups) {
+    				for (var iIndex = 0; iIndex < oGroups.length; iIndex++) {
+    					if (oGroups[iIndex].group == oActionObject.group)
+    						return (oGroups[iIndex].reachable ? dss.validValue.ok : dss.validValue.temporaryWrong); // nur
+    																												// wenn
+    					// gruppe
+    					// erreichbar
+    					// ist, dann
+    					// kann aktion
+    					// laufen
+    				}
+                }
 				return dss.validValue.completlyWrong; // gruppe ist nicht in
 														// der liste mit drin
 			} else {
@@ -4151,10 +4267,12 @@ dss.validateActionObject = function(oActionObject) {
 			// Zone
 			var oZones = dss.staticDataModel.getZoneArray();
 			var fValue = false;
-			for (var iIndex = 0; iIndex < oZones.length; iIndex++) {
-				if (oZones[iIndex].ZoneID == oActionObject.zone)
-					fValue = true;
-			}
+            if (oZones) {
+    			for (var iIndex = 0; iIndex < oZones.length; iIndex++) {
+    				if (oZones[iIndex].ZoneID == oActionObject.zone)
+    					fValue = true;
+    			}
+            }
 			if (oActionObject.group == 6)
 				if (oActionObject.scene < 64)
 					return dss.validValue.completlyWrong; // zone is not valid
@@ -4182,16 +4300,18 @@ dss.validateActionObject = function(oActionObject) {
 															// sind
 				// immer falsch
 				var oGroups = dss.staticDataModel.getGroupForZone(oActionObject.zone);
-				for (var iIndex = 0; iIndex < oGroups.length; iIndex++) {
-					if (oGroups[iIndex].group == oActionObject.group)
-						return (oGroups[iIndex].reachable ? dss.validValue.ok : dss.validValue.temporaryWrong); // nur
-																												// wenn
-					// gruppe
-					// erreichbar
-					// ist, dann
-					// kann aktion
-					// laufen
-				}
+                if (oGroups) {
+    				for (var iIndex = 0; iIndex < oGroups.length; iIndex++) {
+    					if (oGroups[iIndex].group == oActionObject.group)
+    						return (oGroups[iIndex].reachable ? dss.validValue.ok : dss.validValue.temporaryWrong); // nur
+    																												// wenn
+    					// gruppe
+    					// erreichbar
+    					// ist, dann
+    					// kann aktion
+    					// laufen
+    				}
+                }
 				return dss.validValue.completlyWrong; // gruppe ist nicht in
 														// der liste mit drin
 			}
@@ -4313,34 +4433,41 @@ dss.validateActionObject = function(oActionObject) {
 		}
 		var oZones = dss.staticDataModel.getZoneArray();
 		var fValue = dss.validValue.completlyWrong;
-		for (var iIndex = 0; iIndex < oZones.length; iIndex++) {
-			if (oZones[iIndex].ZoneID == oActionObject.zone)
-				fValue = dss.validValue.ok;
-		}
+        if (oZones) {
+    		for (var iIndex = 0; iIndex < oZones.length; iIndex++) {
+    			if (oZones[iIndex].ZoneID == oActionObject.zone)
+    				fValue = dss.validValue.ok;
+    		}
+        }
 		if (fValue == dss.validValue.completlyWrong)
 			return dss.validValue.completlyWrong;
 		if (oActionObject.group != 1) // nur licht darf blinken
 			return dss.validValue.completlyWrong;
 		var oGroups = dss.staticDataModel.getGroupForZone(oActionObject.zone);
-		for (var iIndex = 0; iIndex < oGroups.length; iIndex++) {
-			if (oGroups[iIndex].group == oActionObject.group)
-				return (oGroups[iIndex].reachable ? dss.validValue.ok : dss.validValue.temporaryWrong); // falls
-																										// licht
-																										// da
-																										// ist,
-			// dann blinkt es nur
-			// dann, wenn es
-			// reachable ist
-		}
+        if (oGroups) {
+    		for (var iIndex = 0; iIndex < oGroups.length; iIndex++) {
+    			if (oGroups[iIndex].group == oActionObject.group)
+    				return (oGroups[iIndex].reachable ? dss.validValue.ok : dss.validValue.temporaryWrong); // falls
+    																										// licht
+    																										// da
+    																										// ist,
+    			// dann blinkt es nur
+    			// dann, wenn es
+    			// reachable ist
+    		}
+        }
 		return dss.validValue.completlyWrong;
 		break;
 	}
 	case 'custom-event': {
-		for (var iIndex = 0; iIndex < dss.staticDataModel.getHLE().length; iIndex++) {
-			if ("" + dss.staticDataModel.getHLE()[iIndex].id == oActionObject.event) {
-				return dss.validValue.ok;
-			}
-		}
+        var hle = dss.staticDataModel.getHLE();
+        if (hle) {
+    		for (var iIndex = 0; iIndex < hle.length; iIndex++) {
+    			if ("" + dss.staticDataModel.getHLE()[iIndex].id == oActionObject.event) {
+    				return dss.validValue.ok;
+    			}
+    		}
+        }
 		return dss.validValue.completlyWrong;
 		break;
 	}
@@ -4572,7 +4699,7 @@ dss.refreshListener = function() {
 				else
 					dss.endSubscription();
 			}
-	
+
 		});
 }
 
@@ -4584,7 +4711,7 @@ dss.endSubscription = function() {
 		subscriptionID : id,
 		name : name
 	});
-	
+
 }
 
 dss.kelvinToMired = function (kelvin) {
@@ -4605,7 +4732,7 @@ dss.MiredToKelvin = function (mired) {
 
 /**
  * Gettext translation method
- * 
+ *
  * @param {String}
  *            msgid The string to translate
  * @param {String}
@@ -4631,9 +4758,9 @@ function formatDelayString(delay) {
 	var hasSeconds=(delay%60)>0;
 	var hasMinutes=((Math.floor(delay/60))%60)>0;
 	var hasHours=(delay>=3600);
-	
+
 	var pad = function(i) { return (i < 10 ? '0'+i : i); };
-	
+
 	if (!hasHours) {
 		if (!hasMinutes) {
 			return delay + " " + _('sec.');
@@ -4658,5 +4785,3 @@ function formatDelayString(delay) {
 	}
 	return delay + " " + _('sec.');
 }
-
-
diff --git a/js/dss/dss-edit-dialog.js b/js/dss/dss-edit-dialog.js
index ec5977bf..985c1aab 100644
--- a/js/dss/dss-edit-dialog.js
+++ b/js/dss/dss-edit-dialog.js
@@ -12,7 +12,7 @@ Ext.define('DSS.component.Editor', {
         var oControl;
         switch (subConfig.type) {
             case 'combobox' : {
-            	
+
             	oControl = Ext.create('DSS.component.ComboboxControl', {
             		data:subConfig.data,
             		labelWidth:subConfig.labelWidth,
@@ -29,26 +29,26 @@ Ext.define('DSS.component.Editor', {
                 this.editControls[subConfig.id] = oControl;
                 oControl.dssEditor=this;
                 return oControl;
-                
+
                 break;
             }
             case 'radio' : {
-            	
+
             	oControl = Ext.create('DSS.component.RadioControl', {
-            		data:subConfig.data,            		
+            		data:subConfig.data,
             		labelWidth:subConfig.labelWidth,
             		label:subConfig.label,
             		radioid:subConfig.id,
                     myID:subConfig.id
                 });
 
-            	
+
                 if ((subConfig.flex == null) || (!subConfig.flex))
                     this.innerHeight -= 27 * subConfig.data.length;
                 this.editControls[subConfig.id] = oControl;
                 oControl.dssEditor=this;
                 return oControl;
-                
+
                 break;
             }
             case 'hidden': {
@@ -77,7 +77,7 @@ Ext.define('DSS.component.Editor', {
                 	try  {
                 		var iHeight=oControl.getHeight();
                 		this.innerHeight -= iHeight;
-                	} 
+                	}
                 	catch (e) {
                         this.innerHeight -= 22;
                 	}
@@ -292,12 +292,12 @@ Ext.define('DSS.component.Editor', {
                 this.editControls[subConfig.id] = oControl;
                 if ((subConfig.flex == null) || (!subConfig.flex))
                     this.innerHeight -= 150;
-                
+
                 oControl.dssEditor=this;
                 return oControl;
                 break;
             }
-            case 'TitterMsgControl' : 
+            case 'TitterMsgControl' :
             {
                 oControl = Ext.create('DSS.component.TitterMessageEditor', {
             		labelWidth:subConfig.labelWidth,
@@ -307,7 +307,7 @@ Ext.define('DSS.component.Editor', {
                 this.editControls[subConfig.id] = oControl;
                 if ((subConfig.flex == null) || (!subConfig.flex))
                     this.innerHeight -= 150;
-                
+
                 oControl.dssEditor=this;
                 return oControl;
                 break;
@@ -327,9 +327,9 @@ Ext.define('DSS.component.Editor', {
                     if (subConfig.randomize)
                         this.innerHeight -= (54 + 26);
                     else
-                        this.innerHeight -= 54;                    
+                        this.innerHeight -= 54;
                 }
-                    
+
                 this.editControls[subConfig.id] = oControl;
                 oControl.dssEditor=this;
                 return oControl;
@@ -344,7 +344,7 @@ Ext.define('DSS.component.Editor', {
     defaultFirstTabOnEdit:0,
     constructor : function(config) {
         config.closeAction = 'hide';
-        config.modal = true; 
+        config.modal = true;
         config.height = 500;
         config.width = 800;
         config.layout = 'fit';
@@ -367,8 +367,8 @@ Ext.define('DSS.component.Editor', {
         if (config.saveTitle!=null) {
             sSaveText=config.saveTitle;
         }
-        
-        if ((config.hideCancel==null) ||(config.hideCancel==false)) { 
+
+        if ((config.hideCancel==null) ||(config.hideCancel==false)) {
             me.buttonCancel = Ext.create('Ext.Button', {
                 text : sCancelText,
                 handler : function() {
@@ -423,14 +423,14 @@ Ext.define('DSS.component.Editor', {
 
             	flexControl = null;
                 this.innerHeight = tabbedHeight;
-                if (config.tabControls[iIndex].content.length > 0) {
+                if (config.tabControls[iIndex].content && config.tabControls[iIndex].content.length > 0) {
                     var oTabPanel = Ext.create('Ext.panel.Panel', {
                         title : config.tabControls[iIndex].tabLabel,
                         border : '0'
                     });
                     this.oTabPanels["" + iIndex]={panel:oTabPanel,title:config.tabControls[iIndex].tabLabel};
                     if (config.tabControls[iIndex].tabDescription!=null) {
-                        
+
                         oTabPanel.add(Ext.create('Ext.form.field.Display', {
                             border : 0,
                             height:18,
@@ -480,12 +480,12 @@ Ext.define('DSS.component.Editor', {
             oButtons.push(me.buttonSave);
         if (me.buttonCancel!=null)
             oButtons.push(me.buttonCancel);
-        
+
         var insideItems;
         if (config.tabControls!=null)
         	insideItems=oStaticSubitems;
         else {
-        	insideItems=Ext.create("Ext.panel.Panel", {     
+        	insideItems=Ext.create("Ext.panel.Panel", {
         		bodyPadding : 10,
         		border:"1px",
         		margin:"10 10 10 10",
@@ -493,8 +493,8 @@ Ext.define('DSS.component.Editor', {
         	});
         	insideItems.updateLayout();
         }
-        
-        
+
+
         Ext.apply(me, {
             items : [ {
                 xtype : 'panel',
@@ -552,7 +552,7 @@ Ext.define('DSS.component.Editor', {
         		this.oTabPanelParent.setActiveTab(this.defaultFirstTabOnNew);
         	} else {
         		this.oTabPanelParent.setActiveTab(this.defaultFirstTabOnEdit);
-        	}            
+        	}
             for ( var sKey in this.oTabPanels) {
                 this.oTabPanels[sKey].panel.setTitle(this.oTabPanels[sKey].title);
             }
@@ -564,7 +564,7 @@ Ext.define('DSS.component.Editor', {
         var fisValid = true;
         for (var sKey in this.oTabPanels)
             this.oTabPanels[sKey].panel.setTitle(this.oTabPanels[sKey].title);
-        
+
         for ( var sKey in this.editControls) {
             if (!this.editControls[sKey].isValid()) {
                 fisValid = false;
@@ -587,4 +587,3 @@ Ext.define('DSS.component.Editor', {
             this.editControls[sControl].setDisabled(!fEnable);
     }
 });
-
diff --git a/js/dss/dss-grid.js b/js/dss/dss-grid.js
index 52e49dad..58817bd0 100644
--- a/js/dss/dss-grid.js
+++ b/js/dss/dss-grid.js
@@ -68,13 +68,15 @@ function checkWeekdaysConditions(weekDayArray) {
     var iIndex;
     var oNow = new Date();
     var currentCondState = false;
-    if (weekDayArray.length == 7) {
-        //daily so its true
-        currentCondState = true;
-    } else {
-        for (iIndex = 0; iIndex < weekDayArray.length; iIndex++) {
-            if ( dayOfWeekAsInteger(weekDayArray[iIndex]) == oNow.getDay() ) {
-                currentCondState = true;
+    if (weekDayArray) {
+        if (weekDayArray.length == 7) {
+            //daily so its true
+            currentCondState = true;
+        } else {
+            for (iIndex = 0; iIndex < weekDayArray.length; iIndex++) {
+                if ( dayOfWeekAsInteger(weekDayArray[iIndex]) == oNow.getDay() ) {
+                    currentCondState = true;
+                }
             }
         }
     }
@@ -535,55 +537,57 @@ Ext.define('DSS.component.conditionCcolumn', {
              var fFr = false;
              var fSa = false;
              var fSo = false;
-             if (recObject.length == 7)
-                 return sString + _("daily");
-             for ( var iIndex = 0; iIndex < recObject.length; iIndex++) {
-                 if (recObject[iIndex] == 'MO')
-                     fMo = true;
-                 if (recObject[iIndex] == 'TU')
-                     fDi = true;
-                 if (recObject[iIndex] == 'WE')
-                     fMi = true;
-                 if (recObject[iIndex] == 'TH')
-                     fDo = true;
-                 if (recObject[iIndex] == 'FR')
-                     fFr = true;
-                 if (recObject[iIndex] == 'SA')
-                     fSa = true;
-                 if (recObject[iIndex] == 'SU')
-                     fSo = true;
-             }
-             sString += _('only ') ;
-             if (recObject.length == 2)
-                 if (fSa)
-                     if (fSo)
-                         return sString  + _('on weekends');
-
-             if (recObject.length == 5)
-                 if (fMo)
+             if (recObject) {
+                 if (recObject.length == 7)
+                     return sString + _("daily");
+                 for ( var iIndex = 0; iIndex < recObject.length; iIndex++) {
+                     if (recObject[iIndex] == 'MO')
+                         fMo = true;
+                     if (recObject[iIndex] == 'TU')
+                         fDi = true;
+                     if (recObject[iIndex] == 'WE')
+                         fMi = true;
+                     if (recObject[iIndex] == 'TH')
+                         fDo = true;
+                     if (recObject[iIndex] == 'FR')
+                         fFr = true;
+                     if (recObject[iIndex] == 'SA')
+                         fSa = true;
+                     if (recObject[iIndex] == 'SU')
+                         fSo = true;
+                 }
+                 sString += _('only ') ;
+                 if (recObject.length == 2)
+                     if (fSa)
+                         if (fSo)
+                             return sString  + _('on weekends');
+
+                 if (recObject.length == 5)
+                     if (fMo)
+                         if (fDi)
+                             if (fMi)
+                                 if (fDo)
+                                     if (fFr)
+                                         return sString + _('MO-FR');
+                 if (recObject.length == 1) {
+                     if (fMo)
+                         return sString + _("on monday");
                      if (fDi)
-                         if (fMi)
-                             if (fDo)
-                                 if (fFr)
-                                     return sString + _('MO-FR');
-             if (recObject.length == 1) {
-                 if (fMo)
-                     return sString + _("on monday");
-                 if (fDi)
-                     return sString + _("on tuesday");
-                 if (fMi)
-                     return sString + _("on wednesday");
-                 if (fDo)
-                     return sString + _("on thursday");
-                 if (fFr)
-                     return sString + _("on friday");
-                 if (fSa)
-                     return sString + _("on saturday");
-                 if (fSo)
-                     return sString + _("on sunday");
-             }
-             if (recObject.length == 0) {
-                 return sString + _("no time defined");
+                         return sString + _("on tuesday");
+                     if (fMi)
+                         return sString + _("on wednesday");
+                     if (fDo)
+                         return sString + _("on thursday");
+                     if (fFr)
+                         return sString + _("on friday");
+                     if (fSa)
+                         return sString + _("on saturday");
+                     if (fSo)
+                         return sString + _("on sunday");
+                 }
+                 if (recObject.length == 0) {
+                     return sString + _("no time defined");
+                 }
              }
 
              if (fMo)
@@ -631,40 +635,41 @@ Ext.define('DSS.component.conditionCcolumn', {
         		var fShow=true;
         		if (customRendererOptions.hideGenericSystemStates) {
         			fShow=false;
-        			for (var kIndex=0;kIndex<customRendererOptions.filterSystemState.length;kIndex++) {
-        				if (customRendererOptions.filterSystemState[kIndex]==oRecord.systemState[iIndex].name)
-        					fShow=true;
-        			}
+                    if (customRendererOptions.filterSystemState) {
+            			for (var kIndex=0;kIndex<customRendererOptions.filterSystemState.length;kIndex++) {
+            				if (customRendererOptions.filterSystemState[kIndex]==oRecord.systemState[iIndex].name)
+            					fShow=true;
+            			}
+                    }
         		}
         		var sIcon=dss.staticDataModel.getImagePathForState(oRecord.systemState[iIndex].name,oRecord.systemState[iIndex].value);
         		var fShown=false;
         		if (fShow) {
-        			if (customRendererOptions.stateTitles!=null)
-        				if (customRendererOptions.stateTitles.length!=null)
-        					for (var kIndex=0;kIndex<customRendererOptions.stateTitles.length;kIndex++) {
-        						var sStateName=oRecord.systemState[iIndex].name;
-        						var sSuffix="";
-        						if (sStateName.split('.').length==2) {
-        	        				for (var lIndex=0;lIndex<dss.staticDataModel.userGroups.length;lIndex++)
-        	        					if (sStateName.split('.')[1] == "group" + dss.staticDataModel.userGroups[lIndex].id) {
-        	        						sStateName=sStateName.split('.')[0];
-        	        						sSuffix=' ' + _('in') + ' ' + dss.staticDataModel.userGroups[lIndex].name;
-        	        					}
+        			if (customRendererOptions.stateTitles)
+    					for (var kIndex=0;kIndex<customRendererOptions.stateTitles.length;kIndex++) {
+    						var sStateName=oRecord.systemState[iIndex].name;
+    						var sSuffix="";
+    						if (sStateName.split('.').length==2 && dss.staticDataModel.userGroups) {
+    	        				for (var lIndex=0;lIndex<dss.staticDataModel.userGroups.length;lIndex++)
+    	        					if (sStateName.split('.')[1] == "group" + dss.staticDataModel.userGroups[lIndex].id) {
+    	        						sStateName=sStateName.split('.')[0];
+    	        						sSuffix=' ' + _('in') + ' ' + dss.staticDataModel.userGroups[lIndex].name;
+    	        					}
+    						}
+    						if (customRendererOptions.stateTitles[kIndex].name==sStateName)
+        						if (customRendererOptions.stateTitles[kIndex].value==oRecord.systemState[iIndex].value) {
+        							if (sIcon!=null) {
+        							    numberOfRows++;
+        							    sResult+='<tr><td style="padding-right:5px;" colspan="1"><img src="' + sIcon + '"></td><td>' + customRendererOptions.stateTitles[kIndex].title + sSuffix + '</td></tr>';
+        							} else {
+        							    numberOfRows++;
+        							    sResult+='<tr><td colspan="2">' + customRendererOptions.stateTitles[kIndex].title + sSuffix + '</td></tr>';
+        							}
+                                    sTooltip += createTooltipEntry(customRendererOptions.stateTitles[kIndex].title + sSuffix, tmpStatus);
+                                    overallCondState = overallCondState && tmpStatus;
+        							fShown=true;
         						}
-        						if (customRendererOptions.stateTitles[kIndex].name==sStateName)
-            						if (customRendererOptions.stateTitles[kIndex].value==oRecord.systemState[iIndex].value) {
-            							if (sIcon!=null) {
-            							    numberOfRows++;
-            							    sResult+='<tr><td style="padding-right:5px;" colspan="1"><img src="' + sIcon + '"></td><td>' + customRendererOptions.stateTitles[kIndex].title + sSuffix + '</td></tr>';
-            							} else {
-            							    numberOfRows++;
-            							    sResult+='<tr><td colspan="2">' + customRendererOptions.stateTitles[kIndex].title + sSuffix + '</td></tr>';
-            							}
-                                        sTooltip += createTooltipEntry(customRendererOptions.stateTitles[kIndex].title + sSuffix, tmpStatus);
-                                        overallCondState = overallCondState && tmpStatus;
-            							fShown=true;
-            						}
-        					}
+    					}
         		}
         		if (!fShown) {
         			var sError="";
@@ -873,19 +878,21 @@ Ext.define('DSS.component.conditionCcolumn', {
         		tmpStatus = checkAddonStateConditions(oRecord.addonStates[iIndex]);
 
 	        	if (oRecord.addonStates [iIndex].scriptID=='system-addon-user-defined-states') {
-	        		for (var jIndex=0;jIndex<dss.staticDataModel.userStates.length;jIndex++)
-	        			if (dss.staticDataModel.userStates[jIndex].name==oRecord.addonStates [iIndex].name) {
-	        				var valueText;
-	        				if (oRecord.addonStates[iIndex].value==1) {
-	        					valueText=dss.staticDataModel.userStates[jIndex].setName;
-	        					image=dss.staticDataModel.baseImagePath +  "state/uds_state_active.png";
-	        				} else {
-	        					valueText=dss.staticDataModel.userStates[jIndex].resetName;
-	        					image=dss.staticDataModel.baseImagePath +  "state/uds_state_inactive.png";
-	        				}
-	        				textString=Ext.String.format2(_("Customstate {state} is {value}"),{state:dss.staticDataModel.userStates[jIndex].displayName,value:valueText});
-	        				sTmpString='<td style=""><img src="' + image + '"></td><td>' + textString;
-	        			}
+                    if (dss.staticDataModel.userStates) {
+    	        		for (var jIndex=0;jIndex<dss.staticDataModel.userStates.length;jIndex++)
+    	        			if (dss.staticDataModel.userStates[jIndex].name==oRecord.addonStates [iIndex].name) {
+    	        				var valueText;
+    	        				if (oRecord.addonStates[iIndex].value==1) {
+    	        					valueText=dss.staticDataModel.userStates[jIndex].setName;
+    	        					image=dss.staticDataModel.baseImagePath +  "state/uds_state_active.png";
+    	        				} else {
+    	        					valueText=dss.staticDataModel.userStates[jIndex].resetName;
+    	        					image=dss.staticDataModel.baseImagePath +  "state/uds_state_inactive.png";
+    	        				}
+    	        				textString=Ext.String.format2(_("Customstate {state} is {value}"),{state:dss.staticDataModel.userStates[jIndex].displayName,value:valueText});
+    	        				sTmpString='<td style=""><img src="' + image + '"></td><td>' + textString;
+    	        			}
+                    }
     	        }
 
                 if (oRecord.addonStates[iIndex].scriptID == 'heating-controller') {
@@ -956,7 +963,7 @@ Ext.define('DSS.component.triggerColumn', {
         var f1tip = false;
         var f2tip = false;
         var f3tip = false;
-        for ( var iIndex = 0; iIndex < oRecord.length; iIndex++) {
+        for ( var iIndex = 0; oRecord && iIndex < oRecord.length; iIndex++) {
             var oAction = oRecord[iIndex];
 
 
@@ -976,18 +983,20 @@ Ext.define('DSS.component.triggerColumn', {
 	        			var oUserStates=dss.staticDataModel.getUserStates();
 	        			var oParameter={};
 	        			var image;
-	        			for (var jIndex=0;jIndex<oUserStates.length;jIndex++) {
-	            			if (oUserStates[jIndex].name==idString) {
-	            				oParameter.state=oUserStates[jIndex].displayName;
-	            				if (oAction.state=='active') {
-	            					oParameter.value=oUserStates[jIndex].setName;
-	            					image=dss.staticDataModel.baseImagePath +  "state/uds_state_active.png";
-	            				 } else {
-	            					oParameter.value=oUserStates[jIndex].resetName;
-	            					image=dss.staticDataModel.baseImagePath +  "state/uds_state_inactive.png";
-	            				 }
-	            			}
-	            		}
+                        if (oUserStates) {
+    	        			for (var jIndex=0;jIndex<oUserStates.length;jIndex++) {
+    	            			if (oUserStates[jIndex].name==idString) {
+    	            				oParameter.state=oUserStates[jIndex].displayName;
+    	            				if (oAction.state=='active') {
+    	            					oParameter.value=oUserStates[jIndex].setName;
+    	            					image=dss.staticDataModel.baseImagePath +  "state/uds_state_active.png";
+    	            				 } else {
+    	            					oParameter.value=oUserStates[jIndex].resetName;
+    	            					image=dss.staticDataModel.baseImagePath +  "state/uds_state_inactive.png";
+    	            				 }
+    	            			}
+    	            		}
+                        }
 
 		        		var sString= '<td style="'+sError+'padding-right:5px;"></td>';
 		        		if (image!=null)
@@ -1102,20 +1111,22 @@ Ext.define('DSS.component.triggerColumn', {
         			var oUserStates=dss.staticDataModel.getUserStates();
         			var oParameter={};
         			var fSkipAfterUserstateFound=false;
-        			for (var jIndex=0;jIndex<oUserStates.length;jIndex++) {
-            			if (oUserStates[jIndex].name==idString) {
-            				oParameter.state=oUserStates[jIndex].displayName;
-            				if (oAction.state=='active')
-            					oParameter.value=oUserStates[jIndex].setName;
-            				else
-            					oParameter.value=oUserStates[jIndex].resetName;
-        	        		var sString = '<td style="'+sError+'padding-right:5px;"></td>';
-        	        		sString += '<td style="'+sError+'">' +  Ext.String.format2(_('Customstate {state} is {value}'),oParameter);
-        	        		sString += "</td>";
-        	        		sResult += sString;
-        	        		fSkipAfterUserstateFound=true;
-            			}
-            		}
+                    if (oUserStates) {
+            			for (var jIndex=0;jIndex<oUserStates.length;jIndex++) {
+                			if (oUserStates[jIndex].name==idString) {
+                				oParameter.state=oUserStates[jIndex].displayName;
+                				if (oAction.state=='active')
+                					oParameter.value=oUserStates[jIndex].setName;
+                				else
+                					oParameter.value=oUserStates[jIndex].resetName;
+            	        		var sString = '<td style="'+sError+'padding-right:5px;"></td>';
+            	        		sString += '<td style="'+sError+'">' +  Ext.String.format2(_('Customstate {state} is {value}'),oParameter);
+            	        		sString += "</td>";
+            	        		sResult += sString;
+            	        		fSkipAfterUserstateFound=true;
+                			}
+                		}
+                    }
         			if (fSkipAfterUserstateFound)
         				break;
 
@@ -1177,11 +1188,13 @@ Ext.define('DSS.component.triggerColumn', {
 		                            if (!fSkip) {
 		                                var bIsWindowHandle = dss.staticDataModel.IsWindowHandle(oDevice);
 		                                var type=255;
-		                                for (var kIndex=0;kIndex<oDevice.binaryInputs.length;kIndex++) {
-		                                    if (oDevice.binaryInputs[kIndex].index==typeIndex) {
-		                                        type=oDevice.binaryInputs[kIndex].type;
-		                                    }
-		                                }
+                                        if (oDevice.binaryInputs) {
+    		                                for (var kIndex=0;kIndex<oDevice.binaryInputs.length;kIndex++) {
+    		                                    if (oDevice.binaryInputs[kIndex].index==typeIndex) {
+    		                                        type=oDevice.binaryInputs[kIndex].type;
+    		                                    }
+    		                                }
+                                        }
 		                                if (!bIsWindowHandle) {
 		                                    if (oAction.state=='active') {
 		                                        oParameter.state_value= dss.staticDataModel.getNameForAKMValue(type,true);
@@ -1522,11 +1535,13 @@ Ext.define('DSS.component.actionColumn', {
         var sResult = "<table>";
         var fShowDelay=false;
 
-        for ( var iIndex = 0; iIndex < oRecord.length; iIndex++) {
-            var oAction = oRecord[iIndex];
-            if (oAction.delay!=null)
-                if (oAction.delay!=0)
-                    fShowDelay=true;
+        if (oRecord) {
+            for ( var iIndex = 0; iIndex < oRecord.length; iIndex++) {
+                var oAction = oRecord[iIndex];
+                if (oAction.delay!=null)
+                    if (oAction.delay!=0)
+                        fShowDelay=true;
+            }
         }
 
         if (fShowDelay) {
@@ -1538,7 +1553,7 @@ Ext.define('DSS.component.actionColumn', {
                                          });
         }
 
-        for ( iIndex = 0; iIndex < oRecord.length; iIndex++) {
+        for ( iIndex = 0; oRecord && iIndex < oRecord.length; iIndex++) {
             var oAction = oRecord[iIndex];
 
             var fValid= dss.validateActionObject(oAction);
@@ -1628,19 +1643,21 @@ Ext.define('DSS.component.actionColumn', {
 	        			var oUserStates=dss.staticDataModel.getUserStates();
 	        			var sStringValue;
 	        			var image;
-	        			for (var jIndex=0;jIndex<oUserStates.length;jIndex++) {
-	            			if (oUserStates[jIndex].name==stateName) {
-    	        				var valueText;
-    	        				if (value=='active') {
-    	        					valueText=oUserStates[jIndex].setName;
-    	        					image=dss.staticDataModel.baseImagePath +  "state/uds_state_active.png";
-    	        				} else {
-    	        					valueText=oUserStates[jIndex].resetName;
-    	        					image=dss.staticDataModel.baseImagePath +  "state/uds_state_inactive.png";
-    	        				}
-    	        				sStringValue= Ext.String.format2(_("Customstate {state} change to {value}"),{state:oUserStates[jIndex].displayName,value:valueText});
-	            			}
-	            		}
+                        if (oUserStates) {
+    	        			for (var jIndex=0;jIndex<oUserStates.length;jIndex++) {
+    	            			if (oUserStates[jIndex].name==stateName) {
+        	        				var valueText;
+        	        				if (value=='active') {
+        	        					valueText=oUserStates[jIndex].setName;
+        	        					image=dss.staticDataModel.baseImagePath +  "state/uds_state_active.png";
+        	        				} else {
+        	        					valueText=oUserStates[jIndex].resetName;
+        	        					image=dss.staticDataModel.baseImagePath +  "state/uds_state_inactive.png";
+        	        				}
+        	        				sStringValue= Ext.String.format2(_("Customstate {state} change to {value}"),{state:oUserStates[jIndex].displayName,value:valueText});
+    	            			}
+    	            		}
+                        }
 
 		        		var sString = '<td style="'+sError+'padding-right:5px;"></td>';
 		        		if (image!=null)
@@ -2227,84 +2244,86 @@ Ext.define('DSS.component.recurrenceColumn', {
             var fSo = false;
             if (val.timeArray!=null) {
                 var recObject = val.timeArray;
-                if (recObject.length == 7) {
-                    var fActive=view.up().isFieldActive(record);
-                    if (!fActive)
-                    	return '<span style="color:grey;">'+sString + _("daily") + "</span>"+'</span>';
-                    else
-                    	return sString + _("daily") + "</span>";
-                }
+                if (recObject) {
+                    if (recObject.length == 7) {
+                        var fActive=view.up().isFieldActive(record);
+                        if (!fActive)
+                        	return '<span style="color:grey;">'+sString + _("daily") + "</span>"+'</span>';
+                        else
+                        	return sString + _("daily") + "</span>";
+                    }
 
-                for ( var iIndex = 0; iIndex < recObject.length; iIndex++) {
-                    if (recObject[iIndex] == 'MO')
-                        fMo = true;
-                    if (recObject[iIndex] == 'TU')
-                        fDi = true;
-                    if (recObject[iIndex] == 'WE')
-                        fMi = true;
-                    if (recObject[iIndex] == 'TH')
-                        fDo = true;
-                    if (recObject[iIndex] == 'FR')
-                        fFr = true;
-                    if (recObject[iIndex] == 'SA')
-                        fSa = true;
-                    if (recObject[iIndex] == 'SU')
-                        fSo = true;
-                }
-                if (recObject.length == 2)
-                    if (fSa)
-                        if (fSo) {
-                        	var fActive=view.up().isFieldActive(record);
-                        	if (!fActive)
-                        		return '<span style="color:grey;">'+sString + _('on weekends')+'</span>'+'</span>';
-                        	else
-                        		return sString + _('on weekends')+'</span>';
-                        }
+                    for ( var iIndex = 0; iIndex < recObject.length; iIndex++) {
+                        if (recObject[iIndex] == 'MO')
+                            fMo = true;
+                        if (recObject[iIndex] == 'TU')
+                            fDi = true;
+                        if (recObject[iIndex] == 'WE')
+                            fMi = true;
+                        if (recObject[iIndex] == 'TH')
+                            fDo = true;
+                        if (recObject[iIndex] == 'FR')
+                            fFr = true;
+                        if (recObject[iIndex] == 'SA')
+                            fSa = true;
+                        if (recObject[iIndex] == 'SU')
+                            fSo = true;
+                    }
+                    if (recObject.length == 2)
+                        if (fSa)
+                            if (fSo) {
+                            	var fActive=view.up().isFieldActive(record);
+                            	if (!fActive)
+                            		return '<span style="color:grey;">'+sString + _('on weekends')+'</span>'+'</span>';
+                            	else
+                            		return sString + _('on weekends')+'</span>';
+                            }
 
-                if (recObject.length == 5)
-                    if (fMo)
+                    if (recObject.length == 5)
+                        if (fMo)
+                            if (fDi)
+                                if (fMi)
+                                    if (fDo)
+                                        if (fFr) {
+                                            var fActive=view.up().isFieldActive(record);
+    	                                    if (!fActive)
+    	                                    	return '<span style="color:grey;">'+sString + _('MO-FR')+'</span>'+'</span>';
+    	                                    else
+    	                                        return sString + _('MO-FR')+'</span>';
+                                        }
+                    if (recObject.length == 1) {
+                        if (fMo)
+                            sString += _("on monday")+"</span>";
                         if (fDi)
-                            if (fMi)
-                                if (fDo)
-                                    if (fFr) {
-                                        var fActive=view.up().isFieldActive(record);
-	                                    if (!fActive)
-	                                    	return '<span style="color:grey;">'+sString + _('MO-FR')+'</span>'+'</span>';
-	                                    else
-	                                        return sString + _('MO-FR')+'</span>';
-                                    }
-                if (recObject.length == 1) {
-                    if (fMo)
-                        sString += _("on monday")+"</span>";
-                    if (fDi)
-                        sString += _("on tuesday")+"</span>";
-                    if (fMi)
-                        sString += _("on wednesday")+"</span>";
-                    if (fDo)
-                        sString += _("on thursday")+"</span>";
-                    if (fFr)
-                        sString += _("on friday")+"</span>";
-                    if (fSa)
-                        sString += _("on saturday")+"</span>";
-                    if (fSo)
-                        sString += _("on sunday")+"</span>";
-
-                    var fActive=view.up().isFieldActive(record);
-                    if (!fActive)
-                    	return '<span style="color:grey;">'+sString+'</span>';
-                    else
-                    	return sString;
+                            sString += _("on tuesday")+"</span>";
+                        if (fMi)
+                            sString += _("on wednesday")+"</span>";
+                        if (fDo)
+                            sString += _("on thursday")+"</span>";
+                        if (fFr)
+                            sString += _("on friday")+"</span>";
+                        if (fSa)
+                            sString += _("on saturday")+"</span>";
+                        if (fSo)
+                            sString += _("on sunday")+"</span>";
+
+                        var fActive=view.up().isFieldActive(record);
+                        if (!fActive)
+                        	return '<span style="color:grey;">'+sString+'</span>';
+                        else
+                        	return sString;
 
-                }
-                if (recObject.length == 0) {
+                    }
+                    if (recObject.length == 0) {
 
 
-                    var fActive=view.up().isFieldActive(record);
-                    if (!fActive)
-                    	return '<span style="color:grey;">'+sString + _("no time defined")+'</span></span>';
-                    else
-                    	return sString + _("no time defined")+"</span>";
+                        var fActive=view.up().isFieldActive(record);
+                        if (!fActive)
+                        	return '<span style="color:grey;">'+sString + _("no time defined")+'</span></span>';
+                        else
+                        	return sString + _("no time defined")+"</span>";
 
+                    }
                 }
             } else {
                 var fActive=view.up().isFieldActive(record);
@@ -2630,72 +2649,74 @@ Ext.apply(Ext.data.SortTypes, {
             var fFr = false;
             var fSa = false;
             var fSo = false;
-            if (recObject.length == 7)
-                return 0;
-            for ( var iIndex = 0; iIndex < recObject.length; iIndex++) {
-                if (recObject[iIndex] == 'MO')
-                    fMo = true;
-                if (recObject[iIndex] == 'TU')
-                    fDi = true;
-                if (recObject[iIndex] == 'WE')
-                    fMi = true;
-                if (recObject[iIndex] == 'TH')
-                    fDo = true;
-                if (recObject[iIndex] == 'FR')
-                    fFr = true;
-                if (recObject[iIndex] == 'SA')
-                    fSa = true;
-                if (recObject[iIndex] == 'SU')
-                    fSo = true;
-            }
-            if (fSa)
-                if (fSo)
-                    if (!fMo)
-                        if (!fDi)
-                            if (!fMi)
-                                if (!fDo)
-                                    if (!fFr)
-                                        return 20;
-            if (!fSa)
-                if (!fSo)
-                    if (fMo)
-                        if (fDi)
-                            if (fMi)
-                                if (fDo)
-                                    if (fFr)
-                                        return 10;
-            if (recObject.length!=1) {
-                var iReturnValue=100;
-                if (fMo)
-                    iReturnValue+=1;
-                if (fDi)
-                    iReturnValue+=2;
-                if (fMi)
-                    iReturnValue+=4;
-                if (fDo)
-                    iReturnValue+=8;
-                if (fFr)
-                    iReturnValue+=16;
-                if (fSa)
-                    iReturnValue+=32;
-                if (fSa)
-                    iReturnValue+=64;
-                return iReturnValue;
-            } else {
-                if (fMo)
-                    return 201;
-                if (fDi)
-                    return 202;
-                if (fMi)
-                    return 203;
-                if (fDo)
-                    return 204;
-                if (fFr)
-                    return 205;
+            if (recObject) {
+                if (recObject.length == 7)
+                    return 0;
+                for ( var iIndex = 0; iIndex < recObject.length; iIndex++) {
+                    if (recObject[iIndex] == 'MO')
+                        fMo = true;
+                    if (recObject[iIndex] == 'TU')
+                        fDi = true;
+                    if (recObject[iIndex] == 'WE')
+                        fMi = true;
+                    if (recObject[iIndex] == 'TH')
+                        fDo = true;
+                    if (recObject[iIndex] == 'FR')
+                        fFr = true;
+                    if (recObject[iIndex] == 'SA')
+                        fSa = true;
+                    if (recObject[iIndex] == 'SU')
+                        fSo = true;
+                }
                 if (fSa)
-                    return 206;
-                if (fSo)
-                    return 207;
+                    if (fSo)
+                        if (!fMo)
+                            if (!fDi)
+                                if (!fMi)
+                                    if (!fDo)
+                                        if (!fFr)
+                                            return 20;
+                if (!fSa)
+                    if (!fSo)
+                        if (fMo)
+                            if (fDi)
+                                if (fMi)
+                                    if (fDo)
+                                        if (fFr)
+                                            return 10;
+                if (recObject.length!=1) {
+                    var iReturnValue=100;
+                    if (fMo)
+                        iReturnValue+=1;
+                    if (fDi)
+                        iReturnValue+=2;
+                    if (fMi)
+                        iReturnValue+=4;
+                    if (fDo)
+                        iReturnValue+=8;
+                    if (fFr)
+                        iReturnValue+=16;
+                    if (fSa)
+                        iReturnValue+=32;
+                    if (fSa)
+                        iReturnValue+=64;
+                    return iReturnValue;
+                } else {
+                    if (fMo)
+                        return 201;
+                    if (fDi)
+                        return 202;
+                    if (fMi)
+                        return 203;
+                    if (fDo)
+                        return 204;
+                    if (fFr)
+                        return 205;
+                    if (fSa)
+                        return 206;
+                    if (fSo)
+                        return 207;
+                }
             }
         }
         return 1000;
@@ -3021,7 +3042,7 @@ Ext.define('DSS.gridPanel' ,{
         this.on({
             selectionchange: function(view, selections, options) {
             	if (me.inactiveField!=null) {
-            		if (selections.length > 0) {
+            		if (selections) {
             			for (var iIndex=0;iIndex<selections.length;iIndex++) {
             				if (selections[iIndex].get(me.inactiveField)==true) {
             					view.deselect(selections[iIndex]);
@@ -3135,9 +3156,11 @@ Ext.define('DSS.gridPanel' ,{
     },
     editSelectedRecord: function ()  {
         var oParams = {};
-        for (var iIndex=0;iIndex<this.curSelectedEvent.fields.items.length;iIndex++) {
-            var sKey=this.curSelectedEvent.fields.items[iIndex].name;
-            oParams[sKey] = this.curSelectedEvent.get(sKey);
+        if (this.curSelectedEvent && this.curSelectedEvent.fields && this.curSelectedEvent.fields.items) {
+            for (var iIndex=0;iIndex<this.curSelectedEvent.fields.items.length;iIndex++) {
+                var sKey=this.curSelectedEvent.fields.items[iIndex].name;
+                oParams[sKey] = this.curSelectedEvent.get(sKey);
+            }
         }
         this.editorWindow.show();
         this.editorWindow.setValues(oParams);
diff --git a/js/dss/dss-wizard-dialog.js b/js/dss/dss-wizard-dialog.js
index 86e5b399..de3aa8a5 100644
--- a/js/dss/dss-wizard-dialog.js
+++ b/js/dss/dss-wizard-dialog.js
@@ -13,7 +13,7 @@ Ext.define('DSS.component.Wizard', {
     makeControl : function(subConfig) {
         var oControl;
         switch (subConfig.type) {
-          
+
             case 'hidden': {
                 var oPseudoControl = {
                     value : null
@@ -40,7 +40,7 @@ Ext.define('DSS.component.Wizard', {
                 	try  {
                 		var iHeight=oControl.getHeight();
                 		this.innerHeight -= iHeight;
-                	} 
+                	}
                 	catch (e) {
                         this.innerHeight -= 22;
                 	}
@@ -65,21 +65,24 @@ Ext.define('DSS.component.Wizard', {
     validatePage: function () {
     	var fNext=true;
     	var pageDef=this.pageDefinition[this.actIndex];
-    	if (pageDef!=null)
+    	if (pageDef && pageDef.controls) {
 	    	for (var iIndex=0;iIndex<pageDef.controls.length;iIndex++) {
 	    		var id=pageDef.controls[iIndex].id;
 	    		if (this.editControls[id].isValid()==false)
 	    			fNext=false;
 	    	}
+        }
     	this.buttonNext.setDisabled(!fNext);
     	this.buttonFinish.setDisabled(!fNext);
     },
     takeOverValue:function() {
     	var pageDef=this.pageDefinition[this.actIndex];
-    	for (var iIndex=0;iIndex<pageDef.controls.length;iIndex++) {
-    		var id=pageDef.controls[iIndex].id;
-    		this.value[id]=this.editControls[id].getValue();
-    	}
+        if (pageDef && pageDef.controls) {
+        	for (var iIndex=0;iIndex<pageDef.controls.length;iIndex++) {
+        		var id=pageDef.controls[iIndex].id;
+        		this.value[id]=this.editControls[id].getValue();
+        	}
+        }
     },
     constructor : function(config) {
         config.closeAction = 'hide';
@@ -95,11 +98,11 @@ Ext.define('DSS.component.Wizard', {
         this.editControls={};
         this.oPages=[];
         this.innerHeight = 427;
-       
+
         this.addEvents({
         	change : true
         });
-        
+
         var me = this;
         var sCancelText=_('cancel');
         if (config.cancelTitle!=null) {
@@ -127,8 +130,8 @@ Ext.define('DSS.component.Wizard', {
         if (config.finishFunc!=null) {
         	this.finishFunc=config.finishFunc;
         }
-        
-        if ((config.hideBack==null) ||(config.hideBack==false)) { 
+
+        if ((config.hideBack==null) ||(config.hideBack==false)) {
             me.buttonBack = Ext.create('Ext.Button', {
                 text : sBackText,
                 handler : function() {
@@ -139,11 +142,11 @@ Ext.define('DSS.component.Wizard', {
             			me.leftPanel.getSelectionModel().select(nextRecord);
             		else
             			me.leftPanel.getSelectionModel().deselectAll();
-                
+
                 }
             });
         }
-        if ((config.hideCancel==null) ||(config.hideCancel==false)) { 
+        if ((config.hideCancel==null) ||(config.hideCancel==false)) {
             me.buttonCancel = Ext.create('Ext.Button', {
                 text : sCancelText,
                 handler : function() {
@@ -207,7 +210,7 @@ Ext.define('DSS.component.Wizard', {
 				}
 			}
         })
-        
+
         if (config.startDescription != null) {
         	this.oStartPage=Ext.create('Ext.panel.Panel', {
         		border : 0,
@@ -221,7 +224,7 @@ Ext.define('DSS.component.Wizard', {
         	this.leftStore.add({
         		_id:-3,
         		name:'',
-        		value:null        		
+        		value:null
         	});
         	for (var iIndex=0;iIndex<config.pages.length;iIndex++) {
         		var pageDef=config.pages[iIndex];
@@ -229,22 +232,21 @@ Ext.define('DSS.component.Wizard', {
         			definition:pageDef,
         			name:pageDef.shortTitle,
         			_id:iIndex+1,
-        			value:null});   
+        			value:null});
         		var items=[ {
     				xtype:'label',
     				text:pageDef.longDescription
     			}];
-        		if (pageDef.controls!=null)
-        			if (pageDef.controls.length>0) {
-        				for(var kIndex=0;kIndex<pageDef.controls.length;kIndex++){
-        					var oControl=this.makeControl(pageDef.controls[kIndex]);
-        					oControl.on('change', function() {
-        						me.validatePage();
-        					});
-        					
-        					items.push(oControl);        					
-        				}
-        			}
+    			if (pageDef.controls) {
+    				for(var kIndex=0;kIndex<pageDef.controls.length;kIndex++){
+    					var oControl=this.makeControl(pageDef.controls[kIndex]);
+    					oControl.on('change', function() {
+    						me.validatePage();
+    					});
+
+    					items.push(oControl);
+    				}
+    			}
         		var page=Ext.create('Ext.panel.Panel', {
         			border : 0,
         			width:"100%",
@@ -253,8 +255,8 @@ Ext.define('DSS.component.Wizard', {
         			hidden:true
         		});
         		this.oPages.push(page);
-        		
-        		
+
+
         	}
         	var fSkipLeftFinish=false;
         	if (config.hideLeftFinish!=null)
@@ -271,8 +273,8 @@ Ext.define('DSS.component.Wizard', {
 	        		value:null
 	        	});
 	        }
-        } 
-        
+        }
+
         this.displayBottomText=Ext.create('Ext.form.field.Display', {
             border : 0,
             value:'',
@@ -283,7 +285,7 @@ Ext.define('DSS.component.Wizard', {
             flex:1
         });
         var oButtons=[this.displayBottomText];
-        	
+
         if (me.buttonStart!=null)
             oButtons.push(me.buttonStart);
         if (me.buttonBack!=null)
@@ -294,16 +296,16 @@ Ext.define('DSS.component.Wizard', {
             oButtons.push(me.buttonFinish);
         if (me.buttonCancel!=null)
             oButtons.push(me.buttonCancel);
-        
-        var insideItems=Ext.create("Ext.panel.Panel", {     
+
+        var insideItems=Ext.create("Ext.panel.Panel", {
     		bodyPadding : 10,
     		border:"1px",
     		items:this.oPages
     	});
         insideItems.add(this.oStartPage);
     	insideItems.updateLayout();
-        
-        
+
+
         this.leftPanel=Ext.create('Ext.grid.Panel', {
         	store:this.leftStore,
         	border : 0,
@@ -327,7 +329,7 @@ Ext.define('DSS.component.Wizard', {
         	}],
         	width:100
         });
-        
+
         this.leftPanel.on('beforeselect', function(grid, record) {
         	var fResult=true;
             if (record.get('_id')<0)
@@ -344,17 +346,17 @@ Ext.define('DSS.component.Wizard', {
             		else
             			me.leftPanel.getSelectionModel().deselectAll();
 	        	}
-	        }	
+	        }
             return fResult;
         });
-        
+
         this.leftPanel.on('selectionchange',function(view, selections) {
         	if (selections.length==1) {
         		var index=selections[0].get('_id');
         		me.setStep(index-1);
-        	} 
+        	}
         });
-        
+
         this.topIndicator=Ext.create('Ext.form.Label' , {
         	text: 'Wizzard!'
         })
@@ -364,7 +366,7 @@ Ext.define('DSS.component.Wizard', {
         	padding: '10 0 0 10',
         	height:40
         });
-        
+
         Ext.apply(me, {
             items : [{
                 xtype : 'panel',
@@ -396,26 +398,28 @@ Ext.define('DSS.component.Wizard', {
     	if (oStartValues!=null) {
     		this.value=oStartValues;
     	}
-    	
+
     	this.show();
     	if (this.oStartPage!=null)
     		this.setStep(-1);
     	else
-    		this.setStep(0);    
-    	
+    		this.setStep(0);
+
     },
     setStep: function (selIndex) {
     	this.actIndex=selIndex;
     	if (this.oStartPage!=null)
     		this.oStartPage.setVisible(selIndex==-1)
-    	for (var iIndex=0;iIndex<this.oPages.length;iIndex++)
-    		this.oPages[iIndex].setVisible(iIndex==selIndex);
+        if (this.oPages) {
+        	for (var iIndex=0;iIndex<this.oPages.length;iIndex++)
+        		this.oPages[iIndex].setVisible(iIndex==selIndex);
+        }
 
     	this.buttonStart.setVisible(selIndex==-1);
     	this.buttonNext.setVisible((selIndex<(this.oPages.length-1)) && (selIndex>=0));
     	this.buttonFinish.setVisible(selIndex==(this.oPages.length-1));
     	this.buttonBack.setVisible(selIndex>0);
-    	
+
     	if (selIndex==-1) {
     		this.topIndicator.setText(this.startLongTitle);
     	} else {
@@ -425,11 +429,12 @@ Ext.define('DSS.component.Wizard', {
     	if (this.actIndex==-1)
     		return;
     	var pageDef=this.pageDefinition[this.actIndex];
-    	for (var iIndex=0;iIndex<pageDef.controls.length;iIndex++) {
-    		var id=pageDef.controls[iIndex].id;
-    		this.editControls[id].setValue(this.value[id],this.value);
-    	}    	
+        if (pageDef && pageDef.controls) {
+        	for (var iIndex=0;iIndex<pageDef.controls.length;iIndex++) {
+        		var id=pageDef.controls[iIndex].id;
+        		this.editControls[id].setValue(this.value[id],this.value);
+        	}
+        }
     }
-  
-});
 
+});
-- 
GitLab