diff --git a/ippisite/ippidb/management/commands/import_v1_data.py b/ippisite/ippidb/management/commands/import_v1_data.py
index c14585e2f37096a0fdb676baa204aa38fffd7062..d2fe65cc676fe3f892c12ba57555ba457832227a 100644
--- a/ippisite/ippidb/management/commands/import_v1_data.py
+++ b/ippisite/ippidb/management/commands/import_v1_data.py
@@ -7,7 +7,8 @@ import mysql.connector
 from ippidb.models import Bibliography, Protein, Taxonomy, MolecularFunction, \
     Domain, ProteinDomainBoundComplex, ProteinDomainPartnerComplex, Symmetry, Ppi, PpiComplex, Disease, \
     Compound, MDDRCompoundImport, MDDRActivityClass, TestActivityDescription, CellLine, RefCompoundBiblio, \
-    CompoundAction, TestCytotoxDescription
+    CompoundAction, TestCytotoxDescription, TestPKDescription, CompoundActivityResult, \
+    CompoundCytotoxicityResult, CompoundPKResult
 
 
 class MyConverter(mysql.connector.conversion.MySQLConverter):
@@ -61,7 +62,7 @@ class Command(BaseCommand):
             action='store_true',
             dest='ppi',
             default=False,
-            help='Flush and migrate ppis and complexes',
+            help='Flush and migrate ppis, complexes, and tests',
         )
         parser.add_argument(
             '--mddr',
@@ -84,13 +85,6 @@ class Command(BaseCommand):
             default=False,
             help='Flush and migrate compounds-bibliography',
         )
-        parser.add_argument(
-            '--test-activity-description',
-            action='store_true',
-            dest='test-activity-description',
-            default=False,
-            help='Flush and migrate test activity descriptions',
-        )
         parser.add_argument(
             '--stoponfail',
             action='store_true',
@@ -326,6 +320,7 @@ select distinct protein.NumUniprot, domain.PfamNumAccession  , complexe.NbCopy,
             TestActivityDescription.objects.all().delete()
             self.stdout.write(
                 self.style.SUCCESS('Successfully flushed test activity descriptions table'))
+            tad_id_mapping = {}
             for row in rows:
                 try:
                     tad = TestActivityDescription()
@@ -349,6 +344,7 @@ select distinct protein.NumUniprot, domain.PfamNumAccession  , complexe.NbCopy,
                         tad.cell_line, created = CellLine.objects.get_or_create(
                             name=row[16])
                     tad.save()
+                    tad_id_mapping[row[0]] = tad.id
                 except Exception as e:
                     if options['stoponfail']:
                         import traceback
@@ -361,11 +357,39 @@ select distinct protein.NumUniprot, domain.PfamNumAccession  , complexe.NbCopy,
                 else:
                     self.stdout.write(
                         self.style.SUCCESS('Successfully inserted {}'.format(row[2])))
+            cursor.execute("""select c.CanonicalSmile, r.IDTestActivity, r.ActivityType, r.Activity, r.PourcentInhib from cmpdActiveResult as r inner join compound as c on r.IDCompound = c.IDCompound;""")
+            rows = cursor.fetchall()
+            CompoundActivityResult.objects.all().delete()
+            self.stdout.write(
+                self.style.SUCCESS('Successfully flushed compound activity result table'))
+            for row in rows:
+                try:
+                    car = CompoundActivityResult()
+                    car.test_activity_description = TestActivityDescription.objects.get(id=tad_id_mapping[row[1]])
+                    car.compound = Compound.objects.get(canonical_smile=row[0])
+                    car.activity_type = row[2]
+                    car.activity = row[3]
+                    car.inhibition_percentage = row[4]
+                    car.modulation_type = 'I' # because previous DB is only about inhibitors
+                    car.save()
+                except Exception as e:
+                    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(str(car))))
             cursor.execute("""SELECT * FROM testCytotoxDescription""")
             rows = cursor.fetchall()
             TestCytotoxDescription.objects.all().delete()
             self.stdout.write(
                 self.style.SUCCESS('Successfully flushed test cytotoxicity descriptions table'))
+            tcd_id_mapping = {}
             for row in rows:
                 try:
                     tcd = TestCytotoxDescription()
@@ -380,6 +404,74 @@ select distinct protein.NumUniprot, domain.PfamNumAccession  , complexe.NbCopy,
                         tcd.cell_line, created = CellLine.objects.get_or_create(
                             name=row[3])
                     tcd.save()
+                    tcd_id_mapping[row[0]] = tcd.id
+                except Exception as e:
+                    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[2])))
+            cursor.execute("""select c.CanonicalSmile, r.IDTestCytotox, r.IDTestCytotox from cmpdCytotoxResult as r inner join compound as c on r.IDCompound = c.IDCompound;""")
+            rows = cursor.fetchall()
+            CompoundCytotoxicityResult.objects.all().delete()
+            self.stdout.write(
+                self.style.SUCCESS('Successfully flushed compound cytotoxicity result table'))
+            for row in rows:
+                try:
+                    ccr = CompoundCytotoxicityResult()
+                    ccr.test_cytotoxicity_description = TestCytotoxDescription.objects.get(id=tcd_id_mapping[row[1]])
+                    ccr.compound = Compound.objects.get(canonical_smile=row[0])
+                    ccr.toxicity = row[2] == 'Y'
+                    ccr.save()
+                except Exception as e:
+                    if options['stoponfail']:
+                        import traceback
+                        self.stderr.write(traceback.format_exc())
+                        raise CommandError(
+                            'Failed inserting {} {}'.format(row[1], row[2]))
+                    else:
+                        import traceback
+                        self.stderr.write(traceback.format_exc())
+                        self.stdout.write(
+                            self.style.ERROR('Failed inserting {} {}'.format(row[1], row[2])))
+                else:
+                    self.stdout.write(
+                        self.style.SUCCESS('Successfully inserted {}'.format(str(ccr))))
+            cursor.execute("""SELECT * FROM testPKDescription""")
+            rows = cursor.fetchall()
+            TestPKDescription.objects.all().delete()
+            self.stdout.write(
+                self.style.SUCCESS('Successfully flushed test PK descriptions table'))
+            for row in rows:
+                try:
+                    tpd = TestPKDescription()
+                    cursor.execute(
+                        """select IDSource from biblio where IDBiblio={}""".format(row[1]))
+                    biblio_row = cursor.fetchone()
+                    biblio = Bibliography.objects.get(id_source=biblio_row[0])
+                    tpd.biblio = biblio
+                    tpd.test_name = row[2]
+                    #tcd.compound_concentration = row[4]
+                    try:
+                        taxonomy = Taxonomy.objects.get(taxonomy_id=10090)
+                    except Taxonomy.DoesNotExist:
+                        taxonomy = Taxonomy()
+                        taxonomy.taxonomy_id = 10090 
+                        # dirty hack: all organisms in this table are "mice", 
+                        # hence assuming Mus musculus
+                        taxonomy.save(autofill=True)
+                    tpd.organism = taxonomy
+                    tpd.administration_mode = row[4]
+                    tpd.concentration = row[5]
+                    tpd.dose = round(row[6], 4)
+                    tpd.dose_interval = row[7]  
+                    tpd.save()
                 except Exception as e:
                     if options['stoponfail']:
                         import traceback
diff --git a/ippisite/ippidb/migrations/0029_auto_20180308_1935.py b/ippisite/ippidb/migrations/0029_auto_20180308_1935.py
new file mode 100644
index 0000000000000000000000000000000000000000..7e2c9f63d1ea437868a3ba0fcfc0f9dd447772c2
--- /dev/null
+++ b/ippisite/ippidb/migrations/0029_auto_20180308_1935.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11 on 2018-03-08 19:35
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('ippidb', '0028_auto_20180307_1405'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='testpkdescription',
+            name='dose',
+            field=models.DecimalField(blank=True, decimal_places=4, max_digits=9, null=True, verbose_name='Dose in mg/kg'),
+        ),
+    ]
diff --git a/ippisite/ippidb/migrations/0030_testpkdescription_concentration.py b/ippisite/ippidb/migrations/0030_testpkdescription_concentration.py
new file mode 100644
index 0000000000000000000000000000000000000000..3522e6e9a652babd407d09456834ed536a57e330
--- /dev/null
+++ b/ippisite/ippidb/migrations/0030_testpkdescription_concentration.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11 on 2018-03-08 19:45
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('ippidb', '0029_auto_20180308_1935'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='testpkdescription',
+            name='concentration',
+            field=models.DecimalField(blank=True, decimal_places=3, max_digits=7, null=True, verbose_name='Concentration in mg/l'),
+        ),
+    ]
diff --git a/ippisite/ippidb/migrations/0031_compoundactivityresult_inhibition_percentage.py b/ippisite/ippidb/migrations/0031_compoundactivityresult_inhibition_percentage.py
new file mode 100644
index 0000000000000000000000000000000000000000..00e3279a98dea166a7857238fed7942c04563dd2
--- /dev/null
+++ b/ippisite/ippidb/migrations/0031_compoundactivityresult_inhibition_percentage.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11 on 2018-03-08 21:12
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('ippidb', '0030_testpkdescription_concentration'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='compoundactivityresult',
+            name='inhibition_percentage',
+            field=models.DecimalField(decimal_places=0, max_digits=3, null=True, verbose_name='Inhibition percentage'),
+        ),
+    ]
diff --git a/ippisite/ippidb/models.py b/ippisite/ippidb/models.py
index 55e9612ffd1e4930d6fadaf1cfa5fb187c46a721..76a635dfef5f76086205c601d4c766104e82653d 100644
--- a/ippisite/ippidb/models.py
+++ b/ippisite/ippidb/models.py
@@ -477,6 +477,8 @@ class CompoundActivityResult(models.Model):
         'Activity type', max_length=5, choices=ACTIVITY_TYPES)
     activity = models.DecimalField(
         'Activity', max_digits=12, decimal_places=10)
+    inhibition_percentage = models.DecimalField(
+        'Inhibition percentage', max_digits=3, decimal_places=0, null=True)
     modulation_type = models.CharField(
         'Modulation type', max_length=1, choices=MODULATION_TYPES)
 
@@ -484,6 +486,8 @@ class CompoundActivityResult(models.Model):
         unique_together = (
             ('compound', 'test_activity_description', 'activity_type'),)
 
+    def __str__(self):
+        return 'Compound activity result for {} test {} on {}'.format(self.activity_type, self.test_activity_description.id, self.compound.id)
 
 class TestCytotoxDescription(models.Model):
     biblio = models.ForeignKey(Bibliography, models.CASCADE)
@@ -501,6 +505,9 @@ class CompoundCytotoxicityResult(models.Model):
     class Meta:
         unique_together = (('compound', 'test_cytotoxicity_description'),)
 
+    def __str__(self):
+        return 'Compound cytotoxicity result for test {} on {}'.format(self.test_cytotoxicity_description.id, self.compound.id)
+
 
 class TestPKDescription(models.Model):
     ADMINISTRATION_MODES = (
@@ -514,8 +521,10 @@ class TestPKDescription(models.Model):
     organism = models.ForeignKey(Taxonomy, models.CASCADE)
     administration_mode = models.CharField(
         'Administration mode', max_length=2, choices=ADMINISTRATION_MODES, blank=True, null=True)
+    concentration = models.DecimalField(
+        'Concentration in mg/l', max_digits=7, decimal_places=3, blank=True, null=True)
     dose = models.DecimalField(
-        'Dose in mg/kg', max_digits=7, decimal_places=4, blank=True, null=True)
+        'Dose in mg/kg', max_digits=9, decimal_places=4, blank=True, null=True)
     dose_interval = models.IntegerField(
         'Dose interval, in hours', blank=True, null=True)