diff --git a/ArchiveExtractor.py b/ArchiveExtractor.py
index a1c0e09f75a0e1138227c9b913ac73d228cbf20f..1c2c98c1614ca452bb13d4f900de7e3ac2669512 100755
--- a/ArchiveExtractor.py
+++ b/ArchiveExtractor.py
@@ -455,18 +455,24 @@ if __name__ == "__main__":
     for attr in attributes:
         logger.info("Extracting attribute %s..."%attr)
 
-        try:
-            datevalue = query_ADB_BetweenDates(attr, args.dateStart, args.dateStop, extractor)
-
-            # Add to result dictionnary
-            results[attr] = datevalue
-
-        except ValueError as e:
-            logger.debug("ErrorMsg: %s"%e)
-            logger.warning("Failed to extract %s. Skipping..."%attr)
-        except tango.CommunicationFailed:
-            logger.warning("Failed to extract %s. Skipping..."%attr)
-            logger.error("The device %s might have crash.\n"+
+        for attempt in range(3):
+            try:
+                datevalue = query_ADB_BetweenDates(attr, args.dateStart, args.dateStop, extractor)
+
+                # Add to result dictionnary
+                results[attr] = datevalue
+
+            except ValueError as e:
+                logger.debug("ErrorMsg: %s"%e)
+                logger.warning("Failed to extract %s. Skipping..."%attr)
+            except (tango.CommunicationFailed, tango.DevFailed) as e:
+                # retry
+                logger.debug("ErrorMsg: %s"%e)
+                logger.warning("Failed to extract %s. Retry..."%attr)
+            break
+
+        else:
+            logger.error("The device %s might have crash.\n"%extractor+
                     "You should check with Jive and probably restart with Astor.\n")
 
         # Save all at each step