diff --git a/lib/xos-genx/xosgenx/generator.py b/lib/xos-genx/xosgenx/generator.py
index 668d351..8a4e1a8 100755
--- a/lib/xos-genx/xosgenx/generator.py
+++ b/lib/xos-genx/xosgenx/generator.py
@@ -191,11 +191,13 @@
                 models = {}
                 models[model] = v.models[model]
                 messages = [XOSGenerator._find_message_by_model_name(v.messages, model)]
+
                 rendered[model] = template.render(
                     {"proto":
                         {
                             'message_table': models,
                             'messages': messages,
+                            'policies': v.policies,
                             'message_names': [m['name'] for m in messages]
                         },
                         "context": context,
@@ -209,6 +211,7 @@
                     {
                         'message_table': v.models,
                         'messages': v.messages,
+                        'policies': v.policies,
                         'message_names': [m['name'] for m in v.messages]
                     },
                     "context": context,
diff --git a/lib/xos-genx/xosgenx/proto2xproto.py b/lib/xos-genx/xosgenx/proto2xproto.py
index f05c2bc..3723e7c 100644
--- a/lib/xos-genx/xosgenx/proto2xproto.py
+++ b/lib/xos-genx/xosgenx/proto2xproto.py
@@ -1,4 +1,5 @@
 import plyxproto.model as m
+from plyxproto.helpers import Visitor
 import pdb
 import argparse
 import plyxproto.parser as plyxproto
@@ -47,7 +48,7 @@
         except:
             return obj
 
-class Proto2XProto(m.Visitor):
+class Proto2XProto(Visitor):
     def __init__(self):
         super(Proto2XProto, self).__init__()
 
diff --git a/lib/xos-genx/xosgenx/xos2jinja.py b/lib/xos-genx/xosgenx/xos2jinja.py
index 929526d..c58260e 100644
--- a/lib/xos-genx/xosgenx/xos2jinja.py
+++ b/lib/xos-genx/xosgenx/xos2jinja.py
@@ -1,5 +1,5 @@
 import plyxproto.model as m
-import pdb
+from plyxproto.helpers import Visitor
 import argparse
 import plyxproto.parser as plyxproto
 import traceback
@@ -64,7 +64,6 @@
                 try:
                     rev_links[l['peer']['fqn']].append(rlink)
                 except TypeError:
-                    pdb.set_trace()
                     pass
             except KeyError:
                 rev_links[l['peer']['fqn']] = [rlink]
@@ -97,12 +96,7 @@
 ''' XOS2Jinja overrides the underlying visitor pattern to transform the tree
     in addition to traversing it '''
 
-
-class XOS2Jinja(m.Visitor):
-
-    def get_stack(self):
-        return self.stack
-
+class XOS2Jinja(Visitor):
     def __init__(self):
         super(XOS2Jinja, self).__init__()
 
@@ -112,6 +106,7 @@
         self.package = None
         self.message_options = {}
         self.count_stack = Stack()
+        self.policies = {}
         self.content = ""
         self.offset = 0
         self.current_message_name = None
@@ -119,6 +114,16 @@
         self.first_field = True
         self.first_method = True
 
+    def visit_PolicyDefinition(self, obj):
+        if self.package:
+            pname = '.'.join([self.package, obj.name.value.pval])
+        else:
+            pname = obj.name.value.pval
+
+        self.policies[pname] = obj.body
+
+        return True
+
     def visit_PackageStatement(self, obj):
         dotlist = obj.name.value
         dotlist2 = [f.pval for f in dotlist]
@@ -177,6 +182,10 @@
 
         s['src_port'] = obj.src_port.value.pval
         s['name'] = obj.src_port.value.pval
+        try:
+            s['policy'] = obj.policy.pval
+        except AttributeError:
+            s['policy'] = None
 
         try:
             s['dst_port'] = obj.dst_port.value.pval
@@ -218,6 +227,12 @@
             s['type'] = obj.ftype.name.pval
 
         s['name'] = obj.name.value.pval
+
+        try:
+            s['policy'] = obj.policy.pval
+        except AttributeError:
+            s['policy'] = None
+
         s['modifier'] = obj.field_modifier.pval
         s['id'] = obj.fieldId.pval
 
@@ -293,6 +308,11 @@
             model_name = obj.name.value.pval
 
         model_def = {'name':obj.name.value.pval,'fields':fields,'links':links, 'bases':obj.bases, 'options':self.message_options, 'package':self.package, 'fqn': model_name, 'rlinks': []}
+        try:
+            model_def['policy'] = obj.policy.pval
+        except AttributeError:
+            model_def['policy'] = None
+
         self.stack.push(model_def)
         
         self.models[model_name] = model_def
@@ -352,4 +372,4 @@
     def visit_LinkSpec(self, obj):
         count = self.count_stack.pop()
         self.count_stack.push(count + 1)
-        return True
\ No newline at end of file
+        return True
