diff --git a/flowspec/admin.py b/flowspec/admin.py
new file mode 100644
index 0000000000000000000000000000000000000000..13ece6dd17bb5e0cec1e838708f91f66e2082282
--- /dev/null
+++ b/flowspec/admin.py
@@ -0,0 +1,16 @@
+from django.contrib import admin
+from flowspy.flowspec.models import *
+
+admin.site.register(MatchAddress)
+admin.site.register(MatchPort)
+admin.site.register(MatchDscp)
+admin.site.register(MatchFragmentType)
+admin.site.register(MatchIcmpCode)
+admin.site.register(MatchIcmpType)
+admin.site.register(MatchPacketLength)
+admin.site.register(MatchProtocol)
+admin.site.register(MatchTcpFlag)
+admin.site.register(ThenAction)
+admin.site.register(ThenStatement)
+admin.site.register(MatchStatement)
+admin.site.register(Route)
diff --git a/flowspec/migrations/0001_initial.py b/flowspec/migrations/0001_initial.py
deleted file mode 100644
index 5a67e4659d7c2dcfc54d69576c7458e29afd4b6f..0000000000000000000000000000000000000000
--- a/flowspec/migrations/0001_initial.py
+++ /dev/null
@@ -1,335 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-class Migration(SchemaMigration):
-    
-    def forwards(self, orm):
-        
-        # Adding model 'MatchAddress'
-        db.create_table(u'match_address', (
-            ('destination', self.gf('django.db.models.fields.CharField')(max_length=255)),
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-        ))
-        db.send_create_signal('flowspec', ['MatchAddress'])
-
-        # Adding model 'MatchPort'
-        db.create_table(u'match_port', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('port', self.gf('django.db.models.fields.CharField')(max_length=24)),
-        ))
-        db.send_create_signal('flowspec', ['MatchPort'])
-
-        # Adding model 'MatchDscp'
-        db.create_table(u'match_dscp', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('dscp', self.gf('django.db.models.fields.CharField')(max_length=24)),
-        ))
-        db.send_create_signal('flowspec', ['MatchDscp'])
-
-        # Adding model 'MatchFragmentType'
-        db.create_table(u'match_fragment_type', (
-            ('fragmenttype', self.gf('django.db.models.fields.CharField')(max_length=20)),
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-        ))
-        db.send_create_signal('flowspec', ['MatchFragmentType'])
-
-        # Adding model 'MatchIcmpCode'
-        db.create_table(u'match_icmp_code', (
-            ('icmp_code', self.gf('django.db.models.fields.CharField')(max_length=64)),
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-        ))
-        db.send_create_signal('flowspec', ['MatchIcmpCode'])
-
-        # Adding model 'MatchIcmpType'
-        db.create_table(u'match_icmp_type', (
-            ('icmp_type', self.gf('django.db.models.fields.CharField')(max_length=64)),
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-        ))
-        db.send_create_signal('flowspec', ['MatchIcmpType'])
-
-        # Adding model 'MatchPacketLength'
-        db.create_table(u'match_packet_length', (
-            ('packet_length', self.gf('django.db.models.fields.IntegerField')()),
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-        ))
-        db.send_create_signal('flowspec', ['MatchPacketLength'])
-
-        # Adding model 'MatchProtocol'
-        db.create_table(u'match_protocol', (
-            ('protocol', self.gf('django.db.models.fields.CharField')(max_length=64)),
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-        ))
-        db.send_create_signal('flowspec', ['MatchProtocol'])
-
-        # Adding model 'MatchTcpFlag'
-        db.create_table(u'match_tcp_flag', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('tcp_flag', self.gf('django.db.models.fields.CharField')(max_length=255)),
-        ))
-        db.send_create_signal('flowspec', ['MatchTcpFlag'])
-
-        # Adding model 'ThenAction'
-        db.create_table(u'then_action', (
-            ('action', self.gf('django.db.models.fields.CharField')(max_length=60)),
-            ('action_value', self.gf('django.db.models.fields.CharField')(max_length=255, null=True, blank=True)),
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-        ))
-        db.send_create_signal('flowspec', ['ThenAction'])
-
-        # Adding model 'ThenStatement'
-        db.create_table(u'then', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-        ))
-        db.send_create_signal('flowspec', ['ThenStatement'])
-
-        # Adding M2M table for field thenaction on 'ThenStatement'
-        db.create_table(u'then_thenaction', (
-            ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
-            ('thenstatement', models.ForeignKey(orm['flowspec.thenstatement'], null=False)),
-            ('thenaction', models.ForeignKey(orm['flowspec.thenaction'], null=False))
-        ))
-        db.create_unique(u'then_thenaction', ['thenstatement_id', 'thenaction_id'])
-
-        # Adding model 'MatchStatement'
-        db.create_table(u'match', (
-            ('matchfragmenttype', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['flowspec.MatchFragmentType'], null=True, blank=True)),
-            ('matchprotocol', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['flowspec.MatchProtocol'], null=True, blank=True)),
-            ('matchicmptype', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['flowspec.MatchIcmpType'], null=True, blank=True)),
-            ('matchSourcePort', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='matchSourcePort', null=True, to=orm['flowspec.MatchPort'])),
-            ('matchicmpcode', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['flowspec.MatchIcmpCode'], null=True, blank=True)),
-            ('matchTcpFlag', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['flowspec.MatchTcpFlag'], null=True, blank=True)),
-            ('matchDestination', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='matchDestination', null=True, to=orm['flowspec.MatchAddress'])),
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('matchpacketlength', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['flowspec.MatchPacketLength'], null=True, blank=True)),
-        ))
-        db.send_create_signal('flowspec', ['MatchStatement'])
-
-        # Adding M2M table for field matchDestinationPort on 'MatchStatement'
-        db.create_table(u'match_matchDestinationPort', (
-            ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
-            ('matchstatement', models.ForeignKey(orm['flowspec.matchstatement'], null=False)),
-            ('matchport', models.ForeignKey(orm['flowspec.matchport'], null=False))
-        ))
-        db.create_unique(u'match_matchDestinationPort', ['matchstatement_id', 'matchport_id'])
-
-        # Adding M2M table for field matchSource on 'MatchStatement'
-        db.create_table(u'match_matchSource', (
-            ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
-            ('matchstatement', models.ForeignKey(orm['flowspec.matchstatement'], null=False)),
-            ('matchaddress', models.ForeignKey(orm['flowspec.matchaddress'], null=False))
-        ))
-        db.create_unique(u'match_matchSource', ['matchstatement_id', 'matchaddress_id'])
-
-        # Adding M2M table for field matchdscp on 'MatchStatement'
-        db.create_table(u'match_matchdscp', (
-            ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
-            ('matchstatement', models.ForeignKey(orm['flowspec.matchstatement'], null=False)),
-            ('matchdscp', models.ForeignKey(orm['flowspec.matchdscp'], null=False))
-        ))
-        db.create_unique(u'match_matchdscp', ['matchstatement_id', 'matchdscp_id'])
-
-        # Adding M2M table for field matchport on 'MatchStatement'
-        db.create_table(u'match_matchport', (
-            ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
-            ('matchstatement', models.ForeignKey(orm['flowspec.matchstatement'], null=False)),
-            ('matchport', models.ForeignKey(orm['flowspec.matchport'], null=False))
-        ))
-        db.create_unique(u'match_matchport', ['matchstatement_id', 'matchport_id'])
-
-        # Adding model 'Route'
-        db.create_table(u'route', (
-            ('then', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['flowspec.ThenStatement'])),
-            ('last_updated', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)),
-            ('name', self.gf('django.db.models.fields.CharField')(max_length=128)),
-            ('expires', self.gf('django.db.models.fields.DateTimeField')()),
-            ('applier', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'])),
-            ('filed', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('match', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['flowspec.MatchStatement'])),
-        ))
-        db.send_create_signal('flowspec', ['Route'])
-    
-    
-    def backwards(self, orm):
-        
-        # Deleting model 'MatchAddress'
-        db.delete_table(u'match_address')
-
-        # Deleting model 'MatchPort'
-        db.delete_table(u'match_port')
-
-        # Deleting model 'MatchDscp'
-        db.delete_table(u'match_dscp')
-
-        # Deleting model 'MatchFragmentType'
-        db.delete_table(u'match_fragment_type')
-
-        # Deleting model 'MatchIcmpCode'
-        db.delete_table(u'match_icmp_code')
-
-        # Deleting model 'MatchIcmpType'
-        db.delete_table(u'match_icmp_type')
-
-        # Deleting model 'MatchPacketLength'
-        db.delete_table(u'match_packet_length')
-
-        # Deleting model 'MatchProtocol'
-        db.delete_table(u'match_protocol')
-
-        # Deleting model 'MatchTcpFlag'
-        db.delete_table(u'match_tcp_flag')
-
-        # Deleting model 'ThenAction'
-        db.delete_table(u'then_action')
-
-        # Deleting model 'ThenStatement'
-        db.delete_table(u'then')
-
-        # Removing M2M table for field thenaction on 'ThenStatement'
-        db.delete_table('then_thenaction')
-
-        # Deleting model 'MatchStatement'
-        db.delete_table(u'match')
-
-        # Removing M2M table for field matchDestinationPort on 'MatchStatement'
-        db.delete_table('match_matchDestinationPort')
-
-        # Removing M2M table for field matchSource on 'MatchStatement'
-        db.delete_table('match_matchSource')
-
-        # Removing M2M table for field matchdscp on 'MatchStatement'
-        db.delete_table('match_matchdscp')
-
-        # Removing M2M table for field matchport on 'MatchStatement'
-        db.delete_table('match_matchport')
-
-        # Deleting model 'Route'
-        db.delete_table(u'route')
-    
-    
-    models = {
-        'auth.group': {
-            'Meta': {'object_name': 'Group'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
-            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
-        },
-        'auth.permission': {
-            'Meta': {'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
-            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
-        },
-        'auth.user': {
-            'Meta': {'object_name': 'User'},
-            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
-            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
-            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
-            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
-            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
-            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
-            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
-            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
-            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
-            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
-        },
-        'contenttypes.contenttype': {
-            'Meta': {'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
-            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'flowspec.matchaddress': {
-            'Meta': {'object_name': 'MatchAddress', 'db_table': "u'match_address'"},
-            'destination': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
-        },
-        'flowspec.matchdscp': {
-            'Meta': {'object_name': 'MatchDscp', 'db_table': "u'match_dscp'"},
-            'dscp': ('django.db.models.fields.CharField', [], {'max_length': '24'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
-        },
-        'flowspec.matchfragmenttype': {
-            'Meta': {'object_name': 'MatchFragmentType', 'db_table': "u'match_fragment_type'"},
-            'fragmenttype': ('django.db.models.fields.CharField', [], {'max_length': '20'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
-        },
-        'flowspec.matchicmpcode': {
-            'Meta': {'object_name': 'MatchIcmpCode', 'db_table': "u'match_icmp_code'"},
-            'icmp_code': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
-        },
-        'flowspec.matchicmptype': {
-            'Meta': {'object_name': 'MatchIcmpType', 'db_table': "u'match_icmp_type'"},
-            'icmp_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
-        },
-        'flowspec.matchpacketlength': {
-            'Meta': {'object_name': 'MatchPacketLength', 'db_table': "u'match_packet_length'"},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'packet_length': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'flowspec.matchport': {
-            'Meta': {'object_name': 'MatchPort', 'db_table': "u'match_port'"},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'port': ('django.db.models.fields.CharField', [], {'max_length': '24'})
-        },
-        'flowspec.matchprotocol': {
-            'Meta': {'object_name': 'MatchProtocol', 'db_table': "u'match_protocol'"},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'protocol': ('django.db.models.fields.CharField', [], {'max_length': '64'})
-        },
-        'flowspec.matchstatement': {
-            'Meta': {'object_name': 'MatchStatement', 'db_table': "u'match'"},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'matchDestination': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'matchDestination'", 'null': 'True', 'to': "orm['flowspec.MatchAddress']"}),
-            'matchDestinationPort': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'matchDestinationPort'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['flowspec.MatchPort']"}),
-            'matchSource': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'matchSource'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['flowspec.MatchAddress']"}),
-            'matchSourcePort': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'matchSourcePort'", 'null': 'True', 'to': "orm['flowspec.MatchPort']"}),
-            'matchTcpFlag': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['flowspec.MatchTcpFlag']", 'null': 'True', 'blank': 'True'}),
-            'matchdscp': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['flowspec.MatchDscp']", 'null': 'True', 'blank': 'True'}),
-            'matchfragmenttype': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['flowspec.MatchFragmentType']", 'null': 'True', 'blank': 'True'}),
-            'matchicmpcode': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['flowspec.MatchIcmpCode']", 'null': 'True', 'blank': 'True'}),
-            'matchicmptype': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['flowspec.MatchIcmpType']", 'null': 'True', 'blank': 'True'}),
-            'matchpacketlength': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['flowspec.MatchPacketLength']", 'null': 'True', 'blank': 'True'}),
-            'matchport': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['flowspec.MatchPort']", 'null': 'True', 'blank': 'True'}),
-            'matchprotocol': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['flowspec.MatchProtocol']", 'null': 'True', 'blank': 'True'})
-        },
-        'flowspec.matchtcpflag': {
-            'Meta': {'object_name': 'MatchTcpFlag', 'db_table': "u'match_tcp_flag'"},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'tcp_flag': ('django.db.models.fields.CharField', [], {'max_length': '255'})
-        },
-        'flowspec.route': {
-            'Meta': {'object_name': 'Route', 'db_table': "u'route'"},
-            'applier': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}),
-            'expires': ('django.db.models.fields.DateTimeField', [], {}),
-            'filed': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'last_updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
-            'match': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['flowspec.MatchStatement']"}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
-            'then': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['flowspec.ThenStatement']"})
-        },
-        'flowspec.thenaction': {
-            'Meta': {'object_name': 'ThenAction', 'db_table': "u'then_action'"},
-            'action': ('django.db.models.fields.CharField', [], {'max_length': '60'}),
-            'action_value': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
-        },
-        'flowspec.thenstatement': {
-            'Meta': {'object_name': 'ThenStatement', 'db_table': "u'then'"},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'thenaction': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['flowspec.ThenAction']", 'null': 'True', 'blank': 'True'})
-        }
-    }
-    
-    complete_apps = ['flowspec']
diff --git a/flowspec/migrations/__init__.py b/flowspec/migrations/__init__.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/flowspec/models.py b/flowspec/models.py
index 60bad938ba21d0e7b7e3300e610ffb4a8a5f3ba8..1282553dabd0c79d9371ad29000ae64b53347619 100644
--- a/flowspec/models.py
+++ b/flowspec/models.py
@@ -1,6 +1,11 @@
 from django.db import models
 from django.contrib.auth.models import User
 
+import nxpy as np
+from ncclient import manager
+from ncclient.transport.errors import AuthenticationError, SSHError
+from lxml import etree as ET
+
 FRAGMENT_CODES = (
     ("dont-fragment", "Don't fragment"),
     ("first-fragment", "First fragment"),
@@ -22,27 +27,37 @@ THEN_CHOICES = (
 
     
 class MatchAddress(models.Model):
-    destination = models.CharField(max_length=255)
+    address = models.CharField(max_length=255)
+    def __unicode__(self):
+        return self.address
     class Meta:
         db_table = u'match_address'
 
 class MatchPort(models.Model):
     port = models.CharField(max_length=24)
+    def __unicode__(self):
+        return self.port
     class Meta:
         db_table = u'match_port'    
 
 class MatchDscp(models.Model):
     dscp = models.CharField(max_length=24)
+    def __unicode__(self):
+        return self.dscp
     class Meta:
         db_table = u'match_dscp'
 
 class MatchFragmentType(models.Model):
     fragmenttype = models.CharField(max_length=20, choices=FRAGMENT_CODES)
+    def __unicode__(self):
+        return self.fragmenttype
     class Meta:
         db_table = u'match_fragment_type'
     
 class MatchIcmpCode(models.Model):
     icmp_code = models.CharField(max_length=64)
+    def __unicode__(self):
+        return self.icmp_code
     class Meta:
         db_table = u'match_icmp_code'    
 
@@ -58,17 +73,23 @@ class MatchPacketLength(models.Model):
 
 class MatchProtocol(models.Model):
     protocol = models.CharField(max_length=64)
+    def __unicode__(self):
+        return self.protocol
     class Meta:
         db_table = u'match_protocol'    
 
 class MatchTcpFlag(models.Model):
     tcp_flag = models.CharField(max_length=255)
+    def __unicode__(self):
+        return self.tcp_flag
     class Meta:
         db_table = u'match_tcp_flag'    
     
 class ThenAction(models.Model):
     action = models.CharField(max_length=60, choices=THEN_CHOICES)
     action_value = models.CharField(max_length=255, blank=True, null=True)
+    def __unicode__(self):
+        return "%s %s" %(self.action, self.action_value)
     class Meta:
         db_table = u'then_action'
 
@@ -85,10 +106,10 @@ class MatchStatement(models.Model):
     matchicmpcode = models.ForeignKey(MatchIcmpCode, blank=True, null=True)
     matchicmptype = models.ForeignKey(MatchIcmpType, blank=True, null=True)
     matchpacketlength = models.ForeignKey(MatchPacketLength, blank=True, null=True)
-    matchport = models.ManyToManyField(MatchPort, blank=True, null=True)
+    matchport = models.ManyToManyField(MatchPort, blank=True, null=True, related_name="matchPort")
     matchprotocol = models.ForeignKey(MatchProtocol, blank=True, null=True)
-    matchSource = models.ManyToManyField(MatchAddress, blank=True, null=True, related_name="matchSource")
-    matchSourcePort = models.ForeignKey(MatchPort, blank=True, null=True, related_name="matchSourcePort")
+    matchSource = models.ForeignKey(MatchAddress, blank=True, null=True, related_name="matchSource")
+    matchSourcePort = models.ManyToManyField(MatchPort, blank=True, null=True, related_name="matchSourcePort")
     matchTcpFlag = models.ForeignKey(MatchTcpFlag, blank=True, null=True)
     class Meta:
         db_table = u'match'
@@ -101,5 +122,52 @@ class Route(models.Model):
     filed = models.DateTimeField(auto_now_add=True)
     last_updated = models.DateTimeField(auto_now=True)
     expires = models.DateTimeField()
+    def __unicode__(self):
+        return self.name
+    
     class Meta:
-        db_table = u'route'
\ No newline at end of file
+        db_table = u'route'
+
+    def save(self, *args, **kwargs):
+        # Begin translation to device xml configuration
+        device = np.Device()
+        flow = np.Flow()
+        route = np.Route()
+        flow.routes.append(route)
+        device.routing_options.append(flow)
+        route.name = self.name
+        match = self.match
+        if match.matchSource:
+            route.match['source'].append(match.matchSource.address)
+        if match.matchDestination:
+            route.match['destination'].append(match.matchDestination.address)
+        if match.matchprotocol:
+            route.match['protocol'].append(match.matchprotocol.protocol)
+        if match.matchport:
+            for port in match.matchport.all():
+                route.match['port'].append(port.port)
+        if match.matchDestinationPort:
+            for port in match.matchDestinationPort.all():
+                route.match['destination-port'].append(port.port)
+        if match.matchSourcePort:
+            for port in match.matchSourcePort.all():
+                route.match['source-port'].append(port.port)
+        if match.matchicmpcode:
+            route.match['icmp-code'].append(match.matchicmpcode.icmp_code)
+        if match.matchicmptype:
+            route.match['icmp-type'].append(match.matchicmptype.icmp_type)
+        if match.matchTcpFlag:
+            route.match['tcp-flags'].append(match.matchTcpFlag.tcp_flags)
+        if match.matchdscp:
+            for dscp in match.matchdscp.all():
+                route.match['dscp'].append(dscp.dscp)
+        if match.matchfragmenttype:
+            route.match['fragment'].append(match.matchfragmenttype.fragmenttype)
+        then = self.then
+        for thenaction in then.thenaction.all():
+            if thenaction.action_value:
+                route.then[thenaction.action] = thenaction.action_value
+            else:
+                route.then[thenaction.action] = True
+        print ET.tostring(device.export())
+        super(Route, self).save(*args, **kwargs)
\ No newline at end of file
diff --git a/urls.py b/urls.py
index fa52b55e3a7c2bf0fbd35a717dd6a1e2e8977dfc..32ffb38e0dc159d72b45407acd8ceeab13ac6c43 100644
--- a/urls.py
+++ b/urls.py
@@ -1,16 +1,16 @@
 from django.conf.urls.defaults import *
 
 # Uncomment the next two lines to enable the admin:
-# from django.contrib import admin
-# admin.autodiscover()
+from django.contrib import admin
+admin.autodiscover()
 
 urlpatterns = patterns('',
     # Example:
     # (r'^flowspy/', include('flowspy.foo.urls')),
 
     # Uncomment the admin/doc line below to enable admin documentation:
-    # (r'^admin/doc/', include('django.contrib.admindocs.urls')),
+    (r'^admin/doc/', include('django.contrib.admindocs.urls')),
 
     # Uncomment the next line to enable the admin:
-    # (r'^admin/', include(admin.site.urls)),
+    (r'^admin/', include(admin.site.urls)),
 )