diff --git a/js/app/models/InteractiveNode.js b/js/app/models/InteractiveNode.js
index 975ca9f..41c19e0 100644
--- a/js/app/models/InteractiveNode.js
+++ b/js/app/models/InteractiveNode.js
@@ -89,13 +89,15 @@ Ext.define('amdaModel.InteractiveNode', {
 	{
 		this.callParent(arguments); 
 		this.set('nodeType',this.self.nodeType);		
-		this.set('ownerTreeId',amdaUI.ExplorerUI.RESRC_TAB.TREE_ID);	 
-		// if id of this node have root category suffix		
-		if (Ext.util.Format.substr(this.get('id'), -(amdaUI.ExplorerUI.CAT_SUFFIX.length), this.get('id').length) === amdaUI.ExplorerUI.CAT_SUFFIX)
-		{
-		// set the expanded property to true
-			this.set('expanded',true);
-		}        
+		this.set('ownerTreeId',amdaUI.ExplorerUI.RESRC_TAB.TREE_ID);
+		if (this.get('id')) { // TODO why sometimes (delete in remote interoper tree) this.get('id') = undefined ?
+			// if id of this node have root category suffix		
+			if (Ext.util.Format.substr(this.get('id'), -(amdaUI.ExplorerUI.CAT_SUFFIX.length), this.get('id').length) === amdaUI.ExplorerUI.CAT_SUFFIX)
+			{
+			// set the expanded property to true
+				this.set('expanded',true);
+			}  
+		}
 	},
     
 /**
diff --git a/js/app/models/RemoteParamNode.js b/js/app/models/RemoteParamNode.js
index 7691607..05b1a28 100644
--- a/js/app/models/RemoteParamNode.js
+++ b/js/app/models/RemoteParamNode.js
@@ -3,152 +3,143 @@
  * Name     : RemoteParamNode.js
  * @class   amdaModel.RemoteParamNode
  * @extends amdaModel.LocalParamNode
- * @brief
- * @author
- * @version $Id: RemoteParamNode.js 2544 2014-10-03 10:21:56Z elena $
+ * @author elena
  */
 
 Ext.define('amdaModel.RemoteParamNode', {
+	extend: 'amdaModel.LocalParamNode',
 
-    extend: 'amdaModel.LocalParamNode',
-
-     statics:{
-        nodeType: 'remoteParam'
-    },
-
-    fields: [
-            {name: 'isRemoteDataSet', type:'boolean', persist: false, defaultValue: false},
-            {name: 'isSimulation', type:'boolean', defaultValue: false}
-            ],
-
-    constructor : function(config){
-        this.callParent(arguments);
-        //TODO only for INTEROPER TREE
-	if (!this.get('leaf')) this.set('allowDrag', false);
-	if (this.get('isParameter')) this.set('allowDrag',true);
-	if (this.get('leaf') && this.get('isSpectra')) this.set('iconCls', 'icon-spectra');
-        if (this.get('disable')) {
-            this.set('cls', 'icon-disabled');
-            this.set('allowDrag', false);
-        }
-    },
-
-
-    allMenuItems : function() {
-        var menuItems =
-        [{
-            fnId : 'dire-addData',
-            text : 'Add Data'
-        },{
-            fnId : 'root-addData',
-            text : 'Add Data'
-        },{
-            fnId : 'dire-deleteNode',
-            text : 'Delete Data'
-        },{
-            fnId : 'root-collapseAll',
-            text : 'Close All'
-        }, {
-            fnId : 'dire-collapseAll',
-            text : 'Close All'
-        }, {
-            fnId : 'para-plotParam',
-            text : 'Plot Parameter',
-            hidden : true
-        }, {
-            fnId : 'para-downParam',
-            text : 'Download Parameter',
-            hidden : true
-        },{
-            fnId : 'leaf-createAlias',
-            text : 'Create/Edit Alias'
-        }, {
-            fnId : 'leaf-createDerivedParam',
-            text : 'Create Derived Parameter'
-        },{
-            fnId : 'leaf-deleteNode',
-            text : 'Delete Parameter'
-        },{
-            fnId : 'leaf-plotParam',
-            text : 'Plot Parameter',
-            hidden : true
-        }, {
-            fnId : 'leaf-downParam',
-            text : 'Download Parameter',
-            hidden : true
-        }];
-
-        return menuItems;
-    } ,
-
-    onMenuItemClick : function(menu,item,event) {
+	statics:{
+		nodeType: 'remoteParam'
+	},
 
-        if (item) {
-            switch (item.fnId) {
+	fields: [{name: 'isRemoteDataSet', type:'boolean', persist: false, defaultValue: true},
+			{name: 'isSimulation', type:'boolean', defaultValue: false}],
+
+	constructor : function(config){		
+		this.callParent(arguments);
+		
+		//TODO only for INTEROPER TREE
+		if (!this.get('leaf')) this.set('allowDrag', false);
+		if (this.get('isParameter')) this.set('allowDrag',true);
+		if (this.get('leaf') && this.get('isSpectra')) this.set('iconCls', 'icon-spectra');
+			
+		if (this.get('disable')) {
+			this.set('cls', 'icon-disabled');
+			this.set('allowDrag', false);
+		}
+	},
 
-            case 'root-collapseAll':
-            case 'dire-collapseAll':
-                if(this && !this.isLeaf()) {
-                    this.collapse(true);
-                }
-                break;
-            case 'leaf-createDerivedParam':
-                this.createLeaf(this);
-                break;
-            case 'leaf-createAlias':
-                this.createAlias(this);
-                break;
-            case  'leaf-deleteNode':
-            case 'dire-deleteNode' :
-                this.deleteData();
-                break;
-            case  'dire-addData':
-            case  'root-addData':
-                this.addData();
-                break;
-            case 'leaf-plotParam':
-            case 'para-plotParam':
-                    this.createPlot(this);
-                break;
-            case 'leaf-downParam':
-            case 'para-downParam':
-                    this.createDownload(this);
-                break;
-            default:
-                break;
-            }
-        }
-    },
+	allMenuItems : function() {
+		var menuItems =
+		[{
+			fnId : 'dire-addData',
+			text : 'Add Data'
+		},{
+			fnId : 'root-addData',
+			text : 'Add Data'
+		},{
+			fnId : 'dire-deleteNode',
+			text : 'Delete Data'
+		},{
+			fnId : 'root-collapseAll',
+			text : 'Close All'
+		}, {
+			fnId : 'dire-collapseAll',
+			text : 'Close All'
+		}, {
+			fnId : 'para-plotParam',
+			text : 'Plot Parameter',
+			hidden : true
+		}, {
+		fnId : 'para-downParam',
+			text : 'Download Parameter',
+			hidden : true
+		},{
+			fnId : 'leaf-createAlias',
+			text : 'Create/Edit Alias'
+		}, {
+			fnId : 'leaf-createDerivedParam',
+			text : 'Create Derived Parameter'
+		},{
+			fnId : 'leaf-deleteNode',
+			text : 'Delete Parameter'
+		},{
+			fnId : 'leaf-plotParam',
+			text : 'Plot Parameter',
+			hidden : true
+		}, {
+			fnId : 'leaf-downParam',
+			text : 'Download Parameter',
+			hidden : true
+		}];
+
+		return menuItems;
+	},
 
-     deleteData : function() {
-      //  var parent = this.parentNode;
-	AmdaAction.deleteFromTree({nodeType: this.get('nodeType'), id : this.get('id')}, function(res,e){
-	            //TODO  if () not error ??
-		  this.remove();
-		  this.destroy();
-	      },this);
-     },
+	onMenuItemClick : function(menu,item,event) {
+		if (item) {
+			switch (item.fnId) {
+				case 'root-collapseAll':
+				case 'dire-collapseAll':
+						if(this && !this.isLeaf()) {
+							this.collapse(true);
+						}
+						break;
+				case 'leaf-createDerivedParam':
+						this.createLeaf(this);
+						break;
+				case 'leaf-createAlias':
+						this.createAlias(this);
+						break;
+				case  'leaf-deleteNode':
+				case 'dire-deleteNode' :
+						this.deleteData();
+						break;
+				case  'dire-addData':
+				case  'root-addData':
+						this.addData();
+						break;
+				case 'leaf-plotParam':
+				case 'para-plotParam':
+							this.createPlot(this);
+						break;
+				case 'leaf-downParam':
+				case 'para-downParam':
+							this.createDownload(this);
+						break;
+				default:
+					break;
+			}
+		}
+	},
 
-     addData : function() {
+	deleteData : function() {
+	//  var parent = this.parentNode;
+		AmdaAction.deleteFromTree({nodeType: this.get('nodeType'), id : this.get('id')}, function(res,e){
+			//TODO  if () not error ??
+			this.remove();
+			this.destroy();
+		},this);
+	},
 
-        if (this.get('disable')) return;
+	addData : function() {
+		if (this.get('disable')) return;
 
-        var me = this;
-        myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.interop.id, true, function (module) {
-        	module.createWindow(me.getBaseId());
-        });
+		var me = this;
+		myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.interop.id, true, function (module) {
+			module.createWindow(me.getBaseId());
+		});
 	},
 
-// Depth of Base Root Node = 3 : root, Parameters, Remote Parameters, BaseName
-    getBaseId : function() {
-
-	if (this.getDepth() < 3) return 'root';
+	// Depth of Base Root Node = 3 : root, Parameters, Remote Parameters, BaseName
+	getBaseId : function() {
+		if (this.getDepth() < 3) return 'root';
 
-	var node = this;
-	while (node.getDepth() > 3) {
-	  node = node.parentNode;
+		var node = this;
+		while (node.getDepth() > 3) {
+			node = node.parentNode;
+		}
+		return node.get('id');
 	}
-	return node.get('id');
-    }
-
 });
diff --git a/js/app/views/ExplorerUI.js b/js/app/views/ExplorerUI.js
index 06d0a2a..6de154c 100644
--- a/js/app/views/ExplorerUI.js
+++ b/js/app/views/ExplorerUI.js
@@ -1,1116 +1,1089 @@
 /**
  * Project      : AMDA-NG4
  * Name         : ExplorerUI.js
- * Description  : Explorer Module UI definition (View)
- * @class   amdaUI.ExplorerUI
+ * @class   amdaUI.ExplorerUI 
  * @extends Ext.tab.Panel
+ * @class   amdaUI.TreeToolColumn
+ * @extends Ext.tree.Column
+ * @class   MyTreeEditor
+ * @extends Ext.grid.plugin.CellEditing
  * @brief   Explorer View
  * @author  CDA
- * @version $Id: ExplorerUI.js 2544 2014-10-03 10:21:56Z elena $
  */
 
 Ext.define('amdaUI.TreeToolColumn', {
-    extend: 'Ext.tree.Column',
-    alias: 'widget.treetoolcolumn',
-
-    /**
-     * Add more tools here.  These will be on the prototype for all TreeToolColumns
-     */
-    tools: {
-        'info': 'js/resources/images/16x16/info_mini.png'
-    },
-
-    initComponent: function()
-    {
-        var me = this;
-        me.addEvents( 'toolclick' );
-        me.callParent();
-        me.on('toolclick', me.toolHandler, me);
-    },
-
-    renderer: function(value, metaData, record, rowIdx, colIdx, store, view)
-    {
-        var toolCol = view.getHeaderAtIndex(colIdx);
-
-        if (!toolCol.toolIsVisible(record))
-                return value;
-
-        var toolId  = 'tool-' + rowIdx + '-' + colIdx,
-            toolImg = toolCol.tools[toolCol.tool],
-            imgHtml = Ext.DomHelper.markup({
-                id      : toolId,
-                tag     : 'img',
-                tooltype: toolCol.tool,
-                src     : toolImg,
-                style   : 'cursor:hand;'
-            });
-
-        return value + ' ' + imgHtml;
-    },
-
-    processEvent: function(type, view, cell, recordIndex, cellIndex, e)
-    {
-        if(type === "click" && e.target.tagName === "IMG")
-        {
-		var tooltype = e.target.getAttribute("tooltype");
-		if(tooltype)
-			return this.fireEvent("toolclick", view, cell, recordIndex, cellIndex, e);
-        }
-        return this.fireEvent.apply(this, arguments);
-    },
-
-    /**
-     * Override this when you add columns to the tree... see example below
-     */
+	extend: 'Ext.tree.Column',
+	alias: 'widget.treetoolcolumn',
+
+	/**
+	* Add more tools here.  These will be on the prototype for all TreeToolColumns
+	*/
+	tools: {
+		'info': 'js/resources/images/16x16/info_mini.png'
+	},
+
+	initComponent: function()
+	{
+		var me = this;
+		me.addEvents('toolclick');
+		me.callParent();
+		me.on('toolclick', me.toolHandler, me);
+	},
+
+	renderer: function(value, metaData, record, rowIdx, colIdx, store, view)
+	{
+		var toolCol = view.getHeaderAtIndex(colIdx);
+
+		if (!toolCol.toolIsVisible(record)) return value;
+
+		var toolId  = 'tool-' + rowIdx + '-' + colIdx,
+			toolImg = toolCol.tools[toolCol.tool],
+			imgHtml = Ext.DomHelper.markup({
+					id      : toolId,
+					tag     : 'img',
+					tooltype: toolCol.tool,
+					src     : toolImg,
+					style   : 'cursor:hand;'
+			});
+
+		return value + ' ' + imgHtml;
+	},
+
+	processEvent: function(type, view, cell, recordIndex, cellIndex, e)
+	{
+		if(type === "click" && e.target.tagName === "IMG")
+		{
+			var tooltype = e.target.getAttribute("tooltype");
+			if(tooltype)
+					return this.fireEvent("toolclick", view, cell, recordIndex, cellIndex, e);
+		}
+		return this.fireEvent.apply(this, arguments);
+	},
+
+	/**
+	* Override this when you add columns to the tree... see example below
+	*/
 //    toolHandler: function() {
 //        alert("override this");
 //    },
 
-    toolIsVisible : function(record) {
-    	return false;
-    }
+	toolIsVisible : function(record) {
+		return false;
+	}
 });
 
 
+// ExplorerUI
 Ext.define('amdaUI.ExplorerUI', {
-
-    extend: 'Ext.tab.Panel',
-    alias : 'widget.panelExplorer',
-
-    statics:
-    {
-        RESRC_TAB : {
-            TREE_ID:'resourcesTree',
-            TREE_TYPE:'resources'
-        },
-        OPE_TAB : {
-            TREE_ID:'operationsTree',
-            TREE_TYPE:'operations'
-        },
-        JOB_TAB : {
-            TREE_ID:'jobsTree',
-            TREE_TYPE:'jobs'
-        },
-
-        CAT_SUFFIX: '-treeBase',
-        ROOT_SUFFIX: '-treeRootNode',
-        SUB_ROOT_SUFFIX : 'RootNode',
-
-        ITEM_KIND_ROOT : 'root',
-        ITEM_KIND_LEAF : 'leaf',
-        ITEM_KIND_DIRE : 'dire',
-        ITEM_KIND_PARA : 'para',
-        ITEM_KIND_MISS : 'miss'
-    },
-
-    initComponent : function (config) {
-
-        var explorerModule =  myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.explorer.id);
-
-        var myConf = {
-            split	: true,
-            width	: '100%',
-            height      : '100%',
-            autoScroll  : true,
-            border      : true,
-            header	: false,
-            defaults	: {
-                // applied to each contained panel
-                containerScroll	: true
-            },
-            stateful: true,
-       //     stateId: 'tp1',
-            stateEvents: ['tabchange'],
-            getState: function() {
-            return {
-                activeTab: this.items.findIndex('id',this.getActiveTab().id)
-            };
-            },
-            applyState: function(s) {
-                this.setActiveTab(s.activeTab);
-            },
-       //     activeTab: 0,
-            items: [
-                this.initTree(amdaUI.ExplorerUI.RESRC_TAB.TREE_TYPE),
-                this.initTree(amdaUI.ExplorerUI.OPE_TAB.TREE_TYPE),
-                this.initTree(amdaUI.ExplorerUI.JOB_TAB.TREE_TYPE)
-            ],
-            tbar : [
-                {
-                    xtype : 'combo',
-                    fieldLabel: 'Filter',
-                    labelWidth: 25,
-                    width: 140,
-                    store: explorerModule.filtersStore,
-                    queryMode: 'local',
-                    displayField: 'name',
-                    valueField: 'id',
-                    listeners : {
-                        scope : this,
-                        select: function(combo, records) {
-                                AmdaAction.setCrtFilterId({id : records[0].get('id')},
-                                    function (result, e)
-                                    {
-                                            var t = e.getTransaction();
-                                            if (e.status)
-                                            {
-                                                    if (result)
-                                                    {
-                                                        var explorerModule = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.explorer.id);
-                                                        if (explorerModule)
-                                                                    explorerModule.setCrtFilter();
-                                                    }
-                                                    else
-                                                            Ext.Msg.show( {
-                                                                    title : 'Filter',
-                                                                    msg : 'Cannot apply filter',
-                                                                    modal : true,
-                                                                    icon : Ext.Msg.ERROR,
-                                                                    buttons : Ext.Msg.OK
-                                                            });
-                                            }
-                                            else
-                                            {
-                                                    // FAILURE
-                                                    Ext.Msg.show({title:'Error System', msg: e.message, icon: Ext.MessageBox.ERROR, buttons: Ext.Msg.OK});
-                                            }
-                                },this);
-                            }
-                        }
-                },
-                {
-                    text: '',
-                    iconCls : 'icon-parameters',
-                    tooltip: { text: 'Edit Filter', align: 'bl-tl' },
-                    handler: function(t){
-                    	myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.filters.id, true, function (module) {
-                    		module.createWindow();
-                    	});
-                    }
-                },
-                {
-                    text: '',
-                    iconCls : 'icon-remover',
-                    tooltip: { text: 'Reset Filter', align: 'bl-tl' },
-                    handler: function(t){
-                            var explorerModule = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.explorer.id);
-                            explorerModule.resetFilter();
-                    }
-                }, '-',
-                {
-                    xtype: 'displayfield',
-                    fieldLabel: 'SortBy',
-                    width: 40
-                },
-                {
-                    text: 'Name',
-                    scope : this,
-                    tooltip: { text: 'Sort out AMDA DataBase Data by Mission Name', align: 'bl-tl' },
-                    pressed: true,
-                    enableToggle : true,
-                    toggleGroup: 'sorting',
-                    handler: function(){
-                        var tree = Ext.getCmp(amdaUI.ExplorerUI.RESRC_TAB.TREE_ID);
-                        tree.getStore().sort([
-                            {  sorterFn: function(o1, o2){
-                                if (o1.get('nodeType') !== 'localParam')
-                                    return;
-
-                                return o1.get('text').toUpperCase()  < o2.get('text').toUpperCase() ? -1 : 1;
-                        } }  ]);
-                        this.updateFilter();
-                    }
-                },
-                {
-                    text: 'Target',
-                    scope : this,
-                    tooltip: { text: 'Sort out AMDA DataBase Data by Mission Main Target', align: 'bl-tl' },
-                    enableToggle : true,
-                    toggleGroup: 'sorting',
-                    handler: function(){
-                          var tree = Ext.getCmp(amdaUI.ExplorerUI.RESRC_TAB.TREE_ID);
-                          tree.getStore().sort([{ property : 'rank' }]);
-                          this.updateFilter();
-                    }
-                }
-            ]
-        };
-        Ext.apply (this , Ext.apply (arguments, myConf));
-        this.callParent(arguments);
-    },
-
-    initTree : function(treeType){
-
-        switch (treeType) {
-            case amdaUI.ExplorerUI.RESRC_TAB.TREE_TYPE:
-                treeId = amdaUI.ExplorerUI.RESRC_TAB.TREE_ID;
-                break;
-            case amdaUI.ExplorerUI.OPE_TAB.TREE_TYPE:
-                treeId = amdaUI.ExplorerUI.OPE_TAB.TREE_ID;
-                break;
-            case amdaUI.ExplorerUI.JOB_TAB.TREE_TYPE:
-                treeId = amdaUI.ExplorerUI.JOB_TAB.TREE_ID;
-                break;
-            default:
-                treeId = amdaUI.ExplorerUI.RESRC_TAB.TREE_ID;
-                break;
-        }
-
-        var store = Ext.create('Ext.data.TreeStore', {
-            root: {
-                expanded: true,
-                nodeType : treeType
-             },
-            model: 'amdaModel.AmdaNode',
-            sorters:[{ direction: 'DES' },
-                    {  sorterFn: function(o1, o2){
-                        if (o1.get('nodeType') !== 'localParam')
-                            return;
-
-                        return o1.get('text').toUpperCase()  < o2.get('text').toUpperCase() ? -1 : 1;
-                    } }],
-             listeners: {
-                 beforeload: function(store, operation){
-                     store.proxy.extraParams = {
-                         nodeType: operation.node.get('nodeType')
-                     };
-                 }
-             }
-
-        });
-
-        var menu = new Ext.menu.Menu();
-
-        var tree = Ext.create('Ext.tree.Panel', {
-            id : treeId,
-            title: treeType,
-            store: store,
-            rootVisible: false,
-            animate: false,
-            hideHeaders : true,
-            selModel: Ext.create('Ext.selection.TreeModel', {
-         //   	ignoreRightMouseSelection: true,
-            	mode: 'MULTI'
-            }),
-
-            viewConfig:
-            {
-                plugins:
-                {
-                    ptype: 'treeviewdragdrop',
-                    enableDrag:true,
-                    enableDrop:true,
-                    //TODO - BRE - Wait a fix for drag&drop issue
-                    ddGroup:'explorerTree',
-                    pluginId : 'ddplugin',
-                    isValidDropPoint : function (node, position, dragZone, e, data)
-                    {
-                        if (!node || !data.item) {
-                                return false;
-                        }
-
-                        var view = this.view,
-                        targetNode = view.getRecord(node),
-                        draggedRecords = data.records,
-                        dataLength = draggedRecords.length,
-                        ln = draggedRecords.length,
-                        i, record;
-
-                        // No drop position, or dragged records: invalid drop point
-                        if (!(targetNode && position && dataLength)) {
-                            return false;
-                        }
-
-                        // If the targetNode is within the folder we are dragging
-                        for (i = 0; i < ln; i++) {
-                            record = draggedRecords[i];
-                            if (record.isNode && record.contains(targetNode)) {
-                                return false;
-                            }
-                        }
-
-                        // Respect the allowDrop field on Tree nodes
-                        if (position === 'append' && targetNode.get('allowDrop') === false) {
-                            return false;
-                        }
-                        else if (position != 'append' && targetNode.parentNode.get('allowDrop') === false) {
-                            return false;
-                        }
-
-                        // If the target record is in the dragged dataset, then invalid drop
-                        if (Ext.Array.contains(draggedRecords, targetNode)) {
-                            return false;
-                        }
-
-                        //
-                        if (dataLength > 1)
-                                return false;
-                        var draggedRecord = draggedRecords[0];
-
-                        //
-                        switch (targetNode.data.nodeType)
-                        {
-                        case 'localParam' :
-			   case 'remoteParam' :
-			   case 'remoteSimuParam' :
-                        case 'myData' :
-                            return false;
-                        default :
-                                if (draggedRecord.data.id == targetNode.data.nodeType+'-treeRootNode')
-                                    return false;
-                                if ((position == 'before') && (targetNode.data.id == targetNode.data.nodeType+'-treeRootNode'))
-                                    return false;
-                                return (draggedRecord.data.nodeType == targetNode.data.nodeType);
-                        }
-                        return false;
-                    },
-                    onViewRender : function(view)
-                    {
-                        var me = this;
-
-                        view.on('itemupdate', function(record,index,node,opts)
-                        {
-                                var forceHide = false;
-                                var crtRec = record.parentNode;
-                                while (crtRec && !forceHide)
-                                {
-                                    if (crtRec.get('filtered'))
-                                        forceHide = crtRec.get('filtered');
-                                    crtRec = crtRec.parentNode;
-                                }
-                                tree.setNodesVisibility(record,forceHide);
-                                tree.applyDisableToNode(record);
-                        });
-
-                        view.on('itemadd', function(records,index,node,opts)
-                        {
-                                Ext.each(records,function (rec)
-                                {
-                                        tree.applyFilterToNode(rec);
-                                        tree.applyDisableToNode(rec);
-                                });
-
-                        });
-
-                        view.on('afteritemexpand', function(record,index,node,opts)
-                        {
-                                var forceHide = false;
-                                var crtRec = record.parentNode;
-                                while (crtRec && !forceHide)
-                                {
-                                    if (crtRec.get('filtered'))
-                                            forceHide = crtRec.get('filtered');
-                                    crtRec = crtRec.parentNode;
-
-                                }
-                                tree.setNodesVisibility(record,forceHide);
-                                tree.applyDisableToNode(record);
-                        });
-
-                        if (me.enableDrag)
-                        {
-                                me.dragZone = Ext.create('Ext.tree.ViewDragZone', {
-                                view: view,
-                                ddGroup: me.dragGroup || me.ddGroup,
-                                dragText: me.dragText,
-                                repairHighlightColor: me.nodeHighlightColor,
-                                repairHighlight: me.nodeHighlightOnRepair
-                                });
-                        }
-
-                        if (me.enableDrop)
-                        {
-                                me.dropZone = Ext.create('Ext.tree.ViewDropZone', {
-                                view: view,
-                                ddGroup: me.dropGroup || me.ddGroup,
-                                allowContainerDrops: me.allowContainerDrops,
-                                appendOnly: me.appendOnly,
-                                allowParentInserts: me.allowParentInserts,
-                                expandDelay: me.expandDelay,
-                                dropHighlightColor: me.nodeHighlightColor,
-                                dropHighlight: me.nodeHighlightOnDrop,
-                                isValidDropPoint : me.isValidDropPoint
-                                });
-                        }
-                    }
-                },
-                listeners :
-                {
-                        beforedrop : function(node, data, overModel, dropPosition)
-                        {
-                                var parentId;
-                                switch(dropPosition)
-                                {
-                                        case 'append' :
-                                                if (overModel.isLeaf())
-                                                        parentId = overModel.parentNode.get('id');
-                                                else
-                                                        parentId = overModel.get('id');
-
-                                                        if(!overModel.isExpanded() && overModel.isExpandable()) {
-                                                                myDesktopApp.warningMsg('Please open the folder before node adding');
-                                                                return false;
-                                                        }
-                                                break;
-                                        case 'before' :
-                                        case 'after' :
-                                                parentId = overModel.parentNode.get('id');
-                                                break;
-                                }
-
-                            Ext.each(data.records, function(rec)
-                            {
-                                    rec.renameDD(parentId,function(result)
-                                    {
-                                        if (result)
-                                        {
-                                                if (!result.id)
-                                                {
-                                                        Ext.Msg.show({
-                                                                title : 'Drop is impossible',
-                                                                msg : result.error,
-                                                                buttons : Ext.Msg.OK,
-                                                                icon : Ext.MessageBox.WARNING
-                                                        });
-
-                                                        return false;
-                                                }
-                                        }
-                                        else
-                                        {
-                                                Ext.Msg.show({
-                                                                title : 'Drop is impossible',
-                                                                msg : 'Cannot connect to the server',
-                                                                buttons : Ext.Msg.OK,
-                                                                icon : Ext.MessageBox.WARNING
-                                                        });
-
-                                                return false;
-                                        }
-
-                                        return true;
-                                    });
-                            });
-                        }
-                    },
-	    },
-	listeners: {
-
-		itemmouseenter: function(view, record, item){
-			if(record.get('isParameter')){
-				var el = Ext.get(item),
-				td = el.down('td > div');
-				td.setStyle('cursor', 'crosshair');
-			}
-			else
-			{
-				var el = Ext.get(item),
-				td = el.down('td > div');
-				td.setStyle('cursor', 'pointer');
-			}
+	extend: 'Ext.tab.Panel',
+	alias : 'widget.panelExplorer',
+
+	statics:
+	{
+		RESRC_TAB : {
+			TREE_ID:'resourcesTree',
+			TREE_TYPE:'resources'
+		},
+		OPE_TAB : {
+			TREE_ID:'operationsTree',
+			TREE_TYPE:'operations'
+		},
+		JOB_TAB : {
+			TREE_ID:'jobsTree',
+			TREE_TYPE:'jobs'
 		},
 
-		itemcontextmenu: function(view, rec, item, index, e){
-			// block other events
-			e.stopEvent();
+		CAT_SUFFIX: '-treeBase',
+		ROOT_SUFFIX: '-treeRootNode',
+		SUB_ROOT_SUFFIX : 'RootNode',
 
-			// unlock selection
-//			view.ownerCt.getSelectionModel().setLocked(false);
-		       // already selected by default by right click
-// 			view.ownerCt.getSelectionModel().select(rec,true);
+		ITEM_KIND_ROOT : 'root',
+		ITEM_KIND_LEAF : 'leaf',
+		ITEM_KIND_DIRE : 'dire',
+		ITEM_KIND_PARA : 'para',
+		ITEM_KIND_MISS : 'miss'
+	},
 
-			// clear menu items
-			menu.removeAll();
-			var menuItems;
+	initComponent : function (config) 
+	{
+		var explorerModule = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.explorer.id);
+
+		var myConf = {
+			split	: true,
+			width	: '100%',
+			height      : '100%',
+			autoScroll  : true,
+			border      : true,
+			header	: false,
+			defaults	: {
+				// applied to each contained panel
+				containerScroll	: true
+			},
+			stateful: true,
+			//stateId: 'tp1',
+			stateEvents: ['tabchange'],
+			getState: function() {
+				return {
+					activeTab: this.items.findIndex('id',this.getActiveTab().id)
+				};
+			},
+			applyState: function(s) {
+					this.setActiveTab(s.activeTab);
+			},
+			items: [
+					this.initTree(amdaUI.ExplorerUI.RESRC_TAB.TREE_TYPE),
+					this.initTree(amdaUI.ExplorerUI.OPE_TAB.TREE_TYPE),
+					this.initTree(amdaUI.ExplorerUI.JOB_TAB.TREE_TYPE)
+			],
+			tbar : [
+				{
+					xtype : 'combo',
+					fieldLabel: 'Filter',
+					labelWidth: 25,
+					width: 140,
+					store: explorerModule.filtersStore,
+					queryMode: 'local',
+					displayField: 'name',
+					valueField: 'id',
+					listeners : {
+						scope : this,
+						select: function(combo, records) {
+							AmdaAction.setCrtFilterId({id : records[0].get('id')},
+									function (result, e)
+									{
+										var t = e.getTransaction();
+										if (e.status)
+										{
+											if (result)
+											{
+												var explorerModule = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.explorer.id);
+												if (explorerModule)
+														explorerModule.setCrtFilter();
+											}
+											else
+												Ext.Msg.show( {
+														title : 'Filter',
+														msg : 'Cannot apply filter',
+														modal : true,
+														icon : Ext.Msg.ERROR,
+														buttons : Ext.Msg.OK
+												});
+										}
+										else
+										{
+											// FAILURE
+											Ext.Msg.show({title:'Error System', msg: e.message, icon: Ext.MessageBox.ERROR, buttons: Ext.Msg.OK});
+										}
+								},this);
+							}
+					}
+				},
+				{
+					text: '',
+					iconCls : 'icon-parameters',
+					tooltip: { text: 'Edit Filter', align: 'bl-tl' },
+					handler: function(t){
+						myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.filters.id, true, function (module) {
+							module.createWindow();
+						});
+					}
+				},
+				{
+					text: '',
+					iconCls : 'icon-remover',
+					tooltip: { text: 'Reset Filter', align: 'bl-tl' },
+					handler: function(t){
+						var explorerModule = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.explorer.id);
+						explorerModule.resetFilter();
+					}
+				}, '-',
+				{
+					xtype: 'displayfield',
+					fieldLabel: 'SortBy',
+					width: 40
+				},
+				{
+					text: 'Name',
+					scope : this,
+					tooltip: { text: 'Sort out AMDA DataBase Data by Mission Name', align: 'bl-tl' },
+					pressed: true,
+					enableToggle : true,
+					toggleGroup: 'sorting',
+					handler: function(){
+						var tree = Ext.getCmp(amdaUI.ExplorerUI.RESRC_TAB.TREE_ID);
+						tree.getStore().sort([
+								{  sorterFn: function(o1, o2){
+										if (o1.get('nodeType') !== 'localParam')
+											return;
 
-			// if it's a single selection
-			if (view.ownerCt.getSelectionModel().selected.length === 1) {
-				// get items menu corresponding to right clicked record
-				menuItems = rec.getContextMenuItems(this);
+										return o1.get('text').toUpperCase()  < o2.get('text').toUpperCase() ? -1 : 1;
+									} 
+								}]);
+						this.updateFilter();
+					}
+				},
+				{
+					text: 'Target',
+					scope : this,
+					tooltip: {text: 'Sort out AMDA DataBase Data by Mission Main Target', align: 'bl-tl'},
+					enableToggle : true,
+					toggleGroup: 'sorting',
+					handler: function(){
+							var tree = Ext.getCmp(amdaUI.ExplorerUI.RESRC_TAB.TREE_ID);
+							tree.getStore().sort([{ property : 'rank' }]);
+							this.updateFilter();
+					}
+				}]
+		};
+		Ext.apply (this , Ext.apply (arguments, myConf));
+		this.callParent(arguments);
+	},
+
+	initTree : function(treeType)
+	{
+		switch (treeType) 
+		{
+			case amdaUI.ExplorerUI.RESRC_TAB.TREE_TYPE:
+					treeId = amdaUI.ExplorerUI.RESRC_TAB.TREE_ID;
+					break;
+			case amdaUI.ExplorerUI.OPE_TAB.TREE_TYPE:
+					treeId = amdaUI.ExplorerUI.OPE_TAB.TREE_ID;
+					break;
+			case amdaUI.ExplorerUI.JOB_TAB.TREE_TYPE:
+					treeId = amdaUI.ExplorerUI.JOB_TAB.TREE_ID;
+					break;
+			default:
+					treeId = amdaUI.ExplorerUI.RESRC_TAB.TREE_ID;
+					break;
+		}
 
-			} else if (view.ownerCt.getSelectionModel().selected.length > 1) {
-				// get items menu corresponding to right clicked record
-				menuItems = rec.getContextMenuMultiItems(this);
+		var store = Ext.create('Ext.data.TreeStore', {
+			root: {
+					expanded: true,
+					nodeType : treeType
+				},
+			model: 'amdaModel.AmdaNode',
+			sorters:[{ direction: 'DES' },
+						{  sorterFn: function(o1, o2){
+								if (o1.get('nodeType') !== 'localParam')
+										return;
+
+								return o1.get('text').toUpperCase()  < o2.get('text').toUpperCase() ? -1 : 1;
+							} 
+						}],
+			listeners: {
+				beforeload: function(store, operation){
+					store.proxy.extraParams = {
+							nodeType: operation.node.get('nodeType')
+					};
+				}
 			}
-                    // if there's at least one item menu
-			if (menuItems && menuItems.length){
-				// add the items
-				menu.add(menuItems);
-				// add listener on right clicked record
-				var onRecordClick = function (menu, item, e, eOpts)
+		});
+
+		var menu = new Ext.menu.Menu();
+
+		var tree = Ext.create('Ext.tree.Panel', {
+			id : treeId,
+			title: treeType,
+			store: store,
+			rootVisible: false,
+			animate: false,
+			hideHeaders : true,
+			selModel: Ext.create('Ext.selection.TreeModel', {
+		//   	ignoreRightMouseSelection: true,
+				mode: 'MULTI'
+			}),
+			viewConfig:
+			{
+				plugins:
+				{
+					ptype: 'treeviewdragdrop',
+					enableDrag:true,
+					enableDrop:true,
+					//TODO - BRE - Wait a fix for drag&drop issue
+					ddGroup:'explorerTree',
+					pluginId : 'ddplugin',
+					
+					isValidDropPoint : function (node, position, dragZone, e, data)
 					{
-						if (this.myGetOwnerTree().getSelectionModel().isSelected(this)) {
-							//Dispatch click event to the record
-							this.onMenuItemClick(menu,item,e);
+						if (!node || !data.item) {
+									return false;
 						}
-						//Remove old click listener
-						menu.removeListener('click',onRecordClick,this);
-					};
+						var view = this.view,
+						targetNode = view.getRecord(node),
+						draggedRecords = data.records,
+						dataLength = draggedRecords.length,
+						ln = draggedRecords.length,
+						i, record;
+
+						// No drop position, or dragged records: invalid drop point
+						if (!(targetNode && position && dataLength)) {
+								return false;
+						}
+						// If the targetNode is within the folder we are dragging
+						for (i = 0; i < ln; i++) {
+								record = draggedRecords[i];
+								if (record.isNode && record.contains(targetNode)) {
+									return false;
+								}
+						}
+						// Respect the allowDrop field on Tree nodes
+						if (position === 'append' && targetNode.get('allowDrop') === false) {
+								return false;
+						}
+						else if (position != 'append' && targetNode.parentNode.get('allowDrop') === false) {
+								return false;
+						}
+						// If the target record is in the dragged dataset, then invalid drop
+						if (Ext.Array.contains(draggedRecords, targetNode)) {
+								return false;
+						}
+						//
+						if (dataLength > 1)
+									return false;
+						
+						var draggedRecord = draggedRecords[0];
+						//
+						switch (targetNode.data.nodeType)
+						{
+							case 'localParam' :
+							case 'remoteParam' :
+							case 'remoteSimuParam' :
+							case 'myData' :
+								return false;
+							default :
+								if (draggedRecord.data.id == targetNode.data.nodeType+'-treeRootNode')
+									return false;
+								if ((position == 'before') && (targetNode.data.id == targetNode.data.nodeType+'-treeRootNode'))
+									return false;
+								return (draggedRecord.data.nodeType == targetNode.data.nodeType);
+						}
+						return false;
+					},
+					onViewRender : function(view)
+					{
+						var me = this;
+
+						view.on('itemupdate', function(record,index,node,opts)
+						{
+							var forceHide = false;
+							var crtRec = record.parentNode;
+							while (crtRec && !forceHide)
+							{
+								if (crtRec.get('filtered'))
+										forceHide = crtRec.get('filtered');
+								crtRec = crtRec.parentNode;
+							}
+							tree.setNodesVisibility(record,forceHide);
+							tree.applyDisableToNode(record);
+						});
+
+						view.on('itemadd', function(records,index,node,opts)
+						{
+							Ext.each(records,function (rec)
+							{
+								tree.applyFilterToNode(rec);
+								tree.applyDisableToNode(rec);
+							});
+						});
+
+						view.on('afteritemexpand', function(record,index,node,opts)
+						{
+							var forceHide = false;
+							var crtRec = record.parentNode;
+							while (crtRec && !forceHide)
+							{
+								if (crtRec.get('filtered'))
+											forceHide = crtRec.get('filtered');
+								crtRec = crtRec.parentNode;
 
-				menu.addListener('click',onRecordClick,rec);
-				// then show menu
-				menu.showAt(e.getXY());
-			}
-		},
+							}
+							tree.setNodesVisibility(record,forceHide);
+							tree.applyDisableToNode(record);
+						});
+
+						if (me.enableDrag)
+						{
+							me.dragZone = Ext.create('Ext.tree.ViewDragZone', {
+								view: view,
+								ddGroup: me.dragGroup || me.ddGroup,
+								dragText: me.dragText,
+								repairHighlightColor: me.nodeHighlightColor,
+								repairHighlight: me.nodeHighlightOnRepair
+							});
+						}
 
-		itemdblclick: function(view, record, item, index, event){
-			event.stopEvent();
-
-			// first check if it is for SAVE-START-STOP plugin...
-			if (Ext.PluginManager.getCount() > 0 &&
-				record.get('nodeType') == amdaModel.TimeTableNode.nodeType && record.isLeaf()) {
-				var zmgr = myDesktopApp.desktop.getDesktopZIndexManager();
-				var winActive = zmgr.getActive();
-				var winId =  winActive.getId();
-				if (winId == 'explorer-win') {
-					zmgr.eachTopDown(function(win) {
-						var id = win.getId();
-						if (id !==  'explorer-win') {
-							winId = id;
-							return false;
+						if (me.enableDrop)
+						{
+							me.dropZone = Ext.create('Ext.tree.ViewDropZone', {
+								view: view,
+								ddGroup: me.dropGroup || me.ddGroup,
+								allowContainerDrops: me.allowContainerDrops,
+								appendOnly: me.appendOnly,
+								allowParentInserts: me.allowParentInserts,
+								expandDelay: me.expandDelay,
+								dropHighlightColor: me.nodeHighlightColor,
+								dropHighlight: me.nodeHighlightOnDrop,
+								isValidDropPoint : me.isValidDropPoint
+							});
+						}
+					}
+				},
+				listeners :
+				{
+					beforedrop : function(node, data, overModel, dropPosition)
+					{
+						var parentId;
+						switch(dropPosition)
+						{
+							case 'append' :
+									if (overModel.isLeaf())
+										parentId = overModel.parentNode.get('id');
+									else
+										parentId = overModel.get('id');
+
+										if(!overModel.isExpanded() && overModel.isExpandable()) {
+													myDesktopApp.warningMsg('Please open the folder before node adding');
+													return false;
+										}
+									break;
+							case 'before' :
+							case 'after' :
+									parentId = overModel.parentNode.get('id');
+									break;
 						}
-					});
+
+						Ext.each(data.records, function(rec)
+						{
+							rec.renameDD(parentId,function(result)
+							{
+								if (result)
+								{
+									if (!result.id)
+									{
+										Ext.Msg.show({
+													title : 'Drop is impossible',
+													msg : result.error,
+													buttons : Ext.Msg.OK,
+													icon : Ext.MessageBox.WARNING
+										});
+
+										return false;
+									}
+								}
+								else
+								{
+									Ext.Msg.show({
+														title : 'Drop is impossible',
+														msg : 'Cannot connect to the server',
+														buttons : Ext.Msg.OK,
+														icon : Ext.MessageBox.WARNING
+												});
+
+									return false;
+								}
+
+								return true;
+							});
+						});
+					}
 				}
-			}
+			},
+			listeners: 
+			{
+				itemmouseenter: function(view, record, item){
+					if(record.get('isParameter')){
+						var el = Ext.get(item),
+						td = el.down('td > div');
+						td.setStyle('cursor', 'crosshair');
+					}
+					else
+					{
+						var el = Ext.get(item),
+						td = el.down('td > div');
+						td.setStyle('cursor', 'pointer');
+					}
+				},
+
+				itemcontextmenu: function(view, rec, item, index, e){
+					// block other events
+					e.stopEvent();
+
+					// clear menu items
+					menu.removeAll();
+					var menuItems;
+
+					// if it's a single selection
+					if (view.ownerCt.getSelectionModel().selected.length === 1) {
+						// get items menu corresponding to right clicked record
+						menuItems = rec.getContextMenuItems(this);
+
+					} else if (view.ownerCt.getSelectionModel().selected.length > 1) {
+						// get items menu corresponding to right clicked record
+						menuItems = rec.getContextMenuMultiItems(this);
+					}
+								// if there's at least one item menu
+					if (menuItems && menuItems.length){
+						// add the items
+						menu.add(menuItems);
+						// add listener on right clicked record
+						var onRecordClick = function (menu, item, e, eOpts)
+							{
+								if (this.myGetOwnerTree().getSelectionModel().isSelected(this)) {
+									//Dispatch click event to the record
+									this.onMenuItemClick(menu,item,e);
+								}
+								//Remove old click listener
+								menu.removeListener('click',onRecordClick,this);
+							};
+
+						menu.addListener('click',onRecordClick,rec);
+						// then show menu
+						menu.showAt(e.getXY());
+					}
+				},
+
+				itemdblclick: function(view, record, item, index, event){
+					event.stopEvent();
+					// first check if it is for SAVE-START-STOP plugin...
+					if (Ext.PluginManager.getCount() > 0 &&
+						record.get('nodeType') == amdaModel.TimeTableNode.nodeType && record.isLeaf()) {
+						var zmgr = myDesktopApp.desktop.getDesktopZIndexManager();
+						var winActive = zmgr.getActive();
+						var winId =  winActive.getId();
+						if (winId == 'explorer-win') {
+							zmgr.eachTopDown(function(win) {
+								var id = win.getId();
+								if (id !==  'explorer-win') {
+									winId = id;
+									return false;
+								}
+							});
+						}
+					}
+
+					if (record.get('nodeType') == 'remoteParam' && !record.isLeaf()
+										&& !record.get('isParameter')) {
+						myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.interop.id, true, function (module) {
+							module.createWindow(record.getBaseId());
+						});
+					}
+
+					if (record.isLeaf() || record.data.isParameter)
+						switch (record.get('nodeType'))
+						{
+							case 'myData' :
+							case 'myDataParam' :
+							case 'derivedParam' :
+							case 'timeTable' :
+							case 'sharedtimeTable' :
+							case 'sharedcatalog' :
+							case 'catalog' :
+							case 'request' :
+							case 'condition' :
+								record.editLeaf();
+								break;
+							case 'localParam' :
+							case 'remoteParam':
+							case 'remoteSimuParam':
+								record.createAlias(record);
+								break;
+							case 'bkgWorks' :
+								if (!record.get('object')) {
+									AmdaAction.getObject(record.get('id'), record.get('nodeType'), record.getObjectCallback, record);
+								}
+								else {
+									if (record.get('status') == 'done') {
+										var isInteractive = false;
+										var isNewTab = true;
+										record.editNode(isNewTab, isInteractive);
+									}
+									else {
+										myDesktopApp.infoMsg('Job Status: ' + record.get('status'));
+									}
+								}
+								break;
+						}
+					},
+					
+					beforeselect: function(view,node,index,options){
+						// if there's at least one node already selected
+						if(view.selected.length
+							//AND (the node which is beeing selected has a different nodeType than the first selected node OR the first selected node isn't a leaf
+							&& ( node.get('nodeType')!== view.selected.items[0].get('nodeType') ||  !view.selected.items[0].isLeaf())
+							// OR the node which is beeing selected has no nodeType OR it isn't a leaf OR
+							|| !node.get('nodeType') || !node.isLeaf()
+						){
+							// clear old selection
+							view.deselectAll();
+						}
+					},
+
+					afterrender: function(comp){
+						var view = comp.getView();
+						view.tip = Ext.create('Ext.tip.ToolTip', {
+							// The overall target element.
+							target: view.el,
+							// Each grid row causes its own seperate show and hide.
+							delegate: view.itemSelector,
+							dismissDelay : 0,
+							//    showDelay: 100,
+							//  anchor: 'left',
+							// Moving within the row should not hide the tip.
+							trackMouse: true,
+							autoRender: true,
+							listeners: {
+								// Change content dynamically depending on which element triggered the show.
+								beforeshow: function updateTipBody(tip) {
+									if (view.getRecord(tip.triggerElement)) {
+										var info = view.getRecord(tip.triggerElement).get('info');
+										if (!info || info == '') {
+											tip.addCls('hide');
+										}
+										else {
+											tip.removeCls('hide');
+											tip.update(info);
+										}
+									}
+								}
+							}
+						});
+					},
+					// if remote base is empty - open interoperability module
+					itemexpand: function(node) {
+						if ( node.get('nodeType') == amdaModel.RemoteParamNode.nodeType
+						&& node.getDepth() == 3 && !node.hasChildNodes()) {
+							node.addData();
+						}
+					},
+					scope: this
+				},
 
-			if (record.get('nodeType') == 'remoteParam' && !record.isLeaf()
-								&& !record.get('isParameter')) {
-				myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.interop.id, true, function (module) {
-					module.createWindow(record.getBaseId());
-				});
-			}
+				hideHeaders: true,
+            // must define a column with a field to enable editor
+				columns: [{
+						xtype    : 'treetoolcolumn',
+						text     : 'Name',
+						flex     : 1,
+						dataIndex: 'text',
+						tool: 'info', // this references the "tools" object on the prototype
+						toolHandler: function(view, cell, recordIndex, cellIndex, e) {
+							var tooltype = e.target.getAttribute("tooltype");
+							var record = view.store.getAt(recordIndex);
+							switch (tooltype)
+							{
+							case 'info' :
+								myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.info.id, true, function (module) {
+									module.createWindow(record.get('help'), record.get('info'));
+								});
+								break;
+							}
+						},
+						toolIsVisible : function(record) {
 
-			if (record.isLeaf() || record.data.isParameter)
-				switch (record.get('nodeType'))
-				{
-					case 'myData' :
-					case 'myDataParam' :
-					case 'derivedParam' :
-					case 'timeTable' :
-					case 'sharedtimeTable' :
-					case 'sharedcatalog' :
-					case 'catalog' :
-					case 'request' :
-					case 'condition' :
-						record.editLeaf();
-						break;
-					case 'localParam' :
-					case 'remoteParam':
-					case 'remoteSimuParam':
-						record.createAlias(record);
-						break;
-					case 'bkgWorks' :
-						if (!record.get('object')) {
-							AmdaAction.getObject(record.get('id'), record.get('nodeType'), record.getObjectCallback, record);
+							switch (record.get('nodeType'))
+							{
+								case 'localParam' :
+								case 'remoteParam' :
+								case 'remoteSimuParam' :
+
+								return record.get('help') != '';
+							}
+							return false;
+						},
+						field: {
+							validFlag: false,
+							validator : function(value) {
+								// get explorerModule
+								var explModule = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.explorer.id);
+								var explUI = explModule.getUiContent();
+								var activeTreePanel = explUI.getActiveTab();
+
+								var editedNode = activeTreePanel.getSelectionModel().selected.items[0];
+								if (editedNode) {
+										if (!editedNode.get('id') && value === amdaModel.AmdaNode.NEW_DIR_NAME){
+											return false;
+										} else {
+										return this.validFlag;
+										}
+								} else {
+										return true;
+								}
+							},
+							listeners: {
+								change : function( field, newValue, oldValue, eOpts )
+								{
+									var explModule = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.explorer.id);
+									var explUI = explModule.getUiContent();
+									var activeTreePanel = explUI.getActiveTab();
+
+										var editedNode = activeTreePanel.getSelectionModel().selected.items[0];
+										if (editedNode) {
+											editedNode.isValidName(newValue, function (res) {
+												if (!res)
+												{
+													field.validFlag = 'Error during object validation';
+													field.validate();
+													return;
+												}
+												if (!res.valid)
+												{
+													if (res.error)
+													{
+														field.validFlag = res.error;
+														field.validate();
+														return;
+													}
+													else
+													{
+														field.validFlag = 'Invalid object name';
+														field.validate();
+														return;
+													}
+												}
+
+												field.validFlag = true;
+												field.validate();
+											});
+										}
+								}
+							},
+							scope: this
 						}
-						else {
-							if (record.get('status') == 'done') {
-								var isInteractive = false;
-								var isNewTab = true;
-								record.editNode(isNewTab, isInteractive);
+					}],
+					//add our custom editor plugin
+					plugins:  [ new MyTreeEditor({
+						pluginId: 'treeEditor',
+						listeners: {
+							'canceledit' : function(editor, context) {
+								if (editor && editor.startValue===amdaModel.AmdaNode.NEW_DIR_NAME) {
+										context.record.remove(true);
+								}
 							}
-							else {
-								myDesktopApp.infoMsg('Job Status: ' + record.get('status'));
+						}
+					})],
+
+					setNodesVisibility : function(node,forceHide)
+					{
+						var isFiltered = node.get('filtered');
+
+						for (var i = 0; i < node.childNodes.length; i++)
+							this.setNodesVisibility(node.childNodes[i],forceHide || isFiltered);
+
+						this.setNodeVisibility(node,!(forceHide || isFiltered));
+					},
+
+					setNodeVisibility : function(node,isVisible)
+					{
+						var record = store.getNodeById(node.internalId);
+						var viewNode = Ext.fly(tree.getView().getNode(record));
+						if (viewNode)
+						{
+							viewNode.setVisibilityMode(Ext.Element.DISPLAY);
+							if (isVisible)
+							{
+								viewNode.show();
+								this.applyDisableToNode(record);
 							}
+							else
+								viewNode.hide();
 						}
-						break;
-				}
-		},
-		beforeselect: function(view,node,index,options){
-			// if there's at least one node already selected
-			if(view.selected.length
-				//AND (the node which is beeing selected has a different nodeType than the first selected node OR the first selected node isn't a leaf
-				&& ( node.get('nodeType')!== view.selected.items[0].get('nodeType') ||  !view.selected.items[0].isLeaf())
-				// OR the node which is beeing selected has no nodeType OR it isn't a leaf OR
-				|| !node.get('nodeType') || !node.isLeaf()
-			){
-				// clear old selection
-				view.deselectAll();
-			}
-		},
-//  Already done in ExtJS 4.2.4 selection model
-// 		itemmousedown: function(tree,rec,item,index,event,options){
-// 			if(event.button===2){
-// 				// if the right clicked item is already selected
-// 				if (tree.getSelectionModel().isSelected(rec)) {
-// 					// lock selection to prevent the selection modification by the right click
-// 					 tree.getSelectionModel().setLocked(true);
-// 				}
-// 			}
-// 		},
-		afterrender: function(comp){
-				var view = comp.getView();
-				view.tip = Ext.create('Ext.tip.ToolTip', {
-				    // The overall target element.
-				    target: view.el,
-				    // Each grid row causes its own seperate show and hide.
-				    delegate: view.itemSelector,
-				    dismissDelay : 0,
-				   //    showDelay: 100,
-				    //  anchor: 'left',
-				    // Moving within the row should not hide the tip.
-				    trackMouse: true,
-	 			    autoRender: true,
-				    listeners: {
-					// Change content dynamically depending on which element triggered the show.
-					beforeshow: function updateTipBody(tip) {
-                                          if (view.getRecord(tip.triggerElement)) {
-                                            var info = view.getRecord(tip.triggerElement).get('info');
-                                                if (!info || info == '') {
-                                                    tip.addCls('hide');
-                                                }
-                                                else {
-                                                    tip.removeCls('hide');
-                                                    tip.update(info);
-                                                }
-                                          }
-				    }
-				}
+					},
+
+					applyFilterToNode : function(node)
+					{
+						if (!node)
+							return;
+
+						var filter = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.explorer.id).filter;
+
+						switch (node.get('nodeType'))
+						{
+							case 'localParam' :
+								if (!filter || !filter['param'])
+								{
+									//no filter applied
+									node.set('filtered',false);
+									return;
+								}
+								var pos = node.get('depth') - 3; //depth from local param root node
+								if (pos < 0 || pos > 2)
+								{
+									node.set('filtered',false);
+									return;
+								}
+								var isFiltered = true;
+								for (var i = 0; i < filter['param'].length; i++)
+								{
+									s = filter['param'][i].split(';');
+									if (node.get('id') == s[pos])
+									{
+										isFiltered = false;
+										break;
+									}
+								}
+								node.set('filtered',isFiltered);
+								break;
+								
+							case 'remoteSimuParam' :
+								if (!filter || !filter['simu'] )
+								{
+									//no filter applied
+									node.set('filtered',false);
+									return;
+								}
+								var pos = node.get('depth') - 3; //depth from remote param root node
+
+								if (pos < 0 || pos > 5)
+								{
+									node.set('filtered',false);
+									return;
+								}
+								var isFiltered = true;
+
+								for (var i = 0; i < filter['simu'].length; i++)
+								{
+									s = filter['simu'][i].split(';');
+
+									if (node.get('id') == s[pos])
+									{
+										isFiltered = false;
+										break;
+									}
+								}
+								node.set('filtered',isFiltered);
+								break;
+							/*case 'alias' :
+								if (!this.localParamFilter.result || this.localParamFilter.id == "" ||
+									!node.isLeaf())
+								{
+									//no filter applied
+									node.set('filtered',false);
+									return;
+								}
+								var crtParam = node.get('id');
+								crtParam = crtParam.replace('alias_','');
+								crtParam = crtParam.replace(/_/g,':');
+								var isFiltered = true;
+								for (var i = 0; i < this.localParamFilter.result.length; i++)
+								{
+									s = this.localParamFilter.result[i].split(';');
+									console.log(s[2]);
+								if (crtParam == s[2])
+								{
+									isFiltered = false;
+									break;
+								}
+								}
+								node.set('filtered',isFiltered);
+								break;*/
+							default :
+								return;
+						}
+					},
+
+					applyFilterToNodes : function(node)
+					{
+						node.eachChild(function (child){
+							tree.applyFilterToNodes(child);
+						});
+						tree.applyFilterToNode(node);
+					},
+
+					applyDisableToNode : function(node)
+					{
+						var crtNode = node;
+						var disable = false;
+
+						do
+						{
+							if (crtNode.get('disable'))
+							{
+								disable = true;
+								break;
+							}
+							crtNode = crtNode.parentNode;
+						} while (crtNode);
+
+
+						var viewNode = Ext.fly(tree.getView().getNode(node));
+						if (disable)
+						{
+							node.set('disable',true);
+							viewNode.setStyle('opacity',0.5);
+						}
+					}
 				});
-		},
-		// if remote base is empty - open interoperability module
-		itemexpand: function(node) {
-			if ( node.get('nodeType') == amdaModel.RemoteParamNode.nodeType
-			&& node.getDepth() == 3 && !node.hasChildNodes()) {
-				node.addData();
-			}
-		},
-		scope: this
-	},
 
-	hideHeaders: true,
-            // must define a column with a field to enable editor
-            columns: [{
-                xtype    : 'treetoolcolumn',
-                text     : 'Name',
-                flex     : 1,
-                dataIndex: 'text',
-                tool: 'info', // this references the "tools" object on the prototype
-                toolHandler: function(view, cell, recordIndex, cellIndex, e) {
-            	    var tooltype = e.target.getAttribute("tooltype");
-            	    var record = view.store.getAt(recordIndex);
-            	    switch (tooltype)
-            	    {
-            	    	case 'info' :
-            	    		myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.info.id, true, function (module) {
-            	    			module.createWindow(record.get('help'), record.get('info'));
-            	    		});
-            	    		break;
-            	    }
-                },
-                toolIsVisible : function(record) {
-
-                	switch (record.get('nodeType'))
-                	{
-                		case 'localParam' :
-                                case 'remoteParam' :
-                                case 'remoteSimuParam' :
-
-                			return record.get('help') != '';
-                	}
-                	return false;
-                },
-                field: {
-                	validFlag: false,
-    	            validator : function(value) {
-    	            	// get explorerModule
-                    	var explModule = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.explorer.id);
-                        var explUI = explModule.getUiContent();
-                        var activeTreePanel = explUI.getActiveTab();
-
-                        var editedNode = activeTreePanel.getSelectionModel().selected.items[0];
-                        if (editedNode) {
-                            if (!editedNode.get('id') && value === amdaModel.AmdaNode.NEW_DIR_NAME){
-                                return false;
-                            } else {
-                            	return this.validFlag;
-                            }
-                        } else {
-                            return true;
-                        }
-    	            },
-    	            listeners: {
-    	            	change : function( field, newValue, oldValue, eOpts )
-    	            	{
-    	            		var explModule = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.explorer.id);
-                            var explUI = explModule.getUiContent();
-                            var activeTreePanel = explUI.getActiveTab();
-
-                            var editedNode = activeTreePanel.getSelectionModel().selected.items[0];
-                            if (editedNode) {
-                            	editedNode.isValidName(newValue, function (res) {
-                            		if (!res)
-								  	{
-                            			field.validFlag = 'Error during object validation';
-                            			field.validate();
-									  	return;
-								  	}
-
-                            		if (!res.valid)
-                            		{
-                            			if (res.error)
-									  	{
-                            				field.validFlag = res.error;
-                            				field.validate();
-											return;
-									  	}
-                            			else
-                            			{
-                            				field.validFlag = 'Invalid object name';
-                            				field.validate();
-                            				return;
-                            			}
-								  	}
-
-                            		field.validFlag = true;
-                            		field.validate();
-								});
-                            }
-    	            	}
-    	            },
-		    scope: this
-                }
-            }],
-            //add our custom editor plugin
-            plugins:  [new MyTreeEditor({
-            	pluginId: 'treeEditor',
-            	listeners: {
-            		'canceledit' : function(editor, context) {
-            			if (editor && editor.startValue===amdaModel.AmdaNode.NEW_DIR_NAME) {
-            	            context.record.remove(true);
-            			}
-            		}
-
-            	}})],
-
-            setNodesVisibility : function(node,forceHide)
-            {
-              var isFiltered = node.get('filtered');
-
-              for (var i = 0; i < node.childNodes.length; i++)
-                this.setNodesVisibility(node.childNodes[i],forceHide || isFiltered);
-
-              this.setNodeVisibility(node,!(forceHide || isFiltered));
-            },
-
-            setNodeVisibility : function(node,isVisible)
-            {
-              var record = store.getNodeById(node.internalId);
-              var viewNode = Ext.fly(tree.getView().getNode(record));
-              if (viewNode)
-              {
-            	viewNode.setVisibilityMode(Ext.Element.DISPLAY);
-                if (isVisible)
-                {
-                  viewNode.show();
-                  this.applyDisableToNode(record);
-                }
-                else
-                  viewNode.hide();
-              }
-            },
-
-            applyFilterToNode : function(node)
-            {
-            	if (!node)
-            		return;
-
-            	var filter = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.explorer.id).filter;
-
-            	switch (node.get('nodeType'))
-            	{
-            		case 'localParam' :
-            			if (!filter || !filter['param'])
-            			{
-            				//no filter applied
-            				node.set('filtered',false);
-                			return;
-            			}
-            			var pos = node.get('depth') - 3; //depth from local param root node
-            			if (pos < 0 || pos > 2)
-            			{
-            				node.set('filtered',false);
-            				return;
-            			}
-            			var isFiltered = true;
-            			for (var i = 0; i < filter['param'].length; i++)
-            			{
-            				s = filter['param'][i].split(';');
-        					if (node.get('id') == s[pos])
-        					{
-        						isFiltered = false;
-        						break;
-        					}
-        				}
-            			node.set('filtered',isFiltered);
-            			break;
-            		case 'remoteSimuParam' :
-
-            			if (!filter || !filter['simu'] )
-            			{
-                                    //no filter applied
-            				node.set('filtered',false);
-                			return;
-            			}
-
-            			var pos = node.get('depth') - 3; //depth from remote param root node
-
-            			if (pos < 0 || pos > 5)
-            			{
-            				 node.set('filtered',false);
-            				 return;
-            			}
-
-            			var isFiltered = true;
-
-            			for (var i = 0; i < filter['simu'].length; i++)
-            			{
-            				s = filter['simu'][i].split(';');
-
-        					if (node.get('id') == s[pos])
-        					{
-        						isFiltered = false;
-        						break;
-        					}
-        				}
-            			node.set('filtered',isFiltered);
-            			break;
-            		/*case 'alias' :
-            			if (!this.localParamFilter.result || this.localParamFilter.id == "" ||
-            				!node.isLeaf())
-            			{
-            				//no filter applied
-            				node.set('filtered',false);
-                			return;
-            			}
-            			var crtParam = node.get('id');
-            			crtParam = crtParam.replace('alias_','');
-            			crtParam = crtParam.replace(/_/g,':');
-            			var isFiltered = true;
-            			for (var i = 0; i < this.localParamFilter.result.length; i++)
-            			{
-            				s = this.localParamFilter.result[i].split(';');
-            				console.log(s[2]);
-        					if (crtParam == s[2])
-        					{
-        						isFiltered = false;
-        						break;
-        					}
-            			}
-            			node.set('filtered',isFiltered);
-            			break;*/
-            		default :
-            			return;
-            	}
-            },
-
-            applyFilterToNodes : function(node)
-            {
-            	node.eachChild(function (child){
-            		tree.applyFilterToNodes(child);
-            	});
-            	tree.applyFilterToNode(node);
-            },
-
-            applyDisableToNode : function(node)
-            {
-            	var crtNode = node;
-            	var disable = false;
-
-            	do
-            	{
-            		if (crtNode.get('disable'))
-            		{
-            			disable = true;
-            			break;
-            		}
-            		crtNode = crtNode.parentNode;
-            	} while (crtNode);
-
-
-                var viewNode = Ext.fly(tree.getView().getNode(node));
-			    if (disable)
-			    {
-			      node.set('disable',true);
-				  viewNode.setStyle('opacity',0.5);
-			    }
-            }
-        });
-
-        tree.addEvents('edition');
-
-
-
-        return tree;
-    },
-
-    updateFilter : function()
-    {
-    	var filter = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.explorer.id).filter;
-
-    	var keys = [];
-        for (var f in filter) {
-            if (hasOwnProperty.call(filter, f))
-            	keys.push(f);
-        }
-
-        var tree = this.query('#'+amdaUI.ExplorerUI.RESRC_TAB.TREE_ID)[0];
-		tree.getView().refresh();
-
-        for (var i = 0; i < keys.length; i++)
-		{
-			if (keys[i] == "_empty_")
-				continue;
+				tree.addEvents('edition');
+
+				return tree;
+			},
 
-			switch (keys[i])
+			updateFilter : function()
 			{
-    			case 'param' :
-
-    				//apply filter to local datasets
-    				var localNode = tree.getRootNode().findChild('id','myLocalData-treeRootNode',true);
-    				tree.applyFilterToNodes(localNode);
-    				tree.setNodesVisibility(localNode,false);
-    				tree.applyDisableToNode(localNode);
-
-    				//apply filter to aliases
-    				var aliasNode = tree.getRootNode().findChild('id','alias-treeRootNode',true);
-    				tree.applyFilterToNodes(aliasNode);
-    				tree.setNodesVisibility(aliasNode,false);
-    				tree.applyDisableToNode(aliasNode);
-    				break;
-
-    			case 'simu' :
-    				//apply filter to simulation datasets (in remote data)
-    				var remoteNode = tree.getRootNode().findChild('id','myRemoteSimuData-treeRootNode',true);
-    				tree.applyFilterToNodes(remoteNode);
-    				tree.setNodesVisibility(remoteNode,false);
-    				tree.applyDisableToNode(remoteNode);
-    				break;
-			}
-		}
+				var filter = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.explorer.id).filter;
 
-         this.dockedItems.getAt(1).items.items[0].select(filter['name']);
-    }
+				var keys = [];
+				for (var f in filter) {
+						if (hasOwnProperty.call(filter, f))
+							keys.push(f);
+				}
+
+				var tree = this.query('#'+amdaUI.ExplorerUI.RESRC_TAB.TREE_ID)[0];
+				tree.getView().refresh();
+
+				for (var i = 0; i < keys.length; i++)
+				{
+					if (keys[i] == "_empty_")
+						continue;
 
+					switch (keys[i])
+					{
+						case 'param' :
+								//apply filter to local datasets
+								var localNode = tree.getRootNode().findChild('id','myLocalData-treeRootNode',true);
+								tree.applyFilterToNodes(localNode);
+								tree.setNodesVisibility(localNode,false);
+								tree.applyDisableToNode(localNode);
+
+								//apply filter to aliases
+								var aliasNode = tree.getRootNode().findChild('id','alias-treeRootNode',true);
+								tree.applyFilterToNodes(aliasNode);
+								tree.setNodesVisibility(aliasNode,false);
+								tree.applyDisableToNode(aliasNode);
+								break;
+
+						case 'simu' :
+								//apply filter to simulation datasets (in remote data)
+								var remoteNode = tree.getRootNode().findChild('id','myRemoteSimuData-treeRootNode',true);
+								tree.applyFilterToNodes(remoteNode);
+								tree.setNodesVisibility(remoteNode,false);
+								tree.applyDisableToNode(remoteNode);
+								break;
+					}
+				}
+
+				this.dockedItems.getAt(1).items.items[0].select(filter['name']);
+			}
 });
 
+// MyTreeEditor
 Ext.define( 'MyTreeEditor', {
-    extend: 'Ext.grid.plugin.CellEditing',
-    alias: 'editing.treeeditor',
-
-    // initialization method of plugin
-    init: function(cmp) {
-        var me = this;
-        me.hostCmp = cmp;
-        // on parent event
-        me.hostCmp.on({
-            // on edition event
-            edition : {
-                delay: 50,
-                fn : function(view, record, item, index, e){
-                	view.getHeaderAtIndex(0).field.validFlag = 'Not modified';
-                    // call the start edition method
-                    me.startEdit(record, view.getHeaderAtIndex(0));
-                },
-                scope: me
-            }
-        });
-        me.callParent(arguments);
-    },
-
-    /**
-     * Cancel any active editing.
-     */
-    cancelEdit: function() {
-        var me = this,
-        activeEd = me.getActiveEditor(),
-        viewEl = me.grid.getView().getEl(me.getActiveColumn());
-
-        me.setActiveEditor(null);
-        me.setActiveColumn(null);
-        me.setActiveRecord(null);
-        if (activeEd) {
-            activeEd.cancelEdit();
-            viewEl.focus();
-            this.fireEvent('canceledit', activeEd, me.context);
-        }
-    },
-
-    /**
-     * overwrite the initEditTriggers to disable edition on click/dblclick
-     * and to add custom
-     */
-    initEditTriggers: function() {
-
-        var me = this,
-        view = me.view;
-
-        me.on({
-            edit: function(editor,event){
-                // if there is a modification
-                if (event.originalValue !== event.value) {
-                    // delegate rename action on model
-                    event.record.rename(event.value,function(result){
-                        // if a result has been returned : success
-                        if(result) {
-                            // delegate commit action to delete modification flag
-                            event.record.commit();
-                            var rec = event.record.data;
-                            // in case of directory
-                            if (!rec.leaf){
-                                // set folder's ID returned by server
-                                rec.id = result.id;
-                            }
-                        } else { // in case of transaction error
-                            // reset originalValue
-                            event.record.value = event.originalValue;
-                            event.record.get('text') = event.originalValue;
-                            event.record.commit();
-                        }
-                    });
-                }
-
-            }
-        });
-
-        // enable Enter key and Esc Key
-        view.on('render', function() {
-            me.keyNav = Ext.create('Ext.util.KeyNav', view.el, {
-                enter: me.onEnterKey,
-                esc: me.onEscKey,
-                scope: me
-            });
-        }, me, { single: true });
-    },
-
-    //overwrite the getEditing context because we do not need the rowId
-    getEditingContext: function(record, columnHeader) {
-        var me = this,
-        grid = me.grid,
-        store = grid.store,
-        colIdx,
-        view = grid.getView(),
-        value;
-
-        // getting colIdx and real columnHeader
-        if (Ext.isNumber(columnHeader)) {
-            colIdx = columnHeader;
-            columnHeader = grid.headerCt.getHeaderAtIndex(colIdx);
-        } else {
-            colIdx = columnHeader.getIndex();
-        }
-        // getting current value
-        value = record.get(columnHeader.dataIndex);
-
-        // return editing context
-        return {
-            grid: grid,
-            record: record,
-            field: columnHeader.dataIndex,
-            value: value,
-            column: columnHeader,
-            colIdx: colIdx,
-            view: columnHeader.getOwnerHeaderCt().view
-        };
-    }
-} );
+	extend: 'Ext.grid.plugin.CellEditing',
+	alias: 'editing.treeeditor',
+
+	// initialization method of plugin
+	init: function(cmp) {
+		var me = this;
+		me.hostCmp = cmp;
+		// on parent event
+		me.hostCmp.on({
+			// on edition event
+			edition : {
+					delay: 50,
+					fn : function(view, record, item, index, e){
+						view.getHeaderAtIndex(0).field.validFlag = 'Not modified';
+						// call the start edition method
+						me.startEdit(record, view.getHeaderAtIndex(0));
+					},
+					scope: me
+			}
+		});
+		me.callParent(arguments);
+	},
+
+	/**
+	* Cancel any active editing.
+	*/
+	cancelEdit: function() {
+		var me = this,
+		activeEd = me.getActiveEditor(),
+		viewEl = me.grid.getView().getEl(me.getActiveColumn());
+
+		me.setActiveEditor(null);
+		me.setActiveColumn(null);
+		me.setActiveRecord(null);
+		if (activeEd) {
+			activeEd.cancelEdit();
+			viewEl.focus();
+			this.fireEvent('canceledit', activeEd, me.context);
+		}
+	},
+
+	/**
+	* overwrite the initEditTriggers to disable edition on click/dblclick
+	* and to add custom
+	*/
+	initEditTriggers: function() 
+	{
+		var me = this,
+		view = me.view;
+
+		me.on({
+			edit: function(editor,event){
+					// if there is a modification
+					if (event.originalValue !== event.value) {
+						// delegate rename action on model
+						event.record.rename(event.value,function(result){
+							// if a result has been returned : success
+							if(result) {
+									// delegate commit action to delete modification flag
+									event.record.commit();
+									var rec = event.record.data;
+									// in case of directory
+									if (!rec.leaf){
+										// set folder's ID returned by server
+										rec.id = result.id;
+									}
+							} else { // in case of transaction error
+									// reset originalValue
+									event.record.value = event.originalValue;
+									event.record.get('text') = event.originalValue;
+									event.record.commit();
+							}
+						});
+					}
+			}
+		});
+
+		// enable Enter key and Esc Key
+		view.on('render', function() {
+			me.keyNav = Ext.create('Ext.util.KeyNav', view.el, {
+					enter: me.onEnterKey,
+					esc: me.onEscKey,
+					scope: me
+			});
+		}, me, { single: true });
+	},
+	//overwrite the getEditing context because we do not need the rowId
+	getEditingContext: function(record, columnHeader) {
+		var me = this,
+		grid = me.grid,
+		store = grid.store,
+		colIdx,
+		view = grid.getView(),
+		value;
+
+		// getting colIdx and real columnHeader
+		if (Ext.isNumber(columnHeader)) {
+			colIdx = columnHeader;
+			columnHeader = grid.headerCt.getHeaderAtIndex(colIdx);
+		} else {
+			colIdx = columnHeader.getIndex();
+		}
+		// getting current value
+		value = record.get(columnHeader.dataIndex);
+
+		// return editing context
+		return {
+			grid: grid,
+			record: record,
+			field: columnHeader.dataIndex,
+			value: value,
+			column: columnHeader,
+			colIdx: colIdx,
+			view: columnHeader.getOwnerHeaderCt().view
+		};
+	}
+});
diff --git a/js/app/views/ParamsMgrUI.js b/js/app/views/ParamsMgrUI.js
index 25820a2..2c93ce2 100644
--- a/js/app/views/ParamsMgrUI.js
+++ b/js/app/views/ParamsMgrUI.js
@@ -1,423 +1,418 @@
 /**
  * Project   : AMDA-NG
- * Name      : amdaUI.ParamsMgrUI
- * @class    :  
+ * Name      : ParamsMgrUI.js
+ * @class    amdaUI.ParamsMgrUI
  * @extends  Ext.Panel.Panel 
  * @brief     
- * @author Elena 
- * @version  $Id: ParamsMgrUI.js 1871 2013-11-22 13:54:17Z elena $
- ******************************************************************************
- *    FT Id     :   Date   : Name - Description
- ******************************************************************************
- *	          
+ * @author Elena         
  */
 
-Ext.define('amdaUI.ParamsMgrUI', {
-    extend: 'Ext.panel.Panel',
-      
-    alias: 'widget.paramsMgrPanel',
-    
-    baseId : null,
-    srcTree : null,
-    destTree : null,
+Ext.define('amdaUI.ParamsMgrUI',{
+	extend: 'Ext.panel.Panel',	
+	alias: 'widget.paramsMgrPanel',
+	
+	baseId : null,
+	srcTree : null,
+	destTree : null,
     
+	//TODO where keep this (==baseId) description ? Global variable?
+	basesNames : ['CDAWEB', 'THEMIS', 'MAPSKP'],
+	bases : [],
    
-    hasModifs: false,
-    
-    //TODO where keep this (==baseId) description ? Global variable?
-    basesNames : ['VEXGRAZ', 'CDAWEB', 'THEMIS', 'MAPSKP'],
-    bases : [],
-    
-    configSrc : {title: 'source', enableDrag : true, enableDrop: false},
-    configDest : {title: 'destination', enableDrag : false, enableDrop:true},
+	configSrc  : {title: 'source', enableDrag : true, enableDrop: false},
+	configDest : {title: 'destination', enableDrag : false, enableDrop:true},
+	       
+	constructor: function(config){    
+		this.init(config);
+		this.callParent(arguments);
+	}, 
 	
-       
-    constructor: function(config) {	    
-	    this.init(config);
-	    this.callParent(arguments);
-    },
-      	   
-   /*
-    * Load new data bases trees	: source & destination
-    */   
-    loadTrees : function(button, pressed) {
-      if (pressed) {		    
-	this.baseId =  button.text;	
-	this.loadTree('source');
-	this.loadTree('destination');
-      }
-    },
-    
-   /*
-    * Real Load  data base tree	
-    */   
-    loadTree : function(type) {
-      
-      var title = this.baseId;
-      if (type == 'source') var store = this.srcTree.getStore();
-      else {
-	    var store = this.destTree.getStore();
-	    title = 'My '+ this.baseId;
-      }	
-      // or RELOAD?
-      var root = store.getRootNode();		   
-      store.load({
-	node: root,
-	params: {
-	  nodeType: type,
-	  baseId: this.baseId
-	}
-      });	
-      root.set('text', title);		    		  
-    },
-    
-/*
- *   Store and tree creation
- */
-    initTree:  function(config) {
-		  
-	if (this.baseId) {
-	  var title = config.title == 'source' ? this.baseId : 'My '+ this.baseId;
-	}
-	else var title = config.title;
-	   
-	var selMode =  config.title == 'source' ? {mode: 'SIMPLE'} : {mode: 'SINGLE'};
-
-	var store = Ext.create('Ext.data.TreeStore', {
-	  model: 'amdaModel.AmdaNode',		     
-	  root: {			  			  
-	      text: title,
-	      //TODO if use the same logic for localParam?
-	      nodeType : 'remoteParam',
-	      expanded: true
-	  },
-	  listeners: {
-	    scope : this,
-	    beforeload: function(store, operation){
-	      store.proxy.extraParams = {
-		  nodeType: config.title,
-		  baseId: this.baseId
-	      }
-	    }}
-	  });
+	/*
+	* Load new data bases trees	: source & destination
+	*/   
+	loadTrees : function(button, pressed){
+		if (pressed) {    
+			this.baseId =  button.text;	
+			this.loadTree('source');
+			this.loadTree('destination');
+		}
+	},
 	
-	var menu = new Ext.menu.Menu({
-	  items: [{
-	    text: 'Delete Data'
-	  }],
-	  listeners: {
-	    scope : this,
-	    click : this.deleteMulti
-	  }
-	});
+	/*
+	* Real Load  data base tree	
+	*/   
+	loadTree : function(type){
+		var title = this.baseId;
+		if (type == 'source'){
+			var store = this.srcTree.getStore();
+		}
+		else {
+			var store = this.destTree.getStore();
+			title = 'My '+ this.baseId;
+		}	
+		// or RELOAD?
+		var root = store.getRootNode();		   
+		store.load({
+			node: root,
+			params: {
+				nodeType: type,
+				baseId: this.baseId
+			}
+		});	
+		root.set('text', title);		    		  
+	},
 	
-	var tree = Ext.create('Ext.tree.Panel', {
-	    store: store,
-	    id : config.title,
-	    flex: 1,
-	    height: 400,
-	    selModel: selMode, //{mode: 'SIMPLE'},
-	    viewConfig: {
-		plugins: {
-		    ptype: 'treeviewdragdrop',
-		    allowContainerDrops : true,
-		    enableDrag: config.enableDrag,
-		    enableDrop: config.enableDrop,
-		    //TODO dataset drag/drop by parameters SELECTION
-		    dragText : "{0} selected parameter{1}",
-		    expandDelay : 100,		   
-		    ddGroup : "RemoteTreeDD",   
-		    isValidDropPoint : function(){		            
-		        return true;
-		    },		    
-		    onContainerOver : function() {					 
-		      return this.dropAllowed;
-		      
-		    },
-		    onNodeOver : function() {					 
-		      return this.dropAllowed;		      
-		    }, 		 
-		    onNodeDrop : function(nodeData, dd, e, data) { 
-		       if (!data.records)
-				  return false;
-		      Ext.Array.each(data.records, this.onDrop, this);
-// deselect source tree selection		      
-		      data.view.getSelectionModel().deselectAll();
-		      return true;		      
-		    },		    
-		    onContainerDrop : function(dd, e, data) {	
-		      
-		      if (!data.records)
-				  return false;		
-			Ext.Array.each(data.records, this.onDrop, this); 
-// deselect source tree selection		      
-		        data.view.getSelectionModel().deselectAll();
-		        return true;
-		    },
+	/*
+	*   Store and tree creation
+	*/
+	initTree:  function(config){		  
+		if (this.baseId){
+			var title = config.title == 'source' ? this.baseId : 'My '+ this.baseId;
+		}
+		else 
+			var title = config.title;
+	   
+		var selMode =  config.title == 'source' ? {mode: 'SIMPLE'} : {mode: 'SINGLE'};
 
-		    onDrop : function(record) {
-		      
- 		      var root = tree.getRootNode();		   
-		      var srcNode = record;		   
-		      var id = srcNode.get('id');	
-		      
-		      // Check if node exists already at destination		      
-		      if (root.findChild('id',id, true)) return;
-		      
-		      var ddNode = srcNode;
-  // Array of parent nodes description			  
-		      var Arr = []; 
-		      	      
-		      while (!ddNode.isRoot()) {			   
-			    ddNode = ddNode.parentNode;
-			    Arr.push(ddNode);
+		var store = Ext.create('Ext.data.TreeStore', {
+			model: 'amdaModel.AmdaNode',		     
+			root: {			  			  
+					text: title,
+					nodeType : 'remoteParam',
+					expanded: true
+			},
+			listeners: {
+				scope : this,
+				beforeload: function(store, operation){
+					store.proxy.extraParams = {
+						nodeType: config.title,
+						baseId: this.baseId
+					}
+				}}
+		});
+	
+		var menu = new Ext.menu.Menu({
+			items: [{
+				text: 'Delete Data'
+			}],
+			listeners: {
+				scope : this,
+				click : this.deleteMulti
 			}
-  // start with the highest node			    
-		      Arr.reverse();			  						   
-
-  // create parent nodes if they do not exist
-		      var parentNode = root;
-		      Ext.Array.each(Arr,function(srcNode, index){
-			    if (index > 0) {
-			       var nodeId = srcNode.get('id');	  			
-			       var node = root.findChild('id',nodeId, true);				  
-			        if (!node) {					 			
-			          node = srcNode.copy();
-			 	  parentNode.appendChild(node);
-				  parentNode.expand(); 				    				    				
-				  node.setDirty();
-			      }				      			      			 
-			      parentNode = node;				
-			    } 			      
-		      });
-	 			      
-		    // Add new node to correct location			    
-		      parentNode.expand(!this.isDataSet, function(res){  		  	     	    		   		  
-			  var newNode = srcNode.copy();
-			  parentNode.appendChild(newNode); 	
-			  //to sync treeStore			  
-			  newNode.setDirty();
-			  //expand the whole subtree of added node
-			  tree.selectPath(newNode.getPath( 'id', '|'), 'id', '|');
-		    });
-		    return true;		     
-		    },
-		    
-		    onViewRender : function(view) {
-		      var me = this;
+		});
+	
+		var tree = Ext.create('Ext.tree.Panel', {
+			store: store,
+			id : config.title,
+			flex: 1,
+			height: 500,
+			selModel: selMode, //{mode: 'SIMPLE'},
+			viewConfig: {
+				plugins:{
+					ptype: 'treeviewdragdrop',
+					allowContainerDrops : true,
+					enableDrag: config.enableDrag,
+					enableDrop: config.enableDrop,
+					//TODO dataset drag/drop by parameters SELECTION
+					dragText : "{0} selected parameter{1}",
+					expandDelay : 100,   
+					ddGroup : "RemoteTreeDD",
+					
+					isValidDropPoint : function(){	            
+						return true;
+					},
+					
+					onContainerOver : function() { 
+						return this.dropAllowed;      
+					},
+					
+					onNodeOver : function() { 
+						return this.dropAllowed;      
+					},
+					
+					onNodeDrop : function(nodeData, dd, e, data){ 
+						if (!data.records)
+							return false;
+						Ext.Array.each(data.records, this.onDrop, this);
+						// deselect source tree selection		      
+						data.view.getSelectionModel().deselectAll();
+						
+						return true;      
+					},
+					
+					onContainerDrop : function(dd, e, data){      
+						if (!data.records)
+							return false;		
+						Ext.Array.each(data.records, this.onDrop, this); 
+						// deselect source tree selection		      
+						data.view.getSelectionModel().deselectAll();
+						
+						return true;
+					},
+					
+					onDrop : function(record) {    
+						var root = tree.getRootNode();		   
+						var srcNode = record;		   
+						var id = srcNode.get('id');						
+						// Check if node exists already at destination
+						if (root.findChild('id',id, true)) {
+							myDesktopApp.infoMsg('This parameter exists already in your treee');
+							return;
+						}
+						var ddNode = srcNode;
+						// Array of parent nodes description  
+						var Arr = [];
+						while (!ddNode.isRoot()) { 
+							ddNode = ddNode.parentNode;
+							Arr.push(ddNode);
+						}
+						// start with the highest node    
+						Arr.reverse();   
+						// create parent nodes if they do not exist
+						var parentNode = root;
+						Ext.Array.each(Arr,function(srcNode, index) {
+							if (index > 0) {
+								var nodeId = srcNode.get('id');
+								var node = root.findChild('id',nodeId, true);
+								if (!node) {
+									node = srcNode.copy();
+									parentNode.appendChild(node);
+									parentNode.expand();
+									node.setDirty();
+								} 
+								parentNode = node;
+							}       
+						});
 
-		      if (me.enableDrag) {
-			      me.dragZone = Ext.create('Ext.tree.ViewDragZone', {
-			      view: view,
-			      ddGroup: me.dragGroup || me.ddGroup,
-		 	      dragText: me.dragText
-			    });
-		      }
+						// Add new node to correct location			    
+						parentNode.expand(!this.isDataSet, function(res){  		  	     	    		   		  
+							var newNode = srcNode.copy();
+							parentNode.appendChild(newNode); 	
+							//to sync treeStore			  
+							newNode.setDirty();
+							//expand the whole subtree of added node
+							tree.selectPath(newNode.getPath( 'id', '|'), 'id', '|');
+						});
+						return true;		     
+					},
+					
+					onViewRender : function(view){
+						var me = this;
 
-		      if (me.enableDrop) {
-			      me.dropZone = Ext.create('Ext.tree.ViewDropZone', {
-			      view: view,
-			      ddGroup: me.dropGroup || me.ddGroup,
-			      allowContainerDrops: me.allowContainerDrops,
-			      expandDelay: me.expandDelay,
-			      isValidDropPoint : me.isValidDropPoint,
-			      onContainerDrop : me.onContainerDrop,
-			      onNodeDrop      : me.onNodeDrop,
-			      onContainerOver : me.onContainerOver,
-			      onNodeOver : me.onNodeOver,
-			      onDrop : me.onDrop,
-			      onSimpleDrop : me.onSimpleDrop
-			    });
-		      }
-		      }
-		  }
-	      }, 		
-	      listeners: {
-		afterrender: function(comp){		   
-		    var view = comp.getView();                  
-		    view.tip = Ext.create('Ext.tip.ToolTip', {
-			// The overall target element.
-			target: view.el,
-			// Each grid row causes its own seperate show and hide.
-			delegate: view.itemSelector,			  				   				 
-			// Moving within the row should not hide the tip.
-			trackMouse: true,			   
-			autoRender: true,				   
+						if (me.enableDrag){
+							me.dragZone = Ext.create('Ext.tree.ViewDragZone', {
+								view: view,
+								ddGroup: me.dragGroup || me.ddGroup,
+								dragText: me.dragText
+							});
+						}
+						
+						if (me.enableDrop){
+							me.dropZone = Ext.create('Ext.tree.ViewDropZone', {
+								view: view,
+								ddGroup: me.dropGroup || me.ddGroup,
+								allowContainerDrops: me.allowContainerDrops,
+								expandDelay: me.expandDelay,
+								isValidDropPoint : me.isValidDropPoint,
+								onContainerDrop : me.onContainerDrop,
+								onNodeDrop      : me.onNodeDrop,
+								onContainerOver : me.onContainerOver,
+								onNodeOver : me.onNodeOver,
+								onDrop : me.onDrop,
+								onSimpleDrop : me.onSimpleDrop
+							});
+						}
+					}
+				}
+			},
+			
 			listeners: {
-			    // Change content dynamically depending on which element triggered the show.
-			    beforeshow: function updateTipBody(tip) {	
-			      var trigger =  view.getRecord(tip.triggerElement);
-			      if (trigger) {
-				var info = trigger.get('info');
-				if (!info || info == '') {						      
-				    tip.addCls('hide');							  
-				  }
-				  else { 
-				    tip.removeCls('hide');			 					  	 					        					       						 
-				    tip.update(info); 
-				  }					      					  
+				afterrender: function(comp) {		   
+					var view = comp.getView();                  
+					view.tip = Ext.create('Ext.tip.ToolTip', {
+						// The overall target element.
+						target: view.el,
+						// Each grid row causes its own seperate show and hide.
+						delegate: view.itemSelector,			  				   				 
+						// Moving within the row should not hide the tip.
+						trackMouse: true,			   
+						autoRender: true,				   
+						listeners: {
+							// Change content dynamically depending on which element triggered the show.
+							beforeshow: function updateTipBody(tip) {	
+								var trigger =  view.getRecord(tip.triggerElement);
+								if (trigger) {
+									var info = trigger.get('info');
+									if (!info || info == '') {    
+										tip.addCls('hide');  
+									}
+									else { 
+										tip.removeCls('hide'); 
+										tip.update(info); 
+									}  
+								}
+							}
+						}
+					});
+				},
+				
+				itemmouseenter: function(view, record, item){ 
+					if(record.get('allowDrag') && view.ownerCt.id == 'source'){		 
+						var el = Ext.get(item),
+						td = el.down('td > div');
+						td.setStyle('cursor', 'crosshair');				
+					}
+				},
+				
+				beforeselect: function(selmodel, record, index) {		    
+						if (!(record.get('isRemoteDataSet') || record.get('isParameter')) && tree.id == 'source') return false;			 	  			      
+				},
+				
+				select: function(selmodel, record, index){			
+					if (record.get('isRemoteDataSet') && tree.id == 'source' && record.isExpanded()) {
+						var toSelect = selmodel.getCount() !== record.childNodes.length + 1;
+						var alreadySelected = selmodel.isSelected(record.firstChild);
+							
+						selmodel.deselectAll();
+							
+						if (toSelect && !alreadySelected) 
+							selmodel.select(record.childNodes);			 
+					}
+				},
+				
+				itemcontextmenu: function(view, rec, item, index, e)
+				{		  
+					e.preventDefault();//stopEvent();
+					if (tree.id == 'destination' && rec.getDepth() > 0)  		        
+								menu.showAt(e.getXY());			 		 		        
 				}
-			    }
-		    }
-		    });
-		},
-				 
-		itemmouseenter: function(view, record, item){		  
-		  if(record.get('allowDrag') && view.ownerCt.id == 'source'){		 
-		        var el = Ext.get(item),
-                        td = el.down('td > div');
-                        td.setStyle('cursor', 'crosshair');				
-		  }
-		},
+			}
+		});	
+		return tree;
+	},
+	
+	// for the moment SINGLE!    
+	deleteMulti: function(){
+		var selected = this.destTree.getSelectionModel().getSelection();
+		Ext.Array.each(selected, function(rec){			
+			rec.deleteData();
+		}); 
 		
-		beforeselect: function(selmodel, record, index) {		    
-	 	    if (!(record.get('isRemoteDataSet') || record.get('isParameter')) && tree.id == 'source') return false;			 	  			      
-		},
-  
-	  	select: function(selmodel, record, index) {
-		   
-	  	   if (record.get('isRemoteDataSet') && tree.id == 'source' && record.isExpanded()) {
-		            var toSelect = selmodel.getCount() !== record.childNodes.length + 1;
-			    var alreadySelected = selmodel.isSelected(record.firstChild);
-			    
-			    selmodel.deselectAll();
-			      
-			    if (toSelect && !alreadySelected) selmodel.select(record.childNodes);			 
-		   }
-	  	},
-	 	
-		itemcontextmenu: function(view, rec, item, index, e){		  
-		    e.preventDefault();//stopEvent();
-		    if (tree.id == 'destination' && rec.getDepth() > 0)  		        
-					      menu.showAt(e.getXY());			 		 		        
-		    }
-	  }
-	});	
-	return tree;
-    },
-// for the moment SINGLE!    
-    deleteMulti: function(){
-	    var selected = this.destTree.getSelectionModel().getSelection();
-	    Ext.Array.each(selected, function(rec){
-				      rec.deleteData();
-	    });      
-    },
-    
-    
-    successCallBack : function(batch, options) {   
-	    this.hasModifs = true;   
-	    loadMask.hide();               
-	    var createdNodes = options.operations.update;
-	     
-// define Pathes to the created nodes	     
-	     var Arr = [];	     
-	     Ext.Array.each(createdNodes,function(item){	                            	           
-		      if (item.getDepth() == 4) { // parameter level			    
-			   Arr.push(item.getPath('id', '|'));		 	 		 
-		      }
-	     });
-	     
-// reload destination tree and expand created nodes	     
-	     var panel = this.destTree;	     
-	     var store = this.destTree.getStore();
-	     var root = store.getRootNode();	     
-	     store.load({ node : root, 
-			  params : { nodeType: 'destination',
-				      baseId: this.baseId },
-			  callback : function(){			    			 
-			    for (var i = 0; i < Arr.length; i++){			     
-			        panel.selectPath(Arr[i], 'id', '|');
-			     }			      			  
-			  }
-		    });	 
-	       
-	   		      
-    },
-    
-    failureCallBack : function(batch, options) {
-      //TODO message error	     
-	      alert('FAILURE!'); 
-	      loadMask.hide();	      
-	      this.loadTree('destination');	       	
-    },   
-    
- /*
-  *  Panel Trees generation
-  */
- 
-  init: function(config) {
-    
-		  if (config.baseId && config.baseId != 'root') 
-				this.baseId = config.baseId;
-	   
-		  this.srcTree = this.initTree(this.configSrc);
-		  this.destTree = this.initTree(this.configDest);
+		// reload destination tree and expand created nodes	     		     
+		var store = this.destTree.getStore();
+		var root = store.getRootNode();		
+		store.load({ node : root, 
+			params : { nodeType: 'destination',
+							baseId : this.baseId }
+		});
+	},
+       
+	successCallBack : function(batch, options) {      
+		loadMask.hide();               
+		var createdNodes = options.operations.create;
+		// define Pathes to the created nodes	     
+		Arr = [];	
+		Ext.Array.each(createdNodes,function(item){  
+		//	if (item.getDepth() == 5) { // parameter level 
+			if (item.get('isParameter')){ // parameter level 
+				Arr.push(item.getPath('id', '|')); 
+			}
+		});		
+		// reload destination tree and expand created nodes	     
+		var panel = this.destTree;	     
+		var store = this.destTree.getStore();
+		var root = store.getRootNode();		
+		store.load({ node : root, 
+			params : { nodeType: 'destination',
+							baseId : this.baseId },	
+			scope : this,
+			callback : function(){
+				for (var i = 0; i < Arr.length; i++){
+					panel.selectPath(Arr[i], 'id', '|');
+				}
+			}
+		});
+		
+		this.updateUserTree();
+	},
+	
+	failureCallBack : function(batch, options) {     
+		myDesktopApp.errorMsg('Error while saving modifs');  
+		loadMask.hide();	      
+		this.loadTree('destination');	       	
+	},   
+	
+	/*
+	*  Update User Tree in Explorer after the the modifs
+	*/
+	updateUserTree : function() {
+		// reload RemoteParam Tree in explorer
+		var explorerTree = Ext.getCmp(amdaUI.ExplorerUI.RESRC_TAB.TREE_ID);
+		if (explorerTree) 
+		{					  
+			var explorerTreeStore = explorerTree.getStore();
+			var explorerRoot = explorerTreeStore.getRootNode();
+			var explorerPath = '/root/parameters-treeBase/myRemoteData-treeRootNode/';
+			
+			explorerTreeStore.load( { node : explorerRoot, 
+					params : { nodeType: 'resources'},
+					callback : function(){
+						explorerTree.selectPath(explorerPath);						 
+					}
+			});	      	 
+		}
+		myDesktopApp.infoMsg('Modifs have been saved');
+	},
+	
+	/*
+	*  Panel Trees generation
+	*/
+	init: function(config) {
+		if (config.baseId && config.baseId != 'root') 
+			this.baseId = config.baseId;
+	
+		this.srcTree = this.initTree(this.configSrc);
+		this.destTree = this.initTree(this.configDest);
 		  
-// synchron load of destination tree if the corresponding  node exists		  
-		  this.srcTree.on('itemexpand', function(node) { 		      
-		      var root = this.destTree.getRootNode();
-		      var destNode = root.findChild('id',node.get('id'),true);
-		      if (destNode) destNode.expand();
-		  },
-		  this);
-// toolbar		  
-		  Ext.Array.each(this.basesNames, function(baseName,index){
-			  var isTheBase = false;
-			  if (this.baseId && baseName == this.baseId) var isTheBase = true;
-			  this.bases[index] = {text: baseName,  toggleGroup: 'remoteBases', pressed: isTheBase, scope : this, toggleHandler: this.loadTrees}
-		  }, this);
+		// synchron load of destination tree if the corresponding  node exists		  
+		this.srcTree.on('itemexpand', function(node) { 		      
+			var root = this.destTree.getRootNode();
+			var destNode = root.findChild('id',node.get('id'),true);
+			if (destNode) destNode.expand();
+		}, this);
+		
+		// toolbar		  
+		Ext.Array.each(this.basesNames, function(baseName,index){
+			var isTheBase = false;
+			if (this.baseId && baseName == this.baseId) var isTheBase = true;
+			this.bases[index] = {text: baseName,  toggleGroup: 'remoteBases', pressed: isTheBase, scope : this, toggleHandler: this.loadTrees}
+		}, this);
 						    
-		  var myConf = {
-		   
-		    id : 'rb_tab_panel', 
-		    title : 'Remote Data Base',		   		  
-		    items: [                 
-			    this.srcTree, 
-			    this.destTree                      
-			  ],
-		    tbar: this.bases,	                       
-		    fbar: [
-			      { text: 'Save Modifs', 
-				scope : this,					  
-				handler: function(){				  
-				      var store = this.destTree.getStore();
-				      
-				       var removed = store.getRemovedRecords();
-				       var updated = store.getUpdatedRecords();				        				  
-			// if only removed: no sync - already removed at Server by node.delete	
-			//TODO 	 is this condition OK??				        				       
-					if (Ext.Array.union(removed,updated).length != removed.length) {  
-						    loadMask.show();
-						    store.sync({ success : this.successCallBack, failure: this.failureCallBack, scope : this});	
+		var myConf = {   
+			id : 'rb_tab_panel', 
+			title : 'Remote Data Base',
+			items: [                 
+				this.srcTree, 
+				this.destTree                      
+			],
+			tbar: this.bases,	                       
+			fbar: [
+				{ text: 'Save Modifs', 
+					scope : this,					  
+					handler: function(){				  
+						var store = this.destTree.getStore();	
+						var new_nodes = store.getNewRecords();	
+						var removed_nodes =  store.getRemovedRecords();
+						// if only removed: no sync - already removed at Server by node.delete	
+						if ( new_nodes.length === 0 && removed_nodes.length > 0) this.updateUserTree();
+						if ( new_nodes.length > 0 ){  
+							loadMask.show();
+							store.sync({ success : this.successCallBack, failure: this.failureCallBack, scope : this});	
+						}
 					}
-				    }
-				}				   
-			  ],
-		    listeners : {
-				scope : this,
-				destroy : function() { 	
-				   if (this.hasModifs) {
-				      // reload RemoteParam Tree in explorer
-					var explorerTree = Ext.getCmp(amdaUI.ExplorerUI.RESRC_TAB.TREE_ID);
-					if (explorerTree) {					  
-					      var explorerTreeStore = explorerTree.getStore();
-					      var explorerRoot = explorerTreeStore.getRootNode();
-					      var explorerPath = '/root/parameters-treeBase/myRemoteData-treeRootNode/';
-					      
-					      explorerTreeStore.load( { node : explorerRoot, 
-									params : { nodeType: 'resources'},
-									callback : function(){
-									  explorerTree.selectPath(explorerPath);						 
-									}
-					      });	      	 
-				      }
-				   }
-				}
-		    }
+				} 
+			]
 		};
-
-		Ext.apply(this, Ext.apply(arguments, myConf));
- 
-    }	   		 	  
-    
-});    
\ No newline at end of file
+		Ext.apply(this, Ext.apply(arguments, myConf)); 
+	}	   		 	      
+});
diff --git a/php/RemoteDataCenter/CDAWEB.php b/php/RemoteDataCenter/CDAWEB.php
new file mode 100644
index 0000000..fee3806
--- /dev/null
+++ b/php/RemoteDataCenter/CDAWEB.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * @class CDAWEB 
+ * @brief  
+ */
+
+class CDAWEB extends RemoteDataCenterClientClass
+{ 
+      
+	protected function dataset2dd($id)
+	{
+		return $id; 
+	}
+	
+	public function getParamSize()
+	{
+	  $cmd = "ncinfo_remote ".RemoteData.$this->baseID."/".$this->infoFile." ".$this->ParamId;
+	  $res = shell_exec($cmd);
+	
+	  return $res;
+	}
+	
+	public function getParamComponents()
+	{
+	  $cmd = "ncinfo_remote ".RemoteData.$this->baseID."/".$this->infoFile." ".$this->ParamId." 1";
+	  $res = shell_exec($cmd);
+	  
+	  return $res;
+	}
+	
+	public function setInfoFile()
+	{
+		$this->infoFile = strtolower($this->ViId).".nc";	
+	}
+}
\ No newline at end of file
diff --git a/php/RemoteDataCenter/RemoteDataCenterClientClass.php b/php/RemoteDataCenter/RemoteDataCenterClientClass.php
new file mode 100644
index 0000000..10f1094
--- /dev/null
+++ b/php/RemoteDataCenter/RemoteDataCenterClientClass.php
@@ -0,0 +1,96 @@
+<?php
+/**
+ * @class RemoteDataCenterClientClass
+ * @brief  
+ * @details
+ */
+class RemoteDataCenterClientClass
+{		
+	public $baseDom = null, $dataCenter = null;  
+	public $baseDomName;
+	public $baseID = null;
+   public $ViId = null, $ParamId = null;
+   protected $client;
+	public $infoFile = null;
+	
+	/*
+	 * @brief Constructor
+	*/
+	function __construct()
+	{		
+		$this->baseID = get_class($this);
+		$this->baseDom = new DomDocument("1.0");
+		$this->baseDomName = RemoteData.$this->baseID."/base.xml";
+		
+	//	if (!file_exists($this->baseDomName))
+	//			return -1;
+	//	if (!$this->baseDom->load($this->baseDomName))
+	//			return -2;
+		$this->baseDom->load($this->baseDomName);
+		
+		date_default_timezone_set('UTC');
+
+		try {
+				$this->client = new SoapClient(DD_WSDL);
+		}
+		catch  (SoapFault $exception) {
+				$msg = $exception->faultstring.PHP_EOL;                           
+				exit($msg);
+		}
+	
+	//	return 0;
+	}		
+	
+	public function param2dd($paramID) 
+	{
+		$pairs = array(" " => "_","-" => "_","/" => "_","%" => "_","\\" => "_","$" => "_",":" => "_","+" =>"_",
+							"#" => "_","@" => "_","." => "_", ">" => "_", "<" => "_", "," => "_", ")" => "", "(" => "_"); 
+							
+		return strtr($paramID,$pairs); 
+	}
+	
+	
+	public function setViId($id)
+	{
+		$this->ViId = $id;
+	}
+	
+	public function setParamId($id)
+	{
+		$this->ParamId = $id;
+	}
+	
+	public function addViToDD()
+	{
+		if (!$this->ViId) return false;	
+		
+		$this->setInfoFile();
+		//check if VI already added		
+		try {
+			$res = $this->client->isRemoteViAdded($this->baseID, strtolower($this->ViId));			
+			if (!$res) 
+			{
+			// call to DD Server to create new VI			
+				$command = 'AddVI '.$this->dataset2dd($this->ViId).' '.$this->ViId.' '.$this->baseID;  								
+				system($command, $err);
+
+				return ($err == 0);	
+			}
+		 
+			return true;
+		}
+		catch  (SoapFault $exception) {	
+// 		echo $this->client->__getLastRequest();
+// 		echo $this->client->__getLastResponse();
+				$msg = $exception->faultstring.PHP_EOL;				
+				return false;
+		}
+	}
+	
+	
+	protected function dataset2dd($id){}
+	public function setInfoFile(){}
+	public function getParamSize(){}
+	public function getParamComponents(){}
+}
+?>
diff --git a/php/RemoteDataCenter/RemoteParamManager.php b/php/RemoteDataCenter/RemoteParamManager.php
new file mode 100644
index 0000000..1424bed
--- /dev/null
+++ b/php/RemoteDataCenter/RemoteParamManager.php
@@ -0,0 +1,295 @@
+<?php
+/**
+ * @class RemoteParamManager 
+ * @brief Manage Remote Data Centers via DDServer  
+ */
+
+class RemoteParamManager
+{ 
+	protected $Bases, $basesDom;	 	
+	protected $baseDom;
+	
+	protected $center;
+	
+	public $xmlDom, $xmlName;
+	public $paramId, $remoteViId, $localInfo, $paramDom, $paramXML;
+ 
+	function __construct() 
+	{
+		if (!file_exists(RemoteData."Bases.xml"))
+				return array("err" => "No Remote Data Bases");
+
+		$this->basesDom = new DomDocument("1.0");
+		if (!$this->basesDom->load(RemoteData."Bases.xml"))
+				return array("err" => "Can not load Remote Data Bases definitions");
+		$bases = $this->basesDom->getElementsByTagName('dataCenter');
+		
+		foreach ($bases as $base) 
+			$this->Bases[] = $base->getAttribute('xml:id');
+		
+		if (!file_exists(USERWSDIR."RemoteParams.xml"))
+				return array("err" => "No RemoteParams.xml");
+				
+		$this->xmlName = USERWSDIR."RemoteParams.xml";
+		$this->xmlDom = new DomDocument("1.0");
+		$this->xmlDom->load($this->xmlName);
+	}
+
+	/*
+	*  get baseId from parameter descriptor
+	*/
+	protected function setBaseId($id) 
+	{ 
+		foreach ($this->Bases as $base) {
+			// Special Themis case
+			if (substr($id,0,2) == "th") {
+				$baseId = "THEMIS";
+				break;
+			}
+			if (strncmp($id, $base, strlen($base)) === 0) 
+			{
+				$baseId = $base;
+				break;
+			}
+		}
+		
+		$this->center = new $baseId();         
+	}
+ 
+// <param xml:id="ace_r"><get><vi name="ace:orb:all"><baseParam name="R"/></vi></get>
+// <process>$ace_orb_all_R/RADIUS_EARTH</process>
+// <output/></param>
+	public function makeInternalParamXml()
+	{
+		if (!$this->center->ViId) return false;
+		if (!$this->center->ParamId) return false;
+		
+		$this->paramId = strtolower($this->center->baseID."_".$this->center->ViId."_".$this->center->ParamId);
+		$xml = new DomDocument("1.0");
+		$paramNode = $xml->createElement("param");
+		$xml->appendChild($paramNode);
+    
+		$paramNode->setAttribute("xml:id", $this->paramId);
+		$getNode =  $xml->createElement("get");
+		$viNode =  $xml->createElement("vi");
+		$baseParamNode = $xml->createElement("baseParam");
+		$baseParamNode->setAttribute("name", $this->center->ParamId);
+		$viNode->setAttribute("name", strtolower(strtr($this->center->ViId,"_", ":")));
+		$viNode->appendChild($baseParamNode);
+		$getNode->appendChild($viNode);		
+		$paramNode->appendChild($getNode);
+		$paramNode->appendChild($xml->createElement("process"));
+		$paramNode->appendChild($xml->createElement("output"));
+		 
+		return $xml->save(RemoteData.$this->center->baseID."/".$this->paramId.".xml");
+	}
+	
+	// TODO not used - too complicated
+	protected function makeParamArgs()
+	{
+		$CURR_DIR = getcwd();
+		rename($CURR_DIR ."/".$this->paramId.".xml", "/home/budnik/NEWMETA/final/".$this->paramId.".xml");		 
+		chdir(NEWKERNEL_BASE_PATH."/app-generate-paraminfo");
+	   $cmd = NEWKERNEL_INSTALL_DIR."/bin/DDLogin budnik Sacre-Cour";
+	   $res = system($cmd);
+		$cmd = NEWKERNEL_INSTALL_DIR."/bin/amdaParameterInfo -p ".$this->paramId;
+		system($cmd, $res);
+		$info_name = "info_".$this->paramId.".xml";
+		rename($info_name, $CURR_DIR."/".$info_name);
+		chdir($CURR_DIR);
+		
+		return $info_name;
+	}
+	
+// 	protected function makeComponentsFromArgsFile($node, $info_file_name)
+// 	{
+// 		$xml = new DomDocument();
+// 		$xml->load($info_file_name);
+// 		
+// 		$components = $xml->getElementsByTagName('component');
+// 		if ($components->length > 0)
+// 		{
+// 			foreach ($components as $component)
+// 			{
+// 				$compNode = $this->xmlDom->createElement("component");
+// 				$compNode->setAttribute('xml:id',$this->paramId.'('.$component->getAttribute("index_1").')');
+// 				$component->setAttribute('name',$component->getAttribute("name")); // LABEL
+// 				
+// 				$node->appendChild($compNode);
+// 			}
+// 		}
+// 	}
+
+	protected function makeComponents($node, $size, $components)
+ 	{
+		$compArray = explode(";",$components);
+		
+		for ($i = 0; $i < $size; $i++)
+		{
+			$compNode = $this->xmlDom->createElement("component");			
+			$compNode->setAttribute('xml:id',$this->paramId."($i)");		
+			$compNode->setAttribute('name',strtolower($compArray[$i])); // LABEL
+
+			$node->appendChild($compNode);
+		}
+ 	}
+ 	
+	protected function addNode($id)
+	{
+		// Node exists already 
+		if ($this->xmlDom->getElementById($id)) return true;
+
+		// Node to be added
+		$nodeRemote = $this->center->baseDom->getElementById($id);
+
+		// No such node in base.xml
+		if (!$nodeRemote) return false;
+
+		if ($nodeRemote->tagName == 'dataset') 
+		{
+			$this->center->setViId($nodeRemote->getAttribute('name'));
+			$status = $this->center->addViToDD();
+		   // echo "STATUS $status".PHP_EOL;
+			if (!$status) return false;
+			$remoteDatasetInfo = "/home/budnik/DDBASE/INFO/bases/".$this->center->baseID."/".$this->center->infoFile; //TODO "http://apus.irap.omp.eu/
+			$localDatasetInfo = RemoteData.$this->center->baseID."/".$this->center->infoFile;
+			
+			if (!copy($remoteDatasetInfo,$localDatasetInfo)) return false;
+		}
+
+		$node = $this->xmlDom->importNode($nodeRemote);
+
+		if ($nodeRemote->tagName == 'parameter') 
+		{
+			$this->center->setParamId($nodeRemote->getAttribute('name'));
+			$this->center->setViId($nodeRemote->parentNode->getAttribute('name'));
+			$this->center->setInfoFile();
+			
+			if (!$this->makeInternalParamXml()) return false;
+		 
+			if (($size = $this->center->getParamSize()) > 1)
+			{	
+				// make components and args
+				$components = $this->center->getParamComponents();	
+				$this->makeComponents($node, $size, $components); // return false;							
+			}
+			 
+// 			if ($res)
+// 				$info_file_name = $this->makeParamArgs();
+// 				
+// 			if (!$this->makeComponentsFromArgsFile($node, $info_file_name)) return false;
+
+		}
+	
+		$parentRemote= $nodeRemote->parentNode;		  
+		$parentRemoteId = $parentRemote->getAttribute('xml:id');
+
+		$parent = $this->xmlDom->getElementById($parentRemoteId);
+		
+		if (!$parent) 
+		{
+			$parent = $this->xmlDom->importNode($parentRemote); 		      
+		}
+		
+		$parent->appendChild($node); 
+                 
+		$toAddDataCentertToDoc = false;
+
+		while ($parent->tagName != 'dataCenter') 
+		{
+			$node = $parent;	
+			$parentRemote = $parentRemote->parentNode;        
+			$parentRemoteId = $parentRemote->getAttribute('xml:id');
+			$parent = $this->xmlDom->getElementById($parentRemoteId);
+
+			if (!$parent) 
+			{
+				if ($parentRemote->tagName == 'dataCenter') 
+					$toAddDataCenterToDoc = true;
+				$parent = $this->xmlDom->importNode($parentRemote);			   
+				$parent->appendChild($node); 		      
+			}          		        		     
+		}	
+
+		if ($toAddDataCenterToDoc) 
+		{
+			//TODO if this is necessary ???
+			// special bases 'hand-made' descriptions
+			$basesDom = new DomDocument("1.0");
+			$basesDom -> load(RemoteData.'Bases.xml');
+			$theBase = $basesDom->getElementById($parent->getAttribute('xml:id'));
+
+			if ($theBase) $parent -> setAttribute('name', $theBase->getAttribute('name'));
+			$this->xmlDom->documentElement->appendChild($parent);
+		}
+		
+		return true;
+	}
+	
+/*
+*         PUBLIC FUNCTIONS
+*/
+	public function saveTree($obj) 
+	{
+	   $r = print_r($obj, true);
+		if (count($obj) == 1) 
+		{	    
+			$id = $obj->id;
+			
+			if ($id == 'root') return array('res' => 'ok');
+
+			$this->setBaseId($id);			
+			$res = $this->addNode($id);	
+			
+			if ($res === false) return array("err" => "Cannot add node : $id");
+		}
+		else 
+		{ 
+			foreach ($obj as $o) 
+			{
+				$id = $o->id;	
+				
+				if ($id == 'root') continue;
+				
+				if (!$this->baseId) $this->setBaseId($id);				
+				$res = $this->addNode($id);
+				
+				if ($res === false) return array("err" => "Cannot add node : $id");
+
+			}
+		}
+
+		if (!$this->xmlDom->save($this->xmlName))
+			return array("err" => "Cannot save RemoteParams.xml");
+			
+		return array('res' => 'ok');
+	}
+	
+	public function deleteFromTree($obj) 
+	{
+		$id = $obj->id;
+		$nodeToDelete = $this->xmlDom->getElementById($id);
+		
+		if (!$nodeToDelete) 
+			return array("err" => "No such id : $id");
+		
+		$tagName = $nodeToDelete->tagName;
+		
+		while ( $tagName != "dataRoot" ) // "dataCenter" ?
+		{
+			$parentNode = $nodeToDelete->parentNode;
+			$parentNode->removeChild($nodeToDelete);
+			$otherChildren = $parentNode->getElementsByTagName($tagName);
+			
+			if ( $otherChildren->length > 0 ) 
+					break;
+					
+			 $nodeToDelete = $parentNode;
+			 $tagName = $nodeToDelete->tagName;
+		}
+		$this->xmlDom->save($this->xmlName);
+
+		return array('res'=> $obj->id);
+	}
+}
+?>
\ No newline at end of file
diff --git a/php/classes/ParamMgr.php b/php/classes/ParamMgr.php
deleted file mode 100644
index 797a7c7..0000000
--- a/php/classes/ParamMgr.php
+++ /dev/null
@@ -1,415 +0,0 @@
-<?php
-/**
- * @class ParamMgr 
- * @version  $Id: ParamMgr.php 1947 2013-11-28 15:10:46Z elena $
- * 
- */
-
- class ParamMgr {
-	  
-	   
-	  protected $Bases, $basesDom;	 	
-	  protected $baseDom;
-	  public $xmlDom, $xmlName;
-	  public  $baseId, $paramId, $remoteViId, $localInfo, $paramDom, $paramXML;
- 
-	  function __construct() {
-//TODO check if files exist....
-	    $this->basesDom = new DomDocument("1.0");
-	    $this->basesDom->load(RemoteData.'Bases.xml');
-            $bases = $this->basesDom->getElementsByTagName('dataCenter');
-	    foreach ($bases as $base) $this->Bases[] = $base->getAttribute('xml:id');
-	    
-	    $this->xmlName = USERWSDIR.'RemoteParams.xml';
-	    $this->xmlDom = new DomDocument("1.0");
-	    $this->xmlDom->load($this->xmlName);
-
-	  }
-
-/*
-*       
-*/
-	protected function param2dd($paramID) {
-	
-	    $pairs = array("%" => "_","\\" => "_","$" => "_",":" => "_","+" =>"_","-" => "_","#" => "_","@" => "_","." => "_", ">" => "_", "<" => "_");    
-	    return strtr($paramID,$pairs); 
-	  }
-
-/*
-*       Make Aliases - Remote data set ID -> DD data set ID (xxxx_xxxx_xxxx)  
-*/
-	 public function dataset2dd($remVIID) {
-            // TODO method of ????  class
-      
-                $ddVIID = $remVIID;
-            return $ddVIID;
-	  }
-
-/*
-*       get baseId from parameter descriptor
-*/
-	 protected function setBaseId($id) {
- 
-	    foreach ($this->Bases as $base) {
-// Special Themis case
-                if (substr($id,0,2) == "th") {
-                      $this->baseId = "THEMIS";
-                      break;
-                    }
-                 if (strncmp($id, $base, strlen($base)) === 0) {
-		      $this->baseId = $base;
-		      break;
-		  }
-	    }
- 
-	    $this->baseDom = new DomDocument("1.0");
-	    $this->baseDom->load(RemoteData.$this->baseId.'/base.xml');             
-	  }
-
-/*
-*       get Info File name
-*/
-//TODO  not to hardly code special stuff...
-	 public function getInfoName($datasetId) {
-	  
-	      if ($this->baseId == 'CDAWEB')
-				return  strtolower($datasetId)."_00000000_v01.cdf";
-	      return  $datasetId.'.xml';
-
-	  }
-
-/*
-*
-*/
-	  protected function getDatasetInfo() {
-
-	      $infoFileName = $this->getInfoName($this->remoteViId);
-	      $this->localInfo = RemoteData.$this->baseId.'/'.$infoFileName;
-	      if (file_exists($this->localInfo)) return true;
-
-// call to DD Server to create new VI
-	      $command = OLD_CLASSPATH.'AddVI '.$this->dataset2dd($this->remoteViId).' '.$this->remoteViId.' '.$this->baseId;                
-              system($command, $err);
-
-	      $remoteInfo = INFOSITE.'INFO/'.$this->baseId.'/DATASETS/'.$infoFileName;
-// Get dataset info from DD Server if it doesn't yet exists locally
-//TODO may be not neccessary to copy file? load from URL?
-	      $res = copy($remoteInfo, $this->localInfo);	     
-              return $res;
-	  }
-
-/*
-*
-*/
-	  public function getParamInfo() {
- 	
-	      if (!$this->localInfo) {
-		$infoFileName = $this->getInfoName($this->remoteViId);
-		$this->localInfo = RemoteData.$this->baseId.'/'.$infoFileName;
-	      }
-	      switch ($this->baseId) {
-// CDAWEB specific function to parse master CDF - idl
-		case 'CDAWEB' :
-			  $command = OLD_CLASSPATH.'cdfInfo '.$this->localInfo.'  "'.$this->paramId.'"';
-			  $info = exec($command);			                         
-		      break;
-		case 'VEXGRAZ' :
-		case 'MAPSKP' :
-			  $info = $this->getInfoSpase();
-		      break;		
-		default:
-	
-		}   
-	      if ($info == "%-9999") return false;
-	      return $info; 
-	}
-
-/*
-*
-*/ 
-	  protected function getInfoSpase() {
- 
-	      $xmlinfo =  new DomDocument("1.0");
-	      $xmlinfo->load($this->localInfo); 
-	      $mission = $xmlinfo->getElementsByTagName("PARENT_MISSION");
-	      $instrument = $xmlinfo->getElementsByTagName("PARENT_INSTRUMENT");
- 
-	      $xp = new domxpath($xmlinfo);          
-	      $param = $xp->query("//PARAM_ID[.='".$this->paramId."']");
-	      $paramNode = $param->item(0)->parentNode;
-	      if (!$paramNode) return false;
-
-	      $info = "paramID%" . $this->paramId . "&&";
-	  // Data Type
-	      $tag = $paramNode->getElementsByTagName("DATA_TYPE"); 
-	      $value = $tag->item(0)->nodeValue;
-		  switch ($value) {
-			      case 'FLOAT' : $dataTypeS = '2'; break;
-			      case 'DOUBLE': $dataTypeS = '3'; break;
-			      case 'INT'   : $dataTypeS = '1'; break;
-			      case 'CHAR'  : $dataTypeS = '0'; break;
-			      default : $dataTypeS = '2' ;
-		    }
-	      $info = $info . "DATATYPE%" . $dataTypeS ."&&";
-	      $tag = $paramNode->getElementsByTagName("SIZES"); 
-	      $value = $tag->item(0)->nodeValue;
-	      $info = $info . "DIMENSION%" . $value;
-	      $tags=array("PARENT_MISSION", "PARENT_EXPERIMENT", "PARAMETER_SHORT_DESCRIPTION", "FILLVAL", "UNITS","DISPLAY_TYPE", "COORDINATE_SYSTEM", "TENSOR_ORDER_VALUE", "LABEL_I", "FIELDNAM");
-
-	     foreach ($tags as $atag){
-		    $tag = $paramNode->getElementsByTagName($atag);
-		    $value = $tag->length > 0 ? $tag->item(0)->nodeValue : -9999;  
-		    switch ($atag) {
-			      case "LABEL_I" : $name = "LABLAXIS"; 
-				$val_arr = array();
-				for ($j = 0; $j < $tag->length; $j++)
-				      $val_arr[$j] = $tag->item($j)->nodeValue;
-				$value = implode($val_arr, '$').'$'; break;
-			      case "COORDINATE_SYSTEM" : $name = "FRAME"; break;
-			      case "TENSOR_ORDER_VALUE" : $name = "TENSOR"; break; 
-			      case "PARAMETER_SHORT_DESCRIPTION" : $name = "DESCRIPTOR"; break; 
-			      case "PARENT_MISSION" : $name = "SOURCE_NAME";
-				  $value = $mission->item(0)->nodeValue;
-				break; 
-			      case "PARENT_EXPERIMENT" : $name = "DATA_TYPE";
-				$value = $instrument->item(0)->nodeValue;
-				break;
-			      case "FILLVAL": 
-				      $value =  $tag->length > 0 ? $tag->item(0)->nodeValue : -1.e31;
-				      $name = "FILLVAL";
-				break;
-			      default: $name = $atag;
-			}
-		      $info = $info . "&&".$name."%". $value;                  
-		    }
-   
-	  return $info;
-      }
-/*
-* Create XML parameter descriptor in the generic_data/RemoteData/PARAMS dir
-*/ 
-	  public function createParamXml($infoTotal) {
- 
-		  $this->paramDom =  new DomDocument("1.0");  
-		  $this->paramDom->preserveWhiteSpace = false;
-		  $this->paramDom->formatOutput = true;
- 		      
-			    $param = $this->paramDom->createElement('PARAM');                       
-			    $param->appendChild($this->paramDom->createElement("baseID",$this->baseId));
-			    $param->appendChild($this->paramDom->createElement("viID",$this->remoteViId));
- 				
-			      $info = explode("&&",$infoTotal);
-			      for ($i = 0; $i < count($info); $i++){
-				$attr = explode("%",$info[$i]);
-				try {     
-				    $param->appendChild($this->paramDom->createElement($attr[0],$attr[1]));
-				  }
-				catch (Exception $e) {
-				    return false;   
-				}
-			      } 
-			      $this->paramDom->appendChild($param);
-			      if (!$this->paramDom->save($this->paramXML)) return false;
-  
-		  return true; // NO ERROR
-
-	  } 
-
-/*
-*  special themis case: componets from base.xml
-*/
-	  public function makeThemisComponents($param) {
-
-	      $sizes = $param->getAttribute('size');
-	      if (!$sizes) return true; // scalar
-
-
-	      $labels = $param->getAttribute('labels');
-	      $id = $param->getAttribute('xml:id');
-	      $name = $param->getAttribute('name');
-
-	      if (!$labels) {           		   			
-		      $param->setAttribute('needsArgs', true);			   
-		  return true;
-		}
-
-	      $labelArr = explode("$",$labels);                                     		
-	      for ($i = 0; $i < count($labelArr); $i++)
-		{
-			$component = $this->xmlDom->createElement('component');
-			$component->setAttribute('xml:id',$id.'('.$i.')');
-
-			$component->setAttribute('name',$labelArr[$i]);
-			$param->appendChild($component); 
-		}        		    		  
-		return true;  
-
-	  }
-
-/*
-*
-*/
-	  public function makeComponents($param) {
-
-		$sizes =  $this->paramDom->getElementsByTagName('DIMENSION')->item(0)->nodeValue;
-		$display = strtolower($this->paramDom->getElementsByTagName('DISPLAY_TYPE')->item(0)->nodeValue);
-		$units = $this->paramDom->getElementsByTagName('UNITS')->item(0)->nodeValue;
-			
-		if (!$units  || ($units == "-9999"))  $units = "no"; 
-		$param->setAttribute("units", $units);
-
-		if ($sizes == "1") return true; // Scalar - Nothing to do
-
-		$id = $param->getAttribute('xml:id');
-		$name = $param->getAttribute('name');
-	// Not a Scalar - add components to user tree            
-		$labels =  $this->paramDom->getElementsByTagName('LABLAXIS')->item(0)->nodeValue; 
-		
-	// No labels                        
-	 	if (!$labels || ($labels == "$") || (substr($display,0,6) == "spectr")) {           
-		    if (!$param->getAttribute('needsArgs')) {			     
-		      $param->setAttribute('needsArgs', true);	
-                      if (substr($display,0,6) == "spectr")  
-                                    $param->setAttribute('display_type', 'spectrogram');   
-		    }
-		  return true;
-		}
-        
-		$labelArr = explode("$",$labels);                                     		
-		    for ($i = 0; $i < count($labelArr)-1; $i++)
-		      {
- 			      $component = $this->xmlDom->createElement('component');
-			      $component->setAttribute('xml:id',$id.'('.$i.')');
-			      $component->setAttribute('name',$labelArr[$i]);
-			      $param->appendChild($component); 
-		      }        		    		  
-		return true;  
-	      }
-/*
-*
-*/ 
-	  protected function addNode($id){
-
-// NODE EXISTS
- 
-		if ($this->xmlDom->getElementById($id)) return true;
-  
-// NODE TO BE ADD
-		$nodeRemote = $this->baseDom->getElementById($id);
- 
-		if (!$nodeRemote) return false;
-
-		if ($nodeRemote->tagName == 'dataset') {
-
-				    $this->remoteViId = $nodeRemote->getAttribute('name');
-				    $datasetExists = $this->baseId != 'THEMIS' ? $this->getDatasetInfo() : true;
-				    if (!$datasetExists) return false;
-		  }
-
-		 $node = $this->xmlDom->importNode($nodeRemote);
-
-		 if ($nodeRemote->tagName == 'parameter') {
-
-				    $this->paramId = $nodeRemote->getAttribute('name');
-				    $this->remoteViId = $nodeRemote->parentNode->getAttribute('name');
- 
-			 	    $info = $this->baseId != 'THEMIS' ? $this->getParamInfo() : true;
-				    if (!$info) return false;
-				      				  
-				     
- // XML descriptor of the parameter; themis excluded
-				    if ($this->baseId == 'THEMIS') {
-
-					if (!$this->makeThemisComponents($node)) return false;
-				    }
-				    else {
-
-					$paramGlobalId = $this->baseId.":".$this->dataset2dd($this->remoteViId).":".$this->param2dd($this->paramId);  
-					$node->setAttribute('xml:id', $paramGlobalId);
-					$this->paramXML = RemoteData.'PARAMS/'.$paramGlobalId.'.xml';
-
-					if (!file_exists($this->paramXML) && !$this->createParamXml($info)) return false;
-					if (!$this->paramDom) {
-					      $this->paramDom = new DomDocument("1.0");
-					}
-					      $this->paramDom->load($this->paramXML);
-					
-					if (!$this->makeComponents($node)) return false;
-				    }
-		   }
- 		 
-		  $parentRemote= $nodeRemote->parentNode;		  
-		  $parentRemoteId = $parentRemote->getAttribute('xml:id');
-
-		  $parent = $this->xmlDom->getElementById($parentRemoteId);
-		  if (!$parent) {
-		      $parent = $this->xmlDom->importNode($parentRemote); 		      
-		  }
-		  $parent -> appendChild($node); 
-                 
-		  $toAddDataCentertToDoc = false;
-
-		  while ($parent->tagName != 'dataCenter') {
-		     $node = $parent;	
-	 	     $parentRemote = $parentRemote->parentNode;        
-		     $parentRemoteId = $parentRemote->getAttribute('xml:id');
-		     $parent = $this->xmlDom->getElementById($parentRemoteId);
-
-		     if (!$parent) {
-			  if ($parentRemote->tagName == 'dataCenter') $toAddDataCenterToDoc = true;
-			  $parent = $this->xmlDom->importNode($parentRemote);			   
-			  $parent -> appendChild($node); 		      
-		      }          		        		     
-		    }	
-
-		   if ($toAddDataCenterToDoc) {
-//TODO if this is neccessary ???
-// special bases 'hand-made' descriptions
-				$basesDom = new DomDocument("1.0");
-				$basesDom -> load(RemoteData.'Bases.xml');
-				$theBase = $basesDom -> getElementById($parent->getAttribute('xml:id'));
- 
-				if ($theBase) $parent -> setAttribute('name', $theBase->getAttribute('name'));
-				$this->xmlDom->documentElement->appendChild($parent);
-		    }
-		  return true;
-	  }
-
-/*
-*         PUBLIC FUNCTIONS
-*/
-	  public function saveTree($obj) {
-				 		
- 	        if (count($obj) == 1) {		    
-                     $id = $obj->id;
-		     $this->setBaseId($id);
-		     $res = $this->addNode($id);		  
-		}
-		else { 
-		  foreach ($obj as $o) {
-		    $id = $o->id;		 
-		    if ($id == 'root') continue;
-		    if (!$this->baseId) $this->setBaseId($id);	
-		    $res = $this->addNode($id);		   		   
-		   }
-		  }
-
-		$this->xmlDom->save($this->xmlName);
-		return array('res' => 'ok');
-	  }
-	
-	  public function deleteFromTree($obj) {
-             	    
-	     $id = $obj->id;
-             $nodeToDelete = $this->xmlDom->getElementById($id);
-	     if (!$nodeToDelete) return array('err' => 'NO SUCH ID');
-	     $nodeToDelete->parentNode->removeChild($nodeToDelete);
-	     
-	     $this->xmlDom->save($this->xmlName);
- 
-	     return array('res'=> $obj->id);
-	  }
-	
-}
-
-?>
\ No newline at end of file
diff --git a/php/src/AddVI.c b/php/src/AddVI.c
new file mode 100644
index 0000000..a592846
--- /dev/null
+++ b/php/src/AddVI.c
@@ -0,0 +1,23 @@
+/* $Id: AddVI.c,v 1.2 2012/10/29 08:03:14 budnik Exp $*/
+/*===========================================================================
+ *                    DD SYSTEM CLIENT-SERVER 
+ *                            AddVI.c
+ *                              v.1.0
+ *  Executable to add new VI to server 
+ *  List of changes:
+ *  17 Jun 2007:  V.1.0
+ ===========================================================================*/
+
+#include <stdio.h>
+#include <string.h>
+#include <DD.h>
+
+main(int argc, char **argv)
+{
+    int Err;
+    
+    Err = DD_AddDataSet(argv[1],argv[2],argv[3]);
+  //  printf("Err = %d\n",Err);
+    return Err;
+}
+/*===========================================================================*/
diff --git a/php/src/Makefile b/php/src/Makefile
index 608bcc0..9e83214 100644
--- a/php/src/Makefile
+++ b/php/src/Makefile
@@ -1,91 +1,59 @@
-INC = -I/usr/include -I/usr/local/include -I${CDF_DIR}/include -I${CEF_DIR}/include -I${DD_INCLUDE}
-LIB = -L/usr/lib64 -L/usr/local/lib64  -L${CDF_DIR}/lib  -L${CEF_DIR}/lib -L${DD_LIB}
+INC = -I/usr/include -I/usr/local/include -I/opt/local/include -I/opt/local/include/DDClientLibC
+LIB = -L/usr/lib64 -L/usr/local/lib64  -L/opt/local/lib -L/opt/local/lib
 CFLAGS = -ggdb -DLINUX -m64 -march=core2 -fPIC -Dlinux -D_REENTRANT -malign-double 
 CC = gcc
 
 EXE = nctimestring2double nctimeinfo getncvars ncvarinfo \
-      cefstartstop cefvarinfo cefinfo cefsampling ceftimeinfo \
-      cdfinfo cdfvarinfo cdfstartstopfromdata cdfsamplingfromdata
+      ncinfo_remote \
+      cdfinfo cdfvarinfo cdfstartstopfromdata cdfsamplingfromdata \
+      AddVI
 
 lib: ${EXE}
 
-nctimestring2double: nctimestring2double.o
-	${CC} -o nctimestring2double nctimestring2double.o ${LIB} -lDDClientLibC -lnetcdf
+AddVI: AddVI.c
+	${CC} ${CFLAGS} -o AddVI AddVI.c ${INC} ${LIB} -lDDClientLibC
+	
+ncinfo_remote: ncinfo_remote.c
+	${CC} ${CFLAGS} -o ncinfo_remote ncinfo_remote.c  ${INC} ${LIB} -lnetcdf	
+	
+nctimestring2double: nctimestring2double.c
+	${CC} ${CFLAGS} -o nctimestring2double nctimestring2double.c ${INC} ${LIB} -lDDClientLibC -lnetcdf
 
-nctimestring2double.o: nctimestring2double.c
-	${CC} ${CFLAGS} -c nctimestring2double.c ${INC}
+nctimeinfo: nctimeinfo.c
+	${CC} ${CFLAGS} -o nctimeinfo nctimeinfo.c ${INC} ${LIB} -lnetcdf
 
-nctimeinfo: nctimeinfo.o
-	${CC} -o nctimeinfo nctimeinfo.o ${LIB} -lnetcdf
+getncvars: getncvars.c
+	${CC} ${CFLAGS} -o getncvars getncvars.c ${INC} ${LIB} -lnetcdf
 
-nctimeinfo.o: nctimeinfo.c
-	${CC} ${CFLAGS} -c nctimeinfo.c ${INC}
+ncvarinfo: ncvarinfo.c
+	${CC} ${CFLAGS} -o ncvarinfo ncvarinfo.c ${INC} ${LIB} -lnetcdf
 
-getncvars: getncvars.o
-	${CC} -o getncvars getncvars.o ${LIB} -lnetcdf
+cefvarinfo: cefvarinfo.c
+	${CC} ${CFLAGS} -o cefvarinfo cefvarinfo.c ${INC} ${LIB} -lm -lz -lCEF_gcc -lCIS_gcc
 
-getncvars.o: getncvars.c
-	${CC} ${CFLAGS} -c getncvars.c ${INC}
+cefinfo: cefinfo.c
+	${CC} ${CFLAGS} -o cefinfo cefinfo.c ${INC} ${LIB} -lm -lz -lCEF_gcc -lCIS_gcc
 
-ncvarinfo: ncvarinfo.o
-	${CC} -o ncvarinfo ncvarinfo.o ${LIB} -lnetcdf
+cefstartstop: cefstartstop.c
+	${CC} ${CFLAGS} -o cefstartstop cefstartstop.c ${INC} ${LIB} -lm -lz -lCEF_gcc -lCIS_gcc
 
-ncvarinfo.o: ncvarinfo.c
-	${CC} ${CFLAGS} -c ncvarinfo.c ${INC}
+cefsampling: cefsampling.c
+	${CC} ${CFLAGS}  -o cefsampling cefsampling.c ${INC} ${LIB} -lm -lz -lCEF_gcc -lCIS_gcc
 
-cefvarinfo: cefvarinfo.o
-	${CC} -o cefvarinfo cefvarinfo.o ${LIB}  -lm -lz -lCEF_gcc -lCIS_gcc
+ceftimeinfo: ceftimeinfo.c
+	${CC} ${CFLAGS} -o ceftimeinfo ceftimeinfo.c ${INC} ${LIB} -lm -lz -lCEF_gcc -lCIS_gcc
 
-cefvarinfo.o: cefvarinfo.c
-	${CC} ${CFLAGS} -c cefvarinfo.c ${INC}
+cdfinfo: cdfinfo.c
+	${CC} ${CFLAGS} -o cdfinfo cdfinfo.c ${INC} ${LIB} -lcdf
 
-cefinfo: cefinfo.o
-	${CC} -o cefinfo cefinfo.o ${LIB}  -lm -lz -lCEF_gcc -lCIS_gcc
+cdfvarinfo: cdfvarinfo.c
+	${CC} ${CFLAGS} -o cdfvarinfo cdfvarinfo.c ${INC} ${LIB} -lcdf
 
-cefinfo.o: cefinfo.c
-	${CC} ${CFLAGS} -c cefinfo.c ${INC}
+cdfstartstopfromdata: cdfstartstopfromdata.c
+	${CC} ${CFLAGS} -o cdfstartstopfromdata cdfstartstopfromdata.c ${INC} ${LIB} -lcdf
 
-cefstartstop: cefstartstop.o
-	${CC} -o cefstartstop  cefstartstop.o ${LIB}  -lm -lz -lCEF_gcc -lCIS_gcc
-
-cefstartstop.o: cefstartstop.c
-	${CC} ${CFLAGS} -c cefstartstop.c ${INC}
-
-cefsampling: cefsampling.o
-	${CC} -o cefsampling cefsampling.o ${LIB}  -lm -lz -lCEF_gcc -lCIS_gcc
-
-cefsampling.o: cefsampling.c
-	${CC} ${CFLAGS} -c cefsampling.c ${INC}
-
-ceftimeinfo: ceftimeinfo.o
-	${CC} -o ceftimeinfo ceftimeinfo.o ${LIB}  -lm -lz -lCEF_gcc -lCIS_gcc
-
-ceftimeinfo.o: ceftimeinfo.c
-	${CC} ${CFLAGS} -c ceftimeinfo.c ${INC}
-
-cdfinfo: cdfinfo.o
-	${CC} -o cdfinfo cdfinfo.o ${LIB} -lcdf
-
-cdfinfo.o: cdfinfo.c
-	${CC} ${CFLAGS} -c cdfinfo.c ${INC}
-
-cdfvarinfo: cdfvarinfo.o
-	${CC} -o cdfvarinfo cdfvarinfo.o ${LIB} -lcdf
-
-cdfvarinfo.o: cdfvarinfo.c
-	${CC} ${CFLAGS} -c cdfvarinfo.c ${INC}
-
-cdfstartstopfromdata: cdfstartstopfromdata.o
-	${CC} -o cdfstartstopfromdata cdfstartstopfromdata.o ${LIB} -lcdf
-
-cdfstartstopfromdata.o: cdfstartstopfromdata.c
-	${CC} ${CFLAGS} -c cdfstartstopfromdata.c ${INC}
-
-cdfsamplingfromdata: cdfsamplingfromdata.o
-	${CC} -o cdfsamplingfromdata cdfsamplingfromdata.o ${LIB} -lcdf
-
-cdfsamplingfromdata.o: cdfsamplingfromdata.c
-	${CC} ${CFLAGS} -c cdfsamplingfromdata.c ${INC}
+cdfsamplingfromdata: cdfsamplingfromdata.c
+	${CC} ${CFLAGS} -o cdfsamplingfromdata cdfsamplingfromdata.c ${INC} ${LIB} -lcdf
 
 install:
 	install -d -m a+rx,ug+w ${IHM_DIR}/php/bin
diff --git a/php/src/ncinfo_remote.c b/php/src/ncinfo_remote.c
new file mode 100644
index 0000000..27e37e0
--- /dev/null
+++ b/php/src/ncinfo_remote.c
@@ -0,0 +1,96 @@
+ #include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <netcdf.h>
+ 
+void check(int stat) 
+{
+	if (stat != NC_NOERR) 
+	{
+		printf("NetCDF error: %s\n", nc_strerror(stat));
+		exit(1);
+	}
+} 
+ 
+main(int argc, char **argv)
+{
+	int ncID, varID, labelID, ndims, dimids[NC_MAX_DIMS];
+	size_t i, k;
+//	char varname[NC_MAX_NAME];
+	int stat = 0;
+	nc_type xtype;
+	size_t start[] = {0, 0};
+	size_t count[] = {1, 0};
+	size_t size, length;
+		
+	if (argc <= 2) {
+		printf("Incorrect number of arguments\n"); 
+		exit(1);
+	}
+		
+	stat = nc_open(argv[1],NC_WRITE|NC_SHARE,&ncID); check(stat);
+
+	stat = nc_inq_varid(ncID, argv[2], &varID); check(stat);
+ 
+	stat = nc_inq_varndims(ncID, varID, &ndims); check(stat);
+	
+	stat = nc_inq_vardimid(ncID, varID, dimids); check(stat);
+	
+	size_t len = 0; 	
+   if (ndims > 1)
+		for (i = 1; i < ndims; i++) {
+				stat = nc_inq_dimlen(ncID, dimids[i], &len); check(stat);				
+				if (argc == 3)
+				{
+					fprintf(stdout, "%d ", len);
+				}
+		}
+	else
+		if (argc == 3)
+		{ 
+			fprintf(stdout,"%d ", len);
+		}
+		
+	if (argc == 4)
+	{
+		size_t attlen = 0;
+		stat = nc_inq_attlen(ncID, varID, "LABL_PTR_1", &attlen); check(stat);
+	//	stat = nc_inq_atttype(ncID, varID, "LABL_PTR_1", &xtype);  check(stat);	
+		
+		unsigned char *string_attr = (unsigned char *)malloc(attlen * sizeof(char*));	
+		stat = nc_get_att(ncID, varID, "LABL_PTR_1", string_attr); check(stat);
+		
+	//	printf("attribute = %s\n",  string_attr);
+		stat = nc_inq_varid(ncID, string_attr, &labelID); check(stat);
+	//	stat = nc_inq_vartype(ncID, labelID,  &xtype);  check(stat);
+			
+	//	printf("%d \n", xtype);
+	
+		stat = nc_inq_varndims(ncID, labelID, &ndims); check(stat);
+		
+		stat = nc_inq_vardimid(ncID, labelID, dimids); check(stat);
+		
+		for (i = 0; i < ndims; i++) {
+				stat = nc_inq_dimlen(ncID, dimids[i], &len); check(stat);				
+	//			printf("%d \n", len);
+				if (i == 0) size = len;
+				if (i == 1) length = len;
+		} 
+		count[1] = length;
+		
+		unsigned char *string_var = (unsigned char *)malloc(length * sizeof(char*));
+		for (i = 0; i < size; i++)
+		{
+			stat = nc_get_vara(ncID, labelID,  start, count, string_var); check(stat);
+			fprintf(stdout, "%s;",  string_var);	
+			start[0]++;
+		}
+		free(string_attr);
+		free(string_var);
+	}
+	
+	stat = nc_close(ncID);
+	exit(0);
+}
+
+
--
libgit2 0.21.2