diff --git a/migrations/versions/3fe66efb6088_.py b/migrations/versions/3fe66efb6088_.py
new file mode 100644
index 0000000000000000000000000000000000000000..0a2fc98542eac5803cad4b0a37f34512a10c183b
--- /dev/null
+++ b/migrations/versions/3fe66efb6088_.py
@@ -0,0 +1,73 @@
+""" empty message
+
+Revision ID: 3fe66efb6088
+Revises:
+Create Date: 2019-09-14 12:13:37.847931
+"""
+from alembic import op
+import sqlalchemy as sa
+
+
+revision = '3fe66efb6088'
+down_revision = None
+branch_labels = None
+depends_on = None
+
+
+def upgrade():
+    # ### commands auto generated by Alembic - please adjust! ###
+    op.create_table('service',
+    sa.Column('protocol', sa.String(length=25), nullable=True),
+    sa.Column('name', sa.String(length=255), nullable=True),
+    sa.Column('description', sa.String(), nullable=True),
+    sa.Column('max_profiles', sa.Integer(), nullable=True),
+    sa.Column('config', sa.String(), nullable=True),
+    sa.Column('uuid', sa.String(length=36), nullable=False),
+    sa.Column('created_at', sa.Date(), nullable=False),
+    sa.Column('updated_at', sa.Date(), nullable=True),
+    sa.Column('comment', sa.String(length=255), nullable=True),
+    sa.PrimaryKeyConstraint('uuid')
+    )
+    op.create_table('user',
+    sa.Column('username', sa.String(length=255), nullable=False),
+    sa.Column('uuid', sa.String(length=36), nullable=False),
+    sa.Column('created_at', sa.Date(), nullable=False),
+    sa.Column('updated_at', sa.Date(), nullable=True),
+    sa.Column('comment', sa.String(length=255), nullable=True),
+    sa.PrimaryKeyConstraint('uuid'),
+    sa.UniqueConstraint('username')
+    )
+    op.create_table('auth',
+    sa.Column('user_uuid', sa.String(length=36), nullable=True),
+    sa.Column('value', sa.String(), nullable=True),
+    sa.Column('extra', sa.String(), nullable=True),
+    sa.Column('uuid', sa.String(length=36), nullable=False),
+    sa.Column('created_at', sa.Date(), nullable=False),
+    sa.Column('updated_at', sa.Date(), nullable=True),
+    sa.Column('comment', sa.String(length=255), nullable=True),
+    sa.ForeignKeyConstraint(['user_uuid'], ['user.uuid'], ),
+    sa.PrimaryKeyConstraint('uuid')
+    )
+    op.create_table('profile',
+    sa.Column('user_uuid', sa.String(length=36), nullable=True),
+    sa.Column('service_uuid', sa.String(length=36), nullable=True),
+    sa.Column('username', sa.String(length=255), nullable=False),
+    sa.Column('status', sa.String(length=25), nullable=False),
+    sa.Column('uuid', sa.String(length=36), nullable=False),
+    sa.Column('created_at', sa.Date(), nullable=False),
+    sa.Column('updated_at', sa.Date(), nullable=True),
+    sa.Column('comment', sa.String(length=255), nullable=True),
+    sa.ForeignKeyConstraint(['service_uuid'], ['service.uuid'], ),
+    sa.ForeignKeyConstraint(['user_uuid'], ['user.uuid'], ),
+    sa.PrimaryKeyConstraint('uuid')
+    )
+    # ### end Alembic commands ###
+
+
+def downgrade():
+    # ### commands auto generated by Alembic - please adjust! ###
+    op.drop_table('profile')
+    op.drop_table('auth')
+    op.drop_table('user')
+    op.drop_table('service')
+    # ### end Alembic commands ###
diff --git a/migrations/versions/546912a5c987_.py b/migrations/versions/546912a5c987_.py
deleted file mode 100644
index 80e798d1ab4b7a9eb8b19a56d932243942a36447..0000000000000000000000000000000000000000
--- a/migrations/versions/546912a5c987_.py
+++ /dev/null
@@ -1,26 +0,0 @@
-""" Add a uuid per profile
-
-Revision ID: 546912a5c987
-Revises: a95b3a78f983
-Create Date: 2019-09-12 22:32:19.352747
-"""
-from alembic import op
-import sqlalchemy as sa
-
-
-revision = '546912a5c987'
-down_revision = 'a95b3a78f983'
-branch_labels = None
-depends_on = None
-
-
-def upgrade():
-    with op.batch_alter_table('profile') as batch:
-        batch.add_column(sa.Column('uuid', sa.String(length=36)))
-        batch.create_unique_constraint('profile_unique', ['uuid'])
-
-
-def downgrade():
-    with op.batch_alter_table('profile') as batch:
-        batch.drop_constraint('profile_unique', type_='unique')
-        batch.drop_column('uuid')
diff --git a/migrations/versions/a95b3a78f983_.py b/migrations/versions/a95b3a78f983_.py
deleted file mode 100644
index a53916a70feff5962d13bd10901aaafe7a281025..0000000000000000000000000000000000000000
--- a/migrations/versions/a95b3a78f983_.py
+++ /dev/null
@@ -1,68 +0,0 @@
-""" Create initial schemas
-
-Revision ID: a95b3a78f983
-Revises:
-Create Date: 2019-09-10 21:33:43.332000
-"""
-
-from alembic import op
-import sqlalchemy as sa
-
-
-revision = 'a95b3a78f983'
-down_revision = None
-branch_labels = None
-depends_on = None
-
-
-def upgrade():
-    op.create_table('service',
-        sa.Column('spn', sa.String(length=255), nullable=True),
-        sa.Column('protocol', sa.String(length=25), nullable=True),
-        sa.Column('config', sa.String(), nullable=True),
-        sa.Column('id', sa.Integer(), nullable=False),
-        sa.Column('created_at', sa.Date(), nullable=False),
-        sa.Column('updated_at', sa.Date(), nullable=True),
-        sa.Column('comment', sa.String(length=255), nullable=True),
-        sa.PrimaryKeyConstraint('id'),
-        sa.UniqueConstraint('spn')
-    )
-    op.create_table('user',
-        sa.Column('username', sa.String(length=255), nullable=False),
-        sa.Column('id', sa.Integer(), nullable=False),
-        sa.Column('created_at', sa.Date(), nullable=False),
-        sa.Column('updated_at', sa.Date(), nullable=True),
-        sa.Column('comment', sa.String(length=255), nullable=True),
-        sa.PrimaryKeyConstraint('id'),
-        sa.UniqueConstraint('username')
-    )
-    op.create_table('auth',
-        sa.Column('user_id', sa.Integer(), nullable=True),
-        sa.Column('value', sa.String(), nullable=True),
-        sa.Column('extra', sa.String(), nullable=True),
-        sa.Column('id', sa.Integer(), nullable=False),
-        sa.Column('created_at', sa.Date(), nullable=False),
-        sa.Column('updated_at', sa.Date(), nullable=True),
-        sa.Column('comment', sa.String(length=255), nullable=True),
-        sa.ForeignKeyConstraint(['user_id'], ['user.id'], ),
-        sa.PrimaryKeyConstraint('id')
-    )
-    op.create_table('profile',
-        sa.Column('user_id', sa.Integer(), nullable=True),
-        sa.Column('service_id', sa.Integer(), nullable=True),
-        sa.Column('username', sa.String(length=255), nullable=False),
-        sa.Column('id', sa.Integer(), nullable=False),
-        sa.Column('created_at', sa.Date(), nullable=False),
-        sa.Column('updated_at', sa.Date(), nullable=True),
-        sa.Column('comment', sa.String(length=255), nullable=True),
-        sa.ForeignKeyConstraint(['service_id'], ['service.id'], ),
-        sa.ForeignKeyConstraint(['user_id'], ['user.id'], ),
-        sa.PrimaryKeyConstraint('id')
-    )
-
-
-def downgrade():
-    op.drop_table('profile')
-    op.drop_table('auth')
-    op.drop_table('user')
-    op.drop_table('service')
diff --git a/trurt/models.py b/trurt/models.py
index 57b3338017df75c3a61e1b7a29404a27299e17ab..b65fcac91b19fefc98c2ef7a3936be2aeba8e0c8 100644
--- a/trurt/models.py
+++ b/trurt/models.py
@@ -20,8 +20,9 @@ class Base(flask_sqlalchemy.Model):
     )
 
     @declarative.declared_attr
-    def id(cls):
-        return sqlalchemy.Column(sqlalchemy.Integer(), primary_key=True)
+    def uuid(cls):
+        return sqlalchemy.Column(sqlalchemy.String(36), primary_key=True,
+            default=lambda: str(uuid.uuid4()))
 
     @declarative.declared_attr
     def created_at(cls):
@@ -88,7 +89,8 @@ class User(db.Model):
         profile.service = service
         profile.user = self
         profile.username = self.username
-        profile.uuid = self.username
+        profile.uuid = self.uuid
+        profile.status = Profile.ACTIVE
         return profile
 
 
@@ -97,7 +99,7 @@ class Auth(db.Model):
     """
     __tablename__ = "auth"
 
-    user_id = db.Column(db.Integer(), db.ForeignKey(User.id))
+    user_uuid = db.Column(db.String(36), db.ForeignKey(User.uuid))
     user = db.relationship(User,
         backref=db.backref('auths', cascade='all, delete-orphan'))
     # TODO: support multiple authentication realms, therefore more than
@@ -117,8 +119,10 @@ class Service(db.Model):
     """
     __tablename__ = "service"
 
-    spn = db.Column(db.String(255), unique=True)
     protocol = db.Column(db.String(25))
+    name = db.Column(db.String(255))
+    description = db.Column(db.String())
+    max_profiles = db.Column(db.Integer())
     config = db.Column(JSONEncoded)
 
 
@@ -127,15 +131,17 @@ class Profile(db.Model):
     """
     __tablename__ = "profile"
 
-    user_id = db.Column(db.Integer(), db.ForeignKey(User.id))
-    service_id = db.Column(db.Integer(), db.ForeignKey(Service.id))
+    ACTIVE = "active"
+
+    user_uuid = db.Column(db.String(36), db.ForeignKey(User.uuid))
+    service_uuid = db.Column(db.String(36), db.ForeignKey(Service.uuid))
     user = db.relationship(User,
         backref=db.backref('profiles', cascade='all, delete-orphan'))
     service = db.relationship(Service,
         backref=db.backref('profiles', cascade='all, delete-orphan'))
 
-    uuid = db.Column(db.String(36), unique=True, default=lambda: str(uuid.uuid4()))
     username = db.Column(db.String(255), nullable=False)
+    status = db.Column(db.String(25), nullable=False, default=ACTIVE)
 
     @property
     def email(self):