diff --git a/htdocs/accountancy/admin/card.php b/htdocs/accountancy/admin/card.php
index c07c1f6b301b382179756b7e89e2dc414962292e..eeb94bddf605f1ff177e776538f2ef1e467f7f65 100644
--- a/htdocs/accountancy/admin/card.php
+++ b/htdocs/accountancy/admin/card.php
@@ -28,6 +28,7 @@ require '../../main.inc.php';
 require_once DOL_DOCUMENT_ROOT . '/core/lib/accounting.lib.php';
 require_once DOL_DOCUMENT_ROOT . '/accountancy/class/accountingaccount.class.php';
 require_once DOL_DOCUMENT_ROOT . '/accountancy/class/html.formventilation.class.php';
+require_once DOL_DOCUMENT_ROOT . '/core/class/html.formaccounting.class.php';
 
 $error = 0;
 
@@ -45,7 +46,7 @@ $cancel = GETPOST('cancel');
 if (! $user->admin)
 	accessforbidden();
 
-$accounting = new AccountingAccount($db);
+$object = new AccountingAccount($db);
 
 // Action
 if ($action == 'add') {
@@ -59,15 +60,16 @@ if ($action == 'add') {
 		// Clean code
 		$account_number = clean_account(GETPOST('account_number')); // Accounting account without zero on the right
 		
-		$accounting->fk_pcg_version = $obj->pcg_version;
-		$accounting->pcg_type = GETPOST('pcg_type');
-		$accounting->pcg_subtype = GETPOST('pcg_subtype');
-		$accounting->account_number = $account_number;
-		$accounting->account_parent = GETPOST('account_parent', 'int');
-		$accounting->label = GETPOST('label', 'alpha');
-		$accounting->active = 1;
+		$object->fk_pcg_version = $obj->pcg_version;
+		$object->pcg_type = GETPOST('pcg_type');
+		$object->pcg_subtype = GETPOST('pcg_subtype');
+		$object->account_number = $account_number;
+		$object->account_parent = GETPOST('account_parent', 'int');
+		$object->account_category = GETPOST('account_category');
+		$object->label = GETPOST('label', 'alpha');
+		$object->active = 1;
 		
-		$res = $accounting->create($user);
+		$res = $object->create($user);
 		
 		if ($res == 0) {
 		} else {
@@ -84,25 +86,26 @@ if ($action == 'add') {
 	Header("Location: account.php");
 } else if ($action == 'edit') {
 	if (! GETPOST('cancel', 'alpha')) {
-		$result = $accounting->fetch($id);
+		$result = $object->fetch($id);
 		
 		$sql = 'SELECT pcg_version FROM ' . MAIN_DB_PREFIX . 'accounting_system WHERE rowid=' . $conf->global->CHARTOFACCOUNTS;
 		
 		dol_syslog('accountancy/admin/card.php:: $sql=' . $sql);
 		$result2 = $db->query($sql);
 		$obj = $db->fetch_object($result2);
-		
+
 		// Clean code
 		$account_number = clean_account(GETPOST('account_number')); // Accounting account without zero on the right
 		
-		$accounting->fk_pcg_version = $obj->pcg_version;
-		$accounting->pcg_type = GETPOST('pcg_type');
-		$accounting->pcg_subtype = GETPOST('pcg_subtype');
-		$accounting->account_number = $account_number;
-		$accounting->account_parent = GETPOST('account_parent', 'int');
-		$accounting->label = GETPOST('label', 'alpha');
+		$object->fk_pcg_version = $obj->pcg_version;
+		$object->pcg_type = GETPOST('pcg_type');
+		$object->pcg_subtype = GETPOST('pcg_subtype');
+		$object->account_number = $account_number;
+		$object->account_parent = GETPOST('account_parent', 'int');
+		$object->account_category = GETPOST('account_category');
+		$object->label = GETPOST('label', 'alpha');
 		
-		$result = $accounting->update($user);
+		$result = $object->update($user);
 		
 		if ($result > 0) {
 			header("Location: " . $_SERVER["PHP_SELF"] . "?id=" . $id);
@@ -115,10 +118,10 @@ if ($action == 'add') {
 		exit();
 	}
 } else if ($action == 'delete') {
-	$result = $accounting->fetch($id);
+	$result = $object->fetch($id);
 	
-	if (! empty($accounting->id)) {
-		$result = $accounting->delete($user);
+	if (! empty($object->id)) {
+		$result = $object->delete($user);
 		
 		if ($result > 0) {
 			Header("Location: account.php");
@@ -126,7 +129,7 @@ if ($action == 'add') {
 	}
 	
 	if ($result < 0) {
-		setEventMessages($accounting->error, $accounting->errors, 'errors');
+		setEventMessages($object->error, $object->errors, 'errors');
 	}
 }
 
@@ -137,7 +140,9 @@ llxheader('', $langs->trans('AccountAccounting'));
 
 $form = new Form($db);
 $htmlacc = new FormVentilation($db);
+$formaccounting = new FormAccounting($db);
 
+// Create mode
 if ($action == 'create') {
 	print load_fiche_titre($langs->trans('NewAccount'));
 	
@@ -148,22 +153,37 @@ if ($action == 'create') {
 	dol_fiche_head();
 	
 	print '<table class="border" width="100%">';
-	
+
+	// Account number
 	print '<tr><td width="25%"><span class="fieldrequired">' . $langs->trans("AccountNumber") . '</span></td>';
-	print '<td><input name="account_number" size="30" value="' . $accounting->account_number . '"</td></tr>';
+	print '<td><input name="account_number" size="30" value="' . $object->account_number . '"</td></tr>';
+
+	// Label
 	print '<tr><td><span class="fieldrequired">' . $langs->trans("Label") . '</span></td>';
-	print '<td><input name="label" size="70" value="' . $accounting->label . '"</td></tr>';
+	print '<td><input name="label" size="70" value="' . $object->label . '"</td></tr>';
+
+	// Account parent
 	print '<tr><td>' . $langs->trans("Accountparent") . '</td>';
 	print '<td>';
-	print $htmlacc->select_account($accounting->account_parent, 'account_parent', 1);
+	print $htmlacc->select_account($object->account_parent, 'account_parent', 1);
 	print '</td></tr>';
+
+	// Category
+	print '<tr><td>' . $langs->trans("AccountingCategory") . '</td>';
+	print '<td>';
+	$formaccounting->select_accounting_category($object->account_category, 'account_category', 1);
+	print '</td></tr>';
+
+	// Chart of accounts type
 	print '<tr><td>' . $langs->trans("Pcgtype") . '</td>';
 	print '<td>';
-	print $htmlacc->select_pcgtype($accounting->pcg_type, 'pcg_type');
+	print $htmlacc->select_pcgtype($object->pcg_type, 'pcg_type');
 	print '</td></tr>';
+
+	// Chart of acounts subtype
 	print '<tr><td>' . $langs->trans("Pcgsubtype") . '</td>';
 	print '<td>';
-	print $htmlacc->select_pcgsubtype($accounting->pcg_subtype, 'pcg_subtype');
+	print $htmlacc->select_pcgsubtype($object->pcg_subtype, 'pcg_subtype');
 	print '</td></tr>';
 	
 	print '</table>';
@@ -178,14 +198,14 @@ if ($action == 'create') {
 	
 	print '</form>';
 } else if ($id) {
-	$rowid = $id;
-	$account = $accounting->fetch($rowid);
+	$result = $object->fetch($id);
 	
-	if ($account > 0) {
+	if ($result > 0) {
 		dol_htmloutput_mesg($mesg);
 		
-		$head = accounting_prepare_head($accounting);
+		$head = accounting_prepare_head($object);
 		
+		// Edit mode
 		if ($action == 'update') {
 			$soc = new Societe($db);
 			if ($object->socid) {
@@ -201,21 +221,36 @@ if ($action == 'create') {
 			
 			print '<table class="border" width="100%">';
 			
+			// Account number
 			print '<tr><td width="25%"><span class="fieldrequired">' . $langs->trans("AccountNumber") . '</span></td>';
-			print '<td><input name="account_number" size="30" value="' . $accounting->account_number . '"</td></tr>';
+			print '<td><input name="account_number" size="30" value="' . $object->account_number . '"</td></tr>';
+			
+			// Label
 			print '<tr><td><span class="fieldrequired">' . $langs->trans("Label") . '</span></td>';
-			print '<td><input name="label" size="70" value="' . $accounting->label . '"</td></tr>';
+			print '<td><input name="label" size="70" value="' . $object->label . '"</td></tr>';
+			
+			// Account parent
 			print '<tr><td>' . $langs->trans("Accountparent") . '</td>';
 			print '<td>';
-			print $htmlacc->select_account($accounting->account_parent, 'account_parent', 1);
+			print $htmlacc->select_account($object->account_parent, 'account_parent', 1);
 			print '</td></tr>';
+
+			// Category
+            print '<tr><td>'.$langs->trans("AccountingCategory").'</td>';
+			print '<td>';
+            $formaccounting->select_accounting_category($object->account_category, 'account_category', 1);
+            print '</td></tr>';
+
+			// Chart of accounts type
 			print '<tr><td>' . $langs->trans("Pcgtype") . '</td>';
 			print '<td>';
-			print $htmlacc->select_pcgtype($accounting->pcg_type, 'pcg_type');
+			print $htmlacc->select_pcgtype($object->pcg_type, 'pcg_type');
 			print '</td></tr>';
+
+			// Chart of accounts subtype
 			print '<tr><td>' . $langs->trans("Pcgsubtype") . '</td>';
 			print '<td>';
-			print $htmlacc->select_pcgsubtype($accounting->pcg_subtype, 'pcg_subtype');
+			print $htmlacc->select_pcgsubtype($object->pcg_subtype, 'pcg_subtype');
 			print '</td></tr>';
 			
 			print '</table>';
@@ -230,6 +265,8 @@ if ($action == 'create') {
 			
 			print '</form>';
 		} else {
+			
+			// View mode
 			$linkback = '<a href="../admin/account.php">' . $langs->trans("BackToChartofaccounts") . '</a>';
 			
 			dol_fiche_head($head, 'card', $langs->trans('AccountAccounting'), 0, 'billr');
@@ -238,29 +275,37 @@ if ($action == 'create') {
 			
 			// Account number
 			print '<tr><td width="25%">' . $langs->trans("AccountNumber") . '</td>';
-			print '<td>' . $accounting->account_number . '</td>';
+			print '<td>' . $object->account_number . '</td>';
 			print '<td align="right" width="25%">' . $linkback . '</td></tr>';
-			
+
+			// Label
 			print '<tr><td>' . $langs->trans("Label") . '</td>';
-			print '<td colspan="2">' . $accounting->label . '</td></tr>';
-			
+			print '<td colspan="2">' . $object->label . '</td></tr>';
+
+			// Account parent
 			$accp = new AccountingAccount($db);
-			if (! empty($accounting->account_parent)) {
-				$accp->fetch($accounting->account_parent, '');
+			if (! empty($object->account_parent)) {
+				$accp->fetch($object->account_parent, '');
 			}
 			print '<tr><td>' . $langs->trans("Accountparent") . '</td>';
 			print '<td colspan="2">' . $accp->account_number . ' - ' . $accp->label . '</td></tr>';
-			
+
+			// Category
+			print "<tr><td>".$langs->trans("AccountingCategory")."</td><td colspan='2'>".$object->account_category_label."</td>";
+
+			// Chart of accounts type
 			print '<tr><td>' . $langs->trans("Pcgtype") . '</td>';
-			print '<td colspan="2">' . $accounting->pcg_type . '</td></tr>';
-			
+			print '<td colspan="2">' . $object->pcg_type . '</td></tr>';
+
+			// Chart of accounts subtype
 			print '<tr><td>' . $langs->trans("Pcgsubtype") . '</td>';
-			print '<td colspan="2">' . $accounting->pcg_subtype . '</td></tr>';
-			
+			print '<td colspan="2">' . $object->pcg_subtype . '</td></tr>';
+
+			// Active
 			print '<tr><td>' . $langs->trans("Activated") . '</td>';
 			print '<td colspan="2">';
 			
-			if (empty($accounting->active)) {
+			if (empty($object->active)) {
 				print img_picto($langs->trans("Disabled"), 'switch_off');
 			} else {
 				print img_picto($langs->trans("Activated"), 'switch_on');
@@ -273,7 +318,7 @@ if ($action == 'create') {
 			dol_fiche_end();
 			
 			/*
-			 * Barre d'actions
+			 * Actions buttons
 			 */
 			
 			print '<div class="tabsAction">';
diff --git a/htdocs/accountancy/class/accountingaccount.class.php b/htdocs/accountancy/class/accountingaccount.class.php
index df45f027259c76a40b79e56be6d0c6cc8a940297..d01fda8fee919fedaa624a47f515ccf53ad6e2bf 100644
--- a/htdocs/accountancy/class/accountingaccount.class.php
+++ b/htdocs/accountancy/class/accountingaccount.class.php
@@ -1,6 +1,6 @@
 <?php
 /* Copyright (C) 2013-2014 Olivier Geffroy      <jeff@jeffinfo.com>
- * Copyright (C) 2013-2015 Alexandre Spangaro   <aspangaro.dolibarr@gmail.com>
+ * Copyright (C) 2013-2016 Alexandre Spangaro   <aspangaro.dolibarr@gmail.com>
  * Copyright (C) 2013-2014 Florian Henry		<florian.henry@open-concept.pro>
  * Copyright (C) 2014 	   Juanjo Menent		<jmenent@2byte.es>
  * Copyright (C) 2015      Ari Elbaz (elarifr)  <github@accedinfo.com>
@@ -20,9 +20,9 @@
  */
 
 /**
- * \file htdocs/accountancy/class/accountingaccount.class.php
- * \ingroup Accounting Expert
- * \brief Fichier de la classe des comptes comptable
+ * \file		htdocs/accountancy/class/accountingaccount.class.php
+ * \ingroup		Accounting Expert
+ * \brief		Fichier de la classe des comptes comptable
  */
 
 /**
@@ -41,6 +41,7 @@ class AccountingAccount extends CommonObject
 	var $pcg_subtype;
 	var $account_number;
 	var $account_parent;
+	var $account_category;
 	var $label;
 	var $fk_user_author;
 	var $fk_user_modif;
@@ -58,25 +59,29 @@ class AccountingAccount extends CommonObject
 	/**
 	 * Load record in memory
 	 *
-	 * @param int $rowid Id
-	 * @param string $account_number Account number
-	 * @param int $limittocurentchart 1=Do not load record if it is into another accounting system
-	 * @return int <0 if KO, >0 if OK
+	 * @param 	int 	$rowid 				Id
+	 * @param 	string 	$account_number 	Account number
+	 * @param 	int 	$limittocurrentchart 1=Do not load record if it is into another accounting system
+	 * @return 	int <0 if KO, >0 if OK
 	 */
-	function fetch($rowid = null, $account_number = null, $limittocurentchart = 0) {
+	function fetch($rowid = null, $account_number = null, $limittocurrentchart = 0) {
 		global $conf;
 		
 		if ($rowid || $account_number) {
-			$sql = "SELECT rowid, datec, tms, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, fk_user_author, fk_user_modif, active";
-			$sql .= " FROM " . MAIN_DB_PREFIX . "accounting_account WHERE";
+			$sql  = "SELECT a.rowid as rowid, a.datec, a.tms, a.fk_pcg_version, a.pcg_type, a.pcg_subtype, a.account_number, a.account_parent, a.label, a.fk_accounting_category, a.fk_user_author, a.fk_user_modif, a.active";
+			$sql .= ", ca.label as category_label";
+			$sql .= " FROM " . MAIN_DB_PREFIX . "accounting_account as a";
+			$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_accounting_category as ca ON a.fk_accounting_category = ca.rowid";
+			$sql .= " WHERE";
 			if ($rowid) {
-				$sql .= " rowid = '" . $rowid . "'";
+				$sql .= " a.rowid = '" . $rowid . "'";
 			} elseif ($account_number) {
-				$sql .= " account_number = '" . $account_number . "'";
+				$sql .= " a.account_number = '" . $account_number . "'";
 			}
-			if (! empty($limittocurentchart)) {
-				$sql .= ' AND fk_pcg_version IN (SELECT pcg_version FROM ' . MAIN_DB_PREFIX . 'accounting_system WHERE rowid=' . $conf->global->CHARTOFACCOUNTS . ')';
+			if (! empty($limittocurrentchart)) {
+				$sql .= ' AND a.fk_pcg_version IN (SELECT pcg_version FROM ' . MAIN_DB_PREFIX . 'accounting_system WHERE rowid=' . $conf->global->CHARTOFACCOUNTS . ')';
 			}
+
 			dol_syslog(get_class($this) . "::fetch sql=" . $sql, LOG_DEBUG);
 			$result = $this->db->query($sql);
 			if ($result) {
@@ -93,6 +98,8 @@ class AccountingAccount extends CommonObject
 					$this->account_number = $obj->account_number;
 					$this->account_parent = $obj->account_parent;
 					$this->label = $obj->label;
+					$this->account_category = $obj->fk_accounting_category;
+					$this->account_category_label = $obj->category_label;
 					$this->fk_user_author = $obj->fk_user_author;
 					$this->fk_user_modif = $obj->fk_user_modif;
 					$this->active = $obj->active;
@@ -134,6 +141,8 @@ class AccountingAccount extends CommonObject
 			$this->account_parent = trim($this->account_parent);
 		if (isset($this->label))
 			$this->label = trim($this->label);
+		if (isset($this->account_category))
+			$this->account_category = trim($this->account_category);
 		if (isset($this->fk_user_author))
 			$this->fk_user_author = trim($this->fk_user_author);
 		if (isset($this->active))
@@ -153,6 +162,7 @@ class AccountingAccount extends CommonObject
 		$sql .= ", account_number";
 		$sql .= ", account_parent";
 		$sql .= ", label";
+		$sql .= ", fk_accounting_category";
 		$sql .= ", fk_user_author";
 		$sql .= ", active";
 		
@@ -166,6 +176,7 @@ class AccountingAccount extends CommonObject
 		$sql .= ", " . (! isset($this->account_number) ? 'NULL' : "'" . $this->account_number . "'");
 		$sql .= ", " . (! isset($this->account_parent) ? 'NULL' : "'" . $this->db->escape($this->account_parent) . "'");
 		$sql .= ", " . (! isset($this->label) ? 'NULL' : "'" . $this->db->escape($this->label) . "'");
+		$sql .= ", " . (! isset($this->account_category) ? 'NULL' : "'" . $this->db->escape($this->account_category) . "'");
 		$sql .= ", " . $user->id;
 		$sql .= ", " . (! isset($this->active) ? 'NULL' : "'" . $this->db->escape($this->active) . "'");
 		
@@ -226,6 +237,7 @@ class AccountingAccount extends CommonObject
 		$sql .= " , account_number = '" . $this->account_number . "'";
 		$sql .= " , account_parent = '" . $this->account_parent . "'";
 		$sql .= " , label = " . ($this->label ? "'" . $this->db->escape($this->label) . "'" : "null");
+		$sql .= " , fk_accounting_category = '" . $this->account_category . "'";
 		$sql .= " , fk_user_modif = " . $user->id;
 		$sql .= " , active = '" . $this->active . "'";
 		
diff --git a/htdocs/admin/dict.php b/htdocs/admin/dict.php
index 01b379abf0d9f387e7f85aa8e190c83c0ea8a444..d88df512b8cb5665ce625cfd46e18c644e46f7cf 100644
--- a/htdocs/admin/dict.php
+++ b/htdocs/admin/dict.php
@@ -115,7 +115,7 @@ $tabname[28]= MAIN_DB_PREFIX."c_holiday_types";
 $tabname[29]= MAIN_DB_PREFIX."c_lead_status";
 $tabname[30]= MAIN_DB_PREFIX."c_format_cards";
 $tabname[31]= MAIN_DB_PREFIX."accounting_system";
-$tabname[32]= MAIN_DB_PREFIX."c_accountancy_category";
+$tabname[32]= MAIN_DB_PREFIX."c_accounting_category";
 $tabname[33]= MAIN_DB_PREFIX."c_hrm_department";
 $tabname[34]= MAIN_DB_PREFIX."c_hrm_function";
 
@@ -189,7 +189,7 @@ $tabsql[28]= "SELECT h.rowid as rowid, h.code, h.label, h.affect, h.delay, h.new
 $tabsql[29]= "SELECT rowid   as rowid, code, label, percent, position, active FROM ".MAIN_DB_PREFIX."c_lead_status";
 $tabsql[30]= "SELECT rowid, code, name, paper_size, orientation, metric, leftmargin, topmargin, nx, ny, spacex, spacey, width, height, font_size, custom_x, custom_y, active FROM ".MAIN_DB_PREFIX."c_format_cards";
 $tabsql[31]= "SELECT s.rowid as rowid, pcg_version, s.fk_pays as country_id, c.code as country_code, c.label as country, s.label, s.active FROM ".MAIN_DB_PREFIX."accounting_system as s, ".MAIN_DB_PREFIX."c_country as c WHERE s.fk_pays=c.rowid and c.active=1";
-$tabsql[32]= "SELECT a.rowid as rowid, a.code as code, a.label, a.range, a.position, a.fk_country as country_id, c.code as country_code, c.label as country, a.active FROM ".MAIN_DB_PREFIX."c_accountancy_category as a, ".MAIN_DB_PREFIX."c_country as c WHERE a.fk_country=c.rowid and c.active=1";
+$tabsql[32]= "SELECT a.rowid as rowid, a.code as code, a.label, a.range, a.position, a.fk_country as country_id, c.code as country_code, c.label as country, a.active FROM ".MAIN_DB_PREFIX."c_accounting_category as a, ".MAIN_DB_PREFIX."c_country as c WHERE a.fk_country=c.rowid and c.active=1";
 $tabsql[33]= "SELECT rowid, pos, code, label, active FROM ".MAIN_DB_PREFIX."c_hrm_department";
 $tabsql[34]= "SELECT rowid, pos, code, label, c_level, active FROM ".MAIN_DB_PREFIX."c_hrm_function";
 
diff --git a/htdocs/core/class/html.formaccounting.class.php b/htdocs/core/class/html.formaccounting.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..e8664e3166d01f7cd9929c6a3a5e1697ea0ef57b
--- /dev/null
+++ b/htdocs/core/class/html.formaccounting.class.php
@@ -0,0 +1,116 @@
+<?php
+/* Copyright (C) 2016 		Alexandre Spangaro <aspangaro.dolibarr@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ *	\file       htdocs/core/class/html.formaccounting.class.php
+ *  \ingroup    Advanced accountancy
+ *	\brief      File of class with all html predefined components
+ */
+
+
+/**
+ *	Class to manage generation of HTML components for accounting management
+ */
+class FormAccounting
+{
+	var $db;
+	var $error;
+
+
+	/**
+	* Constructor
+	*
+	* @param		DoliDB		$db      Database handler
+	*/
+	public function __construct($db)
+	{
+	    $this->db = $db;
+	}
+
+    /**
+     *	Return list of accounting category.
+     * 	Use mysoc->country_id or mysoc->country_code so they must be defined.
+     *
+     *	@param	string	$selected       Preselected type
+     *	@param  string	$htmlname       Name of field in form
+     * 	@param	int		$useempty		Set to 1 if we want an empty value
+     * 	@param	int		$maxlen			Max length of text in combo box
+     * 	@param	int		$help			Add or not the admin help picto
+     * 	@return	void
+     */
+    function select_accounting_category($selected='',$htmlname='account_category', $useempty=0, $maxlen=64, $help=1)
+    {
+        global $db,$langs,$user,$mysoc;
+
+        if (empty($mysoc->country_id) && empty($mysoc->country_code))
+        {
+            dol_print_error('','Call to select_accounting_account with mysoc country not yet defined');
+            exit;
+        }
+
+        if (! empty($mysoc->country_id))
+        {
+            $sql = "SELECT c.rowid, c.label as type, c.range";
+            $sql.= " FROM ".MAIN_DB_PREFIX."c_accounting_category as c";
+            $sql.= " WHERE c.active = 1";
+            $sql.= " AND c.fk_country = ".$mysoc->country_id;
+            $sql.= " ORDER BY c.label ASC";
+        }
+        else
+        {
+            $sql = "SELECT c.rowid, c.label as type, c.range";
+            $sql.= " FROM ".MAIN_DB_PREFIX."c_accounting_category as c, ".MAIN_DB_PREFIX."c_country as co";
+            $sql.= " WHERE c.active = 1 AND c.fk_country = co.rowid";
+            $sql.= " AND co.code = '".$mysoc->country_code."'";
+            $sql.= " ORDER BY c.label ASC";
+        }
+
+        dol_syslog("Form::select_accounting_category", LOG_DEBUG);
+        $resql=$db->query($sql);
+        if ($resql)
+        {
+            $num = $db->num_rows($resql);
+            if ($num)
+            {
+                print '<select class="flat" name="'.$htmlname.'">';
+                $i = 0;
+
+                if ($useempty) print '<option value="0">&nbsp;</option>';
+                while ($i < $num)
+                {
+                    $obj = $db->fetch_object($resql);
+                    print '<option value="'.$obj->rowid.'"';
+                    if ($obj->rowid == $selected) print ' selected';
+                    print '>'.dol_trunc($obj->type,$maxlen);
+					print ' ('.$obj->range.')';
+                    $i++;
+                }
+                print '</select>';
+                if ($user->admin && $help) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"),1);
+            }
+            else
+            {
+                print $langs->trans("ErrorNoAccountingCategoryForThisCountry",$mysoc->country_code);
+            }
+        }
+        else
+        {
+            dol_print_error($db,$db->lasterror());
+        }
+    }
+}
+
diff --git a/htdocs/install/mysql/migration/3.9.0-4.0.0.sql b/htdocs/install/mysql/migration/3.9.0-4.0.0.sql
index ab71e70e863712bccc8ab92419ccd6e87974ee0e..78dfbf95be92bb85a7cbd5fb7ca2cb17bc73eba4 100644
--- a/htdocs/install/mysql/migration/3.9.0-4.0.0.sql
+++ b/htdocs/install/mysql/migration/3.9.0-4.0.0.sql
@@ -21,6 +21,9 @@
 -- -- VPGSQL8.2 DELETE FROM llx_usergroup_user      WHERE fk_user      NOT IN (SELECT rowid from llx_user);
 -- -- VMYSQL4.1 DELETE FROM llx_usergroup_user      WHERE fk_usergroup NOT IN (SELECT rowid from llx_usergroup);
 
+-- Drop old table not used (Informations are already presents in llx_accounting_bookkeeping)
+DROP TABLE llx_accountingtransaction;
+DROP TABLE llx_accountingdebcred;
 
 -- Already into 3.9 but we do it again to be sure
 ALTER TABLE llx_product ADD COLUMN localtax1_type varchar(10)  NOT NULL DEFAULT '0' after localtax1_tx; 
@@ -326,6 +329,8 @@ ALTER TABLE llx_actioncomm MODIFY COLUMN elementtype varchar(255) DEFAULT NULL;
 
 DELETE FROM llx_menu where module='expensereport';
 
+ALTER TABLE llx_accounting_account ADD COLUMN fk_accounting_category integer DEFAULT 0 after label;
+
 CREATE TABLE llx_c_accounting_category (
   rowid 		integer NOT NULL AUTO_INCREMENT PRIMARY KEY,
   code 			varchar(16) NOT NULL,
@@ -336,4 +341,4 @@ CREATE TABLE llx_c_accounting_category (
   active 		integer DEFAULT 1
 ) ENGINE=innodb;
 
-ALTER TABLE llx_c_accounting_category ADD UNIQUE INDEX uk_c_accounting_category(code);
\ No newline at end of file
+ALTER TABLE llx_c_accounting_category ADD UNIQUE INDEX uk_c_accounting_category(code);
diff --git a/htdocs/install/mysql/tables/llx_accounting_account.sql b/htdocs/install/mysql/tables/llx_accounting_account.sql
index 4734cb18f4c055e59908bd658261426fa79aea6b..e8927cdfda53f810ffa072a680132fd2eb520956 100644
--- a/htdocs/install/mysql/tables/llx_accounting_account.sql
+++ b/htdocs/install/mysql/tables/llx_accounting_account.sql
@@ -1,6 +1,7 @@
 -- ============================================================================
 -- Copyright (C) 2004-2006 Laurent Destailleur <eldy@users.sourceforge.net>
 -- Copyright (C) 2014	   Juanjo Menent	   <jmenent@2byte.es>
+-- Copyright (C) 2016	   Alexandre Spangaro  <aspangaro.dolibarr@gmail.com>
 --
 -- This program is free software; you can redistribute it and/or modify
 -- it under the terms of the GNU General Public License as published by
@@ -20,17 +21,18 @@
 
 create table llx_accounting_account
 (
-  rowid           integer AUTO_INCREMENT PRIMARY KEY,
-  entity          integer DEFAULT 1 NOT NULL,
-  datec           datetime,
-  tms             timestamp,
-  fk_pcg_version  varchar(32)  NOT NULL,
-  pcg_type        varchar(20)  NOT NULL,
-  pcg_subtype     varchar(20)  NOT NULL,
-  account_number  varchar(32)  NOT NULL,
-  account_parent  varchar(32),
-  label           varchar(255) NOT NULL,
-  fk_user_author  integer DEFAULT NULL,
-  fk_user_modif   integer DEFAULT NULL,
-  active     	  tinyint DEFAULT 1  NOT NULL
+  rowid           			integer AUTO_INCREMENT PRIMARY KEY,
+  entity          			integer DEFAULT 1 NOT NULL,
+  datec           			datetime,
+  tms             			timestamp,
+  fk_pcg_version  			varchar(32)  NOT NULL,
+  pcg_type        			varchar(20)  NOT NULL,
+  pcg_subtype     			varchar(20)  NOT NULL,
+  account_number  			varchar(32)  NOT NULL,
+  account_parent  			varchar(32),
+  label           			varchar(255) NOT NULL,
+  fk_accounting_category 	integer DEFAULT 0,
+  fk_user_author  			integer DEFAULT NULL,
+  fk_user_modif   			integer DEFAULT NULL,
+  active     	  			tinyint DEFAULT 1  NOT NULL
 )ENGINE=innodb;
diff --git a/htdocs/install/mysql/tables/llx_accountingdebcred.sql b/htdocs/install/mysql/tables/llx_accountingdebcred.sql
deleted file mode 100644
index f7ea28b127aa8600892d552b2e789a37af93db08..0000000000000000000000000000000000000000
--- a/htdocs/install/mysql/tables/llx_accountingdebcred.sql
+++ /dev/null
@@ -1,26 +0,0 @@
--- ============================================================================
--- Copyright (C) 2004-2006 Laurent Destailleur <eldy@users.sourceforge.net>
---
--- This program is free software; you can redistribute it and/or modify
--- it under the terms of the GNU General Public License as published by
--- the Free Software Foundation; either version 3 of the License, or
--- (at your option) any later version.
---
--- This program is distributed in the hope that it will be useful,
--- but WITHOUT ANY WARRANTY; without even the implied warranty of
--- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
--- GNU General Public License for more details.
---
--- You should have received a copy of the GNU General Public License
--- along with this program. If not, see <http://www.gnu.org/licenses/>.
---
--- Table of "records" for accountancy expert module
--- ============================================================================
-
-create table llx_accountingdebcred
-(
-	fk_transaction  integer		NOT NULL,
-	account_number  varchar(32) NOT NULL,
-	amount          real		NOT NULL,
-	direction       varchar(1)	NOT NULL
-)ENGINE=innodb;
diff --git a/htdocs/install/mysql/tables/llx_accountingtransaction.sql b/htdocs/install/mysql/tables/llx_accountingtransaction.sql
deleted file mode 100644
index 2b1e595c17500adf78d6155089a1200ec042d9bf..0000000000000000000000000000000000000000
--- a/htdocs/install/mysql/tables/llx_accountingtransaction.sql
+++ /dev/null
@@ -1,30 +0,0 @@
--- ============================================================================
--- Copyright (C) 2004-2006 Laurent Destailleur <eldy@users.sourceforge.net>
---
--- This program is free software; you can redistribute it and/or modify
--- it under the terms of the GNU General Public License as published by
--- the Free Software Foundation; either version 3 of the License, or
--- (at your option) any later version.
---
--- This program is distributed in the hope that it will be useful,
--- but WITHOUT ANY WARRANTY; without even the implied warranty of
--- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
--- GNU General Public License for more details.
---
--- You should have received a copy of the GNU General Public License
--- along with this program. If not, see <http://www.gnu.org/licenses/>.
---
--- Table of "transactions" for accountancy expert module (1 transaction = 2+ records)
--- ============================================================================
-
-create table llx_accountingtransaction
-(
-	rowid           integer 		AUTO_INCREMENT PRIMARY KEY,
-	label           varchar(128)    NOT NULL,
-	datec           date 			NOT NULL,
-	fk_author       varchar(20)		NOT NULL,
-	tms             timestamp,
-    fk_source       integer NOT NULL,
-    sourcetype      varchar(16) NOT NULL,
-    url             varchar(255)
-)ENGINE=innodb;
diff --git a/htdocs/langs/en_US/accountancy.lang b/htdocs/langs/en_US/accountancy.lang
index cb3e19dbf79cddd3cfd5512b400132f042c85c9c..a0cbb0a5fb9408a492fecd6c167b3384cda467a2 100644
--- a/htdocs/langs/en_US/accountancy.lang
+++ b/htdocs/langs/en_US/accountancy.lang
@@ -105,6 +105,7 @@ Labelcompte=Label account
 Sens=Sens
 Codejournal=Journal
 NumPiece=Piece number
+AccountingCategory=Accounting category
 
 DelBookKeeping=Delete the records of the general ledger
 
@@ -179,4 +180,7 @@ OptionModeProductSellDesc=Show all products with no accounting account defined f
 OptionModeProductBuyDesc=Show all products with no accounting account defined for purchases.
 
 ## Dictionary
-Range=Range of accounting account
\ No newline at end of file
+Range=Range of accounting account
+
+## Error
+ErrorNoAccountingCategoryForThisCountry=No accounting category are available for this country
\ No newline at end of file