diff --git a/MaarchREST.class.php b/MaarchREST.class.php
index 65d0c8564b52f88b042ca1c67bd74a5c7976fc85..22daeea0d045fd8b8f03ce569eb7c40714c457e3 100644
--- a/MaarchREST.class.php
+++ b/MaarchREST.class.php
@@ -116,14 +116,50 @@ class MaarchREST extends SAEConnecteur {
 		);
 		
 		if ($messageInformations) {
-			$zipMessage = $this->getWS(
-				"/medona/message/".$messageInformations['messageId']."/Export",
-				"application/zip"
-			);
+			$zipMessage = $this->getZipMessage($messageInformations['messageId']);
+		} else {
+			throw new UnrecoverableException("Le paquet du bordereau identifié par ".$messageInformations['messageId']." n'a pas pu êtr récuperé.");
+		}
+
+		return $this->getXmlFromZipMessage($zipMessage, $messageInformations['messageId']);
+	}
+
+	/**
+	 * @param $id_transfert
+	 * @return bool|mixed
+	 * @throws Exception
+	 */
+	public function getReply($id_transfert) {
+		if (! $id_transfert){
+			throw new UnrecoverableException("L'identifiant du transfert n'a pas été trouvé");
+		}
+
+		$messageInformations = $this->getWS(
+			"/medona/message/reference?reference="
+                .urlencode($id_transfert),
+			"application/json"
+		);
+
+		if ($messageInformations['status'] != "processed") {
+			throw new UnrecoverableException("Le bordereau dont la référence est " . $id_transfert . " n'a pas encore été traité dans le SAE Maarch RM.");
+		}
+
+		if ($messageInformations) {
+			$zipMessage = $this->getZipMessage($messageInformations['replyMessage']['messageId']);
 		} else {
 			throw new UnrecoverableException("Le paquet du bordereau identifié par ".$messageInformations['messageId']." n'a pas pu êtr récuperé.");
 		}
 
+		return $this->getXmlFromZipMessage($zipMessage, $messageInformations['replyMessage']['messageId']);
+	}
+
+	/**
+	 * @param $zipMessage (Zip binary file from Maarch RM Export)
+	 * @param $message ID
+	 * @return xmlContent
+	 * @throws Exception
+	 */
+	public function getXmlFromZipMessage($zipMessage, $messageId) {
 		$tmpFile = new TmpFile();
 		$zipTempFile = $tmpFile->create();
 		file_put_contents($zipTempFile, $zipMessage);
@@ -134,13 +170,13 @@ class MaarchREST extends SAEConnecteur {
 		try {
 			shell_exec("7z x $zipTempFile -o$path *.xml");
 		} catch (Exception $e) {
-			return($e);
+			throw new UnrecoverableException($e);
 		}
 
-		$fullFilePath = $path."/".$messageInformations['messageId'].".xml";
+		$fullFilePath = $path."/".$messageId.".xml";
 
 		if (!file_exists($fullFilePath)) {
-			return "Problème lors de la lecture du fichier $fullFilePath.";
+			throw new UnrecoverableException("Problème lors de la lecture du fichier $fullFilePath.");
 		}
 
 		$xmlContent = file_get_contents($fullFilePath);
@@ -150,30 +186,29 @@ class MaarchREST extends SAEConnecteur {
 
 		return $xmlContent;
 	}
-
+	
 	/**
-	 * @param $id_transfert
-	 * @return bool|mixed
+	 * @param $messageid (refered to technical id in Maarch RM software)
+	 * @return zip binary
 	 * @throws Exception
 	 */
-	public function getReply($id_transfert) {
-		if (! $id_transfert){
-			throw new UnrecoverableException("L'identifiant du transfert n'a pas été trouvé");
+	public function getZipMessage($messageId) {
+		if (!$messageId) {
+			throw new UnrecoverableException("Le paquet du bordereau identifié par ".$messageId." n'a pas pu êtr récuperé.");
 		}
-
-		$messageInformations = $this->getWS(
-			"/medona/message/reference?reference="
-                .urlencode($id_transfert),
-			"application/json"
+		
+		$zipMessage = $this->getWS(
+			"/medona/message/".$messageId."/Export",
+			"application/zip"
 		);
 
-		if ($messageInformations['status'] != "processed") {
-			return "Le bordereau dont la référence est $id_transfert n'a pas encore été traité dans le SAE Maarch RM.";
+		if ($zipMessage) {
+			return $zipMessage;
+		} else {
+			throw new UnrecoverableException("Le paquet du bordereau identifié par ".$messageId." n'a pas pu êtr récuperé.");
 		}
-
-		return $messageInformations;
 	}
-	
+
 	public function getURL($cote) {
 		if (empty($this->url)){
 			return $cote;