diff --git a/.coveragerc b/.coveragerc
index f21739a5fbd2ad0e0d69334d2dc7b6931e60f1ea..61b95053157b216bbb468b409e958a57b510191f 100644
--- a/.coveragerc
+++ b/.coveragerc
@@ -1,10 +1,11 @@
 [run]
 source =
-    note_kfet
-    note_theme
-    note_adherents
+    adherents
+    note
+    theme
 omit =
-    note_theme/tests/*.py
-    note_theme/migrations/*.py
-    note_adherents/tests/*.py
-    note_adherents/migrations/*.py
+    adherents/tests/*.py
+    adherents/migrations/*.py
+    note/tests/*.py
+    note/migrations/*.py
+    theme/tests/*.py
\ No newline at end of file
diff --git a/adherents/admin.py b/adherents/admin.py
index 72b4015e2ebb2f0c5917a5cb8f825bbf82c918fd..a6918d19dcb50b8e217ee9e2e174300d4693afc0 100644
--- a/adherents/admin.py
+++ b/adherents/admin.py
@@ -11,7 +11,9 @@ from .models import Profile
 
 
 class ProfileInline(admin.StackedInline):
-    """Inline user profile in user admin"""
+    """
+    Inline user profile in user admin
+    """
     model = Profile
     can_delete = False
 
diff --git a/adherents/migrations/0001_initial.py b/adherents/migrations/0001_initial.py
index 9b0992c9ce4916d8c2e09637b354e041f63d53c0..32433430f25f09dfb3127cdbe96689acbeb8ea60 100644
--- a/adherents/migrations/0001_initial.py
+++ b/adherents/migrations/0001_initial.py
@@ -1,4 +1,4 @@
-# Generated by Django 2.2.3 on 2019-07-08 11:48
+# Generated by Django 2.2.3 on 2019-07-16 07:17
 
 from django.conf import settings
 from django.db import migrations, models
@@ -18,8 +18,14 @@ class Migration(migrations.Migration):
             name='Profile',
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('phone_number', models.CharField(max_length=255, verbose_name='phone number')),
+                ('avatar', models.ImageField(blank=True, max_length=255, upload_to='', verbose_name='profile picture')),
+                ('phone_number', models.CharField(blank=True, default='', max_length=50, null=True, verbose_name='phone number')),
                 ('section', models.CharField(help_text='e.g. "1A0", "9A♥", "SAPHIRE"', max_length=255, verbose_name='section')),
+                ('genre', models.CharField(blank=True, choices=[(None, 'ND'), ('M', 'M'), ('F', 'F')], max_length=1, null=True)),
+                ('address', models.TextField(blank=True, null=True)),
+                ('paid', models.BooleanField(default=False, verbose_name='paid')),
+                ('is_active', models.BooleanField(default=True, verbose_name='is active')),
+                ('is_deleted', models.BooleanField(default=False, verbose_name='is deleted')),
                 ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
             ],
             options={
diff --git a/adherents/models.py b/adherents/models.py
index cb81a28790fc79c2f59123cf8707cbd569e2b2b0..947499bd7b8a355000daa647060274670a5b4022 100644
--- a/adherents/models.py
+++ b/adherents/models.py
@@ -17,7 +17,6 @@ class Profile(models.Model):
     We do not want to patch the Django Contrib Auth User class
     so this model add an user profile with additional information.
     """
-
     GENRES = [
         (None, "ND"),
         ("M", "M"),
@@ -31,13 +30,12 @@ class Profile(models.Model):
     avatar = models.ImageField(
         max_length=255,
         blank=True,
-        verbose_name=_('profile picture')
+        verbose_name=_('profile picture'),
     )
-
     phone_number = models.CharField(
         max_length=50,
         blank=True,
-        null=False,
+        null=True,
         default='',
         verbose_name=_('phone number'),
     )
@@ -46,33 +44,33 @@ class Profile(models.Model):
         verbose_name=_('section'),
         help_text=_('e.g. "1A0", "9A♥", "SAPHIRE"'),
     )
-    genre = models.CharField(max_length=1,
-                            blank=False,
-                            null=False,
-                            choices=GENRES
+    genre = models.CharField(
+        max_length=1,
+        blank=True,
+        null=True,
+        choices=GENRES,
     )
     address = models.TextField(
         blank=True,
-        null=False,
-        default=''
+        null=True,
     )
-    remunere = models.BooleanField(verbose_name=_("rémunéré"),
-                                   default=False,
+    paid = models.BooleanField(
+        verbose_name=_("paid"),
+        default=False,
     )
-    is_active = models.BooleanField(verbose_name=_("compte actif"),
-                                    default=True
+    is_active = models.BooleanField(
+        verbose_name=_("is active"),
+        default=True,
     )
-    is_deleted = models.BooleanField(verbose_name=_("compte supprimé"),
-                                     default=False
+    is_deleted = models.BooleanField(
+        verbose_name=_("is deleted"),
+        default=False,
     )
 
     class Meta:
         verbose_name = _('user profile')
         verbose_name_plural = _('user profile')
 
-    def __str__(self):
-        return self.user.get_username()
-
 
 class MembershipFee(models.Model):
     """
@@ -87,7 +85,7 @@ class MembershipFee(models.Model):
         verbose_name=_('date'),
     )
     amount = models.DecimalField(
-        max_digits=5, # Max 999.99 €
+        max_digits=5,  # Max 999.99 €
         decimal_places=2,
         verbose_name=_('amount'),
     )
@@ -96,12 +94,9 @@ class MembershipFee(models.Model):
         verbose_name = _('membership fee')
         verbose_name_plural = _('membership fees')
 
-    def __str__(self):
-        return self.user.get_username()
-
 
 @receiver(post_save, sender=User)
-def save_user_profile(sender, instance, created, **_kwargs):
+def save_user_profile(instance, created, **_kwargs):
     """
     Hook to save an user profile when an user is updated
     """
diff --git a/note/__init__.py b/note/__init__.py
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..4773b310daa1e485c9301f33514e27ef13411a4b 100644
--- a/note/__init__.py
+++ b/note/__init__.py
@@ -0,0 +1,5 @@
+# -*- mode: python; coding: utf-8 -*-
+# Copyright (C) 2018-2019 by BDE ENS Paris-Saclay
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+default_app_config = 'note.apps.NoteConfig'
diff --git a/note/admin.py b/note/admin.py
index d7ff9c076f880b7992e99d513edec77a94011bde..122c11e37adf870c85821a9cdd7cb820519c250b 100644
--- a/note/admin.py
+++ b/note/admin.py
@@ -1,7 +1,8 @@
 from django.contrib import admin
 
-from .models import NoteClub,NoteSpec,NoteUser
+from .models import NoteClub, NoteSpec, NoteUser
 from .models import Alias
+
 # Register your models here.
 admin.site.register(NoteClub)
 admin.site.register(NoteSpec)
diff --git a/note/apps.py b/note/apps.py
index eab40c5eb0be6d6503ac49d97864b98d9dd7bd58..439140b318ae14712df6636c412439a39ade1b74 100644
--- a/note/apps.py
+++ b/note/apps.py
@@ -1,5 +1,11 @@
+# -*- mode: python; coding: utf-8 -*-
+# Copyright (C) 2018-2019 by BDE ENS Paris-Saclay
+# SPDX-License-Identifier: GPL-3.0-or-later
+
 from django.apps import AppConfig
+from django.utils.translation import gettext_lazy as _
 
 
 class NoteConfig(AppConfig):
     name = 'note'
+    verbose_name = _('note')
diff --git a/note/migrations/0001_initial.py b/note/migrations/0001_initial.py
index 5f777cac2a73366f780d773ca6ad4948cde79c38..b694bbf96876faab525ae7347bfe62f8daabeb3a 100644
--- a/note/migrations/0001_initial.py
+++ b/note/migrations/0001_initial.py
@@ -1,4 +1,4 @@
-# Generated by Django 2.2.3 on 2019-07-08 14:08
+# Generated by Django 2.2.3 on 2019-07-16 07:17
 
 from django.conf import settings
 from django.db import migrations, models
@@ -19,8 +19,8 @@ class Migration(migrations.Migration):
             name='NoteClub',
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('solde', models.IntegerField(help_text="en centime, l' argent crédité pour cette instance", verbose_name='solde du compte')),
-                ('active', models.BooleanField(default=True, verbose_name='etat du compte')),
+                ('balance', models.DecimalField(decimal_places=2, default=0, help_text='money credited for this instance', max_digits=8, verbose_name='account balance')),
+                ('is_active', models.BooleanField(default=True, verbose_name='is active')),
             ],
             options={
                 'abstract': False,
@@ -30,9 +30,9 @@ class Migration(migrations.Migration):
             name='NoteSpec',
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('solde', models.IntegerField(help_text="en centime, l' argent crédité pour cette instance", verbose_name='solde du compte')),
-                ('active', models.BooleanField(default=True, verbose_name='etat du compte')),
-                ('account_type', models.CharField(choices=[('CH', 'chèques'), ('CB', 'Carte Bancaire'), ('VB', 'Virement Bancaire'), ('CA', 'Cash'), ('RB', 'Remboursement')], max_length=2, unique=True)),
+                ('balance', models.DecimalField(decimal_places=2, default=0, help_text='money credited for this instance', max_digits=8, verbose_name='account balance')),
+                ('is_active', models.BooleanField(default=True, verbose_name='is active')),
+                ('account_type', models.CharField(choices=[('CH', 'bank check'), ('CB', 'credit card'), ('VB', 'bank transfer'), ('CA', 'cash'), ('RB', 'refund')], max_length=2, unique=True)),
             ],
             options={
                 'abstract': False,
@@ -42,13 +42,13 @@ class Migration(migrations.Migration):
             name='NoteUser',
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('solde', models.IntegerField(help_text="en centime, l' argent crédité pour cette instance", verbose_name='solde du compte')),
-                ('active', models.BooleanField(default=True, verbose_name='etat du compte')),
+                ('balance', models.DecimalField(decimal_places=2, default=0, help_text='money credited for this instance', max_digits=8, verbose_name='account balance')),
+                ('is_active', models.BooleanField(default=True, verbose_name='is active')),
                 ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
             ],
             options={
-                'verbose_name': "One's Note",
-                'verbose_name_plural': 'Users Note',
+                'verbose_name': "one's note",
+                'verbose_name_plural': 'users note',
             },
         ),
         migrations.CreateModel(
diff --git a/note/models.py b/note/models.py
index d5b2ebdd631b98743fa42fba0ceeba3b8d6dbfa6..8424355d7a6d0d5c99a067e95f9266ea70c41f8a 100644
--- a/note/models.py
+++ b/note/models.py
@@ -17,71 +17,73 @@ class Alias(models.Model):
     """
     alias = models.TextField(
         "alias",
-        unique = True,
-        blank = False,
-        null = False,
+        unique=True,
+        blank=False,
+        null=False,
     )
-    limit = models.Q(app_label="note", model="NoteUser") | models.Q(app_label="note",model="NoteClub")
 
+    # Owner can be linked to an user note or a club note
+    limit = models.Q(app_label="note", model="NoteUser") | models.Q(app_label="note", model="NoteClub")
     owner_id = models.PositiveIntegerField()
-    owner_type = models.ForeignKey(ContentType,
-                                   on_delete=models.CASCADE,
-                                   limit_choices_to=limit)
-    owner = GenericForeignKey('owner_type','owner_id')
+    owner_type = models.ForeignKey(
+        ContentType,
+        on_delete=models.CASCADE,
+        limit_choices_to=limit
+    )
+    owner = GenericForeignKey('owner_type', 'owner_id')
+
 
 class Note(models.Model):
     """
     An abstract model, use to add transactions capabilities to a user
     """
-
-    solde = models.IntegerField(
-        verbose_name=_('solde du compte'),
-        help_text=_("en centime, l' argent crédité pour cette instance")
+    balance = models.DecimalField(
+        verbose_name=_('account balance'),
+        help_text=_("money credited for this instance"),
+        decimal_places=2,  # Limit to centimes
+        max_digits=8,  # Limit to 999999,99€
+        default=0,
     )
-    active = models.BooleanField(
-        default = True,
-        verbose_name=_('etat du compte')
+    is_active = models.BooleanField(
+        default=True,
+        verbose_name=_('is active')
     )
 
     class Meta:
         abstract = True
 
+
 class NoteUser(Note):
     """
-    A Note associated to a User
+    A Note associated to an User
     """
     user = models.OneToOneField(
         settings.AUTH_USER_MODEL,
         on_delete=models.CASCADE,
     )
-    class Meta:
-        verbose_name = _("One's Note")
-        verbose_name_plural = _("Users Note")
 
-    def __str__(self):
-        return self.user.get_username()
+    class Meta:
+        verbose_name = _("one's note")
+        verbose_name_plural = _("users note")
 
 
 class NoteSpec(Note):
     """
-    A Note for special Account, where real money enter or leave the system.
-     - Cash
-     - Credit Card
-     - Bank Transfert
-     - Bank Check
-     - Refund
+    A Note for special account, where real money enter or leave the system
     """
     account_type = models.CharField(
-        max_length = 2,
-        choices = (("CH","chèques"),
-                   ("CB","Carte Bancaire"),
-                   ("VB","Virement Bancaire"),
-                   ("CA","Cash"),
-                   ("RB","Remboursement")
+        max_length=2,
+        choices=(
+            ("CH", _("bank check")),
+            ("CB", _("credit card")),
+            ("VB", _("bank transfer")),
+            ("CA", _("cash")),
+            ("RB", _("refund")),
         ),
-        unique = True
+        unique=True,
     )
 
+
 class NoteClub(Note):
-    #to be added
+    # to be added
     pass
diff --git a/note/tests.py b/note/tests.py
deleted file mode 100644
index 7ce503c2dd97ba78597f6ff6e4393132753573f6..0000000000000000000000000000000000000000
--- a/note/tests.py
+++ /dev/null
@@ -1,3 +0,0 @@
-from django.test import TestCase
-
-# Create your tests here.
diff --git a/note/tests/__init__.py b/note/tests/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/note/views.py b/note/views.py
deleted file mode 100644
index 91ea44a218fbd2f408430959283f0419c921093e..0000000000000000000000000000000000000000
--- a/note/views.py
+++ /dev/null
@@ -1,3 +0,0 @@
-from django.shortcuts import render
-
-# Create your views here.
diff --git a/note_kfet/urls.py b/note_kfet/urls.py
index e2cd4951b6f2f7af3722f5479197a2950cd57ffc..e78fee229fdcf8bf9c296683708f8344125eee77 100644
--- a/note_kfet/urls.py
+++ b/note_kfet/urls.py
@@ -15,7 +15,7 @@ urlpatterns = [
     path('i18n/', include('django.conf.urls.i18n')),
     path('accounts/', include('django.contrib.auth.urls')),
     path('accounts/profile/',
-        RedirectView.as_view(pattern_name='index')),
+         RedirectView.as_view(pattern_name='index')),
     path('admin/doc/', include('django.contrib.admindocs.urls')),
     path('admin/', admin.site.urls),
 ]