diff --git a/include/VirtualNetwork.h b/include/VirtualNetwork.h
index be02e86954..b398b8aee2 100644
--- a/include/VirtualNetwork.h
+++ b/include/VirtualNetwork.h
@@ -208,6 +208,11 @@ private:
      */
     string  vlan_id;
 
+    /**
+     *  Whether or not to isolate this network with the vnm driver
+     */
+    int     vlan;
+
     // -------------------------------------------------------------------------
     // Virtual Network Description
     // -------------------------------------------------------------------------
diff --git a/src/cli/one_helper/onevnet_helper.rb b/src/cli/one_helper/onevnet_helper.rb
index 07a4dab8e9..6abd1a60dd 100644
--- a/src/cli/one_helper/onevnet_helper.rb
+++ b/src/cli/one_helper/onevnet_helper.rb
@@ -56,6 +56,11 @@ class OneVNetHelper < OpenNebulaHelper::OneHelper
         puts str % ["USER", vn['UNAME']]
         puts str % ["GROUP", vn['GNAME']]
         puts str % ["PUBLIC", OpenNebulaHelper.boolean_to_str(vn['PUBLIC'])]
+        puts str % ["TYPE", vn.type_str]
+        puts str % ["BRIDGE", vn["BRIDGE"]]
+        puts str % ["VLAN", OpenNebulaHelper.boolean_to_str(vn['VLAN'])]
+        puts str % ["PHYSICAL DEVICE", vn["PHYDEV"]] if vn["PHYDEV"]
+        puts str % ["VLAN ID", vn["VLAN_ID"]] if vn["VLAN_ID"]
         puts str % ["USED LEASES", vn['TOTAL_LEASES']]
 
         puts
diff --git a/src/vnm/VirtualNetwork.cc b/src/vnm/VirtualNetwork.cc
index 520ba533b5..77762d0830 100644
--- a/src/vnm/VirtualNetwork.cc
+++ b/src/vnm/VirtualNetwork.cc
@@ -25,6 +25,8 @@
 
 #include "AuthManager.h"
 
+#define TO_UPPER(S) transform(S.begin(),S.end(),S.begin(),(int(*)(int))toupper)
+
 /* ************************************************************************** */
 /* Virtual Network :: Constructor/Destructor                                  */
 /* ************************************************************************** */
@@ -207,6 +209,7 @@ int VirtualNetwork::insert(SqlDB * db, string& error_str)
     int             rc;
 
     string          pub;
+    string          vlan_attr;
     string          s_type;
 
     unsigned int default_size = VirtualNetworkPool::default_size();
@@ -219,7 +222,7 @@ int VirtualNetwork::insert(SqlDB * db, string& error_str)
     // ------------ TYPE ----------------------
     erase_template_attribute("TYPE",s_type);
 
-    transform(s_type.begin(),s_type.end(),s_type.begin(),(int(*)(int))toupper);
+    TO_UPPER(s_type);
 
     if (s_type == "RANGED")
     {
@@ -255,6 +258,14 @@ int VirtualNetwork::insert(SqlDB * db, string& error_str)
 
     erase_template_attribute("VLAN_ID",vlan_id);
 
+    // ------------ VLAN ----------------------
+
+    erase_template_attribute("VLAN", vlan_attr);
+
+    TO_UPPER(vlan_attr);
+
+    vlan = (vlan_attr == "YES");
+
     // ------------ BRIDGE --------------------
 
     erase_template_attribute("BRIDGE",bridge);
@@ -272,7 +283,6 @@ int VirtualNetwork::insert(SqlDB * db, string& error_str)
             oss << "onebr" << oid;
  
             bridge = oss.str();
-            replace_template_attribute("BRIDGE",bridge);
         }
     }
 
@@ -280,7 +290,7 @@ int VirtualNetwork::insert(SqlDB * db, string& error_str)
 
     erase_template_attribute("PUBLIC", pub);
 
-    transform (pub.begin(), pub.end(), pub.begin(), (int(*)(int))toupper);
+    TO_UPPER(pub);
 
     public_obj = (pub == "YES");
 
@@ -515,7 +525,8 @@ string& VirtualNetwork::to_xml_extended(string& xml, bool extended) const
             "<GNAME>"  << gname  << "</GNAME>" <<
             "<NAME>"   << name   << "</NAME>"  <<
             "<TYPE>"   << type   << "</TYPE>"  <<
-            "<BRIDGE>" << bridge << "</BRIDGE>";
+            "<BRIDGE>" << bridge << "</BRIDGE>"<<
+            "<VLAN>"   << vlan   << "</VLAN>";
 
     if (!phydev.empty())
     {
@@ -566,6 +577,7 @@ int VirtualNetwork::from_xml(const string &xml_str)
     rc += xpath(int_type,   "/VNET/TYPE",   -1);
     rc += xpath(bridge,     "/VNET/BRIDGE", "not_found");
     rc += xpath(public_obj, "/VNET/PUBLIC", 0);
+    rc += xpath(vlan,       "/VNET/VLAN",   0);
     
     xpath(phydev,  "/VNET/PHYDEV", "");
     xpath(vlan_id, "/VNET/VLAN_ID","");
@@ -636,6 +648,15 @@ int VirtualNetwork::nic_attribute(VectorAttribute *nic, int vid)
     nic->replace("MAC"       ,mac);
     nic->replace("IP"        ,ip);
 
+    if ( vlan == 1 )
+    {
+        nic->replace("VLAN", "YES");
+    }
+    else
+    {
+        nic->replace("VLAN", "NO");
+    }
+
     if (!phydev.empty())
     {
         nic->replace("PHYDEV", phydev);
diff --git a/src/vnm/test/VirtualNetworkPoolTest.cc b/src/vnm/test/VirtualNetworkPoolTest.cc
index e7854565e1..033a188943 100644
--- a/src/vnm/test/VirtualNetworkPoolTest.cc
+++ b/src/vnm/test/VirtualNetworkPoolTest.cc
@@ -71,18 +71,18 @@ const string templates[] =
 
 const string xmls[] =
 {
-    "<VNET><ID>0</ID><UID>123</UID><GID>0</GID><UNAME>the_user</UNAME><GNAME>oneadmin</GNAME><NAME>Net number one</NAME><TYPE>1</TYPE><BRIDGE>br1</BRIDGE><PUBLIC>0</PUBLIC><TOTAL_LEASES>0</TOTAL_LEASES><TEMPLATE></TEMPLATE><LEASES><LEASE><IP>130.10.0.1</IP><MAC>50:20:20:20:20:20</MAC><USED>0</USED><VID>-1</VID></LEASE></LEASES></VNET>",
+    "<VNET><ID>0</ID><UID>123</UID><GID>0</GID><UNAME>the_user</UNAME><GNAME>oneadmin</GNAME><NAME>Net number one</NAME><TYPE>1</TYPE><BRIDGE>br1</BRIDGE><VLAN>0</VLAN><PUBLIC>0</PUBLIC><TOTAL_LEASES>0</TOTAL_LEASES><TEMPLATE></TEMPLATE><LEASES><LEASE><IP>130.10.0.1</IP><MAC>50:20:20:20:20:20</MAC><USED>0</USED><VID>-1</VID></LEASE></LEASES></VNET>",
 
-    "<VNET><ID>1</ID><UID>261</UID><GID>0</GID><UNAME>the_user</UNAME><GNAME>oneadmin</GNAME><NAME>A virtual network</NAME><TYPE>0</TYPE><BRIDGE>br0</BRIDGE><PUBLIC>1</PUBLIC><TOTAL_LEASES>0</TOTAL_LEASES><TEMPLATE><NETWORK_ADDRESS><![CDATA[192.168.0.0]]></NETWORK_ADDRESS><NETWORK_SIZE><![CDATA[C]]></NETWORK_SIZE></TEMPLATE><LEASES></LEASES></VNET>",
+    "<VNET><ID>1</ID><UID>261</UID><GID>0</GID><UNAME>the_user</UNAME><GNAME>oneadmin</GNAME><NAME>A virtual network</NAME><TYPE>0</TYPE><BRIDGE>br0</BRIDGE><VLAN>0</VLAN><PUBLIC>1</PUBLIC><TOTAL_LEASES>0</TOTAL_LEASES><TEMPLATE><NETWORK_ADDRESS><![CDATA[192.168.0.0]]></NETWORK_ADDRESS><NETWORK_SIZE><![CDATA[C]]></NETWORK_SIZE></TEMPLATE><LEASES></LEASES></VNET>",
 
-    "<VNET><ID>0</ID><UID>133</UID><GID>0</GID><UNAME>the_user</UNAME><GNAME>oneadmin</GNAME><NAME>Net number two</NAME><TYPE>1</TYPE><BRIDGE>br1</BRIDGE><PUBLIC>0</PUBLIC><TOTAL_LEASES>0</TOTAL_LEASES><TEMPLATE></TEMPLATE><LEASES><LEASE><IP>130.10.2.1</IP><MAC>50:20:20:20:20:20</MAC><USED>0</USED><VID>-1</VID></LEASE></LEASES></VNET>",
+    "<VNET><ID>0</ID><UID>133</UID><GID>0</GID><UNAME>the_user</UNAME><GNAME>oneadmin</GNAME><NAME>Net number two</NAME><TYPE>1</TYPE><BRIDGE>br1</BRIDGE><VLAN>0</VLAN><PUBLIC>0</PUBLIC><TOTAL_LEASES>0</TOTAL_LEASES><TEMPLATE></TEMPLATE><LEASES><LEASE><IP>130.10.2.1</IP><MAC>50:20:20:20:20:20</MAC><USED>0</USED><VID>-1</VID></LEASE></LEASES></VNET>",
 };
 
 const string xml_dump =
-    "<VNET_POOL><VNET><ID>0</ID><UID>1</UID><GID>0</GID><UNAME>the_user</UNAME><GNAME>oneadmin</GNAME><NAME>Net number one</NAME><TYPE>1</TYPE><BRIDGE>br1</BRIDGE><PUBLIC>0</PUBLIC><TOTAL_LEASES>0</TOTAL_LEASES><TEMPLATE></TEMPLATE></VNET><VNET><ID>1</ID><UID>2</UID><GID>0</GID><UNAME>the_user</UNAME><GNAME>oneadmin</GNAME><NAME>A virtual network</NAME><TYPE>0</TYPE><BRIDGE>br0</BRIDGE><PUBLIC>1</PUBLIC><TOTAL_LEASES>0</TOTAL_LEASES><TEMPLATE><NETWORK_ADDRESS><![CDATA[192.168.0.0]]></NETWORK_ADDRESS><NETWORK_SIZE><![CDATA[C]]></NETWORK_SIZE></TEMPLATE></VNET></VNET_POOL>";
+    "<VNET_POOL><VNET><ID>0</ID><UID>1</UID><GID>0</GID><UNAME>the_user</UNAME><GNAME>oneadmin</GNAME><NAME>Net number one</NAME><TYPE>1</TYPE><BRIDGE>br1</BRIDGE><VLAN>0</VLAN><PUBLIC>0</PUBLIC><TOTAL_LEASES>0</TOTAL_LEASES><TEMPLATE></TEMPLATE></VNET><VNET><ID>1</ID><UID>2</UID><GID>0</GID><UNAME>the_user</UNAME><GNAME>oneadmin</GNAME><NAME>A virtual network</NAME><TYPE>0</TYPE><BRIDGE>br0</BRIDGE><VLAN>0</VLAN><PUBLIC>1</PUBLIC><TOTAL_LEASES>0</TOTAL_LEASES><TEMPLATE><NETWORK_ADDRESS><![CDATA[192.168.0.0]]></NETWORK_ADDRESS><NETWORK_SIZE><![CDATA[C]]></NETWORK_SIZE></TEMPLATE></VNET></VNET_POOL>";
 
 const string xml_dump_where =
-    "<VNET_POOL><VNET><ID>1</ID><UID>2</UID><GID>0</GID><UNAME>the_user</UNAME><GNAME>oneadmin</GNAME><NAME>A virtual network</NAME><TYPE>0</TYPE><BRIDGE>br0</BRIDGE><PUBLIC>1</PUBLIC><TOTAL_LEASES>0</TOTAL_LEASES><TEMPLATE><NETWORK_ADDRESS><![CDATA[192.168.0.0]]></NETWORK_ADDRESS><NETWORK_SIZE><![CDATA[C]]></NETWORK_SIZE></TEMPLATE></VNET></VNET_POOL>";
+    "<VNET_POOL><VNET><ID>1</ID><UID>2</UID><GID>0</GID><UNAME>the_user</UNAME><GNAME>oneadmin</GNAME><NAME>A virtual network</NAME><TYPE>0</TYPE><BRIDGE>br0</BRIDGE><VLAN>0</VLAN><PUBLIC>1</PUBLIC><TOTAL_LEASES>0</TOTAL_LEASES><TEMPLATE><NETWORK_ADDRESS><![CDATA[192.168.0.0]]></NETWORK_ADDRESS><NETWORK_SIZE><![CDATA[C]]></NETWORK_SIZE></TEMPLATE></VNET></VNET_POOL>";
 
 /* ************************************************************************* */
 /* ************************************************************************* */
@@ -310,8 +310,8 @@ public:
             };
 
         string phydev_xml[] = {
-            "<VNET><ID>0</ID><UID>0</UID><GID>0</GID><UNAME>the_user</UNAME><GNAME>oneadmin</GNAME><NAME>BRIDGE and PHYDEV</NAME><TYPE>1</TYPE><BRIDGE>br0</BRIDGE><PHYDEV>eth0</PHYDEV><PUBLIC>0</PUBLIC><TOTAL_LEASES>0</TOTAL_LEASES><TEMPLATE></TEMPLATE><LEASES><LEASE><IP>130.10.0.1</IP><MAC>50:20:20:20:20:20</MAC><USED>0</USED><VID>-1</VID></LEASE></LEASES></VNET>",
-            "<VNET><ID>1</ID><UID>0</UID><GID>0</GID><UNAME>the_user</UNAME><GNAME>oneadmin</GNAME><NAME>No BRIDGE only PHYDEV</NAME><TYPE>1</TYPE><BRIDGE>onebr1</BRIDGE><PHYDEV>eth0</PHYDEV><PUBLIC>0</PUBLIC><TOTAL_LEASES>0</TOTAL_LEASES><TEMPLATE><BRIDGE><![CDATA[onebr1]]></BRIDGE></TEMPLATE><LEASES><LEASE><IP>130.10.0.1</IP><MAC>50:20:20:20:20:20</MAC><USED>0</USED><VID>-1</VID></LEASE></LEASES></VNET>"
+            "<VNET><ID>0</ID><UID>0</UID><GID>0</GID><UNAME>the_user</UNAME><GNAME>oneadmin</GNAME><NAME>BRIDGE and PHYDEV</NAME><TYPE>1</TYPE><BRIDGE>br0</BRIDGE><VLAN>0</VLAN><PHYDEV>eth0</PHYDEV><PUBLIC>0</PUBLIC><TOTAL_LEASES>0</TOTAL_LEASES><TEMPLATE></TEMPLATE><LEASES><LEASE><IP>130.10.0.1</IP><MAC>50:20:20:20:20:20</MAC><USED>0</USED><VID>-1</VID></LEASE></LEASES></VNET>",
+            "<VNET><ID>1</ID><UID>0</UID><GID>0</GID><UNAME>the_user</UNAME><GNAME>oneadmin</GNAME><NAME>No BRIDGE only PHYDEV</NAME><TYPE>1</TYPE><BRIDGE>onebr1</BRIDGE><VLAN>0</VLAN><PHYDEV>eth0</PHYDEV><PUBLIC>0</PUBLIC><TOTAL_LEASES>0</TOTAL_LEASES><TEMPLATE></TEMPLATE><LEASES><LEASE><IP>130.10.0.1</IP><MAC>50:20:20:20:20:20</MAC><USED>0</USED><VID>-1</VID></LEASE></LEASES></VNET>"
         };
 
         // test vm with bridge and phydev
diff --git a/src/vnm_mad/remotes/OpenNebulaNetwork.rb b/src/vnm_mad/remotes/OpenNebulaNetwork.rb
index 25cf31d8be..79c8e14fa4 100644
--- a/src/vnm_mad/remotes/OpenNebulaNetwork.rb
+++ b/src/vnm_mad/remotes/OpenNebulaNetwork.rb
@@ -42,11 +42,8 @@ COMMANDS = {
   :lsmod    => "/sbin/lsmod"
 }
 
-#
-#
-#
 class VM
-    attr_accessor :nics, :filtered_nics, :vm_info
+    attr_accessor :nics, :vm_info
 
     def initialize(vm_root, hypervisor)
         @vm_root    = vm_root
@@ -55,7 +52,7 @@ class VM
 
         nics = Nics.new(@hypervisor)
 
-        @vm_root.elements.each("TEMPLATE/NIC") do |nic_element|
+        @vm_root.elements.each("TEMPLATE/NIC[VLAN=yes]") do |nic_element|
             nic =  nics.new_nic
 
             nic_element.elements.each('*') do |nic_attribute|
@@ -69,21 +66,12 @@ class VM
             nics << nic
         end
 
-        @nics          = nics
-        @filtered_nics = nics
-    end
-
-    def filter(*filter)
-       @filtered_nics = @nics.get(*filter)
-    end
-
-    def unfilter
-       @filtered_nics = @nics
+        @nics = nics
     end
 
     def each_nic(block)
-        if @filtered_nics != nil
-            @filtered_nics.each do |the_nic|
+        if @nics != nil
+            @nics.each do |the_nic|
                 block.call(the_nic)
             end
         end
@@ -118,16 +106,6 @@ class OpenNebulaNetwork
         @vm = VM.new(REXML::Document.new(vm_tpl).root, @hypervisor)
     end
 
-    def filter(*filter)
-        @vm.filter(*filter)
-        self
-    end
-
-    def unfilter
-        @vm.unfilter
-        self
-    end
-
     def process(&block)
         @vm.each_nic(block)
     end
diff --git a/src/vnm_mad/remotes/OpenNebulaNic.rb b/src/vnm_mad/remotes/OpenNebulaNic.rb
index d2916a91bd..2872de52ee 100644
--- a/src/vnm_mad/remotes/OpenNebulaNic.rb
+++ b/src/vnm_mad/remotes/OpenNebulaNic.rb
@@ -28,54 +28,6 @@ class Nics < Array
     def new_nic
         @nicClass.new
     end
-
-    # finds nics that match 'args'
-    # 'args' can be a Hash, or an array
-    #  args example:
-    #       {:mac => "02:00:C0:A8:01:01", :bridge => "br0"}
-    #       :mac,  "02:00:C0:A8:01:01"
-    #  key values may also be an array:
-    #       {:mac => "02:00:C0:A8:01:01", :bridge => ["br0","br1"]}
-    def get(*args)
-        if args.length == 2
-            dict = Hash.new
-            dict[args[0]] = args[1]
-        elsif args.length == 1
-            dict = args[0]
-        else
-            return nil
-        end
-
-        matching = Array.new
-        self.each do |e|
-            e_filter = Hash.new
-            dict.each_key{|k| e_filter[k] = e[k]}
-            if compare(e_filter,dict)
-                matching << e
-            end
-        end
-
-        if matching.empty?
-            nil
-        else
-            matching
-        end
-    end
-
-    def compare(hash1, hash2)
-        #hash1 has a single value per key
-        #hash2 may contain an array of values
-        hash1.each do |k,v|
-            return false if !hash2[k]
-            v2 = hash2[k]
-            if hash2[k].kind_of?(Array)
-                return false if !v2.include? v
-            else
-                return false if v != v2
-            end
-        end
-        true
-    end
 end
 
 
diff --git a/src/vnm_mad/remotes/ebtables/post b/src/vnm_mad/remotes/ebtables/post
index e69f291c26..c142e41a2f 100755
--- a/src/vnm_mad/remotes/ebtables/post
+++ b/src/vnm_mad/remotes/ebtables/post
@@ -21,10 +21,5 @@ $: << File.join(File.dirname(__FILE__), "..")
 
 require 'Ebtables'
 
-# Uncomment to act only on the listed bridges.
-#FILTERED_BRIDGES = ['br0']
-
 onevlan = EbtablesVLAN.from_base64(ARGV[0])
-
-onevlan.filter(:bridge => FILTERED_BRIDGES) if defined? FILTERED_BRIDGES
 exit onevlan.activate