diff --git a/src/sakia/data/entities/identity.py b/src/sakia/data/entities/identity.py
index 6f28d77c0e34a572281381d6d72c59691c69a389..d702fddb92280bd3ace1ebed4fdcb966c7068bf4 100644
--- a/src/sakia/data/entities/identity.py
+++ b/src/sakia/data/entities/identity.py
@@ -10,6 +10,7 @@ class Identity:
     blockstamp = attr.ib(convert=block_uid)
     signature = attr.ib(convert=str)
     timestamp = attr.ib(convert=int)
+    revoked = attr.ib(validator=attr.validators.instance_of(bool))
     member = attr.ib(validator=attr.validators.instance_of(bool))
     membership_buid = attr.ib(convert=block_uid)
     membership_timestamp = attr.ib(convert=int)
diff --git a/src/sakia/data/repositories/identities.py b/src/sakia/data/repositories/identities.py
index c766a21c76b2a9c1fc051eab3698716053b26c76..4fc27bcde4417be7002f2f7b2c1a29c13f596b96 100644
--- a/src/sakia/data/repositories/identities.py
+++ b/src/sakia/data/repositories/identities.py
@@ -14,7 +14,7 @@ class IdentitiesRepo:
         :param sakia.data.entities.Identity identity: the identity to commit
         """
         with self._conn:
-            self._conn.execute("INSERT INTO identities VALUES (?,?,?,?,?,?,?,?,?)", attr.astuple(identity))
+            self._conn.execute("INSERT INTO identities VALUES (?,?,?,?,?,?,?,?,?,?)", attr.astuple(identity))
 
     def update(self, identity):
         """
@@ -22,31 +22,66 @@ class IdentitiesRepo:
         :param sakia.data.entities.Identity identity: the identity to update
         """
         with self._conn:
-            self.conn.execute("UPDATE identities SET "
-                              "UID=?, "
-                              "BLOCKSTAMP=?,"
-                              "SIGNATURE=?, "
-                              "TS=?,"
-                              "MEMBER=?,"
-                              "MS_BUID=?,"
-                              "MS_TIMESTAMP=?"
-                              "WHERE CURRENCY=? AND PUBKEY=?", attr.astuple(identity)[2:] + (identity.currency,
-                                                                                         identity.pubkey)
+            self._conn.execute("UPDATE identities SET "
+                              "signature=?, "
+                              "ts=?,"
+                              "revoked=?"
+                              "member=?,"
+                              "ms_buid=?,"
+                              "ms_timestamp=?"
+                              "WHERE "
+                              "currency=? AND "
+                              "pubkey=? AND "
+                              "uid=? AND "
+                              "blockstamp=?", attr.astuple(identity)[4:] + (identity.currency,
+                                                                               identity.pubkey,
+                                                                               identity.uid,
+                                                                               identity.blockstamp)
                               )
 
-    def get_one(self, currency, pubkey):
+    def get_one(self, **search):
         """
         Get an existing identity in the database
-        :param str currency:
-        :param str pubkey:
+        :param dict search: the criterions of the lookup
         :rtype: sakia.data.entities.Identity
         """
         with self._conn:
-            c = self._conn.execute("SELECT * FROM identities WHERE currency=? AND pubkey=?", (currency, pubkey))
+            filters = []
+            values = []
+            for k, v in search.items():
+                filters.append("{k}=?".format(k=k))
+                values.append(v)
+
+            request = "SELECT * FROM identities WHERE "
+            request += " AND ".join(filters)
+
+            c = self._conn.execute(request, tuple(values))
             data = c.fetchone()
             if data:
                 return Identity(*data)
 
+    def get_all(self, **search):
+        """
+        Get all existing identity in the database corresponding to the search
+        :param dict search: the criterions of the lookup
+        :rtype: sakia.data.entities.Identity
+        """
+        with self._conn:
+            filters = []
+            values = []
+            for k, v in search.items():
+                filters.append("{k}=?".format(k=k))
+                values.append(v)
+
+            request = "SELECT * FROM identities WHERE "
+            request += " AND ".join(filters)
+
+            c = self._conn.execute(request, tuple(values))
+            datas = c.fetchall()
+            if datas:
+                return [Identity(*data) for data in datas]
+        return []
+
     def drop(self, currency, pubkey):
         """
         Drop an existing identity from the database
diff --git a/src/sakia/data/repositories/meta.py b/src/sakia/data/repositories/meta.py
index fd5ff42b3506b6d83b898068a0bf558f0f802d85..3d5587afe9b4270a91daaea50082ec8a5cbbd670 100644
--- a/src/sakia/data/repositories/meta.py
+++ b/src/sakia/data/repositories/meta.py
@@ -44,16 +44,17 @@ class MetaDatabase:
         """
         with self._conn:
             self._conn.execute("create table if not exists identities("
-                               "CURRENCY varchar(30), "
-                               "PUBKEY varchar(50),"
-                               "UID varchar(255),"
-                               "BLOCKSTAMP varchar(100),"
-                               "SIGNATURE varchar(100),"
-                               "TS int,"
-                               "MEMBER boolean,"
-                               "MS_BUID varchar(100),"
-                               "MS_TIMESTAMP int,"
-                               "PRIMARY KEY (CURRENCY, PUBKEY, UID, BLOCKSTAMP)"
+                               "currency varchar(30), "
+                               "pubkey varchar(50),"
+                               "uid varchar(255),"
+                               "blockstamp varchar(100),"
+                               "signature varchar(100),"
+                               "ts int,"
+                               "revoked boolean,"
+                               "member boolean,"
+                               "ms_buid varchar(100),"
+                               "ms_timestamp int,"
+                               "PRIMARY KEY (currency, pubkey, uid, blockstamp)"
                                ")"
                                )
 
diff --git a/src/sakia/tests/unit/data/test_identies_repo.py b/src/sakia/tests/unit/data/test_identies_repo.py
index ca91bd6d7bdfc43c698cc52ee536bc25e7d30668..c88eb1a991cda807fae2a444ec16eaa3e8fe6695 100644
--- a/src/sakia/tests/unit/data/test_identies_repo.py
+++ b/src/sakia/tests/unit/data/test_identies_repo.py
@@ -15,7 +15,7 @@ class TestIdentitiesRepo(unittest.TestCase):
     def tearDown(self):
         self.con.close()
 
-    def test_add_get_identity(self):
+    def test_add_get_drop_identity(self):
         meta_repo = MetaDatabase(self.con)
         meta_repo.prepare()
         meta_repo.upgrade_database()
@@ -28,7 +28,12 @@ class TestIdentitiesRepo(unittest.TestCase):
                                         False,
                                         None,
                                         0))
-        identity = identities_repo.get_one("testcurrency", "7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ")
+        identity = identities_repo.get_one(currency="testcurrency",
+                                           pubkey="7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ",
+                                           uid="john",
+                                           blockstamp=BlockUID(20,
+                                                    "7518C700E78B56CC21FB1DDC6CBAB24E0FACC9A798F5ED8736EA007F38617D67")
+                                           )
         self.assertEqual(identity.currency, "testcurrency")
         self.assertEqual(identity.pubkey, "7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ")
         self.assertEqual(identity.uid, "john")
@@ -40,9 +45,60 @@ class TestIdentitiesRepo(unittest.TestCase):
         self.assertEqual(identity.membership_buid, BlockUID.empty())
         self.assertEqual(identity.membership_timestamp, 0)
         identities_repo.drop("testcurrency", "7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ")
-        identity = identities_repo.get_one("testcurrency", "7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ")
+        identity = identities_repo.get_one(currency="testcurrency",
+                                           pubkey="7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ",
+                                           uid="john",
+                                           blockstamp=BlockUID(20,
+                                                    "7518C700E78B56CC21FB1DDC6CBAB24E0FACC9A798F5ED8736EA007F38617D67")
+                                            )
         self.assertIsNone(identity)
 
+    def test_add_get_multiple_identity(self):
+        meta_repo = MetaDatabase(self.con)
+        meta_repo.prepare()
+        meta_repo.upgrade_database()
+        identities_repo = IdentitiesRepo(self.con)
+        identities_repo.insert(Identity("testcurrency", "7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ",
+                                        "john",
+                                        "20-7518C700E78B56CC21FB1DDC6CBAB24E0FACC9A798F5ED8736EA007F38617D67",
+                                        "H41/8OGV2W4CLKbE35kk5t1HJQsb3jEM0/QGLUf80CwJvGZf3HvVCcNtHPUFoUBKEDQO9mPK3KJkqOoxHpqHCw==",
+                                        1473108382,
+                                        False,
+                                        None,
+                                        0))
+        identities_repo.insert(Identity("testcurrency", "FADxcH5LmXGmGFgdixSes6nWnC4Vb4pRUBYT81zQRhjn",
+                                        "doe",
+                                        "101-BAD49448A1AD73C978CEDCB8F137D20A5715EBAA739DAEF76B1E28EE67B2C00C",
+                                        "H41/8OGV2W4CLKbE35kk5t1HJQsb3jEM0/QGLUf80CwJvGZf3HvVCcNtHPUFoUBKEDQO9mPK3KJkqOoxHpqHCw==",
+                                        1455433535,
+                                        False,
+                                        None,
+                                        0))
+        identities = identities_repo.get_all(currency="testcurrency")
+        self.assertIn("testcurrency", [i.currency for i in identities])
+        self.assertIn("john", [i.uid for i in identities])
+        self.assertIn("doe", [i.uid for i in identities])
+
+    def test_add_update_identity(self):
+        meta_repo = MetaDatabase(self.con)
+        meta_repo.prepare()
+        meta_repo.upgrade_database()
+        identities_repo = IdentitiesRepo(self.con)
+        identity = Identity("testcurrency", "7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ",
+                                        "john",
+                                        "20-7518C700E78B56CC21FB1DDC6CBAB24E0FACC9A798F5ED8736EA007F38617D67",
+                                        "H41/8OGV2W4CLKbE35kk5t1HJQsb3jEM0/QGLUf80CwJvGZf3HvVCcNtHPUFoUBKEDQO9mPK3KJkqOoxHpqHCw==",
+                                        1473108382,
+                                        False,
+                                        None,
+                                        0)
+        identities_repo.insert(identity)
+        identity.member = True
+        identities_repo.update(identity)
+        identity2 = identities_repo.get_one(currency="testcurrency",
+                                            pubkey="7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ")
+        self.assertTrue(identity2.member)
+