diff --git a/ippisite/ippidb/models.py b/ippisite/ippidb/models.py
index f66785247c3bd1920bfa003913e8db407bf26305..5a5abf1b4c152854216596067dd03ed8bf5989b1 100644
--- a/ippisite/ippidb/models.py
+++ b/ippisite/ippidb/models.py
@@ -3,7 +3,7 @@ from __future__ import unicode_literals
 from django.db import models
 from django.forms import ModelForm
 
-from .ws import get_pubmed_info, get_epo_info, get_uniprot_info, get_taxonomy_info
+from .ws import get_pubmed_info, get_epo_info, get_uniprot_info, get_taxonomy_info, get_go_info
 
 class Bibliography(models.Model):
     """
@@ -68,6 +68,11 @@ class MolecularFunction(models.Model):
     go_id = models.CharField('Gene Ontology ID', unique=True, max_length=10) # GO term id format: 'GO:0000000' 
     description = models.CharField('description', max_length=500)
 
+    def save(self, *args, **kwargs):
+        info = get_go_info(self.go_id)
+        self.description = info['label']
+        super(MolecularFunction, self).save(*args, **kwargs)
+
     def __str__(self):
         return self.description
 
@@ -88,12 +93,19 @@ class Protein(models.Model):
         try:
             taxonomy = Taxonomy.objects.get(taxonomy_id=info['organism'])
         except Taxonomy.DoesNotExist:
-            tax_info = get_taxonomy_info(info['organism'])
             taxonomy = Taxonomy()
             taxonomy.taxonomy_id = info['organism']
             taxonomy.save()
         self.organism = taxonomy
         super(Protein, self).save(*args, **kwargs)
+        for go_id in info['molecular_functions']:
+            try:
+                mol_function = MolecularFunction.objects.get(go_id=go_id)
+            except MolecularFunction.DoesNotExist:
+                mol_function = MolecularFunction()
+                mol_function.go_id = go_id
+                mol_function.save()
+            self.molecular_functions.add(mol_function)
 
 class Domain(models.Model):
     pfam_acc = models.CharField('Pfam Accession', max_length=10, unique=True)