diff --git a/res/ui/mainwindow.ui b/res/ui/mainwindow.ui
index b31de7e4eb3a0e8edc9e407be94f5ecafd6b5663..d763df0b434fbabb35c07754421b1c5bab175293 100644
--- a/res/ui/mainwindow.ui
+++ b/res/ui/mainwindow.ui
@@ -117,7 +117,7 @@
      <height>20</height>
     </rect>
    </property>
-   <widget class="QMenu" name="menuTr_File">
+   <widget class="QMenu" name="menu_account">
     <property name="title">
      <string>Account</string>
     </property>
@@ -132,12 +132,19 @@
     <addaction name="actionSave"/>
     <addaction name="actionQuit"/>
    </widget>
-   <widget class="QMenu" name="menuEdit">
+   <widget class="QMenu" name="menu_contacts">
     <property name="title">
      <string>Contacts</string>
     </property>
+    <widget class="QMenu" name="menu_contactsList">
+     <property name="title">
+      <string>Contacts</string>
+     </property>
+     <addaction name="separator"/>
+    </widget>
     <addaction name="separator"/>
     <addaction name="actionAdd_a_contact"/>
+    <addaction name="menu_contactsList"/>
    </widget>
    <widget class="QMenu" name="menuActions">
     <property name="title">
@@ -145,8 +152,8 @@
     </property>
     <addaction name="actionTransfer_money"/>
    </widget>
-   <addaction name="menuTr_File"/>
-   <addaction name="menuEdit"/>
+   <addaction name="menu_account"/>
+   <addaction name="menu_contacts"/>
    <addaction name="menuActions"/>
   </widget>
   <widget class="QStatusBar" name="statusbar"/>
diff --git a/src/cutecoin/gui/addContactDialog.py b/src/cutecoin/gui/addContactDialog.py
index e3e2c99c7d9c1f36bb1a372d0875d8376e412e27..ae9e754352669774084a988f6d88f27db17c03f5 100644
--- a/src/cutecoin/gui/addContactDialog.py
+++ b/src/cutecoin/gui/addContactDialog.py
@@ -4,7 +4,7 @@ Created on 2 févr. 2014
 @author: inso
 '''
 import logging
-
+import re
 from PyQt5.QtWidgets import QDialog, QDialogButtonBox
 
 
@@ -16,21 +16,29 @@ class AddContactDialog(QDialog, Ui_AddContactDialog):
     '''
     classdocs
     '''
-    def __init__(self, account):
+    def __init__(self, account, parent=None):
         '''
         Constructor
         '''
         super(AddContactDialog, self).__init__()
         self.setupUi(self)
+        self.account = account
+        self.mainWindow = parent
+        self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(False)
 
 
     def accept(self):
-        #TODO: Add a contact on acceptance
-        pass
+        name = self.edit_name.text()
+        fingerprint = self.edit_fingerprint.text()
+        email = self.edit_email.text()
+        self.account.addContact(Person(name, fingerprint, email))
+        self.mainWindow.menu_contactsList.addAction(name)
+        self.close()
 
     def nameEdited(self, newName):
         self.buttonBox.button(QDialogButtonBox.Ok).setEnabled( len(newName) > 0 )
 
     def fingerprintEdited(self, newFingerprint):
-        self.buttonBox.button(QDialogButtonBox.Ok).setEnabled( len(newFingerprint) == 32 )
+        pattern = re.compile("([A-Z]|[0-9])+")
+        self.buttonBox.button(QDialogButtonBox.Ok).setEnabled( pattern.match(newFingerprint) is not None )
 
diff --git a/src/cutecoin/gui/mainWindow.py b/src/cutecoin/gui/mainWindow.py
index 65c2c9b4169b01666f87eeae544547b07f102a00..8be75f1714c3da111f1c05a5c628e4c607307acc 100644
--- a/src/cutecoin/gui/mainWindow.py
+++ b/src/cutecoin/gui/mainWindow.py
@@ -45,7 +45,6 @@ class MainWindow(QMainWindow, Ui_MainWindow):
             self.core.addAccount(self.addAccountDialog.account)
         except KeyAlreadyUsed as e:
             QErrorMessage(self).showMessage(e.message)
-
         self.refreshMainWindow()
 
     def save(self):
@@ -61,7 +60,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
         TransferMoneyDialog(self.core.currentAccount).exec_()
 
     def openAddContactDialog(self):
-        AddContactDialog(self.core.currentAccount).exec_()
+        AddContactDialog(self.core.currentAccount, self).exec_()
 
     '''
     Refresh main window
@@ -86,10 +85,16 @@ class MainWindow(QMainWindow, Ui_MainWindow):
             self.accountNameLabel.setText("Current account : " + self.core.currentAccount.name)
             self.walletsList.setModel(WalletsListModel(self.core.currentAccount))
             self.walletContent.setModel(WalletListModel(self.core.currentAccount.wallets.walletsList[0]))
+
             self.communitiesTab.clear()
             for community in self.core.currentAccount.communities.communitiesList:
                 communityTab = CommunityTabWidget(self.core.currentAccount, community)
                 self.communitiesTab.addTab(communityTab, community.name())
+
+            self.menu_contactsList.clear()
+            for contact in self.core.currentAccount.contacts:
+                self.menu_contactsList.addAction(contact.name)
+
             self.transactionsSent.setModel(SentListModel(self.core.currentAccount))
             self.transactionsReceived.setModel(ReceivedListModel(self.core.currentAccount))
 
diff --git a/src/cutecoin/gui/transferMoneyDialog.py b/src/cutecoin/gui/transferMoneyDialog.py
index 442941e195ef4d251cd73e114b70ad756c5fe43a..3ad80f976dcae2d9627daf6cba5b4cc0e565ce2a 100644
--- a/src/cutecoin/gui/transferMoneyDialog.py
+++ b/src/cutecoin/gui/transferMoneyDialog.py
@@ -6,7 +6,7 @@ Created on 2 févr. 2014
 import logging
 from math import pow
 
-from PyQt5.QtWidgets import QDialog,QFrame, QSlider, QLabel, QDialogButtonBox
+from PyQt5.QtWidgets import QDialog,QFrame, QSlider, QLabel, QDialogButtonBox, QErrorMessage
 from PyQt5.QtCore import Qt, QSignalMapper
 
 
@@ -31,6 +31,9 @@ class TransferMoneyDialog(QDialog, Ui_TransferMoneyDialog):
         for wallet in sender.wallets.walletsList:
             self.comboBox_wallets.addItem(wallet.getText())
 
+        for contact in sender.contacts:
+            self.comboBox_contact.addItem(contact.name)
+
         self.refreshTransaction(sender.wallets.walletsList[0])
 
 
@@ -62,14 +65,13 @@ class TransferMoneyDialog(QDialog, Ui_TransferMoneyDialog):
         pass
 
     def accept(self):
-        sentCoins = self.listView_coinsSent.model().toString()
+        sentCoins = self.listView_coinsSent.model().toList()
         recipient = None
 
         if self.radio_keyFingerprint.isChecked():
             recipient = Person("", self.edit_keyFingerprint.text(), "")
         else:
-            #TODO: Manage contacts
-            recipient = Person("", self.edit_keyFingerprint.text(), "")
+            recipient = self.sender.contacts[self.comboBox_contact.currentIndex()]
 
         if self.radio_nodeAddress.isChecked():
             node = Node(self.edit_nodeAddress.text(), int(self.edit_port.text()))
@@ -79,7 +81,10 @@ class TransferMoneyDialog(QDialog, Ui_TransferMoneyDialog):
 
         message = self.edit_message.text()
         #TODO: Transfer money, and validate the window if no error happened
-        print(self.sender.transferCoins(node, recipient, sentCoins, message))
+        if self.sender.transferCoins(node, recipient, sentCoins, message):
+            self.close()
+        else:
+            QErrorMessage(self).showMessage("Cannot transfer coins.")
 
     def changeDisplayedWallet(self, index):
         wallet = self.sender.wallets.walletsList[index]
diff --git a/src/cutecoin/models/account/__init__.py b/src/cutecoin/models/account/__init__.py
index abfa4e31761bd8638540aa6927d738ad3338dbd3..0a55405f38f71dfcf9572f1adc56f260330c937d 100644
--- a/src/cutecoin/models/account/__init__.py
+++ b/src/cutecoin/models/account/__init__.py
@@ -12,6 +12,7 @@ from cutecoin.models.account.wallets import Wallets
 from cutecoin.models.account.communities import Communities
 from cutecoin.models.community import Community
 from cutecoin.models.transaction import factory
+from cutecoin.models.person import Person
 
 class Account(object):
     '''
@@ -59,10 +60,10 @@ class Account(object):
 
         return account
 
-    def addWallet(name, currency):
+    def addWallet(self, name, currency):
         self.wallets.addWallet(name, currency)
 
-    def addContact(person):
+    def addContact(self, person):
         self.contacts.append(person)
 
     def keyFingerprint(self):
@@ -121,13 +122,20 @@ class Account(object):
             return issuance()
 
     def transferCoins(self, node, recipient, coins, message):
-        transfer = ucoin.wrappers.transactions.Transfer(self.keyFingerprint(), recipient.fingerprint, coins, message, keyid=self.pgpKeyId, server=node.server, port=node.port)
+        transfer = ucoin.wrappers.transactions.RawTransfer(self.keyFingerprint(), recipient.fingerprint, coins, message, keyid=self.pgpKeyId, server=node.server, port=node.port)
         return transfer()
 
+    def jsonifyContacts(self):
+        data = []
+        for p in self.contacts:
+            data.append(p.jsonify())
+        return data
+
     def jsonify(self):
         data = {'name' : self.name,
                 'pgpKeyId' : self.pgpKeyId,
-                'communities' : self.communities.jsonify(self.wallets)}
+                'communities' : self.communities.jsonify(self.wallets),
+                'contacts' : self.jsonifyContacts()}
         return data
 
 
diff --git a/src/cutecoin/models/coin/listModel.py b/src/cutecoin/models/coin/listModel.py
index 3b7d973594c9d4e345539467e2b220602fcce5ee..f167e4678dfc6316e87e3f7dd90347392f992141 100644
--- a/src/cutecoin/models/coin/listModel.py
+++ b/src/cutecoin/models/coin/listModel.py
@@ -29,9 +29,8 @@ class CoinsListModel(QAbstractListModel):
     def flags(self,index):
         return Qt.ItemIsSelectable | Qt.ItemIsEnabled
 
-    def toString(self):
+    def toList(self):
         coinsList = []
         for c in self.coins:
             coinsList.append(c.getId())
-        coinsStr = ",".join(coinsList)
-        return coinsStr
\ No newline at end of file
+        return coinsList
\ No newline at end of file
diff --git a/src/cutecoin/models/person/__init__.py b/src/cutecoin/models/person/__init__.py
index dc913e7ad62e1459aea8b4168dbd17295f92feeb..4c837608872d2266f3f4276eb176f22022958a7d 100644
--- a/src/cutecoin/models/person/__init__.py
+++ b/src/cutecoin/models/person/__init__.py
@@ -46,7 +46,13 @@ class Person(object):
         Create a person from json data
         '''
         name = jsonPerson['name']
-        pgpFingerprint = jsonPerson['fingerprint']
+        fingerprint = jsonPerson['fingerprint']
         email = jsonPerson['email']
-        return cls(name, pgpFingerprint, email)
+        return cls(name, fingerprint, email)
+
+    def jsonify(self):
+        data = {'name' : self.name,
+                'fingerprint' : self.fingerprint,
+                'email' : self.email}
+        return data
 
diff --git a/src/cutecoin/models/wallet/__init__.py b/src/cutecoin/models/wallet/__init__.py
index 65386c5187ba7f1d7c10850066017407f4fc71fa..1de4d1a6a6ce80851a1f443c44f448b07282f7ab 100644
--- a/src/cutecoin/models/wallet/__init__.py
+++ b/src/cutecoin/models/wallet/__init__.py
@@ -46,6 +46,7 @@ class Wallet(object):
             value += coin.value()
         return value
 
+    #TODO: Refresh coins when changing current account
     def refreshCoins(self, pgpFingerprint):
         dataList = self.community.ucoinRequest(ucoin.hdc.coins.List({'pgp_fingerprint':pgpFingerprint}))
         for issaunces in dataList['coins']: