diff --git a/kadmos/vistoms/templates/VISTOMS.html b/kadmos/vistoms/templates/VISTOMS.html
index 01e2f81ac01a375e947b2fe0a3bff192bb084769..a4713a8f38c3ca9046c956492ad985a3a426c877 100644
--- a/kadmos/vistoms/templates/VISTOMS.html
+++ b/kadmos/vistoms/templates/VISTOMS.html
@@ -264,7 +264,15 @@
                 if(visPackDiv){visPackDiv.remove()};
                 var navigationBarDiv = d3.select(".navigationBarDiv");
                 if(navigationBarDiv){navigationBarDiv.remove()};
-                
+                var lobiPanels = d3.selectAll(".lobipanel");
+                if (lobiPanels)
+                {
+                    lobiPanels.each(function()
+                    {
+                        this.remove();
+                    })
+                }
+                                
 				var imageWidth = 200;
 				var imageHeight = 150;
 				var padding = 10;
@@ -18858,26 +18866,26 @@
 					$('.myPanel').lobiPanel('unpin');
 				}
 				
+                var markedVariables = [];
+				function preMarkVariable(variableData)
+                {
+                    markedVariables.push(variableData)
+                }
                 
-				function markVariable(aNode,variableData)
+                function markVariable(variableData_arr)
 				{
-                    var firstFromSchema = currentGraph.variableSchemes["schema"][0].xPath.split("/")[1]
-					var xPath = "/"+firstFromSchema+aNode.data.xPath.split(firstFromSchema)[1];
-                    
 					d3.select('.d3-context-menu').style('display', 'none');    
+                 
+                    //Stringify variable data before sending it to kadmos
+                    var variableData_str = JSON.stringify(variableData_arr)
                     
-					var bootboxContent = {title: 'Marking variable as ' + variableData.variableType, message: '<p>Please be patient...</p>'};
+					var bootboxContent = {title: 'Assign parameter roles', message: '<p>Please be patient...</p>'};
 					var xhr = $.ajax({
 						type: 'POST',
 						url: '/kadmosMarkVariable',
 							data: {
 							'graphID':graphID, 
-							'xPath':xPath, 
-							'variableType':variableData.variableType,
-							'upperBound':variableData.upperBound,
-							'lowerBound':variableData.lowerBound,
-							'nominalValue':variableData.nominalValue,
-							'operator':variableData.operator,
+							'variableData_str':variableData_str,
 							'currentOrder':nodeOrder
 						},
 						success: function(result)
@@ -18917,11 +18925,8 @@
 					kadmosHavePatience(xhr, bootboxContent)
 				}
 				
-				function unmarkVariable(aNode)
+				function unmarkVariable(xPath)
 				{
-					var firstFromSchema = currentGraph.variableSchemes["schema"][0].xPath.split("/")[1]
-					var xPath = "/"+firstFromSchema+aNode.data.xPath.split(firstFromSchema)[1];
-					
 					d3.select('.d3-context-menu').style('display', 'none');                                
 					
 					var bootboxContent = {title: 'Unmarking variable<p>Please be patient...</p>'};
@@ -18994,7 +18999,11 @@
 										theVariableData.nominalValue = $('#nominalValue').submit()[0].value;
 										theVariableData.upperBound = $('#upperBound').submit()[0].value;
 										theVariableData.lowerBound = $('#lowerBound').submit()[0].value;
-										markVariable(elm.__data__, theVariableData);
+                                        
+                                        var firstFromSchema = currentGraph.variableSchemes["schema"][0].xPath.split("/")[1]
+                                        var xPath = "/"+firstFromSchema+elm.__data__.data.xPath.split(firstFromSchema)[1];
+										theVariableData.xPath = xPath;
+										preMarkVariable(theVariableData);
 									}
 								}
 							});
@@ -19010,7 +19019,10 @@
 							theVariableData.upperBound = 0.;
 							theVariableData.lowerBound = 0.;
 							theVariableData.nominalValue = 0.;
-							markVariable(elm.__data__, theVariableData);
+							var firstFromSchema = currentGraph.variableSchemes["schema"][0].xPath.split("/")[1]
+                            var xPath = "/"+firstFromSchema+elm.__data__.data.xPath.split(firstFromSchema)[1];
+                            theVariableData.xPath = xPath;
+                            preMarkVariable(theVariableData);
 						},
 						onMouseOver: function(elm,d,i){}
 					},
@@ -19034,7 +19046,10 @@
 									if(result){
 										theVariableData.nominalValue = $('#nominalValue').submit()[0].value;
 										theVariableData.operator = $('#operator').submit()[0].value;
-										markVariable(elm.__data__, theVariableData);
+										var firstFromSchema = currentGraph.variableSchemes["schema"][0].xPath.split("/")[1]
+                                        var xPath = "/"+firstFromSchema+elm.__data__.data.xPath.split(firstFromSchema)[1];
+										theVariableData.xPath = xPath;
+										preMarkVariable(theVariableData);
 									}
 								}
 							});
@@ -19050,7 +19065,10 @@
 							theVariableData.upperBound = 0.;
 							theVariableData.lowerBound = 0.;
 							theVariableData.nominalValue = 0.;
-							markVariable(elm.__data__, theVariableData);
+							var firstFromSchema = currentGraph.variableSchemes["schema"][0].xPath.split("/")[1]
+                            var xPath = "/"+firstFromSchema+elm.__data__.data.xPath.split(firstFromSchema)[1];
+                            theVariableData.xPath = xPath;
+                            preMarkVariable(theVariableData);
 						},
 						onMouseOver: function(elm,d,i){}
 					},
@@ -19106,7 +19124,11 @@
 						bootbox.confirm("Are you sure you want to do this?", function(sure)
 						{
 							if (sure)
-							{unmarkVariable(elm.__data__)}
+							{
+                                var firstFromSchema = currentGraph.variableSchemes["schema"][0].xPath.split("/")[1]
+                                var xPath = "/"+firstFromSchema+elm.__data__.data.xPath.split(firstFromSchema)[1];
+                                unmarkVariable(xPath)
+                            }
 						})
 					},
 					onMouseUp: function(elm, d, i) {},
@@ -19461,7 +19483,6 @@
                                              varCategory: varCategories[j].name,
                                              description: varCategories[j].description,
                                              onMouseClick: function(elm, data, i) {
-                                                console.log(elm)
                                                 showIOTree(data.varCategory,data.description,elm.__data__,"out")},
                                              onMouseOver: function(elm,data,i){}});
                 }
@@ -20218,7 +20239,7 @@
 												
                                                 //push back functions in list
                                                 functions_all.forEach(function(aFunction){
-                                                    if (graphElements.includes(aFunction.name)){functions.push(aFunction);}
+                                                    if (graphElements.includes(aFunction.uID)){functions.push(aFunction);}
                                                 })
                                                 
                                                 //push back variables in list
@@ -20292,7 +20313,7 @@
                                             {
                                                 //push back functions in list
                                                 functions_all.forEach(function(aFunction){
-                                                    if (graphElements.includes(aFunction.name)){functions.push(aFunction);}
+                                                    if (graphElements.includes(aFunction.uID)){functions.push(aFunction);}
                                                 })
                                             }
                                             showList(title,functions,toolMenu);
@@ -21011,16 +21032,25 @@
                     .on("mouseover", function(){d3.select(this).style("cursor", "pointer")})
                     .on("mousedown", function()
                     {
-                        bootbox.hideAll();
+                        if (markedVariables.length<1)
+                        {
+                            bootbox.hideAll();
                             bootbox.alert({
                                 title: "Assign parameter roles",
-                                message: "<p>Please mark all variables, which are of special interest. The options are:</p>"
+                                message: "<p>Please mark all parameters, which are of special interest. The options are:</p>"
                                          +"<ul><li><b>Design Variable</b></li>"
-                                         +"<li><b>Objective Variable</b></li>"
-                                         +"<li><b>Constraint Variable</b></li>"
+                                         +"<li><b>Objective</b></li>"
+                                         +"<li><b>Constraint</b></li>"
                                          +"<li><b>State Variable</b> (also \"quantity of interest\")</li></ul><br/>"
-                                         +"<p>To mark special variables open the <b>Data Model/schema</b> and select the variables via right-mouse click.</p>"
+                                         +"<p>To \"pre-mark\" special parameters open the <b>Data Model Tree</b> or <b>Data Model List</b>, select the parameters via right-mouse click and use one  if the \"Mark Variable\" options.</p>"
+                                         +"<p><b>IMPORTANT: After all parameters are \"pre-marked\", klick this button again to assign the parameter roles!</b></p>"
                             })
+                        }
+                        else
+                        {
+                            markVariable(markedVariables)
+                        }
+                        
                     })
                 
                 fpgManipulations.append("li").append("a")
diff --git a/kadmos/vistoms/vistoms.py b/kadmos/vistoms/vistoms.py
index e23622ccecc0acaeb65c2054c250211b2dc79e4a..d7c2e52d33c71b1913c2ccef766591d55e627a35 100644
--- a/kadmos/vistoms/vistoms.py
+++ b/kadmos/vistoms/vistoms.py
@@ -1277,12 +1277,9 @@ def kadmosMarkVariable():
         # get request form
         graphID = request.form['graphID']
         function_order = request.form['currentOrder'].split(',')
-        variableType = request.form['variableType']
-        xPath = request.form['xPath']
-        operator = request.form['operator']
-        upperBound = float(request.form['upperBound'])
-        lowerBound = float(request.form['lowerBound'])
-        nominalValue = float(request.form['nominalValue'])
+        variableData_str = request.form['variableData_str']
+        # read json data
+        variableData_py = json.loads(variableData_str)
 
         # Save previous graph as backup before making the changes
         savePreviousGraph(graphID)
@@ -1300,19 +1297,18 @@ def kadmosMarkVariable():
             fpg = graph
         else:
             fpg = FundamentalProblemGraph(graph)
-
-
-
-        if (variableType=='designVariable'):
-            fpg.mark_as_design_variable(xPath, nominal_value=nominalValue, upper_bound=upperBound, lower_bound=lowerBound)
-        elif (variableType=='objective'):
-            fpg.mark_as_objective(xPath)
-        elif (variableType=='constraint'):
-            fpg.mark_as_constraint(xPath,reference_value=nominalValue,operator=operator)
-        elif (variableType=='quantityOfInterest'):
-            fpg.mark_as_qois([xPath])
-        else:
-            return ("ERROR: Something went wrong in KADMOS!")
+        for data in variableData_py:
+            if data['variableType'] == 'designVariable':
+                fpg.mark_as_design_variable(data['xPath'], nominal_value=float(data['nominalValue']),
+                                            upper_bound=float(data['upperBound']), lower_bound=float(data['lowerBound']))
+            elif data['variableType'] == 'objective':
+                fpg.mark_as_objective(data['xPath'])
+            elif data['variableType'] == 'constraint':
+                fpg.mark_as_constraint(data['xPath'], reference_value=float(data['nominalValue']), operator=data['operator'])
+            elif data['variableType'] == 'quantityOfInterest':
+                fpg.mark_as_qois([data['xPath']])
+            else:
+                return ("ERROR: Something went wrong in KADMOS!")
 
         # Add the graph with the updated function order to VISTOMS
         newVistomsData = fpg.vistoms_add_json(function_order=function_order, graph_id=graphID, mpg=mpg)