diff --git a/src/main/java/fr/emse/gitlab/saref/checkers/Clause_9_4_5_Checker.java b/src/main/java/fr/emse/gitlab/saref/checkers/Clause_9_4_5_Checker.java
index ab3081d822517e8d5e09c17813cb8a7dd6d6733d..a76c42ac99ddbafe1b626b65afdfe793d8744a53 100644
--- a/src/main/java/fr/emse/gitlab/saref/checkers/Clause_9_4_5_Checker.java
+++ b/src/main/java/fr/emse/gitlab/saref/checkers/Clause_9_4_5_Checker.java
@@ -1,39 +1,40 @@
 /*
  * Copyright 2020 ETSI
- * 
- * Redistribution and use in source and binary forms, with or without 
+ *
+ * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
- * 1. Redistributions of source code must retain the above copyright notice, 
+ * 1. Redistributions of source code must retain the above copyright notice,
  *    this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice, 
- *    this list of conditions and the following disclaimer in the documentation 
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
  *    and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holder nor the names of its contributors 
- *    may be used to endorse or promote products derived from this software without 
+ * 3. Neither the name of the copyright holder nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software without
  *    specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
- * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
  * OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 package fr.emse.gitlab.saref.checkers;
 
 import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileWriter;
 import java.io.IOException;
+import java.net.SocketTimeoutException;
 import java.util.ArrayList;
-import java.util.List;
 import java.util.Set;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
 import java.util.stream.Collectors;
 
+import fr.emse.gitlab.saref.managers.ThemisManager;
 import org.apache.jena.rdf.model.Model;
 import org.semanticweb.owl.explanation.api.Explanation;
 import org.semanticweb.owl.explanation.api.ExplanationGenerator;
@@ -48,18 +49,21 @@ import org.semanticweb.owlapi.profiles.violations.UseOfUnknownDatatype;
 
 import fr.emse.gitlab.saref.SAREFPipelineException;
 import fr.emse.gitlab.saref.managers.OntologyManager;
-import fr.emse.gitlab.saref.managers.OopsManager;
 import fr.emse.gitlab.saref.managers.RepositoryManager;
 import okhttp3.MediaType;
 import okhttp3.OkHttpClient;
 import okhttp3.Request;
 import okhttp3.RequestBody;
 import okhttp3.Response;
+import org.semanticweb.owlapi.reasoner.TimeOutException;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
 
 /**
  * Checks TS 103 673 Clause 9.4.5: OWL Profile, Consistency, and Satisfiability
  * of Classes
- * 
+ *
  */
 public class Clause_9_4_5_Checker extends AbstractClauseChecker {
 
@@ -121,7 +125,7 @@ public class Clause_9_4_5_Checker extends AbstractClauseChecker {
 		try {
 			checkOops();
 		} catch (Exception ex) {
-			logWarning(getMessage(MESSAGE.oopsError), ex);			
+			logWarning(getMessage(MESSAGE.oopsError), ex);
 		}
 	}
 
@@ -139,6 +143,7 @@ public class Clause_9_4_5_Checker extends AbstractClauseChecker {
 				+ "<OutputFormat>RDF/XML</OutputFormat>" + "</OOPSRequest>";
 
 
+
 		Object[] arrayData = new Object[0];
 
 		try {
@@ -152,45 +157,94 @@ public class Clause_9_4_5_Checker extends AbstractClauseChecker {
 			Request request = new Request.Builder().url("http://oops.linkeddata.es/rest").method("POST", body)
 					.addHeader("Content-Type", "application/xml").build();
 
-			Response response = httpClient.newCall(request).execute();
-			if (response.code() != 200) {
-				throw new SAREFPipelineException("response", "Unexpected response code " + response.code());
+			Response response;
+
+			try{
+				response = httpClient.newCall(request).execute();
 			}
-			
-			String result = response.body().string();
+			catch (SocketTimeoutException e){
 
-			String[] results = result.split("\\n");
+				httpClient = new OkHttpClient().newBuilder().readTimeout(10, TimeUnit.SECONDS).build();
 
-			List<String> pureData = new ArrayList<String>();
-			for (int i = 0; i < results.length; i++) {
-				pureData.add(results[i]);
+				try{
+					response = httpClient.newCall(request).execute();
+				}
+				catch (SocketTimeoutException f){
+					httpClient = new OkHttpClient().newBuilder().readTimeout(20, TimeUnit.SECONDS).build();
+					response = httpClient.newCall(request).execute();
+				}
 			}
 
-			arrayData = pureData.toArray(); // response into array
-
-		} catch (IOException | SAREFPipelineException e) {
-			logWarning(getMessage(MESSAGE.oopsError), e);
-		}
 
-		int count = OopsManager.counter(arrayData);
+			if (response.code() != 200) {
+				throw new SAREFPipelineException("response", "Unexpected response code " + response.code());
+			}
 
-		ArrayList<ArrayList<String>> result = OopsManager.getData(arrayData);
+			String result = response.body().string();
 
-		int s = 0;
+			Document doc = ThemisManager.convertStringToXMLDocument(result);
+
+			NodeList nodeList = doc.getElementsByTagName("rdf:Description");
+
+			ArrayList<String> oopsErrors = new ArrayList<String>();
+			for (int temp = 0; temp < nodeList.getLength(); temp++){
+				org.w3c.dom.Node node = nodeList.item(temp);
+				if (node.getNodeType() == org.w3c.dom.Node.ELEMENT_NODE) {
+					Element element = (Element) node;
+					if (((Element) node).getElementsByTagName("oops:hasCode").item(0) != null) {
+						if (((Element) node).getElementsByTagName("oops:hasName").item(0) != null) {
+							String code = element.getElementsByTagName("oops:hasCode").item(0).getTextContent();
+							String name = element.getElementsByTagName("oops:hasName").item(0).getTextContent();
+							String description = element.getElementsByTagName("oops:hasDescription").item(0).getTextContent();
+							String affected = "";
+							NodeList affectedElements = element.getElementsByTagName("oops:hasAffectedElement");
+							if (affectedElements != null) {
+								for (int k = 0; k < affectedElements.getLength(); k++) {
+									if (k == 0) {
+										affected += "\"" + affectedElements.item(k).getTextContent() + "\"";
+									} else {
+										affected += " ; \"" + affectedElements.item(k).getTextContent() + "\"";
+									}
+								}
+							}
+
+
+							String oopsError = String.format("Code: %s, Name: %s, Description: %s, Affected Elements: %s", code, name, description, affected);
+							oopsErrors.add(oopsError);
+						}
+						else{
+							String code = element.getElementsByTagName("oops:hasCode").item(0).getTextContent();
+							String description = element.getElementsByTagName("oops:hasDescription").item(0).getTextContent();
+							String affected = "";
+							NodeList affectedElements = element.getElementsByTagName("oops:hasAffectedElement");
+							if (affectedElements != null) {
+								for (int k = 0; k < affectedElements.getLength(); k++) {
+									if (k == 0) {
+										affected += "\"" + affectedElements.item(k).getTextContent() + "\"";
+									} else {
+										affected += " ; \"" + affectedElements.item(k).getTextContent() + "\"";
+									}
+								}
+							}
+
+
+							String oopsError = String.format("Code: %s, Description: %s, Affected Elements: %s", code, description, affected);
+							oopsErrors.add(oopsError);
+						}
+					}
 
+				}
+			}
+			if (!oopsErrors.isEmpty()) {
+				String data = oopsErrors.stream().map(e -> e.toString())
+						.collect(Collectors.joining("\n- ", "\n\n- ", "\n\n"));
+				logWarning(getMessage(MESSAGE.oops, data));
 
-		ArrayList<String> results = new ArrayList<String>();
+			}
 
-		while (s < count) {
-			String data = result.get(0).get(s).concat("-") + result.get(1).get(s).concat(".") + result.get(2).get(s) + "Affected Elements: " + result.get(3).get(s);
-			results.add(data);
-			s++;
-		}
 
-		String printData = results.stream().map(e -> e.toString())
-				.collect(Collectors.joining("\n- ", "\n\n- ", "\n\n"));
-		if (count != 0) {
-			logWarning(getMessage(MESSAGE.oops, printData));
+		} catch (IOException | SAREFPipelineException e) {
+			logWarning(getMessage(MESSAGE.oopsError), e);
 		}
 	}
 
diff --git a/src/main/java/fr/emse/gitlab/saref/checkers/Clause_9_5_Checker.java b/src/main/java/fr/emse/gitlab/saref/checkers/Clause_9_5_Checker.java
index fa8edd678f0f94e39a2d49a1cf6076c7cbd76853..545cdecb56dd32c050528a14d62ce6a04cb99290 100644
--- a/src/main/java/fr/emse/gitlab/saref/checkers/Clause_9_5_Checker.java
+++ b/src/main/java/fr/emse/gitlab/saref/checkers/Clause_9_5_Checker.java
@@ -1,26 +1,26 @@
 /*
  * Copyright 2020 ETSI
- * 
- * Redistribution and use in source and binary forms, with or without 
+ *
+ * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
- * 1. Redistributions of source code must retain the above copyright notice, 
+ * 1. Redistributions of source code must retain the above copyright notice,
  *    this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice, 
- *    this list of conditions and the following disclaimer in the documentation 
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
  *    and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holder nor the names of its contributors 
- *    may be used to endorse or promote products derived from this software without 
+ * 3. Neither the name of the copyright holder nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software without
  *    specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
- * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
  * OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 package fr.emse.gitlab.saref.checkers;
@@ -101,14 +101,14 @@ public class Clause_9_5_Checker extends AbstractClauseChecker {
 				return;
 			}
 			readTests();  // generates the RDF model for the tests
-			
+
 			try {
 				callThemis();  // uses the RDF model for the tests and sends it to ThemisOWL profile, consistency, lack of pitfalls and class satisfiability 
 				testsRDFaGenerator(); // this generates the html file with  rdfa embedded.
 			} catch (Exception ex) {
-				logWarning(getMessage(MESSAGE.themis), ex);			
+				logWarning(getMessage(MESSAGE.themis), ex);
 			}
-			
+
 		} catch (IOException ex) {
 			logError(getMessage(MESSAGE.ioexception));
 		}
diff --git a/src/main/java/fr/emse/gitlab/saref/managers/OopsManager.java b/src/main/java/fr/emse/gitlab/saref/managers/OopsManager.java
deleted file mode 100644
index ecc076e21079f554ba1a479d80fe01243ea12cdd..0000000000000000000000000000000000000000
--- a/src/main/java/fr/emse/gitlab/saref/managers/OopsManager.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright 2020 ETSI
- * 
- * Redistribution and use in source and binary forms, with or without 
- * modification, are permitted provided that the following conditions are met:
- * 1. Redistributions of source code must retain the above copyright notice, 
- *    this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice, 
- *    this list of conditions and the following disclaimer in the documentation 
- *    and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holder nor the names of its contributors 
- *    may be used to endorse or promote products derived from this software without 
- *    specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
- * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 
- * OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-package fr.emse.gitlab.saref.managers;
-
-import java.util.ArrayList;
-
-public class OopsManager {
-
-	public static ArrayList<ArrayList<String>> getData(Object[] data) {
-		ArrayList<String> getID = new ArrayList<String>();
-		ArrayList<String> getName = new ArrayList<String>();
-		ArrayList<String> getInfo = new ArrayList<String>();
-		ArrayList<String> affectedElements = new ArrayList<String>();
-
-		ArrayList<ArrayList<String>> elements = new ArrayList<ArrayList<String>>();
-		elements.add(getID);
-		elements.add(getName);
-		elements.add(getInfo);
-		elements.add(affectedElements);
-
-		String affected = "";
-
-		for (int i = 0; i < data.length; i++) {
-			String data2 = data[i].toString().replaceAll("  ", "");
-
-
-			if (data2.startsWith("<oops:hasCode")) {
-				String[] data3 = data2.split("(<|>)");
-				getID.add(data3[2]);
-				elements.set(0, getID);
-			} else if (data2.startsWith("<oops:hasName")) {
-				String[] data3 = data2.split("(<|>)");
-				getName.add(data3[2]);
-				elements.set(1, getName);
-			} else if (data2.startsWith("<oops:hasDescription")) {
-				String[] data3 = data2.split("(<|>)");
-				getInfo.add(data3[2]);
-				elements.set(2, getInfo);
-			}
-			if (i>0 && i < data.length-1) {
-				String prove = data[i - 1].toString().replaceAll("  ", "");
-				String prove2 = data[i + 1].toString().replaceAll("  ", "");
-
-				if (data2.startsWith("<oops:hasAffectedElement")) {
-					if (!prove.startsWith("<oops:hasAffectedElement")) {
-						String[] data3 = data2.split("(<|>)");
-						affected += data3[2];
-					}
-					else if (!prove2.startsWith("<oops:hasAffectedElement")){
-						String[] data3 = data2.split("(<|>)");
-						affected += ", " + data3[2];
-						affectedElements.add(affected);
-						elements.set(3, affectedElements);
-						affected = "";
-					}
-					else{
-						String[] data3 = data2.split("(<|>)");
-						affected += ", " + data3[2];
-					}
-				}
-
-			}
-
-		}
-
-		return elements;
-	}
-
-	public static int counter(Object[] data) {
-		int counter = 0;
-		for (int i = 0; i < data.length; i++) {
-			String data2 = data[i].toString().replaceAll("  ", "");
-			if (data2.startsWith("<oops:hasCode")) {
-				counter++;
-			}
-		}
-		return counter;
-	}
-
-}