diff --git a/htdocs/adherents/class/adherent.class.php b/htdocs/adherents/class/adherent.class.php
index 98d971acbd0821df353f77f4a6c31398776f89a5..9a385becff3265b07cb1f906b652a7606fe7da42 100644
--- a/htdocs/adherents/class/adherent.class.php
+++ b/htdocs/adherents/class/adherent.class.php
@@ -6,6 +6,7 @@
  * Copyright (C) 2004		Benoit Mortier			<benoit.mortier@opensides.be>
  * Copyright (C) 2009-2012	Regis Houssin			<regis.houssin@capnetworks.com>
  * Copyright (C) 2014		Alexandre Spangaro		<alexandre.spangaro@gmail.com>
+ * Copyright (C) 2015       Marcos García           <marcosgdf@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
@@ -1725,17 +1726,15 @@ class Adherent extends CommonObject
      *      Load indicators for dashboard (this->nbtodo and this->nbtodolate)
      *
      *      @param	User	$user   	Objet user
-     *      @return int     			<0 if KO, >0 if OK
+     *      @return WorkboardResponse|int <0 if KO, WorkboardResponse if OK
      */
     function load_board($user)
     {
-        global $conf;
-
-        $now=dol_now();
+        global $conf, $langs;
 
         if ($user->societe_id) return -1;   // protection pour eviter appel par utilisateur externe
 
-        $this->nbtodo=$this->nbtodolate=0;
+	    $now=dol_now();
 
         $sql = "SELECT a.rowid, a.datefin";
         $sql.= " FROM ".MAIN_DB_PREFIX."adherent as a";
@@ -1746,12 +1745,24 @@ class Adherent extends CommonObject
         $resql=$this->db->query($sql);
         if ($resql)
         {
+	        $langs->load("members");
+
+	        $response = new WorkboardResponse();
+	        $response->warning_delay=$conf->adherent->cotisation->warning_delay/60/60/24;
+	        $response->label=$langs->trans("MembersWithSubscriptionToReceive");
+	        $response->url=DOL_URL_ROOT.'/adherents/list.php?mainmenu=members&amp;statut=1';
+	        $response->img=img_object($langs->trans("Members"),"user");
+
             while ($obj=$this->db->fetch_object($resql))
             {
-                $this->nbtodo++;
-                if ($this->db->jdate($obj->datefin) < ($now - $conf->adherent->cotisation->warning_delay)) $this->nbtodolate++;
+	            $response->nbtodo++;
+
+                if ($this->db->jdate($obj->datefin) < ($now - $conf->adherent->cotisation->warning_delay)) {
+	                $response->nbtodolate++;
+                }
             }
-            return 1;
+
+            return $response;
         }
         else
         {
diff --git a/htdocs/comm/action/class/actioncomm.class.php b/htdocs/comm/action/class/actioncomm.class.php
index b20a3afa3eabd0281b6d98fec48c737a33856856..5cfe1dc731036574f4b424f5923611d90745aacd 100644
--- a/htdocs/comm/action/class/actioncomm.class.php
+++ b/htdocs/comm/action/class/actioncomm.class.php
@@ -3,6 +3,7 @@
  * Copyright (C) 2004-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
  * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
  * Copyright (C) 2011	   Juanjo Menent        <jmenent@2byte.es>
+ * Copyright (C) 2015       Marcos García           <marcosgdf@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
@@ -712,18 +713,14 @@ class ActionComm extends CommonObject
     }
 
     /**
-     *      Load indicators for dashboard (this->nbtodo and this->nbtodolate)
+     * Load indicators for dashboard (this->nbtodo and this->nbtodolate)
      *
-     *      @param	User	$user   Objet user
-     *      @return int     		<0 if KO, >0 if OK
+     * @param	User	$user   Objet user
+     * @return WorkboardResponse|int <0 if KO, WorkboardResponse if OK
      */
     function load_board($user)
     {
-        global $conf, $user;
-
-        $now=dol_now();
-
-        $this->nbtodo=$this->nbtodolate=0;
+        global $conf, $user, $langs;
 
         $sql = "SELECT a.id, a.datep as dp";
         $sql.= " FROM (".MAIN_DB_PREFIX."actioncomm as a";
@@ -739,13 +736,25 @@ class ActionComm extends CommonObject
         $resql=$this->db->query($sql);
         if ($resql)
         {
+	        $now = dol_now();
+
+	        $response = new WorkboardResponse();
+	        $response->warning_delay = $conf->actions->warning_delay/60/60/24;
+	        $response->label = $langs->trans("ActionsToDo");
+	        $response->url = DOL_URL_ROOT.'/comm/action/listactions.php?status=todo&amp;mainmenu=agenda';
+	        $response->img = img_object($langs->trans("Actions"),"action");
+
             // This assignment in condition is not a bug. It allows walking the results.
             while ($obj=$this->db->fetch_object($resql))
             {
-                $this->nbtodo++;
-                if (isset($obj->dp) && $this->db->jdate($obj->dp) < ($now - $conf->actions->warning_delay)) $this->nbtodolate++;
+	            $response->nbtodo++;
+
+                if (isset($obj->dp) && $this->db->jdate($obj->dp) < ($now - $conf->actions->warning_delay)) {
+	                $response->nbtodolate++;
+                }
             }
-            return 1;
+
+            return $response;
         }
         else
         {
diff --git a/htdocs/comm/mailing/card.php b/htdocs/comm/mailing/card.php
index 267fde415f6aa4ff450f1a70c68af45ccee7ae66..1a574fa434ac5103d4aa625c4eebcff648cdc49c 100644
--- a/htdocs/comm/mailing/card.php
+++ b/htdocs/comm/mailing/card.php
@@ -140,9 +140,7 @@ if (empty($reshook))
 	{
 		if (empty($conf->global->MAILING_LIMIT_SENDBYWEB))
 		{
-			//TODO: What is this for?
-			// Pour des raisons de securite, on ne permet pas cette fonction via l'IHM,
-			// on affiche donc juste un message
+			// As security measure, we don't allow send from the GUI
 			setEventMessage($langs->trans("MailingNeedCommand"), 'warnings');
 			setEventMessage('<textarea cols="70" rows="'.ROWS_2.'" wrap="soft">php ./scripts/emailings/mailing-send.php '.$object->id.'</textarea>', 'warnings');
 			setEventMessage($langs->trans("MailingNeedCommand2"), 'warnings');
diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php
index 8fae698ba946448f7de822592a5bc57f3c63fdb7..edc6d7bfd9452dbf9480fbbe2139291d4fbaa7fa 100644
--- a/htdocs/comm/propal/class/propal.class.php
+++ b/htdocs/comm/propal/class/propal.class.php
@@ -10,7 +10,7 @@
  * Copyright (C) 2010-2011 Philippe Grand			<philippe.grand@atoo-net.com>
  * Copyright (C) 2012-2014 Christophe Battarel  	<christophe.battarel@altairis.fr>
  * Copyright (C) 2013      Florian Henry		  	<florian.henry@open-concept.pro>
- * Copyright (C) 2014      Marcos García            <marcosgdf@gmail.com>
+ * Copyright (C) 2014-2015 Marcos García            <marcosgdf@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
@@ -116,10 +116,6 @@ class Propal extends CommonObject
     var $labelstatut=array();
     var $labelstatut_short=array();
 
-    // Pour board
-    var $nbtodo;
-    var $nbtodolate;
-
     var $specimen;
 
 
@@ -2349,15 +2345,12 @@ class Propal extends CommonObject
      *
      *      @param          User	$user   Object user
      *      @param          int		$mode   "opened" for proposal to close, "signed" for proposal to invoice
-     *      @return         int     		<0 if KO, >0 if OK
+     *      @return WorkboardResponse|int <0 if KO, WorkboardResponse if OK
      */
     function load_board($user,$mode)
     {
-        global $conf, $user;
+        global $conf, $user, $langs;
 
-        $now=dol_now();
-
-        $this->nbtodo=$this->nbtodolate=0;
         $clause = " WHERE";
 
         $sql = "SELECT p.rowid, p.ref, p.datec as datec, p.fin_validite as datefin";
@@ -2376,25 +2369,43 @@ class Propal extends CommonObject
         $resql=$this->db->query($sql);
         if ($resql)
         {
-            if ($mode == 'opened') $delay_warning=$conf->propal->cloture->warning_delay;
-            if ($mode == 'signed') $delay_warning=$conf->propal->facturation->warning_delay;
+	        $langs->load("propal");
+	        $now=dol_now();
+
+            if ($mode == 'opened') {
+	            $delay_warning=$conf->propal->cloture->warning_delay;
+	            $statut = 1;
+	            $label = $langs->trans("PropalsToClose");
+            }
+            if ($mode == 'signed') {
+	            $delay_warning=$conf->propal->facturation->warning_delay;
+	            $statut = 2;
+	            $label = $langs->trans("PropalsToBill");
+            }
+
+	        $response = new WorkboardResponse();
+	        $response->warning_delay = $delay_warning;
+	        $response->label = $label;
+	        $response->url = DOL_URL_ROOT.'/comm/propal/list.php?viewstatut='.$statut;
+	        $response->img = img_object($langs->trans("Propals"),"propal");
 
             // This assignment in condition is not a bug. It allows walking the results.
             while ($obj=$this->db->fetch_object($resql))
             {
-                $this->nbtodo++;
+                $response->nbtodo++;
                 if ($mode == 'opened')
                 {
                     $datelimit = $this->db->jdate($obj->datefin);
                     if ($datelimit < ($now - $delay_warning))
                     {
-                        $this->nbtodolate++;
+	                    $response->nbtodolate++;
                     }
                 }
                 // TODO Definir regle des propales a facturer en retard
                 // if ($mode == 'signed' && ! count($this->FactureListeArray($obj->rowid))) $this->nbtodolate++;
             }
-            return 1;
+
+            return $response;
         }
         else
         {
diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php
index 27c320b33264ffdc7d5aff8b91160ae73b06368c..d5c6b3f771516a19db735a876624fa0293f5be4f 100644
--- a/htdocs/commande/class/commande.class.php
+++ b/htdocs/commande/class/commande.class.php
@@ -7,7 +7,7 @@
  * Copyright (C) 2011      Jean Heimburger      <jean@tiaris.info>
  * Copyright (C) 2012-2014 Christophe Battarel  <christophe.battarel@altairis.fr>
  * Copyright (C) 2013      Florian Henry		<florian.henry@open-concept.pro>
- * Copyright (C) 2014      Marcos García        <marcosgdf@gmail.com>
+ * Copyright (C) 2014-2015 Marcos García        <marcosgdf@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
@@ -106,10 +106,6 @@ class Commande extends CommonOrder
 
     var $lines = array();
 
-    // Pour board
-    var $nbtodo;
-    var $nbtodolate;
-
 
     /**
      *	Constructor
@@ -2729,15 +2725,12 @@ class Commande extends CommonOrder
      *	Load indicators for dashboard (this->nbtodo and this->nbtodolate)
      *
      *	@param		User	$user   Object user
-     *	@return     int     		<0 if KO, >0 if OK
+     *	@return WorkboardResponse|int <0 if KO, WorkboardResponse if OK
      */
     function load_board($user)
     {
-        global $conf, $user;
-
-        $now=dol_now();
+        global $conf, $user, $langs;
 
-        $this->nbtodo=$this->nbtodolate=0;
         $clause = " WHERE";
 
         $sql = "SELECT c.rowid, c.date_creation as datec, c.date_livraison as delivery_date, c.fk_statut";
@@ -2756,14 +2749,26 @@ class Commande extends CommonOrder
         $resql=$this->db->query($sql);
         if ($resql)
         {
+	        $now=dol_now();
+
+	        $response = new WorkboardResponse();
+	        $response->warning_delay=$conf->commande->client->warning_delay/60/60/24;
+	        $response->label=$langs->trans("OrdersToProcess");
+	        $response->url=DOL_URL_ROOT.'/commande/list.php?viewstatut=-3';
+	        $response->img=img_object($langs->trans("Orders"),"order");
+
             while ($obj=$this->db->fetch_object($resql))
             {
-                $this->nbtodo++;
+	            $response->nbtodo++;
 
 				$date_to_test = empty($obj->delivery_date) ? $obj->datec : $obj->delivery_date;
-                if ($obj->fk_statut != 3 && $this->db->jdate($date_to_test) < ($now - $conf->commande->client->warning_delay)) $this->nbtodolate++;
+
+	            if ($obj->fk_statut != 3 && $this->db->jdate($date_to_test) < ($now - $conf->commande->client->warning_delay)) {
+		            $response->nbtodolate++;
+	            }
             }
-            return 1;
+
+            return $response;
         }
         else
         {
diff --git a/htdocs/compta/bank/class/account.class.php b/htdocs/compta/bank/class/account.class.php
index 598ccc2c8d845085deebd703ee75cac6d06cdef1..a2d9aec8ad4cba3b3b542780bcf166bfceb5fbd1 100644
--- a/htdocs/compta/bank/class/account.class.php
+++ b/htdocs/compta/bank/class/account.class.php
@@ -5,6 +5,7 @@
  * Copyright (C) 2004      Christophe Combelles <ccomb@free.fr>
  * Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@capnetworks.com>
  * Copytight (C) 2013	   Florian Henry        <florian.henry@open-concept.pro>
+ * Copyright (C) 2015      Marcos García           <marcosgdf@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
@@ -881,18 +882,14 @@ class Account extends CommonObject
      *
      *      @param	User	$user        		Objet user
      *		@param	int		$filteraccountid	To get info for a particular account id
-     *      @return int         				<0 if KO, 0=Nothing to show, >0 if OK
+     *      @return WorkboardResponse|int <0 if KO, WorkboardResponse if OK
      */
     function load_board($user,$filteraccountid=0)
     {
-        global $conf;
+        global $conf, $langs;
 
         if ($user->societe_id) return -1;   // protection pour eviter appel par utilisateur externe
 
-        $now=dol_now();
-
-        $this->nbtodo=$this->nbtodolate=0;
-
         $sql = "SELECT b.rowid, b.datev as datefin";
         $sql.= " FROM ".MAIN_DB_PREFIX."bank as b,";
         $sql.= " ".MAIN_DB_PREFIX."bank_account as ba";
@@ -902,17 +899,27 @@ class Account extends CommonObject
         $sql.= " AND (ba.rappro = 1 AND ba.courant != 2)";	// Compte rapprochable
         if ($filteraccountid) $sql.=" AND ba.rowid = ".$filteraccountid;
 
-        //print $sql;
         $resql=$this->db->query($sql);
         if ($resql)
         {
-            $num=$this->db->num_rows($resql);
+	        $langs->load("banks");
+	        $now=dol_now();
+
+	        $response = new WorkboardResponse();
+	        $response->warning_delay=$conf->bank->rappro->warning_delay/60/60/24;
+	        $response->label=$langs->trans("TransactionsToConciliate");
+	        $response->url=DOL_URL_ROOT.'/compta/bank/index.php?leftmenu=bank&amp;mainmenu=bank';
+	        $response->img=img_object($langs->trans("TransactionsToConciliate"),"payment");
+
             while ($obj=$this->db->fetch_object($resql))
             {
-                $this->nbtodo++;
-                if ($this->db->jdate($obj->datefin) < ($now - $conf->bank->rappro->warning_delay)) $this->nbtodolate++;
+                $response->nbtodo++;
+                if ($this->db->jdate($obj->datefin) < ($now - $conf->bank->rappro->warning_delay)) {
+	                $response->nbtodolate++;
+                }
             }
-            return $num;
+
+            return $response;
         }
         else
         {
diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php
index 5c645783cc1bcb76b66d6f101b2d79ecd049e686..50a68b2c66a268e6dbab00cf3af2754614c8d857 100644
--- a/htdocs/compta/facture/class/facture.class.php
+++ b/htdocs/compta/facture/class/facture.class.php
@@ -9,7 +9,7 @@
  * Copyright (C) 2007      Franky Van Liedekerke <franky.van.liedekerke@telenet.be>
  * Copyright (C) 2010-2014 Juanjo Menent         <jmenent@2byte.es>
  * Copyright (C) 2012-2014 Christophe Battarel   <christophe.battarel@altairis.fr>
- * Copyright (C) 2012-2014 Marcos García         <marcosgdf@gmail.com>
+ * Copyright (C) 2012-2015 Marcos García         <marcosgdf@gmail.com>
  * Copyright (C) 2012      Cédric Salvador       <csalvador@gpcsolutions.fr>
  * Copyright (C) 2012-2014 Raphaël Doursenaud    <rdoursenaud@gpcsolutions.fr>
  * Copyright (C) 2013      Cedric Gross          <c.gross@kreiz-it.fr>
@@ -117,9 +117,6 @@ class Facture extends CommonInvoice
 	var $lines=array();
 	var $line;
 	var $extraparams=array();
-	//! Pour board
-	var $nbtodo;
-	var $nbtodolate;
 	var $specimen;
 
 	var $fac_rec;
@@ -3088,15 +3085,12 @@ class Facture extends CommonInvoice
 	 *	Load indicators for dashboard (this->nbtodo and this->nbtodolate)
 	 *
 	 *	@param      User	$user    	Object user
-	 *	@return     int                 <0 if KO, >0 if OK
+	 *	@return WorkboardResponse|int <0 if KO, WorkboardResponse if OK
 	 */
 	function load_board($user)
 	{
-		global $conf, $user;
-
-		$now=dol_now();
+		global $conf, $user, $langs;
 
-		$this->nbtodo=$this->nbtodolate=0;
 		$clause = " WHERE";
 
 		$sql = "SELECT f.rowid, f.date_lim_reglement as datefin";
@@ -3115,12 +3109,25 @@ class Facture extends CommonInvoice
 		$resql=$this->db->query($sql);
 		if ($resql)
 		{
+			$langs->load("bills");
+			$now=dol_now();
+
+			$response = new WorkboardResponse();
+			$response->warning_delay=$conf->facture->client->warning_delay/60/60/24;
+			$response->label=$langs->trans("CustomerBillsUnpaid");
+			$response->url=DOL_URL_ROOT.'/compta/facture/impayees.php';
+			$response->img=img_object($langs->trans("Bills"),"bill");
+
 			while ($obj=$this->db->fetch_object($resql))
 			{
-				$this->nbtodo++;
-				if ($this->db->jdate($obj->datefin) < ($now - $conf->facture->client->warning_delay)) $this->nbtodolate++;
+				$response->nbtodo++;
+
+				if ($this->db->jdate($obj->datefin) < ($now - $conf->facture->client->warning_delay)) {
+					$response->nbtodolate++;
+				}
 			}
-			return 1;
+
+			return $response;
 		}
 		else
 		{
diff --git a/htdocs/compta/paiement/cheque/class/remisecheque.class.php b/htdocs/compta/paiement/cheque/class/remisecheque.class.php
index 11a61874e7ecbe25d92fa41bd78323bfc3a510b9..ddda11bb556f3f73a2903837ed2f8ddfef4093e6 100644
--- a/htdocs/compta/paiement/cheque/class/remisecheque.class.php
+++ b/htdocs/compta/paiement/cheque/class/remisecheque.class.php
@@ -3,6 +3,7 @@
  * Copyright (C) 2007-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
  * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
  * Copyright (C) 2011      Juanjo Menent        <jmenent@2byte.es>
+ * Copyright (C) 2015      Marcos García        <marcosgdf@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
@@ -432,18 +433,14 @@ class RemiseCheque extends CommonObject
      *      Load indicators for dashboard (this->nbtodo and this->nbtodolate)
      *
      *      @param      User	$user       Objet user
-     *      @return     int                 <0 if KO, >0 if OK
+     *      @return WorkboardResponse|int <0 if KO, WorkboardResponse if OK
 	 */
 	function load_board($user)
 	{
-		global $conf;
+		global $conf, $langs;
 
 		if ($user->societe_id) return -1;   // protection pour eviter appel par utilisateur externe
 
-		$now=dol_now();
-
-		$this->nbtodo=$this->nbtodolate=0;
-
 		$sql = "SELECT b.rowid, b.datev as datefin";
 		$sql.= " FROM ".MAIN_DB_PREFIX."bank as b";
 		$sql.= ", ".MAIN_DB_PREFIX."bank_account as ba";
@@ -456,12 +453,25 @@ class RemiseCheque extends CommonObject
 		$resql=$this->db->query($sql);
 		if ($resql)
 		{
+			$langs->load("banks");
+			$now=dol_now();
+
+			$response = new WorkboardResponse();
+			$response->warning_delay=$conf->bank->cheque->warning_delay/60/60/24;
+			$response->label=$langs->trans("BankChecksToReceipt");
+			$response->url=DOL_URL_ROOT.'/compta/paiement/cheque/index.php?leftmenu=checks&amp;mainmenu=accountancy';
+			$response->img=img_object($langs->trans("BankChecksToReceipt"),"payment");
+
 			while ($obj=$this->db->fetch_object($resql))
 			{
-				$this->nbtodo++;
-				if ($this->db->jdate($obj->datefin) < ($now - $conf->bank->cheque->warning_delay)) $this->nbtodolate++;
+				$response->nbtodo++;
+
+				if ($this->db->jdate($obj->datefin) < ($now - $conf->bank->cheque->warning_delay)) {
+					$response->nbtodolate++;
+				}
 			}
-			return 1;
+
+			return $response;
 		}
 		else
 		{
diff --git a/htdocs/contrat/class/contrat.class.php b/htdocs/contrat/class/contrat.class.php
index bbecab53a30d88f3738184a1b60945b139625fa4..3cd35db15b5a2ec7f3595d9ac368c9be90a601a4 100644
--- a/htdocs/contrat/class/contrat.class.php
+++ b/htdocs/contrat/class/contrat.class.php
@@ -7,7 +7,7 @@
  * Copyright (C) 2010-2014	Juanjo Menent			<jmenent@2byte.es>
  * Copyright (C) 2013		Christophe Battarel		<christophe.battarel@altairis.fr>
  * Copyright (C) 2013		Florian Henry			<florian.henry@open-concept.pro>
- * Copyright (C) 2014		Marcos García			<marcosgdf@gmail.com>
+ * Copyright (C) 2014-2015	Marcos García			<marcosgdf@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
@@ -1881,15 +1881,11 @@ class Contrat extends CommonObject
      *
      *      @param	User	$user           Objet user
      *      @param  string	$mode           "inactive" pour services a activer, "expired" pour services expires
-     *      @return int                 	<0 if KO, >0 if OK
+     *      @return WorkboardResponse|int <0 if KO, WorkboardResponse if OK
 	 */
 	function load_board($user,$mode)
 	{
-		global $conf, $user;
-
-		$now=dol_now();
-
-		$this->nbtodo=$this->nbtodolate=0;
+		global $conf, $user, $langs;
 
 		$this->from = " FROM ".MAIN_DB_PREFIX."contrat as c";
 		$this->from.= ", ".MAIN_DB_PREFIX."contratdet as cd";
@@ -1920,15 +1916,35 @@ class Contrat extends CommonObject
 		$resql=$this->db->query($sql);
 		if ($resql)
 		{
+			$langs->load("contracts");
+			$now=dol_now();
+
+			if ($mode == 'inactives') {
+				$warning_delay = $conf->contrat->services->inactifs->warning_delay;
+				$label = $langs->trans("BoardNotActivatedServices");
+				$url = DOL_URL_ROOT.'/contrat/services.php?mainmenu=commercial&amp;leftmenu=contracts&amp;mode=0';
+			} else {
+				$warning_delay = $conf->contrat->services->expires->warning_delay;
+				$url = DOL_URL_ROOT.'/contrat/services.php?mainmenu=commercial&amp;leftmenu=contracts&amp;mode=4&amp;filter=expired';
+				$label = $langs->trans("BoardRunningServices");
+			}
+
+			$response = new WorkboardResponse();
+			$response->warning_delay = $warning_delay/60/60/24;
+			$response->label = $label;
+			$response->url = $url;
+			$response->img = img_object($langs->trans("Contract"),"contract");
+
 			while ($obj=$this->db->fetch_object($resql))
 			{
-				$this->nbtodo++;
-				if ($mode == 'inactives')
-				if ($obj->datefin && $this->db->jdate($obj->datefin) < ($now - $conf->contrat->services->inactifs->warning_delay)) $this->nbtodolate++;
-				if ($mode == 'expired')
-				if ($obj->datefin && $this->db->jdate($obj->datefin) < ($now - $conf->contrat->services->expires->warning_delay)) $this->nbtodolate++;
+				$response->nbtodo++;
+
+				if ($obj->datefin && $this->db->jdate($obj->datefin) < ($now - $warning_delay)) {
+					$response->nbtodolate++;
+				}
 			}
-			return 1;
+
+			return $response;
 		}
 		else
 		{
diff --git a/htdocs/core/class/WorkboardResponse.class.php b/htdocs/core/class/WorkboardResponse.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..c36b50b421e84636ee0715e48a095cf8b0d01d53
--- /dev/null
+++ b/htdocs/core/class/WorkboardResponse.class.php
@@ -0,0 +1,69 @@
+<?php
+
+/* Copyright (C) 2015   Marcos García   <marcosgdf@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/WorkboardResponse.class.php
+ *	\brief      Class that represents response of load_board functions
+ */
+
+class WorkboardResponse
+{
+
+	/**
+	 * Image URL to represent the board item
+	 * @var string
+	 */
+	public $img;
+
+	/**
+	 * Label of the warning
+	 * @var string
+	 */
+	public $label;
+
+	/**
+	 * URL to list to do items
+	 * @var string
+	 */
+	public $url;
+
+	/**
+	 * (optional) If set, to do late items will link to this url
+	 * @var string
+	 */
+	public $url_late;
+
+	/**
+	 * Delay time to mark an item as late
+	 * @var int
+	 */
+	public $warning_delay;
+
+	/**
+	 * Number of items to do
+	 * @var int
+	 */
+	public $nbtodo = 0;
+
+	/**
+	 * Number of to do items which are late
+	 * @var int
+	 */
+	public $nbtodolate = 0;
+
+}
\ No newline at end of file
diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php
index b4312e45997fbc6c375a65fd361183b8f9b35c51..0b02b3ddc2908863afae5a47ece69c55495b3e60 100644
--- a/htdocs/fourn/class/fournisseur.commande.class.php
+++ b/htdocs/fourn/class/fournisseur.commande.class.php
@@ -5,7 +5,7 @@
  * Copyright (C) 2007		Franky Van Liedekerke	<franky.van.liedekerke@telenet.be>
  * Copyright (C) 2010-2014	Juanjo Menent			<jmenent@2byte.es>
  * Copyright (C) 2010-2014	Philippe Grand			<philippe.grand@atoo-net.com>
- * Copyright (C) 2012-2014  Marcos García           <marcosgdf@gmail.com>
+ * Copyright (C) 2012-2015  Marcos García           <marcosgdf@gmail.com>
  * Copyright (C) 2013       Florian Henry		  	<florian.henry@open-concept.pro>
  * Copyright (C) 2013       Cédric Salvador         <csalvador@gpcsolutions.fr>
  *
@@ -2009,15 +2009,12 @@ class CommandeFournisseur extends CommonOrder
      *	Load indicators for dashboard (this->nbtodo and this->nbtodolate)
      *
      *	@param          User	$user   Objet user
-     *	@return         int    			<0 if KO, >0 if OK
+     *	@return WorkboardResponse|int <0 if KO, WorkboardResponse if OK
      */
     function load_board($user)
     {
-        global $conf, $user;
-
-        $now=dol_now();
+        global $conf, $user, $langs;
 
-        $this->nbtodo=$this->nbtodolate=0;
         $clause = " WHERE";
 
         $sql = "SELECT c.rowid, c.date_creation as datec, c.fk_statut,c.date_livraison as delivery_date";
@@ -2035,14 +2032,25 @@ class CommandeFournisseur extends CommonOrder
         $resql=$this->db->query($sql);
         if ($resql)
         {
+	        $now=dol_now();
+
+	        $response = new WorkboardResponse();
+	        $response->warning_delay=$conf->commande->fournisseur->warning_delay/60/60/24;
+	        $response->label=$langs->trans("SuppliersOrdersToProcess");
+	        $response->url=DOL_URL_ROOT.'/fourn/commande/index.php';
+	        $response->img=img_object($langs->trans("Orders"),"order");
+
             while ($obj=$this->db->fetch_object($resql))
             {
-                $this->nbtodo++;
+                $response->nbtodo++;
 
 				$date_to_test = empty($obj->delivery_date) ? $obj->datec : $obj->delivery_date;
-                if ($obj->fk_statut != 3 && $this->db->jdate($date_to_test) < ($now - $conf->commande->fournisseur->warning_delay)) $this->nbtodolate++;
+                if ($obj->fk_statut != 3 && $this->db->jdate($date_to_test) < ($now - $conf->commande->fournisseur->warning_delay)) {
+	                $response->nbtodolate++;
+                }
             }
-            return 1;
+
+            return $response;
         }
         else
         {
diff --git a/htdocs/fourn/class/fournisseur.facture.class.php b/htdocs/fourn/class/fournisseur.facture.class.php
index 71e5c320dfa18ea24ba84ca6307c347546ee659f..d7252d188db55a7e294a413afa00855a9a32b093 100644
--- a/htdocs/fourn/class/fournisseur.facture.class.php
+++ b/htdocs/fourn/class/fournisseur.facture.class.php
@@ -7,7 +7,7 @@
  * Copyright (C) 2010-2014	Juanjo Menent			<jmenent@2byte.es>
  * Copyright (C) 2013		Philippe Grand			<philippe.grand@atoo-net.com>
  * Copyright (C) 2013       Florian Henry		  	<florian.henry@open-concept.pro>
- * Copyright (C) 2014       Marcos García           <marcosgdf@gmail.com>
+ * Copyright (C) 2014-2015  Marcos García           <marcosgdf@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
@@ -1421,15 +1421,12 @@ class FactureFournisseur extends CommonInvoice
      *	Load indicators for dashboard (this->nbtodo and this->nbtodolate)
      *
      *	@param      User	$user       Object user
-     *	@return     int                 <0 if KO, >0 if OK
+     *	@return WorkboardResponse|int <0 if KO, WorkboardResponse if OK
      */
     function load_board($user)
     {
-        global $conf, $user;
+        global $conf, $user, $langs;
 
-        $now=dol_now();
-
-        $this->nbtodo=$this->nbtodolate=0;
         $sql = 'SELECT ff.rowid, ff.date_lim_reglement as datefin';
         $sql.= ' FROM '.MAIN_DB_PREFIX.'facture_fourn as ff';
         if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
@@ -1442,13 +1439,24 @@ class FactureFournisseur extends CommonInvoice
         $resql=$this->db->query($sql);
         if ($resql)
         {
+	        $langs->load("bills");
+	        $now=dol_now();
+
+	        $response = new WorkboardResponse();
+	        $response->warning_delay=$conf->facture->fournisseur->warning_delay/60/60/24;
+	        $response->label=$langs->trans("SupplierBillsToPay");
+	        $response->url=DOL_URL_ROOT.'/fourn/facture/list.php?filtre=paye:0';
+	        $response->img=img_object($langs->trans("Bills"),"bill");
+
             while ($obj=$this->db->fetch_object($resql))
             {
-                $this->nbtodo++;
-                if (! empty($obj->datefin) && $this->db->jdate($obj->datefin) < ($now - $conf->facture->fournisseur->warning_delay)) $this->nbtodolate++;
+                $response->nbtodo++;
+                if (! empty($obj->datefin) && $this->db->jdate($obj->datefin) < ($now - $conf->facture->fournisseur->warning_delay)) {
+	                $response->nbtodolate++;
+                }
             }
             $this->db->free($resql);
-            return 1;
+            return $response;
         }
         else
         {
diff --git a/htdocs/index.php b/htdocs/index.php
index 55252f6533fc4d404ad71e4d7fd29e489c3a6f0d..32b13c7a63f2eca970a3986306d443cef0afc0ac 100644
--- a/htdocs/index.php
+++ b/htdocs/index.php
@@ -3,6 +3,7 @@
  * Copyright (C) 2004-2013	Laurent Destailleur		<eldy@users.sourceforge.net>
  * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
  * Copyright (C) 2011-2012 	Juanjo Menent			<jmenent@2byte.es>
+ * Copyright (C) 2015       Marcos García           <marcosgdf@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
@@ -291,7 +292,8 @@ print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
  * Dolibarr Working Board with weather
  */
 $showweather=empty($conf->global->MAIN_DISABLE_METEO)?1:0;
-$rowspan=0;
+
+//Array that contains all WorkboardResponse classes to process them
 $dashboardlines=array();
 
 print '<table class="noborder" width="100%">'."\n";
@@ -309,18 +311,14 @@ print '</tr>'."\n";
 // Do not include sections without management permission
 //
 
+require DOL_DOCUMENT_ROOT.'/core/class/WorkboardResponse.class.php';
+
 // Number of actions to do (late)
 if (! empty($conf->agenda->enabled) && $user->rights->agenda->myactions->read)
 {
     include_once DOL_DOCUMENT_ROOT.'/comm/action/class/actioncomm.class.php';
     $board=new ActionComm($db);
-    $board->load_board($user);
-    $board->warning_delay=$conf->actions->warning_delay/60/60/24;
-    $board->label=$langs->trans("ActionsToDo");
-    $board->url=DOL_URL_ROOT.'/comm/action/listactions.php?status=todo&amp;mainmenu=agenda';
-    $board->img=img_object($langs->trans("Actions"),"action");
-    $rowspan++;
-    $dashboardlines[]=$board;
+	$dashboardlines[] = $board->load_board($user);
 }
 
 // Number of customer orders a deal
@@ -328,13 +326,8 @@ if (! empty($conf->commande->enabled) && $user->rights->commande->lire)
 {
     include_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php';
     $board=new Commande($db);
-    $board->load_board($user);
-    $board->warning_delay=$conf->commande->client->warning_delay/60/60/24;
-    $board->label=$langs->trans("OrdersToProcess");
-    $board->url=DOL_URL_ROOT.'/commande/list.php?viewstatut=-3';
-    $board->img=img_object($langs->trans("Orders"),"order");
-    $rowspan++;
-    $dashboardlines[]=$board;
+
+	$dashboardlines[] = $board->load_board($user);
 }
 
 // Number of suppliers orders a deal
@@ -342,172 +335,91 @@ if (! empty($conf->fournisseur->enabled) && $user->rights->fournisseur->commande
 {
     include_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.commande.class.php';
     $board=new CommandeFournisseur($db);
-    $board->load_board($user);
-    $board->warning_delay=$conf->commande->fournisseur->warning_delay/60/60/24;
-    $board->label=$langs->trans("SuppliersOrdersToProcess");
-    $board->url=DOL_URL_ROOT.'/fourn/commande/index.php';
-    $board->img=img_object($langs->trans("Orders"),"order");
-    $rowspan++;
-    $dashboardlines[]=$board;
+
+	$dashboardlines[] = $board->load_board($user);
 }
 
 // Number of commercial proposals opened (expired)
 if (! empty($conf->propal->enabled) && $user->rights->propale->lire)
 {
-    $langs->load("propal");
-
     include_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php';
     $board=new Propal($db);
-    $board->load_board($user,"opened");
-    $board->warning_delay=$conf->propal->cloture->warning_delay/60/60/24;
-    $board->label=$langs->trans("PropalsToClose");
-    $board->url=DOL_URL_ROOT.'/comm/propal/list.php?viewstatut=1';
-    $board->img=img_object($langs->trans("Propals"),"propal");
-    $rowspan++;
-    $dashboardlines[]=$board;
-}
-
-// Number of commercial proposals CLOSED signed (billed)
-if (! empty($conf->propal->enabled) && $user->rights->propale->lire)
-{
-    $langs->load("propal");
+	$dashboardlines[] = $board->load_board($user,"opened");
 
-    include_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php';
-    $board=new Propal($db);
-    $board->load_board($user,"signed");
-    $board->warning_delay=$conf->propal->facturation->warning_delay/60/60/24;
-    $board->label=$langs->trans("PropalsToBill");
-    $board->url=DOL_URL_ROOT.'/comm/propal/list.php?viewstatut=2';
-    $board->img=img_object($langs->trans("Propals"),"propal");
-    $rowspan++;
-    $dashboardlines[]=$board;
+	// Number of commercial proposals CLOSED signed (billed)
+	$dashboardlines[] = $board->load_board($user,"signed");
 }
 
 // Number of services enabled (delayed)
 if (! empty($conf->contrat->enabled) && $user->rights->contrat->lire)
 {
-    $langs->load("contracts");
-
     include_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php';
     $board=new Contrat($db);
-    $board->load_board($user,"inactives");
-    $board->warning_delay=$conf->contrat->services->inactifs->warning_delay/60/60/24;
-    $board->label=$langs->trans("BoardNotActivatedServices");
-    $board->url=DOL_URL_ROOT.'/contrat/services.php?mainmenu=commercial&amp;leftmenu=contracts&amp;mode=0';
-    $board->img=img_object($langs->trans("Contract"),"contract");
-    $rowspan++;
-    $dashboardlines[]=$board;
-}
+    $dashboardlines[] = $board->load_board($user,"inactives");
 
-// Number of active services (expired)
-if (! empty($conf->contrat->enabled) && $user->rights->contrat->lire)
-{
-    $langs->load("contracts");
-
-    include_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php';
-    $board=new Contrat($db);
-    $board->load_board($user,"expired");
-    $board->warning_delay=$conf->contrat->services->expires->warning_delay/60/60/24;
-    $board->label=$langs->trans("BoardRunningServices");
-    $board->url=DOL_URL_ROOT.'/contrat/services.php?mainmenu=commercial&amp;leftmenu=contracts&amp;mode=4&amp;filter=expired';
-    $board->img=img_object($langs->trans("Contract"),"contract");
-    $rowspan++;
-    $dashboardlines[]=$board;
+	// Number of active services (expired)
+    $dashboardlines[] = $board->load_board($user,"expired");
 }
 // Number of invoices customers (has paid)
 if (! empty($conf->facture->enabled) && $user->rights->facture->lire)
 {
-    $langs->load("bills");
-
     include_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
     $board=new Facture($db);
-    $board->load_board($user);
-    $board->warning_delay=$conf->facture->client->warning_delay/60/60/24;
-    $board->label=$langs->trans("CustomerBillsUnpaid");
-    $board->url=DOL_URL_ROOT.'/compta/facture/impayees.php';
-    $board->img=img_object($langs->trans("Bills"),"bill");
-    $rowspan++;
-    $dashboardlines[]=$board;
+    $dashboardlines[] = $board->load_board($user);
 }
 
 // Number of supplier invoices (has paid)
 if (! empty($conf->fournisseur->enabled) && ! empty($conf->facture->enabled) && $user->rights->facture->lire)
 {
-    $langs->load("bills");
-
     include_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php';
     $board=new FactureFournisseur($db);
-    $board->load_board($user);
-    $board->warning_delay=$conf->facture->fournisseur->warning_delay/60/60/24;
-    $board->label=$langs->trans("SupplierBillsToPay");
-    $board->url=DOL_URL_ROOT.'/fourn/facture/list.php?filtre=paye:0';
-    $board->img=img_object($langs->trans("Bills"),"bill");
-    $rowspan++;
-    $dashboardlines[]=$board;
+    $dashboardlines[] = $board->load_board($user);
 }
 
 // Number of transactions to conciliate
 if (! empty($conf->banque->enabled) && $user->rights->banque->lire && ! $user->societe_id)
 {
-    $langs->load("banks");
-
     include_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
     $board=new Account($db);
-    $found=$board->load_board($user);
-    if ($found > 0)
-    {
-        $board->warning_delay=$conf->bank->rappro->warning_delay/60/60/24;
-        $board->label=$langs->trans("TransactionsToConciliate");
-        $board->url=DOL_URL_ROOT.'/compta/bank/index.php?leftmenu=bank&amp;mainmenu=bank';
-        $board->img=img_object($langs->trans("TransactionsToConciliate"),"payment");
-        $rowspan++;
-        $dashboardlines[]=$board;
-    }
+	$dashboardlines[] = $board->load_board($user);
 }
 
 // Number of cheque to send
 if (! empty($conf->banque->enabled) && $user->rights->banque->lire && ! $user->societe_id)
 {
-    $langs->load("banks");
-
     include_once DOL_DOCUMENT_ROOT.'/compta/paiement/cheque/class/remisecheque.class.php';
     $board=new RemiseCheque($db);
-    $board->load_board($user);
-    $board->warning_delay=$conf->bank->cheque->warning_delay/60/60/24;
-    $board->label=$langs->trans("BankChecksToReceipt");
-    $board->url=DOL_URL_ROOT.'/compta/paiement/cheque/index.php?leftmenu=checks&amp;mainmenu=accountancy';
-    $board->img=img_object($langs->trans("BankChecksToReceipt"),"payment");
-    $rowspan++;
-    $dashboardlines[]=$board;
+    $dashboardlines[] = $board->load_board($user);
 }
 
 // Number of foundation members
 if (! empty($conf->adherent->enabled) && $user->rights->adherent->lire && ! $user->societe_id)
 {
-    $langs->load("members");
-
     include_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php';
     $board=new Adherent($db);
-    $board->load_board($user);
-    $board->warning_delay=$conf->adherent->cotisation->warning_delay/60/60/24;
-    $board->label=$langs->trans("MembersWithSubscriptionToReceive");
-    $board->url=DOL_URL_ROOT.'/adherents/list.php?mainmenu=members&amp;statut=1';
-    $board->img=img_object($langs->trans("Members"),"user");
-    $rowspan++;
-    $dashboardlines[]=$board;
+    $dashboardlines[] = $board->load_board($user);
 }
 
 // Calculate total nb of late
 $totallate=0;
-foreach($dashboardlines as $key => $board)
-{
-    if ($board->nbtodolate > 0) $totallate+=$board->nbtodolate;
-}
-
-// Show dashboard
 $var=true;
-foreach($dashboardlines as $key => $board)
+
+//Remove any invalid response
+//load_board can return an integer if failed or WorkboardResponse if OK
+$valid_dashboardlines = array_filter($dashboardlines, function ($board) {
+	return $board instanceof WorkboardResponse;
+});
+
+$rowspan = count($valid_dashboardlines);
+
+foreach($valid_dashboardlines as $board)
 {
+    if ($board->nbtodolate > 0) {
+	    $totallate += $board->nbtodolate;
+    }
+
+	// Show dashboard
+
     $var=!$var;
     print '<tr '.$bc[$var].'><td width="16">'.$board->img.'</td><td>'.$board->label.'</td>';
     print '<td align="right"><a href="'.$board->url.'">'.$board->nbtodo.'</a></td>';
@@ -531,8 +443,6 @@ foreach($dashboardlines as $key => $board)
         if ($rowspan <= 2) $options='height="24"';  // Weather logo is smaller if dashboard has few elements
         else if ($rowspan <= 3) $options='height="48"';  // Weather logo is smaller if dashboard has few elements
         print showWeather($totallate,$text,$options);
-        //print showWeather(0,'');
-        //print showWeather(40,$text);
         print '</td>';
         $showweather=0;
     }