Lior Vernia has uploaded a new change for review.

Change subject: webadmin: Change Setup Networks label mechanism
......................................................................

webadmin: Change Setup Networks label mechanism

Changed the labelling/unlabelling mechanism in the Setup Networks
dialog to be more consistent with other operations, both in terms of
UX (dragging etc.) and in terms of code compliance.

Related to the intent to move towards PatternFly look & feel, but good
idea in general.

Change-Id: I762d06545f621c7a83896f9fa7c59f7b54e2e7ee
Signed-off-by: Lior Vernia <[email protected]>
---
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostBondInterfaceModel.java
D 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostNicModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostSetupNetworksModel.java
D 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/NicLabelModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksAddBondModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksBondModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksEditBondModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksJoinBondsModel.java
A 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksLabelModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/LogicalNetworkModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/NetworkInterfaceModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/NetworkItemModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/NetworkLabelModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/NetworkOperation.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/NetworkOperationFactory.java
M 
frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
M 
frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIMessages.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/HostModule.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/NetworkModule.java
D 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/host/HostNicPopupPresenterWidget.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostBondPopupView.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostBondPopupView.ui.xml
D 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostNicPopupView.java
D 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostNicPopupView.ui.xml
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostSetupNetworksPopupView.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostSetupNetworksPopupView.ui.xml
D 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/NicLabelEditor.java
D 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/NicLabelWidget.java
D 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/NicLabelWidget.ui.xml
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/SetupNetworksBondPopupView.java
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/SetupNetworksLabelPopupPresenterWidget.java
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/SetupNetworksLabelPopupView.java
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/SetupNetworksLabelPopupView.ui.xml
D 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/ExternalNetworksPanel.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/InternalNetworksPanel.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NetworkGroup.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NetworkLabelPanel.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NetworkPanelsStyle.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NicPanel.java
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/SimpleNetworkItemsPanel.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/UnassignedNetworksPanel.java
43 files changed, 635 insertions(+), 771 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/73/38773/1

diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostBondInterfaceModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostBondInterfaceModel.java
index c1eee2a..43e7a6f 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostBondInterfaceModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostBondInterfaceModel.java
@@ -177,16 +177,6 @@
         return getBootProtocol() == NetworkBootProtocol.STATIC_IP;
     }
 
-    private NicLabelModel labelsModel;
-
-    public NicLabelModel getLabelsModel() {
-        return labelsModel;
-    }
-
-    protected void setLabelsModel(NicLabelModel labelsModel) {
-        this.labelsModel = labelsModel;
-    }
-
     public HostBondInterfaceModel() {
         setAddress(new EntityModel<String>());
         setSubnet(new EntityModel<String>());
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostNicModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostNicModel.java
deleted file mode 100644
index dcd816c..0000000
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostNicModel.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package org.ovirt.engine.ui.uicommonweb.models.hosts;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Map;
-
-import 
org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface;
-import org.ovirt.engine.ui.uicommonweb.models.Model;
-import org.ovirt.engine.ui.uicompat.ConstantsManager;
-
-public class HostNicModel extends Model {
-
-    private final NicLabelModel labelsModel;
-
-    public NicLabelModel getLabelsModel() {
-        return labelsModel;
-    }
-
-    public HostNicModel(VdsNetworkInterface iface, Collection<String> 
suggestedLabels, Map<String, String> labelToIface) {
-        
setTitle(ConstantsManager.getInstance().getMessages().editInterfaceTitle(iface.getName()));
-        labelsModel = new NicLabelModel(Collections.singletonList(iface), 
suggestedLabels, labelToIface);
-    }
-
-    public boolean validate() {
-        return labelsModel.validate();
-    }
-
-}
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostSetupNetworksModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostSetupNetworksModel.java
index a7d7822..deed287 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostSetupNetworksModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostSetupNetworksModel.java
@@ -1,7 +1,6 @@
 package org.ovirt.engine.ui.uicommonweb.models.hosts;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -11,7 +10,6 @@
 import java.util.Map;
 import java.util.Set;
 import java.util.SortedSet;
-import java.util.TreeSet;
 
 import org.ovirt.engine.core.common.action.SetupNetworksParameters;
 import org.ovirt.engine.core.common.action.VdcActionType;
@@ -44,6 +42,7 @@
 import 
org.ovirt.engine.ui.uicommonweb.models.hosts.network.NetworkInterfaceModel;
 import org.ovirt.engine.ui.uicommonweb.models.hosts.network.NetworkItemModel;
 import org.ovirt.engine.ui.uicommonweb.models.hosts.network.NetworkLabelModel;
+import 
org.ovirt.engine.ui.uicommonweb.models.hosts.network.NetworkLabelModel.NewNetworkLabelModel;
 import org.ovirt.engine.ui.uicommonweb.models.hosts.network.NetworkOperation;
 import 
org.ovirt.engine.ui.uicommonweb.models.hosts.network.NetworkOperationFactory;
 import 
org.ovirt.engine.ui.uicommonweb.models.hosts.network.NetworkOperationFactory.OperationMap;
@@ -120,9 +119,11 @@
 
     private Map<String, LogicalNetworkModel> networkMap;
 
-    private Map<String, NetworkLabelModel> networkLabelMap;
+    private Map<String, NetworkLabelModel> networkLabelMap = new HashMap<>();
 
-    private Map<String, String> labelToIface;
+    private final NewNetworkLabelModel newLabelModel;
+
+    private Map<String, String> labelToIface = new HashMap<>();
 
     private final List<String> networksToSync = new ArrayList<String>();
 
@@ -171,34 +172,34 @@
 
         // cancel command
         getCommands().add(UICommand.createCancelUiCommand("Cancel", this)); 
//$NON-NLS-1$
+
+        newLabelModel = new NewNetworkLabelModel(this);
+    }
+
+    public NetworkLabelModel getNewNetworkLabelModel() {
+        return newLabelModel;
+    }
+
+    private NetworkItemModel<?> getItemModel(String key, String type) {
+        if (type != null) {
+            switch(type) {
+            case NIC:
+                return nicMap.get(key);
+            case NETWORK:
+                return networkMap.get(key);
+            case LABEL:
+                NetworkLabelModel labelModel = networkLabelMap.get(key);
+                return labelModel == null ? newLabelModel : labelModel;
+            }
+        }
+
+        return null;
     }
 
     public boolean candidateOperation(String op1Key, String op1Type, String 
op2Key, String op2Type, boolean drop) {
+        NetworkItemModel<?> op1 = getItemModel(op1Key, op1Type);
+        NetworkItemModel<?> op2 = getItemModel(op2Key, op2Type);
 
-        NetworkInterfaceModel nic1 = null;
-        LogicalNetworkModel network1 = null;
-        NetworkInterfaceModel nic2 = null;
-        LogicalNetworkModel network2 = null;
-
-        if (NIC.equals(op1Type)) {
-            nic1 = nicMap.get(op1Key);
-        } else if (NETWORK.equals(op1Type)) {
-            network1 = networkMap.get(op1Key);
-        }
-
-        if (NIC.equals(op2Type)) {
-            nic2 = nicMap.get(op2Key);
-        } else if (NETWORK.equals(op2Type)) {
-            network2 = networkMap.get(op2Key);
-        }
-
-        NetworkItemModel<?> op1 = nic1 == null ? network1 : nic1;
-        NetworkItemModel<?> op2 = nic2 == null ? network2 : nic2;
-
-        return candidateOperation(op1, op2, drop);
-    }
-
-    private boolean candidateOperation(NetworkItemModel<?> op1, 
NetworkItemModel<?> op2, boolean drop) {
         if (op1 == null) {
             throw new IllegalArgumentException("null Operands"); //$NON-NLS-1$
         }
@@ -228,11 +229,15 @@
     }
 
     public List<LogicalNetworkModel> getNetworks() {
-        return new ArrayList<LogicalNetworkModel>(networkMap.values());
+        return new ArrayList<>(networkMap.values());
     }
 
     public List<NetworkInterfaceModel> getNics() {
-        return new ArrayList<NetworkInterfaceModel>(nicMap.values());
+        return new ArrayList<>(nicMap.values());
+    }
+
+    public List<NetworkLabelModel> getLabels() {
+        return new ArrayList<>(networkLabelMap.values());
     }
 
     public Event<EventArgs> getNicsChangedEvent() {
@@ -243,59 +248,6 @@
         return operationCandidateEvent;
     }
 
-    private Set<LogicalNetworkModel> computeLabelChanges(NicLabelModel 
labelsModel,
-            Collection<LogicalNetworkModel> originalNetworks) {
-
-        Collection<String> removedLabels = labelsModel.getRemovedLabels();
-        Collection<String> addedLabels = labelsModel.getAddedLabels();
-        Set<LogicalNetworkModel> removedNetworks = new 
HashSet<LogicalNetworkModel>();
-        Set<LogicalNetworkModel> addedNetworks = new 
HashSet<LogicalNetworkModel>();
-        for (String label : removedLabels) {
-             NetworkLabelModel networkLabelModel = networkLabelMap.get(label);
-             Collection<LogicalNetworkModel> labelNetworks = networkLabelModel 
!= null ? networkLabelModel.getNetworks() : null;
-            if (labelNetworks != null) {
-                removedNetworks.addAll(labelNetworks);
-            }
-        }
-        for (String label : addedLabels) {
-            NetworkLabelModel labelModel = networkLabelMap.get(label);
-            if (labelModel != null) {
-                addedNetworks.addAll(labelModel.getNetworks());
-            }
-        }
-
-        Set<LogicalNetworkModel> potentialNetworks = new 
HashSet<LogicalNetworkModel>(originalNetworks);
-        potentialNetworks.removeAll(removedNetworks);
-        potentialNetworks.addAll(addedNetworks);
-
-        return potentialNetworks;
-    }
-
-    // generate a mock "bonding" operation to check if the networks can be 
configured together
-    private boolean validateLabelChanges(Collection<LogicalNetworkModel> 
potentialNetworks) {
-        NetworkInterfaceModel mockSrc = new NetworkInterfaceModel(this);
-        NetworkInterfaceModel mockDst = new NetworkInterfaceModel(this);
-        mockSrc.setIface(new VdsNetworkInterface());
-        mockDst.setIface(new VdsNetworkInterface());
-        mockDst.setItems(new 
ArrayList<LogicalNetworkModel>(potentialNetworks));
-
-        boolean valid = !NetworkOperationFactory.operationFor(mockSrc, 
mockDst).isNullOperation();
-        if (!valid) {
-            candidateOperation(mockSrc, mockDst, true); // trick to get a 
red-highlighted error status
-        }
-        return valid;
-    }
-
-    private void commitLabelChanges(NicLabelModel labelModel,
-            VdsNetworkInterface iface,
-            Collection<LogicalNetworkModel> potentialNetworks) {
-
-        labelModel.commit(iface);
-        NetworkInterfaceModel ifaceModel = nicMap.get(iface.getName());
-        NetworkOperation.clearNetworks(ifaceModel, allNics);
-        NetworkOperation.attachNetworks(ifaceModel, new 
ArrayList<LogicalNetworkModel>(potentialNetworks), allNics);
-    }
-
     public void onEdit(NetworkItemModel<?> item) {
         Model editPopup = null;
         BaseCommandTarget okTarget = null;
@@ -304,50 +256,14 @@
              * Bond Dialog
              *****************/
             final VdsNetworkInterface entity = ((NetworkInterfaceModel) 
item).getIface();
-            editPopup = new SetupNetworksEditBondModel(entity, 
getFreeLabels(), labelToIface);
+            editPopup = new SetupNetworksEditBondModel(entity);
             final SetupNetworksBondModel bondDialogModel = 
(SetupNetworksBondModel) editPopup;
 
             // OK Target
             okTarget = new BaseCommandTarget() {
                 @Override
                 public void executeCommand(UICommand command) {
-                    if (!bondDialogModel.validate()) {
-                        return;
-                    }
-                    sourceListModel.setConfirmWindow(null);
-                    Collection<LogicalNetworkModel> potentialNetworks =
-                            
computeLabelChanges(bondDialogModel.getLabelsModel(), 
nicMap.get(entity.getName())
-                                    .getItems());
-                    if (validateLabelChanges(potentialNetworks)) {
-                        setBondOptions(entity, bondDialogModel);
-                        commitLabelChanges(bondDialogModel.getLabelsModel(), 
entity, potentialNetworks);
-                        redraw();
-                    }
-                }
-            };
-        } else if (item instanceof NetworkInterfaceModel) {
-            /*******************
-             * Interface Dialog
-             *******************/
-            final VdsNetworkInterface entity = ((NetworkInterfaceModel) 
item).getIface();
-            final HostNicModel interfacePopupModel = new HostNicModel(entity, 
getFreeLabels(), labelToIface);
-            editPopup = interfacePopupModel;
-
-            // OK Target
-            okTarget = new BaseCommandTarget() {
-                @Override
-                public void executeCommand(UICommand uiCommand) {
-                    if (!interfacePopupModel.validate()) {
-                        return;
-                    }
-                    sourceListModel.setConfirmWindow(null);
-                    Collection<LogicalNetworkModel> potentialNetworks =
-                            
computeLabelChanges(interfacePopupModel.getLabelsModel(), 
nicMap.get(entity.getName())
-                                    .getItems());
-                    if (validateLabelChanges(potentialNetworks)) {
-                        
commitLabelChanges(interfacePopupModel.getLabelsModel(), entity, 
potentialNetworks);
-                        redraw();
-                    }
+                    setBondOptions(entity, bondDialogModel);
                 }
             };
         } else if (item instanceof LogicalNetworkModel) {
@@ -515,22 +431,14 @@
             return;
         } else if (operation == NetworkOperation.BOND_WITH || operation == 
NetworkOperation.JOIN_BONDS) {
             final SetupNetworksBondModel bondPopup;
-            VdsNetworkInterface iface1 = ((NetworkInterfaceModel) 
networkCommand.getOp1()).getIface();
-            VdsNetworkInterface iface2 = ((NetworkInterfaceModel) 
networkCommand.getOp2()).getIface();
             if (operation == NetworkOperation.BOND_WITH) {
                 bondPopup =
-                        new SetupNetworksAddBondModel(getFreeBonds(),
-                                nextBondName,
-                                Arrays.asList(iface1, iface2),
-                                getFreeLabels(),
-                                labelToIface);
+                        new SetupNetworksAddBondModel(getFreeBonds(), 
nextBondName);
             } else {
                 bondPopup =
                         new SetupNetworksJoinBondsModel(getFreeBonds(),
                                 (BondNetworkInterfaceModel) 
networkCommand.getOp1(),
-                                (BondNetworkInterfaceModel) 
networkCommand.getOp2(),
-                                getFreeLabels(),
-                                labelToIface);
+                                (BondNetworkInterfaceModel) 
networkCommand.getOp2());
             }
             bondPopup.getCommands().add(new UICommand("OK", new 
BaseCommandTarget() { //$NON-NLS-1$
 
@@ -540,30 +448,49 @@
                                 return;
                             }
                             sourceListModel.setConfirmWindow(null);
-
+                            VdsNetworkInterface bond = new 
Bond(bondPopup.getBond().getSelectedItem());
+                            setBondOptions(bond, bondPopup);
                             NetworkInterfaceModel nic1 = 
(NetworkInterfaceModel) networkCommand.getOp1();
                             NetworkInterfaceModel nic2 = 
(NetworkInterfaceModel) networkCommand.getOp2();
                             List<LogicalNetworkModel> networks = new 
ArrayList<LogicalNetworkModel>();
                             networks.addAll(nic1.getItems());
                             networks.addAll(nic2.getItems());
-                            Collection<LogicalNetworkModel> potentialNetworks =
-                                    
computeLabelChanges(bondPopup.getLabelsModel(), networks);
-                            if (!validateLabelChanges(potentialNetworks)) {
-                                return;
-                            }
-                            VdsNetworkInterface bond = new 
Bond(bondPopup.getBond().getSelectedItem());
-                            setBondOptions(bond, bondPopup);
-
                             networkCommand.execute(bond);
                             redraw();
 
                             // Attach the previous networks
-                            commitLabelChanges(bondPopup.getLabelsModel(), 
bond, potentialNetworks);
-                            redraw();
+                            for (NetworkInterfaceModel nic : getNics()) {
+                                if (nic.getName().equals(bond.getName())) {
+                                    NetworkOperation.attachNetworks(nic, 
networks, allNics);
+                                    redraw();
+                                    return;
+                                }
+                            }
                         }
                     }));
 
             popupWindow = bondPopup;
+        } else if (networkCommand.getOp1() == getNewNetworkLabelModel()) {
+            final SetupNetworksLabelModel labelPopup = new 
SetupNetworksLabelModel(dcLabels);
+            labelPopup.getCommands().add(new UICommand("OK", new 
BaseCommandTarget() { //$NON-NLS-1$
+
+                        @Override
+                        public void executeCommand(UICommand uiCommand) {
+                            if (!labelPopup.validate()) {
+                                return;
+                            }
+
+                            sourceListModel.setConfirmWindow(null);
+                            String label = labelPopup.getLabel().getEntity();
+                            dcLabels.add(label);
+                            NetworkOperation.LABEL.getCommand(new 
NetworkLabelModel(label, HostSetupNetworksModel.this),
+                                    networkCommand.getOp2(),
+                                    allNics)
+                                    .execute();
+                            redraw();
+                        }
+                    }));
+            popupWindow = labelPopup;
         } else {
             // just execute the command
             networkCommand.execute();
@@ -612,12 +539,6 @@
 
     }
 
-    private Collection<String> getFreeLabels() {
-        SortedSet<String> freeLabels = new TreeSet<String>(dcLabels);
-        freeLabels.removeAll(labelToIface.keySet());
-        return freeLabels;
-    }
-
     private List<String> getFreeBonds() {
         List<String> freeBonds = new ArrayList<String>();
         for (VdsNetworkInterface bond : allBonds) {
@@ -632,16 +553,23 @@
         if (fetchFromBackend) {
             // run query for networks, this chains the query for nics, and 
also stops progress when done
             startProgress(null);
-            queryNetworks();
+            queryLabels();
         } else {
+            initLabelModels();
             initNetworkModels();
             initNicModels();
         }
     }
 
+    private void initLabelModels() {
+        networkLabelMap.clear();
+        for (String label : dcLabels) {
+            networkLabelMap.put(label, new NetworkLabelModel(label, this));
+        }
+    }
+
     private void initNetworkModels() {
         Map<String, LogicalNetworkModel> networkModels = new HashMap<>();
-        networkLabelMap = new HashMap<>();
         for (Network network : allNetworks) {
             LogicalNetworkModel networkModel = new 
LogicalNetworkModel(network, this);
             networkModels.put(network.getName(), networkModel);
@@ -649,15 +577,14 @@
             if (networkModel.isManagement()) {
                 managementNetworkModel = networkModel;
             }
+
             if (!network.isExternal()) {
-                NetworkLabelModel labelModel = 
networkLabelMap.get(network.getLabel());
-                if (labelModel == null) {
-                    labelModel = new NetworkLabelModel(network.getLabel(), 
this);
-                    networkLabelMap.put(network.getLabel(), labelModel);
+                String label = network.getLabel();
+                if (label != null) {
+                    // The network model is candidate to be drawn as part of 
the label.
+                    // This doesn't yet consider whether it actually exists on 
the interface.
+                    networkLabelMap.get(label).getNetworks().add(networkModel);
                 }
-                // The network model is candidate to be drawn as part of the 
label.
-                // This doesn't yet consider whether it actually exists on the 
interface.
-                labelModel.getNetworks().add(networkModel);
             }
         }
         setNetworks(networkModels);
@@ -670,7 +597,7 @@
         Map<String, List<VdsNetworkInterface>> bondToNic = new HashMap<String, 
List<VdsNetworkInterface>>();
         Map<String, Set<LogicalNetworkModel>> nicToNetwork = new 
HashMap<String, Set<LogicalNetworkModel>>();
         List<LogicalNetworkModel> errorLabelNetworks = new 
ArrayList<LogicalNetworkModel>();
-        labelToIface = new HashMap<String, String>();
+        labelToIface.clear();
 
         // map all nics
         for (VdsNetworkInterface nic : allNics) {
@@ -679,8 +606,6 @@
 
         // pass over all nics
         for (VdsNetworkInterface nic : allNics) {
-            // is this a management nic? (comes from backend)
-            final boolean isNicManagement = nic.getIsManagement();
             final String nicName = nic.getName();
             final String networkName = nic.getNetworkName();
             final String bondName = nic.getBondName();
@@ -789,9 +714,7 @@
                         }
 
                         // attach label itself to nic
-                        if (!labelModel.getNetworks().isEmpty()) {
-                            nicLabels.add(labelModel);
-                        }
+                        nicLabels.add(labelModel);
                     }
                 }
             }
@@ -839,9 +762,10 @@
             @Override
             public void onSuccess(Object model, Object returnValue) {
                 dcLabels = (SortedSet<String>) returnValue;
+                initLabelModels();
 
-                initNicModels();
-                stopProgress();
+                // chain the networks query
+                queryNetworks();
             }
         }));
     }
@@ -858,8 +782,8 @@
                         ((VdcQueryReturnValue) returnValue).getReturnValue();
                 allBonds = bonds;
 
-                // chain the DC labels query
-                queryLabels();
+                initNicModels();
+                stopProgress();
             }
         };
 
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/NicLabelModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/NicLabelModel.java
deleted file mode 100644
index b0f70ae..0000000
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/NicLabelModel.java
+++ /dev/null
@@ -1,134 +0,0 @@
-package org.ovirt.engine.ui.uicommonweb.models.hosts;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import 
org.ovirt.engine.core.common.businessentities.comparators.LexoNumericComparator;
-import 
org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface;
-import org.ovirt.engine.ui.uicommonweb.models.ListModel;
-import org.ovirt.engine.ui.uicommonweb.validation.AsciiNameValidation;
-import org.ovirt.engine.ui.uicommonweb.validation.IValidation;
-import org.ovirt.engine.ui.uicompat.ConstantsManager;
-
-public class NicLabelModel extends ListModel<ListModel<String>> {
-
-    private final Collection<VdsNetworkInterface> srcIfaces; // original 
interfaces composing this interface (more than one in case this is a bond)
-    private final Set<String> containedIfaces; // names of the original 
interfaces
-    private final List<String> originalLabels; // union of labels attached 
originally to original interface(s)
-    private final Collection<String> suggestedLabels; // pre-existing DC 
labels that aren't yet assigned to an interface
-    private final Map<String, String> labelToIface; // map from each label to 
the name of the interface that uses it (possibly null)
-    private final Set<String> flushedLabels; // actual labels, as edited in 
the view
-
-    public Collection<String> getSuggestedLabels() {
-        return suggestedLabels;
-    }
-
-    public NicLabelModel(Collection<VdsNetworkInterface> srcIfaces,
-            Collection<String> suggestedLabels,
-            Map<String, String> labelToIface) {
-
-        this.srcIfaces = srcIfaces;
-        this.suggestedLabels = suggestedLabels;
-        this.labelToIface = labelToIface;
-
-        originalLabels = new ArrayList<String>();
-        containedIfaces = new HashSet<String>();
-        for (VdsNetworkInterface iface : srcIfaces) {
-            Set<String> labels = iface.getLabels();
-            if (labels != null) {
-                originalLabels.addAll(labels);
-            }
-            containedIfaces.add(iface.getName());
-        }
-
-        Collections.sort(originalLabels, new LexoNumericComparator());
-        LinkedList<ListModel<String>> items = new 
LinkedList<ListModel<String>>();
-        for (String label : originalLabels) {
-            ListModel<String> labelModel = new ListModel<String>();
-            labelModel.setItems(suggestedLabels);
-            labelModel.setSelectedItem(label);
-            items.add(labelModel);
-        }
-        setItems(items);
-
-        flushedLabels = new HashSet<String>();
-    }
-
-    public boolean validate() {
-        Set<String> editedLabels = new HashSet<String>();
-        boolean res = true;
-        for (ListModel<String> labelModel : getItems()) {
-            labelModel.validateSelectedItem(new IValidation[] { new 
AsciiNameValidation() });
-
-            String label = labelModel.getSelectedItem();
-            String usingIface = labelToIface.get(label);
-            if (usingIface != null && !containedIfaces.contains(usingIface)) {
-                
labelModel.getInvalidityReasons().add(ConstantsManager.getInstance()
-                        .getMessages()
-                        .labelInUse(label, usingIface));
-                labelModel.setIsValid(false);
-            }
-
-            if (editedLabels.contains(label)) {
-                
labelModel.getInvalidityReasons().add(ConstantsManager.getInstance().getConstants().duplicateLabel());
-                labelModel.setIsValid(false);
-            }
-            editedLabels.add(label);
-
-            res &= labelModel.getIsValid();
-        }
-        return res;
-    }
-
-    /**
-     * Flushes the labels as edited in the view into {@link #flushedLabels}.
-     */
-    private void flush() {
-        flushedLabels.clear();
-        for (ListModel<String> labelModel : getItems()) {
-            flushedLabels.add(labelModel.getSelectedItem());
-        }
-    }
-
-    /**
-     * Computes which labels have been removed from this interface.
-     */
-    public Collection<String> getRemovedLabels() {
-        flush();
-        Set<String> removedLabels = new HashSet<String>(originalLabels);
-        removedLabels.removeAll(flushedLabels);
-        return removedLabels;
-    }
-
-    /**
-     * Computes which labels have been added to the interface.
-     */
-    public Collection<String> getAddedLabels() {
-        flush();
-        Set<String> addedLabels = new HashSet<String>(flushedLabels);
-        addedLabels.removeAll(originalLabels);
-        return addedLabels;
-    }
-
-    /**
-     * Clears the labels from the original interfaces composing this 
interface, and committing the actual labels (after
-     * removal/addition by the user).
-     *
-     * @param the
-     *            interface to which the actual labels will be committed.
-     */
-    public void commit(VdsNetworkInterface dstIface) {
-        for (VdsNetworkInterface iface : srcIfaces) {
-            iface.setLabels(null);
-        }
-        flush();
-        dstIface.setLabels(flushedLabels.isEmpty() ? null : flushedLabels);
-    }
-
-}
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksAddBondModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksAddBondModel.java
index 9be5fde..5754a91 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksAddBondModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksAddBondModel.java
@@ -1,25 +1,15 @@
 package org.ovirt.engine.ui.uicommonweb.models.hosts;
 
-import java.util.Collection;
 import java.util.List;
-import java.util.Map;
 
-import 
org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface;
 import org.ovirt.engine.ui.uicompat.ConstantsManager;
 
 public class SetupNetworksAddBondModel extends SetupNetworksBondModel {
 
-    public SetupNetworksAddBondModel(List<String> freeBonds,
-            String defaultBondName,
-            Collection<VdsNetworkInterface> ifaces,
-            Collection<String> suggestedLabels,
-            Map<String, String> labelToIface) {
-
+    public SetupNetworksAddBondModel(List<String> freeBonds, String 
defaultBondName) {
         
setTitle(ConstantsManager.getInstance().getConstants().createNewBondTitle());
         getBond().setItems(freeBonds);
         getBond().setSelectedItem(defaultBondName);
-
-        setLabelsModel(new NicLabelModel(ifaces, suggestedLabels, 
labelToIface));
     }
 
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksBondModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksBondModel.java
index 6bdca8f..3532611 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksBondModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksBondModel.java
@@ -14,12 +14,7 @@
         getGateway().setIsAvailable(false);
         setBootProtocolAvailable(false);
 
-        setBond(new SortedListModel(new LexoNumericComparator()));
-    }
-
-    @Override
-    public boolean validate() {
-        return getLabelsModel().validate();
+        setBond(new SortedListModel<>(new LexoNumericComparator()));
     }
 
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksEditBondModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksEditBondModel.java
index 7ff4d21..057d2ac 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksEditBondModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksEditBondModel.java
@@ -1,8 +1,6 @@
 package org.ovirt.engine.ui.uicommonweb.models.hosts;
 
 import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 
@@ -12,10 +10,7 @@
 
 public class SetupNetworksEditBondModel extends SetupNetworksBondModel {
 
-    public SetupNetworksEditBondModel(final VdsNetworkInterface bond,
-            Collection<String> suggestedLabels,
-            Map<String, String> labelToIface) {
-
+    public SetupNetworksEditBondModel(final VdsNetworkInterface bond) {
         setTitle(ConstantsManager.getInstance()
                 .getMessages()
                 .editBondInterfaceTitle(bond.getName()));
@@ -47,8 +42,6 @@
             customItem.setValue(value);
             getBondingOptions().setSelectedItem(customItem);
         }
-
-        setLabelsModel(new NicLabelModel(Collections.singletonList(bond), 
suggestedLabels, labelToIface));
     }
 
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksJoinBondsModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksJoinBondsModel.java
index 6ad1b1e..d15f079 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksJoinBondsModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksJoinBondsModel.java
@@ -1,8 +1,6 @@
 package org.ovirt.engine.ui.uicommonweb.models.hosts;
 
 import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -20,12 +18,9 @@
     private List<Entry<String, EntityModel<String>>> bondOptions = new 
ArrayList<Entry<String, EntityModel<String>>>();
     private Map<String, Entry<String, EntityModel<String>>> pairForBondOption 
= new HashMap<String, Entry<String, EntityModel<String>>>();
 
-    @SuppressWarnings("unchecked")
     public SetupNetworksJoinBondsModel(List<String> freeBonds,
             BondNetworkInterfaceModel source,
-            BondNetworkInterfaceModel target,
-            Collection<String> suggestedLabels,
-            Map<String, String> labelToIface) {
+            BondNetworkInterfaceModel target) {
 
         
setTitle(ConstantsManager.getInstance().getConstants().joinBondsTitle());
 
@@ -44,8 +39,6 @@
         addBondOptionIfMissing(target.getBondOptions());
         getBondingOptions().setItems(bondOptions);
         
getBondingOptions().setSelectedItem(pairForBondOption.get(target.getBondOptions()));
-
-        setLabelsModel(new NicLabelModel(Arrays.asList(source.getIface(), 
target.getIface()), suggestedLabels, labelToIface));
     }
 
     private void addBondOptionIfMissing(String candidateOption) {
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksLabelModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksLabelModel.java
new file mode 100644
index 0000000..c248ec3
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/SetupNetworksLabelModel.java
@@ -0,0 +1,44 @@
+package org.ovirt.engine.ui.uicommonweb.models.hosts;
+
+import java.util.Set;
+
+import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
+import org.ovirt.engine.ui.uicommonweb.models.Model;
+import org.ovirt.engine.ui.uicommonweb.validation.IValidation;
+import org.ovirt.engine.ui.uicommonweb.validation.NotEmptyValidation;
+import org.ovirt.engine.ui.uicommonweb.validation.ValidationResult;
+import org.ovirt.engine.ui.uicompat.ConstantsManager;
+
+public class SetupNetworksLabelModel extends Model {
+
+    private final EntityModel<String> label = new EntityModel<>();
+    private final Set<String> dcLabels;
+
+    public EntityModel<String> getLabel() {
+        return label;
+    }
+
+    public SetupNetworksLabelModel(Set<String> dcLabels) {
+        this.dcLabels = dcLabels;
+        
setTitle(ConstantsManager.getInstance().getConstants().addNewLabelTitle());
+    }
+
+    public boolean validate() {
+        label.validateEntity(new IValidation[] { new NotEmptyValidation(), new 
labelNotTakenValidation() });
+        return label.getIsValid();
+    }
+
+    private class labelNotTakenValidation implements IValidation {
+
+        @Override
+        public ValidationResult validate(Object value) {
+            ValidationResult res = new ValidationResult();
+            if (dcLabels.contains(value)) {
+                res.setSuccess(false);
+                
res.getReasons().add(ConstantsManager.getInstance().getConstants().labelAlreadyExists());
+            }
+            return res;
+        }
+    }
+
+}
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/LogicalNetworkModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/LogicalNetworkModel.java
index e424dd9..f694f32 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/LogicalNetworkModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/LogicalNetworkModel.java
@@ -102,6 +102,7 @@
         NetworkInterfaceModel attachingNic = attachedToNic;
         // this needs to be null before the NIC items are changed, because 
they trigger an event
         attachedToNic = null;
+        attachedViaLabel = false;
         List<LogicalNetworkModel> nicNetworks = attachingNic.getItems();
         nicNetworks.remove(this);
         // clear network name
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/NetworkInterfaceModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/NetworkInterfaceModel.java
index 168cb79..330d0b6 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/NetworkInterfaceModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/NetworkInterfaceModel.java
@@ -2,7 +2,9 @@
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 import org.ovirt.engine.core.common.businessentities.network.InterfaceStatus;
 import 
org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface;
@@ -30,12 +32,17 @@
             Collection<NetworkLabelModel> nicLabels,
             HostSetupNetworksModel setupModel) {
         this(nic, setupModel);
+
         // attach all networks
         for (LogicalNetworkModel network : nicNetworks) {
             network.attach(this, false);
         }
+
+        // add all labels
         if (nicLabels != null) {
-            labels.addAll(nicLabels);
+            for (NetworkLabelModel label : nicLabels) {
+                label(label);
+            }
         }
     }
 
@@ -55,6 +62,29 @@
 
     public List<NetworkLabelModel> getLabels() {
         return labels;
+    }
+
+    public void label(NetworkLabelModel labelModel) {
+        labelModel.setInterface(this);
+        getLabels().add(labelModel);
+
+        Set<String> labels = getIface().getLabels();
+        if (labels == null) {
+            labels = new HashSet<>();
+            getIface().setLabels(labels);
+        }
+        labels.add(labelModel.getName());
+    }
+
+    public void unlabel(NetworkLabelModel labelModel) {
+        labelModel.setInterface(null);
+        getLabels().remove(labelModel);
+
+        Set<String> labels = getIface().getLabels();
+        labels.remove(labelModel.getName());
+        if (labels.isEmpty()) {
+            getIface().setLabels(null);
+        }
     }
 
     public int getTotalItemSize() {
@@ -96,20 +126,8 @@
         return HostSetupNetworksModel.NIC;
     }
 
-    private String culpritNetwork;
-
-    /**
-     * If this NIC was the destination of a null bond operation, the culprit 
network is one of those that caused the
-     * operation to fail, the first encountered of the following: unmanaged, 
out of sync, one of several non-VLAN
-     * networks, VM network when VLAN networks exist.
-     *
-     * @return the name of the network at fault, or null if there isn't one.
-     */
-    public String getCulpritNetwork() {
-        return culpritNetwork;
-    }
-
-    public void setCulpritNetwork(String culpritNetwork) {
-        this.culpritNetwork = culpritNetwork;
+    @Override
+    public boolean aggregatesNetworks() {
+        return true;
     }
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/NetworkItemModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/NetworkItemModel.java
index e1ef01b..d87a4cc 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/NetworkItemModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/NetworkItemModel.java
@@ -75,4 +75,30 @@
 
     public abstract String getType();
 
+    /**
+     * Queries whether this item could contain several networks (e.g. 
interface, label).
+     *
+     * @return true iff it might contain a subcollection of networks.
+     */
+    public boolean aggregatesNetworks() {
+        return false;
+    }
+
+    private String culpritNetwork;
+
+    /**
+     * If this item was the part of a null operation including a batch of 
networks, the culprit network is one of those
+     * that caused the operation to fail, the first encountered of the 
following: unmanaged, out of sync, one of several
+     * non-VLAN networks, VM network when VLAN networks exist.
+     *
+     * @return the name of the network at fault, or null if there isn't one.
+     */
+    public String getCulpritNetwork() {
+        return culpritNetwork;
+    }
+
+    public void setCulpritNetwork(String culpritNetwork) {
+        this.culpritNetwork = culpritNetwork;
+    }
+
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/NetworkLabelModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/NetworkLabelModel.java
index 50492f7..76444ba 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/NetworkLabelModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/NetworkLabelModel.java
@@ -5,11 +5,13 @@
 
 import org.ovirt.engine.core.common.businessentities.network.NetworkStatus;
 import org.ovirt.engine.ui.uicommonweb.models.hosts.HostSetupNetworksModel;
+import org.ovirt.engine.ui.uicompat.ConstantsManager;
 
 public class NetworkLabelModel extends NetworkItemModel<NetworkStatus> {
 
     private final String label;
     private final List<LogicalNetworkModel> labelNetworks;
+    private NetworkInterfaceModel iface;
 
     public NetworkLabelModel(String label, HostSetupNetworksModel setupModel) {
         super(setupModel);
@@ -36,4 +38,28 @@
         return labelNetworks;
     }
 
+    public NetworkInterfaceModel getInterface() {
+        return iface;
+    }
+
+    public void setInterface(NetworkInterfaceModel iface) {
+        this.iface = iface;
+    }
+
+    public boolean isAttached() {
+        return iface != null;
+    }
+
+    @Override
+    public boolean aggregatesNetworks() {
+        return true;
+    }
+
+    public static class NewNetworkLabelModel extends NetworkLabelModel {
+
+        public NewNetworkLabelModel(HostSetupNetworksModel setupModel) {
+            
super(ConstantsManager.getInstance().getConstants().newLabelPanelText(), 
setupModel);
+        }
+    }
+
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/NetworkOperation.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/NetworkOperation.java
index 255f2b2..401aed3 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/NetworkOperation.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/NetworkOperation.java
@@ -7,6 +7,7 @@
 import java.util.Set;
 
 import 
org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface;
+import 
org.ovirt.engine.ui.uicommonweb.models.hosts.network.NetworkLabelModel.NewNetworkLabelModel;
 import org.ovirt.engine.ui.uicompat.ConstantsManager;
 
 /**
@@ -380,6 +381,90 @@
         }
 
     },
+    LABEL {
+
+        @Override
+        public String getVerb(NetworkItemModel<?> op1) {
+            return (op1 instanceof NewNetworkLabelModel) ? 
ConstantsManager.getInstance().getConstants().newLabel()
+                    : 
ConstantsManager.getInstance().getMessages().label(op1.getName());
+        }
+
+        @Override
+        protected NetworkOperationCommandTarget getTarget() {
+            return new NetworkOperationCommandTarget() {
+                @Override
+                protected void executeNetworkCommand(NetworkItemModel<?> op1,
+                        NetworkItemModel<?> op2,
+                        List<VdsNetworkInterface> allNics,
+                        Object... params) {
+                    NetworkLabelModel label = (NetworkLabelModel) op1;
+                    NetworkInterfaceModel iface = (NetworkInterfaceModel) op2;
+
+                    if (label.isAttached()) {
+                        UNLABEL.getCommand(label, null, allNics).execute();
+                    }
+
+                    iface.label(label);
+                    for (LogicalNetworkModel network : label.getNetworks()) {
+                        ATTACH_NETWORK.getCommand(network, iface, 
allNics).execute();
+                        network.attachViaLabel();
+                    }
+                }
+            };
+        }
+
+        @Override
+        public boolean isDisplayNetworkAffected(NetworkItemModel<?> op1, 
NetworkItemModel<?> op2) {
+            for (LogicalNetworkModel network : ((NetworkLabelModel) 
op1).getNetworks()) {
+                if (ATTACH_NETWORK.isDisplayNetworkAffected(network, null)) {
+                    return true;
+                }
+            }
+            return false;
+        }
+
+    },
+    UNLABEL {
+
+        @Override
+        public String getVerb(NetworkItemModel<?> op1) {
+            return 
ConstantsManager.getInstance().getMessages().unlabel(op1.getName());
+        }
+
+        @Override
+        public boolean isUnary() {
+            return true;
+        }
+
+        @Override
+        protected NetworkOperationCommandTarget getTarget() {
+            return new NetworkOperationCommandTarget() {
+
+                @Override
+                protected void executeNetworkCommand(NetworkItemModel<?> op1,
+                        NetworkItemModel<?> op2,
+                        List<VdsNetworkInterface> allNics,
+                        Object... params) {
+                    NetworkLabelModel label = (NetworkLabelModel) op1;
+                    label.getInterface().unlabel(label);
+                    for (LogicalNetworkModel network : label.getNetworks()) {
+                        DETACH_NETWORK.getCommand(network, null, 
allNics).execute();
+                    }
+                }
+            };
+        }
+
+        @Override
+        public boolean isDisplayNetworkAffected(NetworkItemModel<?> op1, 
NetworkItemModel<?> op2) {
+            for (LogicalNetworkModel network : ((NetworkLabelModel) 
op1).getNetworks()) {
+                if (DETACH_NETWORK.isDisplayNetworkAffected(network, null)) {
+                    return true;
+                }
+            }
+            return false;
+        }
+
+    },
     NULL_OPERATION {
 
         @Override
@@ -416,7 +501,7 @@
         }
 
     },
-    NULL_OPERATION_BOND_UNMANAGED {
+    NULL_OPERATION_BATCH_UNMANAGED {
 
         @Override
         public String getVerb(NetworkItemModel<?> op1) {
@@ -452,7 +537,7 @@
         }
 
     },
-    NULL_OPERATION_BOND_OUT_OF_SYNC {
+    NULL_OPERATION_BATCH_OUT_OF_SYNC {
 
         @Override
         public String getVerb(NetworkItemModel<?> op1) {
@@ -488,7 +573,7 @@
         }
 
     },
-    NULL_OPERATION_BOND_TOO_MANY_NON_VLANS {
+    NULL_OPERATION_BATCH_TOO_MANY_NON_VLANS {
 
         @Override
         public String getVerb(NetworkItemModel<?> op1) {
@@ -523,7 +608,7 @@
             return true;
         }
     },
-    NULL_OPERATION_BOND_VM_WITH_VLANS {
+    NULL_OPERATION_BATCH_VM_WITH_VLANS {
 
         @Override
         public String getVerb(NetworkItemModel<?> op1) {
@@ -542,7 +627,7 @@
 
     };
 
-    public static void clearNetworks(NetworkInterfaceModel nic, 
List<VdsNetworkInterface> allNics) {
+    private static void clearNetworks(NetworkInterfaceModel nic, 
List<VdsNetworkInterface> allNics) {
         List<LogicalNetworkModel> attachedNetworks = nic.getItems();
         if (attachedNetworks.size() > 0) {
             for (LogicalNetworkModel networkModel : new 
ArrayList<LogicalNetworkModel>(attachedNetworks)) {
@@ -602,9 +687,13 @@
         return message;
     }
 
-    protected String appendDetachNetworkSuggestion(String originalMessage, 
NetworkInterfaceModel nic) {
-        return originalMessage + ' '
-                + 
ConstantsManager.getInstance().getMessages().suggestDetachNetwork(nic.getCulpritNetwork());
+    protected String appendDetachNetworkSuggestion(String originalMessage, 
NetworkItemModel<?> item) {
+        String res = originalMessage;
+        String culpritNetwork = item.getCulpritNetwork();
+        if (culpritNetwork != null) {
+            res += ' ' + 
ConstantsManager.getInstance().getMessages().suggestDetachNetwork(item.getCulpritNetwork());
+        }
+        return res;
     }
 
     /**
@@ -651,7 +740,6 @@
         return false;
     }
 
-    @SuppressWarnings("unused")
     public boolean isDisplayNetworkAffected(NetworkItemModel<?> op1, 
NetworkItemModel<?> op2) {
         return false;
     }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/NetworkOperationFactory.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/NetworkOperationFactory.java
index d9180f1..c80a62e 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/NetworkOperationFactory.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/network/NetworkOperationFactory.java
@@ -49,11 +49,6 @@
             }
         }
 
-        // no valid operation for network labels
-        if (op1 instanceof NetworkLabelModel) {
-            return NetworkOperation.NULL_OPERATION;
-        }
-
         // unary operation dragging op1 to nowhere
         if (op2 == null) {
 
@@ -82,6 +77,13 @@
                     return NetworkOperation.DETACH_NETWORK;
                 }
             }
+            // op1 is a label, if an interface is labelled with it - unlabel
+            else if (op1 instanceof NetworkLabelModel) {
+                NetworkLabelModel label = (NetworkLabelModel) op1;
+                if (label.isAttached()) {
+                    return NetworkOperation.UNLABEL;
+                }
+            }
         }
         // binary operation joining items together - in most cases valid iff 
their networks comply
         else if (op2 instanceof NetworkInterfaceModel) {
@@ -97,13 +99,21 @@
                 if (src.isBonded() || src.equals(dst)) {
                     return NetworkOperation.NULL_OPERATION;
                 }
-                networks.addAll(((NetworkInterfaceModel) op1).getItems());
+                networks.addAll(src.getItems());
             }
             // op1 is a network, verify that it isn't dragged unto the NIC 
already containing it
             else if (op1 instanceof LogicalNetworkModel) {
                 if (!networks.add((LogicalNetworkModel) op1)) {
                     return NetworkOperation.NULL_OPERATION;
                 }
+            }
+            // op1 is a label, verify that it's not applied to the interface 
already labelled by it
+            else if (op1 instanceof NetworkLabelModel) {
+                NetworkLabelModel src = (NetworkLabelModel) op1;
+                if (dst.equals(src.getInterface())) {
+                    return NetworkOperation.NULL_OPERATION;
+                }
+                networks.addAll(src.getNetworks());
             }
 
             // go over the networks and check whether they comply, if not - 
the reason is important
@@ -114,16 +124,16 @@
                 if (!network.isManaged()) {
                     if (op1 instanceof LogicalNetworkModel) {
                         return NetworkOperation.NULL_OPERATION_UNMANAGED;
-                    } else if (op1 instanceof NetworkInterfaceModel) {
+                    } else if (op1.aggregatesNetworks()) {
                         dst.setCulpritNetwork(network.getName());
-                        return NetworkOperation.NULL_OPERATION_BOND_UNMANAGED;
+                        return NetworkOperation.NULL_OPERATION_BATCH_UNMANAGED;
                     }
                 } else if (!network.isInSync()) {
                     if (op1 instanceof LogicalNetworkModel) {
                         return NetworkOperation.NULL_OPERATION_OUT_OF_SYNC;
-                    } else if (op1 instanceof NetworkInterfaceModel) {
+                    } else if (op1.aggregatesNetworks()) {
                         dst.setCulpritNetwork(network.getName());
-                        return 
NetworkOperation.NULL_OPERATION_BOND_OUT_OF_SYNC;
+                        return 
NetworkOperation.NULL_OPERATION_BATCH_OUT_OF_SYNC;
                     }
                 }
                 if (network.hasVlan()) {
@@ -137,16 +147,16 @@
                 if (nonVlanCounter > 1) {
                     if (op1 instanceof LogicalNetworkModel) {
                         return 
NetworkOperation.NULL_OPERATION_TOO_MANY_NON_VLANS;
-                    } else if (op1 instanceof NetworkInterfaceModel) {
+                    } else if (op1.aggregatesNetworks()) {
                         dst.setCulpritNetwork(network.getName());
-                        return 
NetworkOperation.NULL_OPERATION_BOND_TOO_MANY_NON_VLANS;
+                        return 
NetworkOperation.NULL_OPERATION_BATCH_TOO_MANY_NON_VLANS;
                     }
                 } else if (nonVlanVmNetwork != null && vlanFound) {
                     if (op1 instanceof LogicalNetworkModel) {
                         return NetworkOperation.NULL_OPERATION_VM_WITH_VLANS;
-                    } else if (op1 instanceof NetworkInterfaceModel) {
+                    } else if (op1.aggregatesNetworks()) {
                         dst.setCulpritNetwork(nonVlanVmNetwork);
-                        return 
NetworkOperation.NULL_OPERATION_BOND_VM_WITH_VLANS;
+                        return 
NetworkOperation.NULL_OPERATION_BATCH_VM_WITH_VLANS;
                     }
                 }
             }
@@ -166,6 +176,8 @@
                 } else {
                     return NetworkOperation.BOND_WITH;
                 }
+            } else if (op1 instanceof NetworkLabelModel) {
+                return NetworkOperation.LABEL;
             }
         }
 
diff --git 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
index 44aeaef..f2fb9d5 100644
--- 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
+++ 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
@@ -54,6 +54,9 @@
     @DefaultStringValue("Join Bonds")
     String joinBondsTitle();
 
+    @DefaultStringValue("Add new Label")
+    String addNewLabelTitle();
+
     @DefaultStringValue("Manage Networks")
     String assignDetachNetworksTitle();
 
@@ -508,6 +511,12 @@
 
     @DefaultStringValue("Edit Management Network Interface")
     String editManagementNetworkInterfaceTitle();
+
+    @DefaultStringValue("[New Label]")
+    String newLabelPanelText();
+
+    @DefaultStringValue("Add new Label to")
+    String newLabel();
 
     @DefaultStringValue("Install Host")
     String installHostTitle();
@@ -972,6 +981,9 @@
     @DefaultStringValue("The right bound of the MAC address range must not be 
smaller than its left bound.")
     String invalidMacRangeRightBound();
 
+    @DefaultStringValue("Label already exists in the Data Center.")
+    String labelAlreadyExists();
+
     @DefaultStringValue("Note: Local Storage is already configured for this 
Host. The Host belongs to")
     String noteLocalStorageAlreadyConfiguredForThisHostMsg();
 
diff --git 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIMessages.java
 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIMessages.java
index 0904259..7cbe063 100644
--- 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIMessages.java
+++ 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIMessages.java
@@ -203,6 +203,12 @@
     @DefaultMessage("Remove {0} from Bond")
     String removeFromBond(String name);
 
+    @DefaultMessage("Add Label {0} to")
+    String label(String label);
+
+    @DefaultMessage("Remove Label {0}")
+    String unlabel(String label);
+
     @DefaultMessage("This might work without network {0}.")
     String suggestDetachNetwork(String networkName);
 
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
index 19c6397..36804bc 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
@@ -2609,9 +2609,6 @@
     @DefaultStringValue("Custom mode")
     String customModeHostPopup();
 
-    @DefaultStringValue("Labels")
-    String labelsHostPopup();
-
     @DefaultStringValue("Boot Protocol")
     String bootProtocolHostPopup();
 
@@ -2997,6 +2994,15 @@
     @DefaultStringValue("Unassigned Logical Networks")
     String unassignedLogicalNetworks();
 
+    @DefaultStringValue("Networks")
+    String networksPanel();
+
+    @DefaultStringValue("Labels")
+    String labelsPanel();
+
+    @DefaultStringValue("Label")
+    String setupNetworksNewLabel();
+
     @DefaultStringValue("External Logical Networks")
     String externalLogicalNetworks();
 
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java
index ca382fb..ec396cc 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java
@@ -63,7 +63,6 @@
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.HostInterfacePopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.HostManagementConfirmationPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.HostManagementPopupPresenterWidget;
-import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.HostNicPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.HostPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.HostSetupNetworksPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.ManualFencePopupPresenterWidget;
@@ -312,13 +311,14 @@
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.host.HostInterfacePopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.host.HostManagementConfirmationPopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.host.HostManagementPopupView;
-import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.host.HostNicPopupView;
 import org.ovirt.engine.ui.webadmin.section.main.view.popup.host.HostPopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.host.HostSetupNetworksPopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.host.ManualFenceConfirmationPopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.host.MultipleHostsPopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.host.SetupNetworksBondPopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.host.SetupNetworksInterfacePopupView;
+import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.host.SetupNetworksLabelPopupPresenterWidget;
+import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.host.SetupNetworksLabelPopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.host.SetupNetworksManagementPopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.instancetypes.InstanceTypesPopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.macpool.SharedMacPoolPopupView;
@@ -1257,9 +1257,9 @@
         bindPresenterWidget(SetupNetworksBondPopupPresenterWidget.class,
                 SetupNetworksBondPopupPresenterWidget.ViewDef.class,
                 SetupNetworksBondPopupView.class);
-        bindPresenterWidget(HostNicPopupPresenterWidget.class,
-                HostNicPopupPresenterWidget.ViewDef.class,
-                HostNicPopupView.class);
+        bindPresenterWidget(SetupNetworksLabelPopupPresenterWidget.class,
+                SetupNetworksLabelPopupPresenterWidget.ViewDef.class,
+                SetupNetworksLabelPopupView.class);
         bindPresenterWidget(HostSetupNetworksPopupPresenterWidget.class,
                 HostSetupNetworksPopupPresenterWidget.ViewDef.class,
                 HostSetupNetworksPopupView.class);
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/HostModule.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/HostModule.java
index 7af5efe..e072bb2 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/HostModule.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/HostModule.java
@@ -40,9 +40,9 @@
 import org.ovirt.engine.ui.uicommonweb.models.hosts.HostInterfaceModel;
 import org.ovirt.engine.ui.uicommonweb.models.hosts.HostListModel;
 import org.ovirt.engine.ui.uicommonweb.models.hosts.HostManagementNetworkModel;
-import org.ovirt.engine.ui.uicommonweb.models.hosts.HostNicModel;
 import org.ovirt.engine.ui.uicommonweb.models.hosts.HostSetupNetworksModel;
 import org.ovirt.engine.ui.uicommonweb.models.hosts.HostVmListModel;
+import org.ovirt.engine.ui.uicommonweb.models.hosts.SetupNetworksLabelModel;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.ReportPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.AssignTagsPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.DetachConfirmationPopupPresenterWidget;
@@ -53,7 +53,6 @@
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.HostInterfacePopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.HostManagementConfirmationPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.HostManagementPopupPresenterWidget;
-import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.HostNicPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.HostPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.HostSetupNetworksPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.ManualFencePopupPresenterWidget;
@@ -61,6 +60,7 @@
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.SetupNetworksInterfacePopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.SetupNetworksManagementPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm.VmMigratePopupPresenterWidget;
+import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.host.SetupNetworksLabelPopupPresenterWidget;
 import org.ovirt.engine.ui.webadmin.uicommon.model.PermissionModelProvider;
 
 import com.google.gwt.event.shared.EventBus;
@@ -173,7 +173,7 @@
             final Provider<SetupNetworksManagementPopupPresenterWidget> 
setupNetworksManagementPopupProvider,
             final Provider<HostBondPopupPresenterWidget> hostBondPopupProvider,
             final Provider<SetupNetworksBondPopupPresenterWidget> 
setupNetworksBondPopupProvider,
-            final Provider<HostNicPopupPresenterWidget> hostNicPopupProvider,
+            final Provider<SetupNetworksLabelPopupPresenterWidget> 
setupNetworksLabelPopupProvider,
             final Provider<HostSetupNetworksPopupPresenterWidget> 
hostSetupNetworksPopupProvider,
             final Provider<HostListModel<Void>> mainModelProvider,
             final Provider<HostInterfaceListModel> modelProvider) {
@@ -212,8 +212,8 @@
                                 } else {
                                     return hostInterfacePopupProvider.get();
                                 }
-                            } else if (windowModel instanceof HostNicModel) {
-                                return hostNicPopupProvider.get();
+                            } else if (windowModel instanceof 
SetupNetworksLabelModel) {
+                                return setupNetworksLabelPopupProvider.get();
                             }
                         }
 
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/NetworkModule.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/NetworkModule.java
index 8c6a33c..95423b6 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/NetworkModule.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/NetworkModule.java
@@ -30,7 +30,7 @@
 import org.ovirt.engine.ui.uicommonweb.models.hosts.HostBondInterfaceModel;
 import org.ovirt.engine.ui.uicommonweb.models.hosts.HostInterfaceModel;
 import org.ovirt.engine.ui.uicommonweb.models.hosts.HostManagementNetworkModel;
-import org.ovirt.engine.ui.uicommonweb.models.hosts.HostNicModel;
+import org.ovirt.engine.ui.uicommonweb.models.hosts.SetupNetworksLabelModel;
 import org.ovirt.engine.ui.uicommonweb.models.networks.NetworkClusterListModel;
 import 
org.ovirt.engine.ui.uicommonweb.models.networks.NetworkExternalSubnetListModel;
 import org.ovirt.engine.ui.uicommonweb.models.networks.NetworkGeneralModel;
@@ -43,7 +43,6 @@
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.cluster.ClusterManageNetworkPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.datacenter.EditNetworkPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.datacenter.NewNetworkPopupPresenterWidget;
-import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.HostNicPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.HostSetupNetworksPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.SetupNetworksBondPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.SetupNetworksInterfacePopupPresenterWidget;
@@ -51,6 +50,7 @@
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.profile.VnicProfilePopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.provider.ExternalSubnetPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.provider.ImportNetworksPopupPresenterWidget;
+import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.host.SetupNetworksLabelPopupPresenterWidget;
 import org.ovirt.engine.ui.webadmin.uicommon.model.PermissionModelProvider;
 
 import com.google.gwt.event.shared.EventBus;
@@ -243,7 +243,7 @@
             final Provider<SetupNetworksBondPopupPresenterWidget> 
setupNetworksBondPopupProvider,
             final Provider<SetupNetworksInterfacePopupPresenterWidget> 
setupNetworksInterfacePopupProvider,
             final Provider<SetupNetworksManagementPopupPresenterWidget> 
setupNetworksManagementPopupProvider,
-            final Provider<HostNicPopupPresenterWidget> hostNicPopupProvider,
+            final Provider<SetupNetworksLabelPopupPresenterWidget> 
setupNetworksLabelPopupProvider,
             final Provider<HostSetupNetworksPopupPresenterWidget> 
hostSetupNetworksPopupProvider,
             final Provider<NetworkListModel> mainModelProvider,
             final Provider<NetworkHostListModel> modelProvider) {
@@ -262,8 +262,8 @@
                             return setupNetworksManagementPopupProvider.get();
                         } else if (windowModel instanceof HostInterfaceModel) {
                             return setupNetworksInterfacePopupProvider.get();
-                        } else if (windowModel instanceof HostNicModel) {
-                            return hostNicPopupProvider.get();
+                        } else if (windowModel instanceof 
SetupNetworksLabelModel) {
+                            return setupNetworksLabelPopupProvider.get();
                         }
 
                         // Resolve by last executed command
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/host/HostNicPopupPresenterWidget.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/host/HostNicPopupPresenterWidget.java
deleted file mode 100644
index 07e4549..0000000
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/host/HostNicPopupPresenterWidget.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host;
-
-import 
org.ovirt.engine.ui.common.presenter.AbstractModelBoundPopupPresenterWidget;
-import org.ovirt.engine.ui.uicommonweb.models.hosts.HostNicModel;
-
-import com.google.gwt.event.shared.EventBus;
-import com.google.inject.Inject;
-
-public class HostNicPopupPresenterWidget extends 
AbstractModelBoundPopupPresenterWidget<HostNicModel, 
HostNicPopupPresenterWidget.ViewDef> {
-
-    public interface ViewDef extends 
AbstractModelBoundPopupPresenterWidget.ViewDef<HostNicModel> {
-    }
-
-    @Inject
-    public HostNicPopupPresenterWidget(EventBus eventBus, ViewDef view) {
-        super(eventBus, view);
-    }
-
-}
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostBondPopupView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostBondPopupView.java
index 1549760..cf2f697 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostBondPopupView.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostBondPopupView.java
@@ -69,10 +69,6 @@
     @Ignore
     StringEntityModelTextBoxEditor customEditor;
 
-    @UiField
-    @Ignore
-    NicLabelWidget labelsWidget;
-
     @UiField(provided = true)
     EnumRadioEditor<NetworkBootProtocol> bootProtocol;
 
@@ -133,7 +129,6 @@
         bondEditor = new ListModelListBoxEditor<String>();
         networkEditor = new ListModelListBoxEditor<>(new 
NameRenderer<Network>());
         bondingModeEditor = new ListModelListBoxEditor<Map.Entry<String, 
EntityModel<String>>>(new NullSafeRenderer<Map.Entry<String, 
EntityModel<String>>>() {
-            @SuppressWarnings("unchecked")
             @Override
             protected String renderNullSafe(Map.Entry<String, 
EntityModel<String>> pair) {
                 String key = pair.getKey();
@@ -209,7 +204,6 @@
         });
 
         customEditor.asValueBox().addValueChangeHandler(new 
ValueChangeHandler<String>() {
-            @SuppressWarnings("unchecked")
             @Override
             public void onValueChange(ValueChangeEvent<String> event) {
                 for (Map.Entry<String, EntityModel<String>> pair : 
object.getBondingOptions().getItems()) {
@@ -239,7 +233,6 @@
     }
 
     private void updateBondOptions(ListModel<Map.Entry<String, 
EntityModel<String>>> list) {
-        @SuppressWarnings("unchecked")
         Map.Entry<String, EntityModel<String>> pair = list.getSelectedItem();
         if ("custom".equals(pair.getKey())) { //$NON-NLS-1$
             customEditor.setVisible(true);
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostBondPopupView.ui.xml
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostBondPopupView.ui.xml
index 9af514d..39452be 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostBondPopupView.ui.xml
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostBondPopupView.ui.xml
@@ -5,8 +5,7 @@
     xmlns:t="urn:import:org.ovirt.engine.ui.common.widget.dialog.tab"
     xmlns:e="urn:import:org.ovirt.engine.ui.common.widget.editor" 
xmlns:we="urn:import:org.ovirt.engine.ui.webadmin.widget.editor"
   xmlns:ge="urn:import:org.ovirt.engine.ui.common.widget.editor.generic"
-    xmlns:w="urn:import:org.ovirt.engine.ui.webadmin.widget"
-    
xmlns:h="urn:import:org.ovirt.engine.ui.webadmin.section.main.view.popup.host">
+    xmlns:w="urn:import:org.ovirt.engine.ui.webadmin.widget">
 
     <ui:style 
type="org.ovirt.engine.ui.webadmin.section.main.view.popup.host.HostBondPopupView.Style">
         .checkCon{
@@ -25,7 +24,6 @@
                         <e:ListModelListBoxEditor ui:field="networkEditor" />
                         <e:ListModelListBoxEditor ui:field="bondingModeEditor" 
/>
                         <ge:StringEntityModelTextBoxEditor 
ui:field="customEditor" visible="false" />
-                        <h:NicLabelWidget ui:field="labelsWidget" 
visible="false" />
                         <ge:StringEntityModelLabelEditor 
ui:field="bootProtocolLabel" />
                         <e:EnumRadioEditor ui:field="bootProtocol" />
                         <ge:StringEntityModelTextBoxEditor ui:field="address" 
/>
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostNicPopupView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostNicPopupView.java
deleted file mode 100644
index 7a33f6d..0000000
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostNicPopupView.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package org.ovirt.engine.ui.webadmin.section.main.view.popup.host;
-
-import org.ovirt.engine.ui.common.CommonApplicationResources;
-import org.ovirt.engine.ui.common.view.popup.AbstractModelBoundPopupView;
-import org.ovirt.engine.ui.common.widget.dialog.SimpleDialogPanel;
-import org.ovirt.engine.ui.uicommonweb.models.hosts.HostNicModel;
-import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.HostNicPopupPresenterWidget;
-
-import com.google.gwt.core.shared.GWT;
-import com.google.gwt.editor.client.SimpleBeanEditorDriver;
-import com.google.gwt.event.shared.EventBus;
-import com.google.gwt.uibinder.client.UiBinder;
-import com.google.gwt.uibinder.client.UiField;
-import com.google.inject.Inject;
-
-public class HostNicPopupView extends 
AbstractModelBoundPopupView<HostNicModel> implements 
HostNicPopupPresenterWidget.ViewDef {
-
-    interface Driver extends SimpleBeanEditorDriver<HostNicModel, 
HostNicPopupView> {
-    }
-
-    private Driver driver = GWT.create(Driver.class);
-
-    interface ViewUiBinder extends UiBinder<SimpleDialogPanel, 
HostNicPopupView> {
-        ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class);
-    }
-
-    @UiField
-    @Ignore
-    NicLabelWidget labelsWidget;
-
-    @Inject
-    public HostNicPopupView(EventBus eventBus, CommonApplicationResources 
resources) {
-        super(eventBus, resources);
-        initWidget(ViewUiBinder.uiBinder.createAndBindUi(this));
-        driver.initialize(this);
-    }
-
-    @Override
-    public void edit(HostNicModel model) {
-        driver.edit(model);
-        labelsWidget.edit(model.getLabelsModel());
-    }
-
-    @Override
-    public HostNicModel flush() {
-        labelsWidget.flush();
-        return driver.flush();
-    }
-
-    @Override
-    public void focusInput() {
-        super.focusInput();
-        labelsWidget.focusInput();
-    }
-
-}
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostNicPopupView.ui.xml
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostNicPopupView.ui.xml
deleted file mode 100644
index 7b9398d..0000000
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostNicPopupView.ui.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent";>
-<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
-       xmlns:d="urn:import:org.ovirt.engine.ui.common.widget.dialog"
-       
xmlns:h="urn:import:org.ovirt.engine.ui.webadmin.section.main.view.popup.host">
-
-       <d:SimpleDialogPanel width="400px" height="215px" >
-               <d:content>
-                       <h:NicLabelWidget ui:field="labelsWidget" />
-               </d:content>
-       </d:SimpleDialogPanel>
-
-</ui:UiBinder>
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostSetupNetworksPopupView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostSetupNetworksPopupView.java
index 2d634b6..6d2c08b 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostSetupNetworksPopupView.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostSetupNetworksPopupView.java
@@ -6,6 +6,7 @@
 
 import org.ovirt.engine.ui.common.view.popup.AbstractModelBoundPopupView;
 import org.ovirt.engine.ui.common.widget.Align;
+import org.ovirt.engine.ui.common.widget.RadioButtonsHorizontalPanel;
 import org.ovirt.engine.ui.common.widget.dialog.InfoIcon;
 import org.ovirt.engine.ui.common.widget.dialog.SimpleDialogPanel;
 import 
org.ovirt.engine.ui.common.widget.editor.generic.EntityModelCheckBoxEditor;
@@ -13,6 +14,7 @@
 import 
org.ovirt.engine.ui.uicommonweb.models.hosts.network.LogicalNetworkModel;
 import 
org.ovirt.engine.ui.uicommonweb.models.hosts.network.NetworkInterfaceModel;
 import org.ovirt.engine.ui.uicommonweb.models.hosts.network.NetworkItemModel;
+import org.ovirt.engine.ui.uicommonweb.models.hosts.network.NetworkLabelModel;
 import org.ovirt.engine.ui.uicommonweb.models.hosts.network.NetworkOperation;
 import 
org.ovirt.engine.ui.uicommonweb.models.hosts.network.OperationCandidateEventArgs;
 import org.ovirt.engine.ui.uicompat.Event;
@@ -24,7 +26,9 @@
 import org.ovirt.engine.ui.webadmin.ApplicationTemplates;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.HostSetupNetworksPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.host.panels.ExternalNetworkPanel;
-import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.host.panels.ExternalNetworksPanel;
+import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.host.panels.NetworkLabelPanel;
+import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.host.panels.NetworkLabelPanel.NewNetworkLabelPanel;
+import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.host.panels.SimpleNetworkItemsPanel;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.host.panels.InternalNetworkPanel;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.host.panels.InternalNetworksPanel;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.host.panels.NetworkGroup;
@@ -35,9 +39,12 @@
 
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.editor.client.SimpleBeanEditorDriver;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
 import com.google.gwt.event.shared.EventBus;
 import com.google.gwt.uibinder.client.UiBinder;
 import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.user.client.ui.Panel;
 import com.google.inject.Inject;
 
 public class HostSetupNetworksPopupView extends 
AbstractModelBoundPopupView<HostSetupNetworksModel> implements 
HostSetupNetworksPopupPresenterWidget.ViewDef {
@@ -50,10 +57,22 @@
     }
 
     @UiField
+    RadioButtonsHorizontalPanel networksOrLabels;
+
+    @UiField
+    Panel networksPanel;
+
+    @UiField
+    Panel labelsPanel;
+
+    @UiField
     InternalNetworksPanel internalNetworkList;
 
     @UiField
-    ExternalNetworksPanel externalNetworkList;
+    SimpleNetworkItemsPanel<NetworkPanel> externalNetworkList;
+
+    @UiField
+    SimpleNetworkItemsPanel<NetworkLabelPanel> labelsList;
 
     @UiField(provided = true)
     InfoIcon externalNetworksInfo;
@@ -111,14 +130,33 @@
         initStatusPanel();
         checkConnectivity.setContentWidgetContainerStyleName(style.checkCon());
         
commitChanges.setContentWidgetContainerStyleName(style.commitChanges());
-        initUnassignedNetworksPanel();
+        initUnassignedItemsPanel();
         localize();
         driver.initialize(this);
     }
 
-    private void initUnassignedNetworksPanel() {
+    private void initUnassignedItemsPanel() {
         internalNetworkList.setStyle(style);
         externalNetworkList.setStyle(style);
+        labelsList.setStyle(style);
+
+        networksOrLabels.addRadioButton(constants.networksPanel(), true, true, 
new ClickHandler() {
+            @Override
+            public void onClick(ClickEvent event) {
+                onRadioButtonSelection(true);
+            }
+        });
+        networksOrLabels.addRadioButton(constants.labelsPanel(), false, true, 
new ClickHandler() {
+            @Override
+            public void onClick(ClickEvent event) {
+                onRadioButtonSelection(false);
+            }
+        });
+    }
+
+    private void onRadioButtonSelection(boolean networksPanelSelected) {
+        networksPanel.setVisible(networksPanelSelected);
+        labelsPanel.setVisible(!networksPanelSelected);
     }
 
     private void localize() {
@@ -134,14 +172,13 @@
             public void eventRaised(Event<? extends EventArgs> ev, Object 
sender, EventArgs args) {
                 // this is called after both networks and nics were retrieved
                 HostSetupNetworksModel model = (HostSetupNetworksModel) sender;
-                List<LogicalNetworkModel> networks = model.getNetworks();
-                List<NetworkInterfaceModel> nics = model.getNics();
                 if (!keepStatusText) {
                     initStatusPanel();
                 }
                 keepStatusText = false;
-                updateNetworks(networks);
-                updateNics(nics);
+                updateNetworks(model.getNetworks());
+                updateLabels(model.getNewNetworkLabelModel(), 
model.getLabels());
+                updateNics(model.getNics());
                 // mark as rendered
                 rendered = true;
             }
@@ -176,6 +213,7 @@
 
         internalNetworkList.setSetupModel(uicommonModel);
         externalNetworkList.setSetupModel(uicommonModel);
+        labelsList.setSetupModel(uicommonModel);
     }
 
     @Override
@@ -187,8 +225,8 @@
         internalNetworkList.clear();
         externalNetworkList.clear();
         Collections.sort(allNetworks);
-        List<NetworkPanel> staticNetworkPanels = new ArrayList<NetworkPanel>();
-        List<NetworkPanel> dynamicNetworkPanels = new 
ArrayList<NetworkPanel>();
+        List<NetworkPanel> staticNetworkPanels = new ArrayList<>();
+        List<NetworkPanel> dynamicNetworkPanels = new ArrayList<>();
         for (LogicalNetworkModel network : allNetworks) {
             if (network.getNetwork().isExternal()) {
                 dynamicNetworkPanels.add(new ExternalNetworkPanel(network, 
style));
@@ -200,6 +238,21 @@
         externalNetworkList.addAll(dynamicNetworkPanels, !rendered);
     }
 
+    private void updateLabels(NetworkLabelModel newLabelModel, 
List<NetworkLabelModel> labels) {
+        labelsList.clear();
+
+        List<NetworkLabelPanel> labelPanels = new ArrayList<>();
+        labelPanels.add(new NewNetworkLabelPanel(newLabelModel, style));
+
+        Collections.sort(labels);
+        for (NetworkLabelModel label : labels) {
+            if (!label.isAttached()) {
+                labelPanels.add(new NetworkLabelPanel(label, style));
+            }
+        }
+        labelsList.addAll(labelPanels, !rendered);
+    }
+
     private void updateNics(List<NetworkInterfaceModel> nics) {
         nicList.clear();
         Collections.sort(nics);
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostSetupNetworksPopupView.ui.xml
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostSetupNetworksPopupView.ui.xml
index f4547f8..117dad4 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostSetupNetworksPopupView.ui.xml
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostSetupNetworksPopupView.ui.xml
@@ -1,13 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent";>
-<ui:UiBinder 
-    xmlns:ui="urn:ui:com.google.gwt.uibinder"
+<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
     xmlns:g="urn:import:com.google.gwt.user.client.ui"
     xmlns:d="urn:import:org.ovirt.engine.ui.common.widget.dialog"
     xmlns:e="urn:import:org.ovirt.engine.ui.webadmin.widget.editor"
     xmlns:f="urn:import:org.ovirt.engine.ui.webadmin.widget.footer"
     xmlns:ge="urn:import:org.ovirt.engine.ui.common.widget.editor.generic"
-    
xmlns:p="urn:import:org.ovirt.engine.ui.webadmin.section.main.view.popup.host.panels">
+    
xmlns:p="urn:import:org.ovirt.engine.ui.webadmin.section.main.view.popup.host.panels"
+    xmlns:c="urn:import:org.ovirt.engine.ui.common.widget">
 
     <ui:with field='constants' 
type='org.ovirt.engine.ui.webadmin.ApplicationConstants' />
 
@@ -130,13 +130,15 @@
             box-shadow: 1px 1px 1px 1px rgba(33, 33, 33, 0.3);
         }
 
-        .bondPanel {
+        .bondPanel, .labelPanel {
+            cursor: move;
             height: auto;
             background-color: #EFEFEF;
         }
 
-        .bondPanel:HOVER {
-            background-color: #EFEFEF;
+        .newLabelPanel {
+            background-color: white;
+            border-style: dashed;
         }
 
         .groupPanel {
@@ -261,13 +263,13 @@
                 <g:HorizontalPanel width="100%" height="77%" 
verticalAlignment="ALIGN_TOP" addStyleNames="ts10">
                     <g:Cell width="69%" height="100%">
                         <g:VerticalPanel width="100%" 
horizontalAlignment="ALIGN_LEFT">
-                        <g:HorizontalPanel>
-                            <g:Label text="{constants.interfaces}" 
styleName="{style.nicstitle}" />
-                            <g:Label 
text="{constants.assignedLogicalNetworks}" styleName="{style.assignedtitle}" />
-                        </g:HorizontalPanel>
-                        <g:ScrollPanel height="370px">
-                            <e:AnimatedVerticalPanel ui:field="nicList" 
width="100%"  addStyleNames="ts10 {style.allNicsPanel}"/>
-                        </g:ScrollPanel>
+                            <g:HorizontalPanel>
+                                <g:Label text="{constants.interfaces}" 
styleName="{style.nicstitle}" />
+                                <g:Label 
text="{constants.assignedLogicalNetworks}" styleName="{style.assignedtitle}" />
+                            </g:HorizontalPanel>
+                            <g:ScrollPanel height="370px">
+                                <e:AnimatedVerticalPanel ui:field="nicList" 
width="100%"  addStyleNames="ts10 {style.allNicsPanel}"/>
+                            </g:ScrollPanel>
                         </g:VerticalPanel>
                     </g:Cell>
                     <g:Cell width="1%" height="100%">
@@ -275,17 +277,21 @@
                         </g:HTMLPanel>
                     </g:Cell>
                     <g:Cell width="30%" height="100%">
-                        <g:ScrollPanel height="390px">
-                            <g:VerticalPanel width="100%" 
horizontalAlignment="ALIGN_LEFT">
+                        <g:FlowPanel height="390px">
+                            <c:RadioButtonsHorizontalPanel 
ui:field="networksOrLabels" name="networksOrLabels" />
+                            <g:FlowPanel ui:field="networksPanel" width="100%">
                                 <g:Label 
text="{constants.unassignedLogicalNetworks}" 
styleName="{style.unassignedtitle}" />
                                 <p:InternalNetworksPanel 
ui:field="internalNetworkList" />
                                 <g:FlowPanel 
styleName="{style.externalNetworksPanel}" >
                                     <g:Label 
text="{constants.externalLogicalNetworks}" styleName="{style.externaltitle}" />
                                     <d:InfoIcon 
ui:field="externalNetworksInfo" styleName="{style.externalNetworksInfo}" />
                                 </g:FlowPanel>
-                                <p:ExternalNetworksPanel 
ui:field="externalNetworkList"/>
-                            </g:VerticalPanel>
-                        </g:ScrollPanel>
+                                <p:SimpleNetworkItemsPanel 
ui:field="externalNetworkList"/>
+                            </g:FlowPanel>
+                            <g:FlowPanel ui:field="labelsPanel" width="100%" 
visible="false">
+                                <p:SimpleNetworkItemsPanel 
ui:field="labelsList" />
+                            </g:FlowPanel>
+                        </g:FlowPanel>
                     </g:Cell>
                 </g:HorizontalPanel>
                 <g:VerticalPanel addStyleNames="{style.checkBoxesPanel} 
hsnpv_checkBoxesPanel_pfly_fix" >
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/NicLabelEditor.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/NicLabelEditor.java
deleted file mode 100644
index 2d375b8..0000000
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/NicLabelEditor.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package org.ovirt.engine.ui.webadmin.section.main.view.popup.host;
-
-import 
org.ovirt.engine.ui.common.widget.editor.generic.ListModelSuggestBoxEditor;
-import 
org.ovirt.engine.ui.common.widget.uicommon.popup.AbstractModelBoundPopupWidget;
-import org.ovirt.engine.ui.uicommonweb.models.ListModel;
-import org.ovirt.engine.ui.uicompat.Event;
-import org.ovirt.engine.ui.uicompat.EventArgs;
-import org.ovirt.engine.ui.uicompat.IEventListener;
-
-import com.google.gwt.core.shared.GWT;
-import com.google.gwt.dom.client.Style.Unit;
-import com.google.gwt.editor.client.SimpleBeanEditorDriver;
-import com.google.gwt.event.logical.shared.HasValueChangeHandlers;
-import com.google.gwt.event.logical.shared.ValueChangeEvent;
-import com.google.gwt.event.logical.shared.ValueChangeHandler;
-import com.google.gwt.event.shared.HandlerRegistration;
-import com.google.gwt.user.client.ui.Focusable;
-
-public class NicLabelEditor extends 
AbstractModelBoundPopupWidget<ListModel<String>> implements 
HasValueChangeHandlers<ListModel<String>>, Focusable {
-
-    public interface Driver extends SimpleBeanEditorDriver<ListModel<String>, 
NicLabelEditor> {
-    }
-
-    private final Driver driver = GWT.create(Driver.class);
-
-    @Path("selectedItem")
-    protected ListModelSuggestBoxEditor suggestBoxEditor;
-
-    public NicLabelEditor() {
-        suggestBoxEditor = new ListModelSuggestBoxEditor();
-        initWidget(suggestBoxEditor);
-        getElement().getStyle().setMarginTop(5, Unit.PX);
-        getElement().getStyle().setMarginBottom(10, Unit.PX);
-        getElement().getStyle().setMarginRight(15, Unit.PX);
-        driver.initialize(this);
-    }
-
-    @Override
-    public void edit(final ListModel<String> model) {
-        driver.edit(model);
-        model.getSelectedItemChangedEvent().addListener(new 
IEventListener<EventArgs>() {
-
-            @Override
-            public void eventRaised(Event<? extends EventArgs> ev, Object 
sender, EventArgs args) {
-                ValueChangeEvent.fire(NicLabelEditor.this, model);
-            }
-        });
-    }
-
-    @Override
-    public ListModel<String> flush() {
-        return driver.flush();
-    }
-
-    @Override
-    public HandlerRegistration 
addValueChangeHandler(ValueChangeHandler<ListModel<String>> handler) {
-        return addHandler(handler, ValueChangeEvent.getType());
-    }
-
-    @Override
-    public int getTabIndex() {
-        return suggestBoxEditor.getTabIndex();
-    }
-
-    @Override
-    public void setAccessKey(char key) {
-        suggestBoxEditor.setAccessKey(key);
-    }
-
-    @Override
-    public void setFocus(boolean focused) {
-        suggestBoxEditor.setFocus(focused);
-    }
-
-    @Override
-    public void setTabIndex(int index) {
-        suggestBoxEditor.setTabIndex(index);
-    }
-}
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/NicLabelWidget.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/NicLabelWidget.java
deleted file mode 100644
index b4b9ba2..0000000
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/NicLabelWidget.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package org.ovirt.engine.ui.webadmin.section.main.view.popup.host;
-
-import java.util.Collection;
-
-import org.ovirt.engine.ui.common.widget.ScrollableAddRemoveRowWidget;
-import org.ovirt.engine.ui.uicommonweb.models.ListModel;
-import org.ovirt.engine.ui.uicommonweb.models.hosts.NicLabelModel;
-
-import com.google.gwt.core.shared.GWT;
-import com.google.gwt.uibinder.client.UiBinder;
-import com.google.gwt.user.client.ui.Widget;
-
-public class NicLabelWidget extends 
ScrollableAddRemoveRowWidget<NicLabelModel, ListModel<String>, NicLabelEditor> {
-
-    public interface WidgetUiBinder extends UiBinder<Widget, NicLabelWidget> {
-        WidgetUiBinder uiBinder = GWT.create(WidgetUiBinder.class);
-    }
-
-    private Collection<String> suggestions;
-
-    public NicLabelWidget() {
-        initWidget(WidgetUiBinder.uiBinder.createAndBindUi(this));
-    }
-
-    @Override
-    protected NicLabelEditor createWidget(ListModel<String> value) {
-        NicLabelEditor widget = new NicLabelEditor();
-        widget.edit(value);
-        return widget;
-    }
-
-    @Override
-    protected ListModel<String> createGhostValue() {
-        ListModel<String> value = new ListModel<String>();
-        value.setItems(suggestions);
-        value.setSelectedItem(""); //$NON-NLS-1$
-        return value;
-    }
-
-    @Override
-    protected boolean isGhost(ListModel<String> value) {
-        String text = value.getSelectedItem();
-        return text == null || text.isEmpty();
-    }
-
-    @Override
-    public void edit(NicLabelModel model) {
-        suggestions = model.getSuggestedLabels();
-        super.edit(model);
-    }
-
-}
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/NicLabelWidget.ui.xml
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/NicLabelWidget.ui.xml
deleted file mode 100644
index 3acc82d..0000000
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/NicLabelWidget.ui.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent";>
-<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" 
xmlns:g="urn:import:com.google.gwt.user.client.ui">
-
-    <ui:with field='constants' 
type='org.ovirt.engine.ui.webadmin.ApplicationConstants' />
-
-    <ui:style 
type="org.ovirt.engine.ui.common.widget.AddRemoveRowWidget.WidgetStyle">
-        .mainPanel {
-            height: 100%;
-            width: 100%;
-        }
-
-        .buttonStyle {
-            width: 9px;
-            height: 10px;
-            padding-left: 2px;
-            padding-top: 2px;
-            margin-top: 11px;
-            margin-left: 10px;
-        }
-
-        .labelStyle {
-            margin-top: 5px;
-            margin-left: 5px;
-            font-weight: bold;
-        }
-    </ui:style>
-
-    <g:FlowPanel addStyleNames="{style.mainPanel} nlw_mainPanel_pfly_fix" >
-        <g:Label text="{constants.labelsHostPopup}" 
addStyleNames="{style.labelStyle}" />
-        <g:ScrollPanel ui:field="scrollPanel" height="110px">
-            <g:FlowPanel ui:field="contentPanel" />
-        </g:ScrollPanel>
-    </g:FlowPanel>
-
-</ui:UiBinder>
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/SetupNetworksBondPopupView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/SetupNetworksBondPopupView.java
index d5b68f6..3fe2cc7 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/SetupNetworksBondPopupView.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/SetupNetworksBondPopupView.java
@@ -19,11 +19,9 @@
     @Override
     public void edit(final HostBondInterfaceModel object) {
         super.edit(object);
-        labelsWidget.edit(object.getLabelsModel());
 
         bondSuggestEditor.setVisible(true);
         bondEditor.setVisible(false);
-        labelsWidget.setVisible(true);
 
         // hide widgets
         info.setVisible(false);
@@ -32,12 +30,6 @@
         layoutPanel.remove(infoPanel);
         layoutPanel.getElement().getStyle().setOverflow(Overflow.HIDDEN);
         asPopupPanel().setPixelSize(400, 275);
-    }
-
-    @Override
-    public HostBondInterfaceModel flush() {
-        labelsWidget.flush();
-        return super.flush();
     }
 
 }
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/SetupNetworksLabelPopupPresenterWidget.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/SetupNetworksLabelPopupPresenterWidget.java
new file mode 100644
index 0000000..d011583
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/SetupNetworksLabelPopupPresenterWidget.java
@@ -0,0 +1,19 @@
+package org.ovirt.engine.ui.webadmin.section.main.view.popup.host;
+
+import 
org.ovirt.engine.ui.common.presenter.AbstractModelBoundPopupPresenterWidget;
+import org.ovirt.engine.ui.uicommonweb.models.hosts.SetupNetworksLabelModel;
+
+import com.google.gwt.event.shared.EventBus;
+import com.google.inject.Inject;
+
+public class SetupNetworksLabelPopupPresenterWidget extends 
AbstractModelBoundPopupPresenterWidget<SetupNetworksLabelModel, 
SetupNetworksLabelPopupPresenterWidget.ViewDef> {
+
+    public interface ViewDef extends 
AbstractModelBoundPopupPresenterWidget.ViewDef<SetupNetworksLabelModel> {
+    }
+
+    @Inject
+    public SetupNetworksLabelPopupPresenterWidget(EventBus eventBus, ViewDef 
view) {
+        super(eventBus, view);
+    }
+
+}
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/SetupNetworksLabelPopupView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/SetupNetworksLabelPopupView.java
new file mode 100644
index 0000000..daf54cb
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/SetupNetworksLabelPopupView.java
@@ -0,0 +1,58 @@
+package org.ovirt.engine.ui.webadmin.section.main.view.popup.host;
+
+import org.ovirt.engine.ui.common.view.popup.AbstractModelBoundPopupView;
+import org.ovirt.engine.ui.common.widget.dialog.SimpleDialogPanel;
+import 
org.ovirt.engine.ui.common.widget.editor.generic.StringEntityModelTextBoxEditor;
+import org.ovirt.engine.ui.uicommonweb.models.hosts.SetupNetworksLabelModel;
+import org.ovirt.engine.ui.webadmin.ApplicationConstants;
+import org.ovirt.engine.ui.webadmin.ApplicationResources;
+
+import com.google.gwt.core.shared.GWT;
+import com.google.gwt.dom.client.Style.Unit;
+import com.google.gwt.editor.client.SimpleBeanEditorDriver;
+import com.google.gwt.event.shared.EventBus;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.uibinder.client.UiField;
+import com.google.inject.Inject;
+
+public class SetupNetworksLabelPopupView extends 
AbstractModelBoundPopupView<SetupNetworksLabelModel> implements 
SetupNetworksLabelPopupPresenterWidget.ViewDef {
+
+    interface Driver extends SimpleBeanEditorDriver<SetupNetworksLabelModel, 
SetupNetworksLabelPopupView> {
+    }
+
+    interface ViewUiBinder extends UiBinder<SimpleDialogPanel, 
SetupNetworksLabelPopupView> {
+        ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class);
+    }
+
+    @UiField
+    @Path(value = "label.entity")
+    StringEntityModelTextBoxEditor label;
+
+    private final Driver driver = GWT.create(Driver.class);
+
+    @Inject
+    public SetupNetworksLabelPopupView(EventBus eventBus, ApplicationConstants 
constants, ApplicationResources resources) {
+        super(eventBus, resources);
+        initWidget(ViewUiBinder.uiBinder.createAndBindUi(this));
+        driver.initialize(this);
+        label.setLabel(constants.setupNetworksNewLabel());
+        
label.getContentWidgetContainer().getElement().getStyle().setWidth(120, 
Unit.PX);
+    }
+
+    @Override
+    public void edit(SetupNetworksLabelModel object) {
+        driver.edit(object);
+    }
+
+    @Override
+    public SetupNetworksLabelModel flush() {
+        return driver.flush();
+    }
+
+    @Override
+    public void focusInput() {
+        super.focusInput();
+        label.setFocus(true);
+    }
+
+}
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/SetupNetworksLabelPopupView.ui.xml
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/SetupNetworksLabelPopupView.ui.xml
new file mode 100644
index 0000000..bcb80c9
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/SetupNetworksLabelPopupView.ui.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent";>
+<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" 
xmlns:d="urn:import:org.ovirt.engine.ui.common.widget.dialog" 
xmlns:g="urn:import:org.ovirt.engine.ui.common.widget.editor.generic">
+
+    <ui:style>
+        .labelStyle {
+            margin-top: 5px;
+        }
+    </ui:style>
+    
+    <d:SimpleDialogPanel width="230px" height="115px">
+        <d:content>
+               <g:StringEntityModelTextBoxEditor ui:field="label" 
addStyleNames="{style.labelStyle}" />
+        </d:content>
+    </d:SimpleDialogPanel>
+
+</ui:UiBinder>
\ No newline at end of file
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/ExternalNetworksPanel.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/ExternalNetworksPanel.java
deleted file mode 100644
index a2d231f..0000000
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/ExternalNetworksPanel.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package org.ovirt.engine.ui.webadmin.section.main.view.popup.host.panels;
-
-import java.util.Collections;
-import java.util.List;
-
-import com.google.gwt.user.client.ui.VerticalPanel;
-
-public class ExternalNetworksPanel extends UnassignedNetworksPanel {
-
-    private VerticalPanel externalNetworksPanel = new VerticalPanel();
-
-    @Override
-    public void setStyle(NetworkPanelsStyle style) {
-        super.setStyle(style);
-        stylePanel(externalNetworksPanel);
-    }
-
-    @Override
-    public void addAll(List<NetworkPanel> list, boolean fadeIn) {
-        for (NetworkPanel networkPanel : list) {
-            externalNetworksPanel.add(networkPanel);
-        }
-        animatedPanel.addAll(Collections.singletonList(externalNetworksPanel), 
fadeIn);
-    }
-
-    @Override
-    public void clear() {
-        super.clear();
-        externalNetworksPanel.clear();
-    }
-
-}
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/InternalNetworksPanel.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/InternalNetworksPanel.java
index ec5b0bd..9e5d3ae 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/InternalNetworksPanel.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/InternalNetworksPanel.java
@@ -9,7 +9,7 @@
 import com.google.gwt.user.client.ui.SimplePanel;
 import com.google.gwt.user.client.ui.VerticalPanel;
 
-public class InternalNetworksPanel extends UnassignedNetworksPanel {
+public class InternalNetworksPanel extends 
UnassignedNetworksPanel<NetworkPanel> {
 
     private final VerticalPanel requiredPanel = new VerticalPanel();
     private final VerticalPanel nonRequiredPanel = new VerticalPanel();
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NetworkGroup.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NetworkGroup.java
index 5594534..49993ae 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NetworkGroup.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NetworkGroup.java
@@ -65,7 +65,7 @@
 
         // rows
         FlexCellFormatter flexCellFormatter = table.getFlexCellFormatter();
-        flexCellFormatter.setRowSpan(0, 1, networkSize > 1 ? networkSize : 1);
+        flexCellFormatter.setRowSpan(0, 1, Math.max(networkSize, 1));
 
         // nic
         if (nicModel instanceof BondNetworkInterfaceModel) {
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NetworkLabelPanel.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NetworkLabelPanel.java
index 917dc4e..29244d1 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NetworkLabelPanel.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NetworkLabelPanel.java
@@ -16,7 +16,11 @@
 public class NetworkLabelPanel extends NetworkItemPanel<NetworkLabelModel> {
 
     public NetworkLabelPanel(NetworkLabelModel item, NetworkPanelsStyle style) 
{
-        super(item, style, false);
+        super(item, style, true);
+    }
+
+    protected void addClassName() {
+        getElement().addClassName(style.labelPanel());
     }
 
     @Override
@@ -37,7 +41,7 @@
         LabelWithTextTruncation titleLabel = new 
LabelWithTextTruncation(item.getName());
         titleLabel.setWidth("185px"); //$NON-NLS-1$
         titleLabel.setHeight("100%"); //$NON-NLS-1$
-        Image labelImage = new Image(resources.bond());
+        Image labelImage = new Image(resources.tagImage());
 
         titleRow.setWidget(0, 0, labelImage);
         titleRow.setWidget(0, 1, titleLabel);
@@ -45,7 +49,8 @@
         titleRow.addStyleName("tp3"); //$NON-NLS-1$
         vPanel.add(titleRow);
 
-        getElement().addClassName(style.bondPanel());
+        addClassName();
+
         List<LogicalNetworkModel> networks = item.getNetworks();
         Collections.sort(networks);
 
@@ -63,4 +68,17 @@
         // Do nothing
     }
 
+    public static class NewNetworkLabelPanel extends NetworkLabelPanel {
+
+        public NewNetworkLabelPanel(NetworkLabelModel item, NetworkPanelsStyle 
style) {
+            super(item, style);
+        }
+
+        @Override
+        protected void addClassName() {
+            super.addClassName();
+            getElement().addClassName(style.newLabelPanel());
+        }
+    }
+
 }
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NetworkPanelsStyle.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NetworkPanelsStyle.java
index 817ddb2..aa0f001 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NetworkPanelsStyle.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NetworkPanelsStyle.java
@@ -9,6 +9,10 @@
 
     String bondPanel();
 
+    String labelPanel();
+
+    String newLabelPanel();
+
     String emptyPanel();
 
     String emptyPanelLabel();
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NicPanel.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NicPanel.java
index f9305c5..f0fc794 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NicPanel.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/NicPanel.java
@@ -47,7 +47,6 @@
         }
         rowPanel.setWidget(0, 2, nicImage);
         rowPanel.setWidget(0, 3, titleLabel);
-        rowPanel.setWidget(0, 4, actionButton);
         return rowPanel;
     }
 
@@ -66,6 +65,6 @@
 
     @Override
     protected void onAction() {
-       item.edit();
+       // Do nothing
     }
 }
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/SimpleNetworkItemsPanel.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/SimpleNetworkItemsPanel.java
new file mode 100644
index 0000000..f75dbb0
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/SimpleNetworkItemsPanel.java
@@ -0,0 +1,32 @@
+package org.ovirt.engine.ui.webadmin.section.main.view.popup.host.panels;
+
+import java.util.Collections;
+import java.util.List;
+
+import com.google.gwt.user.client.ui.VerticalPanel;
+
+public class SimpleNetworkItemsPanel<T extends NetworkItemPanel<?>> extends 
UnassignedNetworksPanel<T> {
+
+    private VerticalPanel itemsPanel = new VerticalPanel();
+
+    @Override
+    public void setStyle(NetworkPanelsStyle style) {
+        super.setStyle(style);
+        stylePanel(itemsPanel);
+    }
+
+    @Override
+    public void addAll(List<T> list, boolean fadeIn) {
+        for (T panel : list) {
+            itemsPanel.add(panel);
+        }
+        animatedPanel.addAll(Collections.singletonList(itemsPanel), fadeIn);
+    }
+
+    @Override
+    public void clear() {
+        super.clear();
+        itemsPanel.clear();
+    }
+
+}
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/UnassignedNetworksPanel.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/UnassignedNetworksPanel.java
index 8fe1998..f022614 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/UnassignedNetworksPanel.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/panels/UnassignedNetworksPanel.java
@@ -20,7 +20,7 @@
 import com.google.gwt.user.client.ui.FocusPanel;
 import com.google.gwt.user.client.ui.VerticalPanel;
 
-public abstract class UnassignedNetworksPanel extends FocusPanel {
+public abstract class UnassignedNetworksPanel<T extends NetworkItemPanel<?>> 
extends FocusPanel {
 
     protected final ApplicationConstants constants = 
ClientGinjectorProvider.getApplicationConstants();
     protected final AnimatedVerticalPanel animatedPanel = new 
AnimatedVerticalPanel();
@@ -82,7 +82,7 @@
         panel.setWidth("100%"); //$NON-NLS-1$
     }
 
-    public abstract void addAll(List<NetworkPanel> list, boolean fadeIn);
+    public abstract void addAll(List<T> list, boolean fadeIn);
 
     @Override
     public void clear() {


-- 
To view, visit https://gerrit.ovirt.org/38773
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I762d06545f621c7a83896f9fa7c59f7b54e2e7ee
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Lior Vernia <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to