diff --git a/library/Class/CommSigb.php b/library/Class/CommSigb.php
index 34b12516455e75883de3304fb15efc6939a54356..a7bd2e2616cbb587d12974e43555076ef79903ae 100644
--- a/library/Class/CommSigb.php
+++ b/library/Class/CommSigb.php
@@ -92,36 +92,48 @@ class Class_CommSigb {
 		$exemplaires = array();
 
 		foreach ($exemplaires_to_check as $exemplaire)	{
-			$exemplaire["dispo"] = "non connue";
-			$exemplaire["reservable"]=false;
-
-			$mode_comm=$this->getModeComm($exemplaire['id_bib']);
-			if ($sigb = $this->getSIGBComm($mode_comm)) {
-				$sigb_exemplaire = $sigb->getExemplaire($exemplaire["id_origine"],
-																								$exemplaire["code_barres"]);
-
-				if ($sigb_exemplaire->isPilonne() || !$sigb_exemplaire->isVisibleOPAC()) continue;
-
-				if ($sigb_exemplaire->isValid()) {
-					$exemplaire["dispo"]=$sigb_exemplaire->getDisponibilite();
-					$exemplaire["date_retour"]=$sigb_exemplaire->getDateRetour();
-					$exemplaire["reservable"]=$sigb_exemplaire->isReservable();
-					$exemplaire["id_exemplaire"]=$sigb_exemplaire->getId();
-					//Cas Nanook pour la localisation de l'exemplaire en temps reel
-					if ($code_annexe = $sigb_exemplaire->getCodeAnnexe()) {
-						if (is_numeric($code_annexe))
-							$exemplaire["id_bib"] = $code_annexe;
-						$exemplaire["annexe"] = $code_annexe;
-					}
-				}
-			}
-			
-			$exemplaires []= $exemplaire;
+			if ($dispo = $this->getDispoExemplaire($exemplaire["id_bib"], 
+																						 $exemplaire["id_origine"], 
+																						 $exemplaire["code_barres"]))
+				$exemplaires []= array_merge($exemplaire, $dispo);
 		}
 		return $exemplaires;
 	}
 
 
+	public function getDispoExemplaire($id_bib, $id_origine, $code_barre) {
+		$exemplaire = ["dispo" => "non connue",
+									 "reservable" => false];
+
+		$int_bib = Class_IntBib::find($id_bib);
+		if (! ($int_bib && ($sigb = $int_bib->getSIGBComm())))
+			return $exemplaire;
+
+		$sigb_exemplaire = $sigb->getExemplaire($id_origine, $code_barre);
+
+		if ($sigb_exemplaire->isPilonne() || !$sigb_exemplaire->isVisibleOPAC()) 
+			return null;
+
+		if (!$sigb_exemplaire->isValid())
+			return $exemplaire;
+
+		$exemplaire["dispo"]=$sigb_exemplaire->getDisponibilite();
+		$exemplaire["date_retour"]=$sigb_exemplaire->getDateRetour();
+		$exemplaire["reservable"]=$sigb_exemplaire->isReservable();
+		$exemplaire["id_exemplaire"]=$sigb_exemplaire->getId();
+
+		if (!$code_annexe = $sigb_exemplaire->getCodeAnnexe())
+			return $exemplaire;
+
+		//pour la localisation de l'exemplaire en temps reel
+		$exemplaire["annexe"] = $code_annexe;
+		if (is_numeric($code_annexe))
+			$exemplaire["id_bib"] = $code_annexe;
+
+		return $exemplaire;
+	}
+
+
 	/**
 	 * @param Class_Users $user
 	 * @return array
diff --git a/tests/library/Class/CommSigbTest.php b/tests/library/Class/CommSigbTest.php
index ba63ccb48700f1d1b9c0b48ac9b03e8ce7f2ff85..3fd27185f715292ea291df7db4487ae240acff75 100644
--- a/tests/library/Class/CommSigbTest.php
+++ b/tests/library/Class/CommSigbTest.php
@@ -593,13 +593,16 @@ class CommSigbWithNotAbonneTest extends Storm_Test_ModelTestCase {
 
 	/** @test */
 	public function getDispoExemplairesShouldReturnNonReservable() {
-		$this->assertEquals(array(array('id' => 2,
-																		'id_bib' => 0,
-																		'dispo' => 'non connue',
-																		'reservable' => false)),
-												$this->comm_sigb->getDispoExemplaires(
-																															array(array('id' => 2,
-																																					'id_bib' => 0))));
+		$this->assertEquals([['id' => 2,
+													'id_bib' => 0,
+													'id_origine' => 0,
+													'code_barres' => 0,
+													'dispo' => 'non connue',
+													'reservable' => false]],
+												$this->comm_sigb->getDispoExemplaires([['id' => 2,
+																																'id_origine' => 0,
+																																'code_barres' => 0,
+																																'id_bib' => 0]]));
 	}
 }