diff --git a/src/cutecoin/core/account.py b/src/cutecoin/core/account.py
index b81f1c5ed2ee3807e9b9b8090632e1dc63a7e3ec..c1e4e235553e71d3933bd5890318e52e2c68abfc 100644
--- a/src/cutecoin/core/account.py
+++ b/src/cutecoin/core/account.py
@@ -9,6 +9,7 @@ from ucoinpy.api import bma
 from ucoinpy.api.bma import ConnectionHandler
 from ucoinpy.documents.peer import Peer
 from ucoinpy.documents.certification import SelfCertification, Certification
+from ucoinpy.documents.membership import Membership
 from ucoinpy.key import SigningKey
 from ..tools.exceptions import PersonNotFoundError
 
@@ -177,11 +178,21 @@ class Account(object):
                                     'self_': selfcert.signed_raw(),
                                     'other': []})
 
-    def send_membership_in(self, community):
-        return community.send_membership(self, "IN")
+    def send_membership(self, password, community, type):
+        self_ = Person.lookup(self.pubkey, community)
+        selfcert = self_.selfcert(community)
 
-    def send_membership_out(self, community):
-        return community.send_membership(self, "OUT")
+        block = community.get_block()
+        block_hash = hashlib.sha1(block.signed_raw().encode("ascii")).hexdigest().upper()
+        membership = Membership(PROTOCOL_VERSION, community.currency,
+                          selfcert.pubkey, block.number,
+                          block_hash, type, selfcert.uid,
+                          selfcert.timestamp, None)
+        key = SigningKey(self.salt, password)
+        membership.sign(key)
+        logging.debug("Membership : {0}".format(membership.signed_raw()))
+        community.post(bma.blockchain.Membership, {},
+                       {'membership': membership.signed_raw()})
 
     def jsonify_contacts(self):
         data = []
diff --git a/src/cutecoin/gui/community_tab.py b/src/cutecoin/gui/community_tab.py
index 2b6a43834ed840a3e6035fa3c32811077630750e..4af816ce9fd60ce877d136abd4b29b4780396bb0 100644
--- a/src/cutecoin/gui/community_tab.py
+++ b/src/cutecoin/gui/community_tab.py
@@ -5,8 +5,8 @@ Created on 2 févr. 2014
 '''
 
 import logging
-from PyQt5.QtCore import Qt, QSignalMapper
-from PyQt5.QtWidgets import QWidget, QErrorMessage, QAction, QMenu
+from PyQt5.QtCore import Qt
+from PyQt5.QtWidgets import QWidget, QMessageBox, QAction, QMenu, QInputDialog, QLineEdit
 from ..models.members import MembersListModel
 from ..gen_resources.community_tab_uic import Ui_CommunityTabWidget
 from .add_contact import AddContactDialog
@@ -89,11 +89,39 @@ class CommunityTabWidget(QWidget, Ui_CommunityTabWidget):
         dialog.exec_()
 
     def send_membership_demand(self):
-        result = self.account.send_membership_in(self.community)
-        if (result):
-            QErrorMessage(self).showMessage(result)
+        password = ""
+        message = "Please enter your password"
+
+        while not self.account.check_password(password):
+            password = QInputDialog.getText(self, "Account password",
+                        message,
+                        QLineEdit.Password)
+            message = "Error, wrong password. Please enter your password"
+            if password[1] is True:
+                password = password[0]
+            else:
+                return
+        try:
+            self.account.send_membership(password, self.community, 'IN')
+        except ValueError as e:
+            QMessageBox.critical(self, "Join demand error",
+                              e.message)
 
     def send_membership_leaving(self):
-        result = self.account.send_membership_out(self.community)
-        if (result):
-            QErrorMessage(self).showMessage(result)
+        password = ""
+        message = "Please enter your password"
+
+        while not self.account.check_password(password):
+            password = QInputDialog.getText(self, "Account password",
+                        message,
+                        QLineEdit.Password)
+            message = "Error, wrong password. Please enter your password"
+            if password[1] is True:
+                password = password[0]
+            else:
+                return
+        try:
+            self.account.send_membership(password, self.community, 'OUT')
+        except ValueError as e:
+            QMessageBox.critical(self, "Leaving demand error",
+                              e.message)
diff --git a/src/cutecoin/gui/process_cfg_community.py b/src/cutecoin/gui/process_cfg_community.py
index e82ea849d9f9362ed15b6a87cb31178cb0bad3a8..d719cd881ed3edf4fb2316d3a7cd75dea3dcd013 100644
--- a/src/cutecoin/gui/process_cfg_community.py
+++ b/src/cutecoin/gui/process_cfg_community.py
@@ -167,11 +167,13 @@ class ProcessConfigureCommunity(QDialog, Ui_CommunityConfigurationDialog):
                                  Would you like to publish the key ?".format(self.account.pubkey))
             if reply == QMessageBox.Yes:
                 password = ""
+                message = "Please enter your password"
 
                 while not self.account.check_password(password):
                     password = QInputDialog.getText(self, "Account password",
-                                "Wrong password.\nPlease enter your password",
+                                message,
                                 QLineEdit.Password)
+                    message = "Error, wrong password. Please enter your password"
                     if password[1] is True:
                         password = password[0]
                     else:
diff --git a/src/cutecoin/gui/transfer.py b/src/cutecoin/gui/transfer.py
index bca2bd35453864e9a75cdd1091c9aa1a88c361ad..029771805e0aff22a60ded0441e8f9874c292937 100644
--- a/src/cutecoin/gui/transfer.py
+++ b/src/cutecoin/gui/transfer.py
@@ -39,8 +39,6 @@ class TransferMoneyDialog(QDialog, Ui_TransferMoneyDialog):
         for contact in sender.contacts:
             self.combo_contact.addItem(contact.name)
 
-        self.edit_message.setEnabled(False)
-
     def accept(self):
         message = self.edit_message.text()