diff --git a/opennebula_api/serializers.py b/opennebula_api/serializers.py
index 12b313af..662b2fb6 100644
--- a/opennebula_api/serializers.py
+++ b/opennebula_api/serializers.py
@@ -1,5 +1,6 @@
 import ipaddress
 
+from builtins import hasattr
 from rest_framework import serializers
 
 from oca import OpenNebulaException
@@ -32,7 +33,7 @@ class VirtualMachineTemplateSerializer(serializers.Serializer):
             return 0
 
     def get_memory(self, obj):
-        return int(obj.template.memory)/1024
+        return int(obj.template.memory) / 1024
 
     def get_name(self, obj):
         return obj.name.strip('public-')
@@ -57,13 +58,13 @@ class VirtualMachineSerializer(serializers.Serializer):
     configuration = serializers.SerializerMethodField()
 
     template_id = serializers.ChoiceField(
-                choices=[(key.id, key.name) for key in
-                         OpenNebulaManager().try_get_templates()
-                         ],
-                source='template.template_id',
-                write_only=True,
-                default=[]
-            )
+        choices=[(key.id, key.name) for key in
+                 OpenNebulaManager().try_get_templates()
+                 ],
+        source='template.template_id',
+        write_only=True,
+        default=[]
+    )
 
     def create(self, validated_data):
         owner = validated_data['owner']
@@ -74,10 +75,10 @@ class VirtualMachineSerializer(serializers.Serializer):
 
         template_id = validated_data['template']['template_id']
         specs = {
-                    'cpu': cores,
-                    'disk_size': disk,
-                    'memory': memory,
-                }
+            'cpu': cores,
+            'disk_size': disk,
+            'memory': memory,
+        }
 
         try:
             manager = OpenNebulaManager(email=owner.email,
@@ -92,7 +93,7 @@ class VirtualMachineSerializer(serializers.Serializer):
         return manager.get_vm(opennebula_id)
 
     def get_memory(self, obj):
-        return int(obj.template.memory)/1024
+        return int(obj.template.memory) / 1024
 
     def get_disk_size(self, obj):
         template = obj.template
@@ -104,9 +105,9 @@ class VirtualMachineSerializer(serializers.Serializer):
     def get_price(self, obj):
         template = obj.template
         price = float(template.vcpu) * 5.0
-        price += (int(template.memory)/1024 * 2.0)
+        price += (int(template.memory) / 1024 * 2.0)
         for disk in template.disks:
-            price += int(disk.size)/1024 * 0.6
+            price += int(disk.size) / 1024 * 0.6
         return price
 
     def get_configuration(self, obj):
@@ -115,15 +116,30 @@ class VirtualMachineSerializer(serializers.Serializer):
         return template.name.strip('public-')
 
     def get_ipv4(self, obj):
-        nic = obj.template.nics[0]
-        if 'vm-ipv6-nat64-ipv4' in nic.network and is_in_v4_range(nic.mac):
-            return str(v4_from_mac(nic.mac))
+        """
+        Get the IPv4s from the given VM
+
+        :param obj: The VM in contention
+        :return: Returns csv string of all IPv4s added to this VM otherwise returns "-" if no IPv4 is available
+        """
+        ipv4 = []
+        for nic in obj.template.nics:
+            if hasattr(nic, 'ip'):
+                ipv4.append(nic.ip)
+        if len(ipv4) > 0:
+            return ', '.join(ipv4)
         else:
             return '-'
 
     def get_ipv6(self, obj):
-        nic = obj.template.nics[0]
-        return nic.ip6_global
+        ipv6 = []
+        for nic in obj.template.nics:
+            if hasattr(nic, 'ip6_global'):
+                ipv6.append(nic.ip6_global)
+        if len(ipv6) > 0:
+            return ', '.join(ipv6)
+        else:
+            return '-'
 
     def get_name(self, obj):
         return obj.name.strip('public-')