diff --git a/opennebula_api/models.py b/opennebula_api/models.py
index 2616ad8a..99c486fe 100644
--- a/opennebula_api/models.py
+++ b/opennebula_api/models.py
@@ -27,11 +27,115 @@ class VirtualMachineTemplate(models.Model):
                 price += int(disk.size) / 1024 * self.disk_size_price
         return price
 
+    def get_name(self):
+        if self.manager is None:
+            self.manager = OpenNebulaManager()
+
+        template = self.manager._get_template(template_id=self.opennebula_id)
+        return template.name
+
+    def get_cores(self):
+        if self.manager is None:
+            self.manager = OpenNebulaManager()
+
+        template = self.manager._get_template(template_id=self.opennebula_id).template
+        return int(template.vcpu)
+    
+    def get_disk_size(self):
+        if self.manager is None:
+            self.manager = OpenNebulaManager()
+
+        template = self.manager._get_template(template_id=self.opennebula_id).template
+        return int(template.disk.size) / 1024
+
+    def get_memory(self):
+        if self.manager is None:
+            self.manager = OpenNebulaManager()
+
+        template = self.manager._get_template(template_id=self.opennebula_id).template
+        return int(template.memory) / 1024
+
 class VirtualMachine(models.Model):
     """This class represents an opennebula virtual machine."""
     opennebula_id = models.IntegerField()
     template = models.ForeignKey(VirtualMachineTemplate)
 
+    VM_STATE = {
+        '0': 'INIT',
+        '1': 'PENDING',
+        '2': 'HOLD',
+        '3': 'ACTIVE',
+        '4': 'STOPPED',
+        '5': 'SUSPENDED',
+        '6': 'DONE',
+        '8': 'POWEROFF',
+        '9': 'UNDEPLOYED',
+        '10': 'CLONING',
+        '11': 'CLONING_FAILURE',
+    }
+
+    def get_name(self):
+        if self.manager is None:
+            self.manager = OpenNebulaManager()
+
+        vm = self.manager._get_vm(vm_id=self.opennebula_id)
+        return vm.name
+
+    def get_cores(self):
+        if self.manager is None:
+            self.manager = OpenNebulaManager()
+
+        template = self.manager._get_vm(vm_id=self.opennebula_id).template
+        return int(template.vcpu)
+    
+    def get_disk_size(self):
+        if self.manager is None:
+            self.manager = OpenNebulaManager()
+
+        template = self.manager._get_vm(vm_id=self.opennebula_id).template
+        try: 
+            return template.disk.size
+        except AttributeError:
+            disk_size = 0 
+            for disk in template.disks:
+                disk_size += disk.size
+            return disk_size / 1024
+
+
+    def get_memory(self):
+        if self.manager is None:
+            self.manager = OpenNebulaManager()
+
+        template = self.manager._get_vm(vm_id=self.opennebula_id).template
+        return int(template.memory)
+
+    def get_id(self):
+        if self.manager is None:
+            self.manager = OpenNebulaManager()
+
+        vm = self.manager._get_vm(vm_id=self.opennebula_id)
+        return vm.id
+
+    def get_ip(self):
+        if self.manager is None:
+            self.manager = OpenNebulaManager()
+
+        vm = self.manager._get_vm(vm_id=self.opennebula_id)
+        try:
+            return vm.user_template.ungleich_public_ip
+        except AttributeError:
+            return '-'
+
+    def get_state(self):
+        if self.manager is None:
+            self.manager = OpenNebulaManager()
+
+        vm = self.manager._get_vm(vm_id=self.opennebula_id)
+        return self.VM_STATE.get(str(vm.state))
+
+    def get_pirce(self)
+        return 0.0
+
 class OpenNebulaManager():
     """This class represents an opennebula manager."""
 
diff --git a/opennebula_api/serializer.py b/opennebula_api/serializer.py
new file mode 100644
index 00000000..98db0daa
--- /dev/null
+++ b/opennebula_api/serializer.py
@@ -0,0 +1,32 @@
+from res_framework import serializers
+from .models import VirtualMachine, VirtualMachineTemplate
+
+class VirtualMachineSerializer(serializers.ModelSerializer):
+    """Serializer to map the virtual machine instance into JSON format."""
+
+    cores       = serializers.IntegerField(read_only=True, source='get_cores') 
+    name        = serializers.CharField(read_only=True, source='get_name')
+    disk_size   = serializers.IntegerField(read_only=True, source='get_disk_size')
+    memory      = serializers.IntegerField(read_only=True, source='get_memory')
+    #TODO: See if we can change to IPAddressField
+    ip          = serializers.CharField(read_only=True, source='get_ip')
+    deploy_id   = serializers.IntegerField(read_only=True, source='get_deploy_id')
+    id          = serializers.IntegerField(read_only=True, source='get_id')
+    state       = serializers.CharField(read_only=True, source='get_state')
+    price       = serializers.FloatField(read_only=True, source='get_price')
+
+    class Meta:
+        model = VirtualMachine
+
+
+class VirtualMachineTemplateSerializer(serializers.ModelSerializer):
+    """Serializer to map the virtual machine template instance into JSON format."""
+    cores       = serializers.IntegerField(read_only=True, source='get_cores') 
+    name        = serializers.CharField(read_only=True, source='get_name')
+    disk_size   = serializers.IntegerField(read_only=True, source='get_disk_size')
+    memory      = serializers.IntegerField(read_only=True, source='get_memory')
+
+    class Meta:
+        model = VirtualMachineTemplate
+        fields = ()
+