diff --git a/ippisite/ippidb/admin.py b/ippisite/ippidb/admin.py
index 08ea5e39a55ad1f2a33f1a43bc0ff9c8f755d833..29b059b53b45ac71042ed0257ab091187cf3c2a9 100644
--- a/ippisite/ippidb/admin.py
+++ b/ippisite/ippidb/admin.py
@@ -6,6 +6,14 @@ from django.apps import apps
 class BibliographyAdmin(admin.ModelAdmin):
     list_display = ('authors_list', 'title', 'journal_name', 'biblio_year', 'id_source')
 
+@admin.register(Protein)
+class ProteinAdmin(admin.ModelAdmin):
+    list_display = ('uniprot_id', 'recommended_name_long')
+
+@admin.register(Taxonomy)
+class TaxonomyAdmin(admin.ModelAdmin):
+    list_display = ('taxonomy_id', 'name')
+
 for model in apps.get_app_config('ippidb').models.values():
     try:
         admin.site.register(model)
diff --git a/ippisite/ippidb/management/commands/import_v1_data.py b/ippisite/ippidb/management/commands/import_v1_data.py
index 22a073ef0729f7b6508e2dbbe56e1deb9c8124a1..8820aca4aba57dd59f10d82de0826fd08ab9c9b0 100644
--- a/ippisite/ippidb/management/commands/import_v1_data.py
+++ b/ippisite/ippidb/management/commands/import_v1_data.py
@@ -1,6 +1,7 @@
-from django.core.management import BaseCommand
+from django.core.management import BaseCommand, CommandError
 import mysql.connector
-from ippidb.models import Bibliography, Protein
+
+from ippidb.models import Bibliography, Protein, Taxonomy
 
 class Command(BaseCommand):
 
@@ -21,6 +22,14 @@ class Command(BaseCommand):
             default=False,
             help='Flush and migrate proteins',
         )
+        parser.add_argument(
+            '--stoponfail',
+            action='store_true',
+            dest='stoponfail',
+            default=False,
+            help='Stop on fail',
+        )
+
 
     def handle(self, *args, **options):
         conn = mysql.connector.connect(host="localhost",user="root",password="ippidb", database="ippidb")
@@ -48,13 +57,20 @@ class Command(BaseCommand):
             rows = cursor.fetchall()
             Protein.objects.all().delete()
             self.stdout.write(self.style.SUCCESS('Successfully flushed protein table'))
+            Taxonomy.objects.all().delete()
+            self.stdout.write(self.style.SUCCESS('Successfully flushed taxonomy table'))
             for row in rows:
                 try:
                     p = Protein()
                     p.uniprot_id = row[1]
                     p.save()
                 except Exception as e:
-                    self.stdout.write(self.style.ERROR('Failed inserting {} {}'.format(row[1], row[2])))
+                    if options['stoponfail']:
+                        import traceback
+                        self.stderr.write(traceback.format_exc())
+                        raise CommandError('Failed inserting {} {}'.format(row[1], row[2]))
+                    else:
+                        self.stdout.write(self.style.ERROR('Failed inserting {} {}'.format(row[1], row[2])))
                 else:
                     self.stdout.write(self.style.SUCCESS('Successfully inserted {} {}'.format(row[1], row[2])))
             
diff --git a/ippisite/ippidb/models.py b/ippisite/ippidb/models.py
index 79b3f7ffa98ba41130dab4b15dbf55d010be1c74..5f7e7f5abc6d3ada934576367347ddf67693f54a 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
+from .ws import get_pubmed_info, get_epo_info, get_uniprot_info, get_taxonomy_info
 
 class Bibliography(models.Model):
     """
@@ -50,8 +50,14 @@ class BibliographyForm(ModelForm):
         exclude = ['title','journal_name', 'authors_list', 'biblio_year']
 
 class Taxonomy(models.Model):
-    taxonomy_id = models.DecimalField('NCBI TaxID', unique=True, max_digits=4, decimal_places=0)
+    taxonomy_id = models.DecimalField('NCBI TaxID', unique=True, max_digits=9, decimal_places=0)
     name = models.CharField('Organism name', max_length=200)
+
+    def save(self, *args, **kwargs):
+        info = get_taxonomy_info(self.taxonomy_id)
+        self.name = info['scientific_name']
+        super(Taxonomy, self).save(*args, **kwargs)
+
     class Meta:
         verbose_name_plural = "taxonomies"
 
@@ -69,9 +75,18 @@ class Protein(models.Model):
     molecular_functions = models.ManyToManyField(MolecularFunction)
 
     def save(self, *args, **kwargs):
-        info = get_epo_info(self.id_source)
+        info = get_uniprot_info(self.uniprot_id)
         self.recommended_name_long = info['recommended_name']
-        self.organism = info['organism']
+        self.gene_name = info['gene']
+        self.entry_name = info['entry_name']
+        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)
 
 class Domain(models.Model):
@@ -191,6 +206,7 @@ class MDDRCompoundImport(models.Model):
         # over multiple releases of the MDDR database, the same compound can evolve in its development phase
         # the same compound can have different names and development phases in the same MDDR release
         unique_together = (('mddr_compound_id', 'mddr_name', 'dvpmt_phase'),)
+        verbose_name_plural = "MDDR compound imports"
 
 
 class MDDRCompoundActivityClass(models.Model):
@@ -199,6 +215,7 @@ class MDDRCompoundActivityClass(models.Model):
 
     class Meta:
         unique_together = (('mddr_compound_id', 'activity_class'),)
+        verbose_name_plural = "MDDR compound activity classes"
 
 
 class MDDRSimilarity(models.Model):
@@ -208,6 +225,7 @@ class MDDRSimilarity(models.Model):
 
     class Meta:
         unique_together = (('canonical_smile_ippidb', 'canonical_smile_mddr'),)
+        verbose_name_plural = "MDDR similarities"
 
 """
 class TestActivityDescription(models.Model):
diff --git a/ippisite/ippidb/ws.py b/ippisite/ippidb/ws.py
index 422a5219ab38cde7844249ba0962e58ca891e3f2..8b9b3f3a9f415d0f417ac0212a5a9c5736c644a3 100644
--- a/ippisite/ippidb/ws.py
+++ b/ippisite/ippidb/ws.py
@@ -36,10 +36,20 @@ def get_epo_info(patent_number):
             'authors_list': authors}
 
 def get_uniprot_info(uniprot_id):
-    uniprot_client = Uniprot()
+    uniprot_client = UniProt()
     resp = uniprot_client.retrieve(uniprot_id)
-    recommended_name = res.root.findall('{http://uniprot.org/uniprot}entry/{http://uniprot.org/uniprot}protein/{http://uniprot.org/uniprot}recommendedName/{http://uniprot.org/uniprot}fullName')[0].text
-    organism = res.root.findall('{http://uniprot.org/uniprot}entry/{http://uniprot.org/uniprot}organism/{http://uniprot.org/uniprot}dbReference[@type="NCBI Taxonomy"]/@id')
+    recommended_name = resp.root.findall('{http://uniprot.org/uniprot}entry/{http://uniprot.org/uniprot}protein/{http://uniprot.org/uniprot}recommendedName/{http://uniprot.org/uniprot}fullName')[0].text
+    organism = resp.root.findall('{http://uniprot.org/uniprot}entry/{http://uniprot.org/uniprot}organism/{http://uniprot.org/uniprot}dbReference[@type="NCBI Taxonomy"]')[0].attrib['id']
+    gene = resp.root.findall('{http://uniprot.org/uniprot}entry/{http://uniprot.org/uniprot}gene/{http://uniprot.org/uniprot}name[@type="primary"]')[0].text
+    entry_name = resp.root.findall('{http://uniprot.org/uniprot}entry/{http://uniprot.org/uniprot}name')[0].text
     return {'recommended_name': recommended_name,
-            'organism': organism
-           } 
+            'organism': int(organism),
+            'gene': gene,
+            'entry_name': entry_name
+           }
+
+def get_taxonomy_info(taxonomy_id):
+    eu = EUtils()
+    r = eu.EFetch('taxonomy', taxonomy_id, retmode='dict')
+    scientific_name = r['TaxaSet']['Taxon']['ScientificName']
+    return {'scientific_name': scientific_name}