diff --git a/lib/xos-genx/xos-genx-tests/test_tosca.py b/lib/xos-genx/xos-genx-tests/test_tosca.py
index 48a4db9..a771cbb 100644
--- a/lib/xos-genx/xos-genx-tests/test_tosca.py
+++ b/lib/xos-genx/xos-genx-tests/test_tosca.py
@@ -17,15 +17,49 @@
 from helpers import FakeArgs, XProtoTestHelpers
 
 
-class XProtoToscaTest(unittest.TestCase):
+class XProtoToscaTypeTest(unittest.TestCase):
 
     def setUp(self):
-        self.target = XProtoTestHelpers.write_tmp_target(
-"""
-{%- for m in proto.messages %}
-    {{ xproto_fields_to_tosca_keys(m.fields) }}
-{% endfor -%}
-""")
+        self.target_tosca_type = XProtoTestHelpers.write_tmp_target(
+            """
+            {%- for m in proto.messages %}
+            {% for f in m.fields %}
+                {{ xproto_tosca_field_type(f.type) }}
+            {% endfor -%}
+            {% endfor -%}
+            """)
+    def test_tosca_fields(self):
+        """
+        [XOS-GenX] should convert xproto types to tosca know types
+        """
+        xproto = \
+        """
+        option app_label = "test";
+
+        message Foo {
+            required string name = 1 [ null = "False", blank="False"];
+            required bool active = 1 [ null = "False", blank="False"];
+            required int32 quantity = 1 [ null = "False", blank="False"];
+        }
+        """
+
+        args = FakeArgs()
+        args.inputs = xproto
+        args.target = self.target_tosca_type
+        output = XOSGenerator.generate(args)
+        self.assertIn('string', output)
+        self.assertIn('boolean', output)
+        self.assertIn('integer', output)
+
+class XProtoToscaKeyTest(unittest.TestCase):
+
+    def setUp(self):
+        self.target_tosca_keys = XProtoTestHelpers.write_tmp_target(
+            """
+            {%- for m in proto.messages %}
+                {{ xproto_fields_to_tosca_keys(m.fields) }}
+            {% endfor -%}
+            """)
 
     def test_xproto_fields_to_tosca_keys_default(self):
         """
@@ -42,7 +76,7 @@
 
         args = FakeArgs()
         args.inputs = xproto
-        args.target = self.target
+        args.target = self.target_tosca_keys
         output = XOSGenerator.generate(args)
         self.assertIn('name', output)
 
@@ -63,7 +97,7 @@
 
         args = FakeArgs()
         args.inputs = xproto
-        args.target = self.target
+        args.target = self.target_tosca_keys
         output = XOSGenerator.generate(args)
         self.assertNotIn('name', output)
         self.assertIn('key_1', output)
@@ -85,7 +119,7 @@
 
         args = FakeArgs()
         args.inputs = xproto
-        args.target = self.target
+        args.target = self.target_tosca_keys
         output = XOSGenerator.generate(args)
         self.assertNotIn('name', output)
         self.assertIn('provider_service_instance_id', output)
\ No newline at end of file
diff --git a/lib/xos-genx/xosgenx/jinja2_extensions/base.py b/lib/xos-genx/xosgenx/jinja2_extensions/base.py
index d3982f1..0849ab9 100644
--- a/lib/xos-genx/xosgenx/jinja2_extensions/base.py
+++ b/lib/xos-genx/xosgenx/jinja2_extensions/base.py
@@ -239,21 +239,6 @@
 
     return options_str
 
-def xproto_tosca_required(null, blank, default=None):
-
-    if null == 'True' or blank == 'True' or default != 'False':
-        return "false"
-    return "true"
-
-def xproto_tosca_field_type(type):
-    """
-    TOSCA requires fields of type 'bool' to be 'boolean'
-    """
-    if type == "bool":
-        return "boolean"
-    else:
-        return type
-
 def xproto_type_to_swagger_type(f):
     try:
         content_type = f['options']['content_type']
diff --git a/lib/xos-genx/xosgenx/jinja2_extensions/tosca.py b/lib/xos-genx/xosgenx/jinja2_extensions/tosca.py
index 04ac3ff..a46770d 100644
--- a/lib/xos-genx/xosgenx/jinja2_extensions/tosca.py
+++ b/lib/xos-genx/xosgenx/jinja2_extensions/tosca.py
@@ -12,6 +12,25 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+def xproto_tosca_required(null, blank, default=None):
+
+    if null == 'True' or blank == 'True' or default != 'False':
+        return "false"
+    return "true"
+
+def xproto_tosca_field_type(type):
+    """
+    TOSCA requires fields of type 'bool' to be 'boolean'
+    TOSCA requires fields of type 'int32' to be 'integer'
+    """
+
+    if type == "bool":
+        return "boolean"
+    elif type == "int32":
+        return "integer"
+    else:
+        return type
+
 def xproto_fields_to_tosca_keys(fields):
 	keys = []
 	# look for explicit keys
