diff --git a/ippisite/ippidb/migrations/0003_auto_20170313_1948.py b/ippisite/ippidb/migrations/0003_auto_20170313_1948.py
new file mode 100644
index 0000000000000000000000000000000000000000..b331336d30b12d1a9897964b73f6514384211ada
--- /dev/null
+++ b/ippisite/ippidb/migrations/0003_auto_20170313_1948.py
@@ -0,0 +1,291 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.5 on 2017-03-13 19:48
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('ippidb', '0002_auto_20170221_1606'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Compound',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('canonical_smile', models.CharField(max_length=250, unique=True, verbose_name='Canonical Smile')),
+                ('is_macrocycle', models.BooleanField(verbose_name='Contains one or more macrocycles')),
+                ('aromatic_ratio', models.DecimalField(decimal_places=2, max_digits=3, verbose_name='Aromatic ratio')),
+                ('balaban_index', models.DecimalField(decimal_places=2, max_digits=3, verbose_name='Balaban index')),
+                ('fsp3', models.DecimalField(decimal_places=2, max_digits=3, verbose_name='Fsp3')),
+                ('dh_Petitjean', models.DecimalField(decimal_places=2, max_digits=4, verbose_name='Dh Petitjean')),
+                ('diam_graph_non_h_petitjean', models.IntegerField(verbose_name='Diameter for the molecular graph for heavy atoms (Petitjean)')),
+                ('gc_molar_refractivity', models.DecimalField(decimal_places=2, max_digits=5, verbose_name='GC Molar Refractivity')),
+                ('g_petitjean', models.DecimalField(decimal_places=2, max_digits=3, verbose_name='G Petitjean')),
+                ('ig_petitjean', models.DecimalField(decimal_places=2, max_digits=3, verbose_name='Ig Petitjean')),
+                ('log_d', models.DecimalField(decimal_places=2, max_digits=4, verbose_name='LogD (Partition coefficient octanol-1/water, with pKa information)')),
+                ('a_log_p', models.DecimalField(decimal_places=2, max_digits=4, verbose_name='ALogP (Partition coefficient octanol-1/water)')),
+                ('mean_atom_vol_vdw', models.DecimalField(decimal_places=2, max_digits=4, verbose_name='Mean atom volume computed with VdW radii')),
+                ('molecular_weight', models.DecimalField(decimal_places=2, max_digits=6, verbose_name='Molecular weight')),
+                ('nb_acceptor_h', models.IntegerField(verbose_name='Number of hydrogen bond acceptors')),
+                ('nb_aliphatic_amines', models.IntegerField(verbose_name='Number of aliphatics amines')),
+                ('nb_aromatic_bonds', models.IntegerField(verbose_name='Number of aromatic bonds')),
+                ('nb_aromatic_ether', models.IntegerField(verbose_name='Number of aromatic ethers')),
+                ('nb_aromatic_sssr', models.IntegerField(verbose_name='Number of aromatic Smallest Set of System Rings (SSSR)')),
+                ('nb_atom', models.IntegerField(verbose_name='Number of atoms')),
+                ('nb_atom_non_h', models.IntegerField(verbose_name='Number of non hydrogen atoms')),
+                ('nb_benzene_like_rings', models.IntegerField(verbose_name='Number of benzene-like rings')),
+                ('nb_bonds', models.IntegerField(verbose_name='Number of bonds')),
+                ('nb_bonds_non_h', models.IntegerField(verbose_name='Number of bonds not involving a hydrogen')),
+                ('nb_br', models.IntegerField(verbose_name='Number of Bromine atoms')),
+                ('nb_c', models.IntegerField(verbose_name='Number of Carbon atoms')),
+                ('nb_chiral_centers', models.IntegerField(verbose_name='Number of chiral centers')),
+                ('nb_circuits', models.IntegerField(verbose_name='Number of circuits')),
+                ('nb_cl', models.IntegerField(verbose_name='Number of Chlorine atoms')),
+                ('nb_csp2', models.IntegerField(verbose_name='Number of sp2-hybridized carbon atoms')),
+                ('nb_csp3', models.IntegerField(verbose_name='Number of sp3-hybridized carbon atoms')),
+                ('nb_donor_h', models.IntegerField(verbose_name='Number of hydrogen bond donors')),
+                ('nb_double_bonds', models.IntegerField(verbose_name='Number of double bonds')),
+                ('nb_f', models.IntegerField(verbose_name='Number of fluorine atoms')),
+                ('nb_i', models.IntegerField(verbose_name='Number of iodine atoms')),
+                ('nb_multiple_bonds', models.IntegerField(verbose_name='Number of multiple bonds')),
+                ('nb_n', models.IntegerField(verbose_name='Number of nitrogen atoms')),
+                ('nb_o', models.IntegerField(verbose_name='Number of oxygen atoms')),
+                ('nb_rings', models.IntegerField(verbose_name='Number of rings')),
+                ('nb_rotatable_bonds', models.IntegerField(verbose_name='Number of rotatable bonds')),
+                ('radius_graph_non_h_petitjean', models.IntegerField(verbose_name='Radius for the molecular graph for heavy atoms (Petitjean)')),
+                ('randic_index', models.DecimalField(decimal_places=2, max_digits=4, verbose_name='Randic index')),
+                ('rdf070m', models.DecimalField(decimal_places=2, max_digits=5, verbose_name='RDF070m, radial distribution function weighted by the atomic masses at 7Ã…')),
+                ('rotatable_bond_fraction', models.DecimalField(decimal_places=2, max_digits=3, verbose_name='Fraction of rotatable bonds')),
+                ('sum_atom_polar', models.DecimalField(decimal_places=2, max_digits=5, verbose_name='Sum of atomic polarizabilities')),
+                ('sum_atom_vol_vdw', models.DecimalField(decimal_places=2, max_digits=6, verbose_name='Sum of atom volumes computed with VdW radii')),
+                ('surface_vdw_petitjean', models.DecimalField(decimal_places=2, max_digits=6, verbose_name='Van der Waals surface area (Petitjean)')),
+                ('thickness_petitjean', models.DecimalField(decimal_places=2, max_digits=4, verbose_name='Thickness (Petitjean)')),
+                ('tpsa', models.DecimalField(decimal_places=2, max_digits=5, verbose_name='Topological Polar Surface Area (TPSA)')),
+                ('ui', models.DecimalField(decimal_places=2, max_digits=4, verbose_name='Unsaturation index')),
+                ('vol_vdw_petitjean', models.DecimalField(decimal_places=2, max_digits=7, verbose_name='Van der Waals volume (Petitjean)')),
+                ('wiener_index', models.IntegerField(verbose_name='Wiener index')),
+                ('common_name', models.CharField(blank=True, max_length=20, null=True, unique=True, verbose_name='Common name')),
+                ('pubchem_id', models.CharField(blank=True, max_length=10, null=True, unique=True, verbose_name='Pubchem ID')),
+                ('chemspider_id', models.CharField(blank=True, max_length=10, null=True, unique=True, verbose_name='Chemspider ID')),
+                ('chembl_id', models.CharField(blank=True, max_length=30, null=True, unique=True, verbose_name='Chembl ID')),
+                ('iupac_name', models.CharField(blank=True, max_length=255, null=True, unique=True, verbose_name='IUPAC name')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='MDDRCompoundActivityClass',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('activity_class', models.CharField(max_length=100, verbose_name='Activity Class')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='MDDRCompoundImport',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('mddr_compound_id', models.IntegerField(verbose_name='MDDR compound ID')),
+                ('mddr_name', models.CharField(max_length=40, verbose_name='MDDR name')),
+                ('dvpmt_phase', models.CharField(max_length=20, verbose_name='Development phase')),
+                ('canonical_smile', models.CharField(blank=True, max_length=500, null=True, unique=True, verbose_name='Canonical Smile')),
+                ('db_import_date', models.DecimalField(decimal_places=0, max_digits=6, verbose_name='MDDR release year/month')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='MDDRSimilarity',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('canonical_smile_ippidb', models.CharField(blank=True, max_length=500, null=True, unique=True, verbose_name='Canonical Smile for IPPIDB compound')),
+                ('canonical_smile_mddr', models.CharField(blank=True, max_length=500, null=True, unique=True, verbose_name='Canonical Smile for MDDR Compound')),
+                ('tanimoto', models.DecimalField(decimal_places=5, max_digits=6, verbose_name='Tanimoto')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='ProteinDomainComplex',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('ppc_copy_nb', models.IntegerField(verbose_name='Number of copies of the protein in the complex')),
+            ],
+            options={
+                'verbose_name_plural': 'complexes',
+            },
+        ),
+        migrations.CreateModel(
+            name='Symmetry',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('code', models.CharField(max_length=2, verbose_name='Symmetry code')),
+                ('description', models.CharField(max_length=300, verbose_name='Description')),
+            ],
+            options={
+                'verbose_name_plural': 'symmetries',
+            },
+        ),
+        migrations.RemoveField(
+            model_name='bindingsite',
+            name='domain_id',
+        ),
+        migrations.RemoveField(
+            model_name='bindingsite',
+            name='protein_id',
+        ),
+        migrations.RemoveField(
+            model_name='complex',
+            name='protein_id',
+        ),
+        migrations.RemoveField(
+            model_name='ppiarchitecture',
+            name='ppi_id',
+        ),
+        migrations.RemoveField(
+            model_name='ppi',
+            name='binding_site_id_1',
+        ),
+        migrations.RemoveField(
+            model_name='ppi',
+            name='binding_site_id_2',
+        ),
+        migrations.RemoveField(
+            model_name='ppi',
+            name='complex_id_1',
+        ),
+        migrations.RemoveField(
+            model_name='ppi',
+            name='complex_id_2',
+        ),
+        migrations.AddField(
+            model_name='ppi',
+            name='cc_nb',
+            field=models.IntegerField(default=1, verbose_name='Number of copies of the complex in the PPI'),
+        ),
+        migrations.AddField(
+            model_name='ppi',
+            name='pdb_id',
+            field=models.CharField(default=1, max_length=4, verbose_name='PDB ID'),
+            preserve_default=False,
+        ),
+        migrations.AddField(
+            model_name='ppi',
+            name='ppi_id',
+            field=models.IntegerField(default=1, verbose_name='PPI identifier'),
+            preserve_default=False,
+        ),
+        migrations.AlterField(
+            model_name='bibliography',
+            name='cytotox',
+            field=models.BooleanField(default=False, verbose_name='Cytotoxicity data'),
+        ),
+        migrations.AlterField(
+            model_name='bibliography',
+            name='in_cellulo',
+            field=models.BooleanField(default=False, verbose_name='in cellulo study performed'),
+        ),
+        migrations.AlterField(
+            model_name='bibliography',
+            name='in_silico',
+            field=models.BooleanField(default=False, verbose_name='in silico study performed'),
+        ),
+        migrations.AlterField(
+            model_name='bibliography',
+            name='in_vitro',
+            field=models.BooleanField(default=False, verbose_name='in vitro study performed'),
+        ),
+        migrations.AlterField(
+            model_name='bibliography',
+            name='in_vivo',
+            field=models.BooleanField(default=False, verbose_name='in vivo study performed'),
+        ),
+        migrations.AlterField(
+            model_name='bibliography',
+            name='pharmacokinetic',
+            field=models.BooleanField(default=False, verbose_name='pharmacokinetic study performed'),
+        ),
+        migrations.AlterField(
+            model_name='bibliography',
+            name='xray',
+            field=models.BooleanField(default=False, verbose_name='contains xray data'),
+        ),
+        migrations.AlterField(
+            model_name='disease',
+            name='disease_name',
+            field=models.CharField(max_length=30, verbose_name='Disease'),
+        ),
+        migrations.CreateModel(
+            name='ProteinDomainBoundComplex',
+            fields=[
+                ('proteindomaincomplex_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='ippidb.ProteinDomainComplex')),
+                ('ppp_copy_nb_per_p', models.IntegerField(verbose_name='Number of copies of the protein in the pocket')),
+                ('pockets_nb', models.IntegerField(verbose_name='Total number of pockets in the complex')),
+            ],
+            options={
+                'verbose_name_plural': 'bound complexes',
+            },
+            bases=('ippidb.proteindomaincomplex',),
+        ),
+        migrations.CreateModel(
+            name='ProteinDomainPartnerComplex',
+            fields=[
+                ('proteindomaincomplex_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='ippidb.ProteinDomainComplex')),
+            ],
+            options={
+                'verbose_name_plural': 'partner complexes',
+            },
+            bases=('ippidb.proteindomaincomplex',),
+        ),
+        migrations.DeleteModel(
+            name='BindingSite',
+        ),
+        migrations.DeleteModel(
+            name='Complex',
+        ),
+        migrations.DeleteModel(
+            name='PpiArchitecture',
+        ),
+        migrations.AddField(
+            model_name='proteindomaincomplex',
+            name='domain_id',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.Domain'),
+        ),
+        migrations.AddField(
+            model_name='proteindomaincomplex',
+            name='protein_id',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.Protein'),
+        ),
+        migrations.AlterUniqueTogether(
+            name='mddrsimilarity',
+            unique_together=set([('canonical_smile_ippidb', 'canonical_smile_mddr')]),
+        ),
+        migrations.AlterUniqueTogether(
+            name='mddrcompoundimport',
+            unique_together=set([('mddr_compound_id', 'mddr_name', 'dvpmt_phase')]),
+        ),
+        migrations.AddField(
+            model_name='mddrcompoundactivityclass',
+            name='mddr_compound_id',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ippidb.MDDRCompoundImport'),
+        ),
+        migrations.AddField(
+            model_name='compound',
+            name='mddr_compound_id',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='ippidb.MDDRCompoundImport'),
+        ),
+        migrations.AddField(
+            model_name='ppi',
+            name='complex_id',
+            field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='ippidb.ProteinDomainComplex'),
+            preserve_default=False,
+        ),
+        migrations.AddField(
+            model_name='ppi',
+            name='symmetry_id',
+            field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='ippidb.Symmetry'),
+            preserve_default=False,
+        ),
+        migrations.AlterUniqueTogether(
+            name='mddrcompoundactivityclass',
+            unique_together=set([('mddr_compound_id', 'activity_class')]),
+        ),
+    ]