diff --git a/network/forms.py b/network/forms.py
index a0847b0..54913ab 100644
--- a/network/forms.py
+++ b/network/forms.py
@@ -5,7 +5,7 @@ from crispy_forms.helper import FormHelper
 from crispy_forms.layout import Layout, Fieldset, Row, HTML
 from crispy_forms.layout import Div, ButtonHolder, Submit, BaseInput
 
-from firewall.models import Host
+from firewall.models import Host, Vlan
 
 
 class LinkButton(BaseInput):
@@ -68,3 +68,58 @@ class HostForm(ModelForm):
 
     class Meta:
         model = Host
+
+
+class VlanForm(ModelForm):
+    helper = FormHelper()
+    helper.layout = Layout(
+        Div(
+            Row(
+                Div(
+                    Fieldset(
+                        'Identity',
+                        'name',
+                        'vid',
+                        'interface',
+                    ),
+                    Fieldset(
+                        'IPv4',
+                        'net4',
+                        'prefix4',
+                        'ipv4',
+                        'snat_to',
+                        'snat_ip',
+                        'dhcp_pool',
+                    ),
+                    Fieldset(
+                        'IPv6',
+                        'net6',
+                        'prefix6',
+                        'ipv6',
+                    ),
+                    Fieldset(
+                        'Domain name service',
+                        'domain',
+                        'reverse_domain',
+                    ),
+                    Fieldset(
+                        'Info',
+                        'description',
+                        'comment',
+                        # 'created_at',
+                        # 'modified_at',
+                    ),
+                    css_class='span8'),
+                Div(
+                    HTML('<p>hello</p>'),
+                    css_class='span4'),
+            ),
+            ButtonHolder(
+                Submit('submit', 'Save'),
+                LinkButton('back', 'Back', reverse_lazy(
+                    'network.host_list'))
+            ),
+            css_class="form-horizontal"))
+
+    class Meta:
+        model = Vlan
diff --git a/network/tables.py b/network/tables.py
index c51a72c..6a3e271 100644
--- a/network/tables.py
+++ b/network/tables.py
@@ -1,7 +1,8 @@
 from django_tables2 import Table, A
 from django_tables2.columns import LinkColumn
 
-from firewall.models import Host
+from firewall.models import Host, Vlan
+
 
 class HostTable(Table):
     hostname = LinkColumn('network.host', args=[A('pk')])
@@ -12,3 +13,12 @@ class HostTable(Table):
         fields = ('hostname', 'vlan', 'mac', 'ipv4', 'ipv6',
                   'pub_ipv4', 'created_at', 'owner', )
 
+
+class VlanTable(Table):
+    name = LinkColumn('network.vlan', args=[A('pk')])
+
+    class Meta:
+        model = Vlan
+        attrs = {'class': 'table table-striped table-condensed'}
+        fields = ('vid', 'name', 'interface', 'ipv4', 'ipv6', 'domain', )
+        order_by = 'vid'
diff --git a/network/templates/network/vlan-edit.html b/network/templates/network/vlan-edit.html
new file mode 100644
index 0000000..d1d986c
--- /dev/null
+++ b/network/templates/network/vlan-edit.html
@@ -0,0 +1,14 @@
+{% extends "network/base.html" %}
+{% load render_table from django_tables2 %}
+{% load i18n %}
+{% load l10n %}
+{% load staticfiles %}
+{% load crispy_forms_tags %}
+
+{% block content %}
+<div class="page-heading">
+  <h1>{{ form.hostname.value }} <small>details of host</small></h1>
+</div>
+
+{% crispy form %}
+{% endblock %}
diff --git a/network/templates/network/vlan-list.html b/network/templates/network/vlan-list.html
new file mode 100644
index 0000000..e4229e6
--- /dev/null
+++ b/network/templates/network/vlan-list.html
@@ -0,0 +1,13 @@
+{% extends "network/base.html" %}
+{% load render_table from django_tables2 %}
+{% load i18n %}
+{% load l10n %}
+{% load staticfiles %}
+
+{% block content %}
+<div class="page-heading">
+  <h1>Hosts <small>list of all hosts</small></h1>
+</div>
+
+{% render_table table %}
+{% endblock %}
diff --git a/network/urls.py b/network/urls.py
index 9d53053..c10e7ef 100644
--- a/network/urls.py
+++ b/network/urls.py
@@ -1,6 +1,6 @@
 from django.conf.urls import patterns, url
 
-from .views import IndexView, HostList, HostDetail
+from .views import IndexView, HostList, HostDetail, VlanList, VlanDetail
 
 
 urlpatterns = patterns(
@@ -8,4 +8,6 @@ urlpatterns = patterns(
     url('^$', IndexView.as_view(), name='network.index'),
     url('^hosts/$', HostList.as_view(), name='network.host_list'),
     url('^hosts/(?P<pk>\d+)/$', HostDetail.as_view(), name='network.host'),
+    url('^vlans/$', VlanList.as_view(), name='network.vlan_list'),
+    url('^vlans/(?P<pk>\d+)/$', VlanDetail.as_view(), name='network.vlan'),
 )
diff --git a/network/views.py b/network/views.py
index e427f54..ec160bc 100644
--- a/network/views.py
+++ b/network/views.py
@@ -3,9 +3,9 @@ from django.views.generic import UpdateView
 
 from django_tables2 import SingleTableView
 
-from firewall.models import Host
-from .tables import HostTable
-from .forms import HostForm
+from firewall.models import Host, Vlan
+from .tables import HostTable, VlanTable
+from .forms import HostForm, VlanForm
 
 
 class IndexView(TemplateView):
@@ -22,3 +22,15 @@ class HostDetail(UpdateView):
     model = Host
     template_name = "network/host-edit.html"
     form_class = HostForm
+
+
+class VlanList(SingleTableView):
+    model = Vlan
+    table_class = VlanTable
+    template_name = "network/vlan-list.html"
+
+
+class VlanDetail(UpdateView):
+    model = Vlan
+    template_name = "network/vlan-edit.html"
+    form_class = VlanForm