diff --git a/src/sunstone/public/js/plugins/hosts-tab.js b/src/sunstone/public/js/plugins/hosts-tab.js
index 1f3e22c943..fe3d087900 100644
--- a/src/sunstone/public/js/plugins/hosts-tab.js
+++ b/src/sunstone/public/js/plugins/hosts-tab.js
@@ -414,23 +414,17 @@ function hostInfoListener(){
 }
 
 //updates the host select by refreshing the options in it
-function updateHostSelect(host_list){
+function updateHostSelect(){
 
-	//update select helper
-	hosts_select="";
-	hosts_select += "<option value=\"\">Select a Host</option>";
-	$.each(host_list, function(){
-		hosts_select += "<option value=\""+this.HOST.ID+"\">"+this.HOST.NAME+"</option>";
-	});
+    hosts_select = makeSelectOptions(dataTable_hosts,1,2,7,"DISABLED");
 
 }
 
 //updates the cluster select by refreshing the options in it
 function updateClusterSelect(cluster_list){
 
-	//update select helper
-	clusters_select= "";
-	clusters_select+="<option value=\"\">Select a cluster</option>";
+	//manual, as there is not dataTable for it
+	clusters_select="<option value=\"\">Select a cluster</option>";
 	$.each(cluster_list, function(){
 		clusters_select += "<option value=\""+this.CLUSTER.ID+"\">"+this.CLUSTER.NAME+"</option>";
 	});
@@ -441,19 +435,21 @@ function updateHostElement(request, host_json){
 	var id = host_json.HOST.ID;
 	var element = hostElementArray(host_json);
 	updateSingleElement(element,dataTable_hosts,'#host_'+id);
+    updateHostSelect();
 }
 
 //callback for actions deleting a host element
 function deleteHostElement(req){
 	deleteElement(dataTable_hosts,'#host_'+req.request.data);
+    updateHostSelect();
 }
 
 //call back for actions creating a host element
 function addHostElement(request,host_json){
     var id = host_json.HOST.ID;
 	var element = hostElementArray(host_json);
-    hosts_select += "<option value=\""+host_json.HOST.NAME+"\">"+host_json.HOST.NAME+"</option>";
 	addElement(element,dataTable_hosts);
+    updateHostSelect();
 }
 
 //callback to update the list of hosts.
@@ -467,7 +463,7 @@ function updateHostsView (request,host_list){
 	});
 
 	updateView(host_list_array,dataTable_hosts);
-	updateHostSelect(host_list);
+	updateHostSelect();
     //dependency with the dashboard plugin
 	updateDashboard("hosts",host_list_json);
 }
diff --git a/src/sunstone/public/js/plugins/images-tab.js b/src/sunstone/public/js/plugins/images-tab.js
index f53f89ad70..82ac718ad6 100644
--- a/src/sunstone/public/js/plugins/images-tab.js
+++ b/src/sunstone/public/js/plugins/images-tab.js
@@ -475,16 +475,9 @@ function imageInfoListener(){
 }
 
 //Updates the select input field with an option for each image
-function updateImageSelect(image_list){
-    images_select="";
-    images_select += "<option value=\"\">Select an image</option>";
-    $.each(image_list, function(){
-        //Only add if the state says the image is usable
-        if ((this.IMAGE.STATE < 3) && (this.IMAGE.STATE > 0)){
-            images_select += '<option id="img_sel_'+this.IMAGE.ID+'" value="'+this.IMAGE.NAME+'">'+this.IMAGE.NAME+'</option>';
-        }
-    });
-
+function updateImageSelect(){
+    images_select = makeSelectOptions(dataTable_images,1,3,8,"DISABLED");
+   
     //update static selectors:
     //in the VM section
     $('div.vm_section#disks select#IMAGE').html(images_select);
@@ -495,29 +488,13 @@ function updateImageElement(request, image_json){
     var id = image_json.IMAGE.ID;
     var element = imageElementArray(image_json);
     updateSingleElement(element,dataTable_images,'#image_'+id);
-    //Update the image select but only if the image is enabled...
-    if ((image_json.IMAGE.STATE < 3) && 
-        (image_json.IMAGE.STATE > 0) &&
-        ($('#img_sel_'+id,images_select).length == 0)){
-            images_select += '<option id="img_sel_'+id+'" value="'+image_json.IMAGE.NAME+'">'+image_json.IMAGE.NAME+'</option>';
-        }   
-    else { //delete the element if it is in the list
-        var tag = 'option#img_sel_'+id;
-        var select = $('<select>'+images_select+'</select>');
-        $(tag,select).remove();
-        images_select = $(select).html();
-    }
-    $('div.vm_section#disks select#IMAGE').html(images_select);
+    updateImageSelect();
 }
 
 // Callback to remove an element from the dataTable
 function deleteImageElement(req){
     deleteElement(dataTable_images,'#image_'+req.request.data);
-    var tag = 'option#img_sel_'+req.request.data;
-    var select = $('<select>'+images_select+'</select>');
-    $(tag,select).remove();
-    images_select = $(select).html();
-    $('div.vm_section#disks select#IMAGE').html(images_select);    
+    updateImageSelect();
 }
 
 // Callback to add an image element
@@ -537,7 +514,7 @@ function updateImagesView(request, images_list){
     });
 
     updateView(image_list_array,dataTable_images);
-    updateImageSelect(images_list);
+    updateImageSelect();
     updateDashboard("images",image_list_json);
 
 }
diff --git a/src/sunstone/public/js/plugins/vnets-tab.js b/src/sunstone/public/js/plugins/vnets-tab.js
index af745dc48f..e0bfd9633d 100644
--- a/src/sunstone/public/js/plugins/vnets-tab.js
+++ b/src/sunstone/public/js/plugins/vnets-tab.js
@@ -307,13 +307,8 @@ function vNetworkInfoListener(){
 }
 
 //updates the vnet select different options
-function updateNetworkSelect(network_list){
-	vnetworks_select="";
-	vnetworks_select += "<option id=\"no_network\" value=\"\">Select a network</option>";
-	$.each(network_list, function(){
-		vnetworks_select += "<option value=\""+this.VNET.NAME+"\">"+this.VNET.NAME+"</option>";
-
-	});
+function updateNetworkSelect(){
+	vnetworks_select= makeSelectOptions(dataTable_vNetworks,1,3,6,"no")
 
 	//update static selectors:
     //in the VM creation dialog
@@ -325,22 +320,20 @@ function updateVNetworkElement(request, vn_json){
 	id = vn_json.VNET.ID;
 	element = vNetworkElementArray(vn_json);
 	updateSingleElement(element,dataTable_vNetworks,'#vnetwork_'+id);
+    updateNetworkSelect();
 }
 
 //Callback to delete a vnet element from the table
 function deleteVNetworkElement(req){
 	deleteElement(dataTable_vNetworks,'#vnetwork_'+req.request.data);
-    //TODO: Delete vNetwork select option here?
+    updateNetworkSelect();
 }
 
 //Callback to add a new element
 function addVNetworkElement(request,vn_json){
 	var element = vNetworkElementArray(vn_json);
 	addElement(element,dataTable_vNetworks);
-    
-    //update select variable and 
-    vnetworks_select += "<option value=\""+vn_json.VNET.NAME+"\">"+vn_json.VNET.NAME+"</option>";
-    $('div.vm_section#networks select#NETWORK').html(vnetworks_select);
+    updateNetworkSelect();
 }
 
 //updates the list of virtual networks
@@ -353,7 +346,7 @@ function updateVNetworksView(request, network_list){
 	});
 
 	updateView(network_list_array,dataTable_vNetworks);
-	updateNetworkSelect(network_list);
+	updateNetworkSelect();
     //dependency with dashboard
 	updateDashboard("vnets",network_list_json);
 
diff --git a/src/sunstone/public/js/sunstone-util.js b/src/sunstone/public/js/sunstone-util.js
index bc08173e41..2089eedada 100644
--- a/src/sunstone/public/js/sunstone-util.js
+++ b/src/sunstone/public/js/sunstone-util.js
@@ -376,6 +376,23 @@ function getSelectedNodes(dataTable){
     return selected_nodes;
 }
 
+//returns a HTML string with a select input code generated from
+//a dataTable
+function makeSelectOptions(dataTable,id_col,name_col,status_col,status_bad){
+    var nodes = dataTable.fnGetData();
+    var select = "<option value=\"\">Please select</option>";
+    var array;
+    $.each(nodes,function(){
+        var id = this[id_col];
+        var name = this[name_col];
+        var status = this[status_col];
+        if (status != status_bad){
+            select +='<option value="'+id+'">'+name+'</option>';
+        }
+    });
+    return select;
+}
+
 //functions that used as true and false conditions for testing mainly
 function True(){
     return true;