diff --git a/Android.bp b/Android.bp
index 0100465..8acb48b 100644
--- a/Android.bp
+++ b/Android.bp
@@ -32,6 +32,7 @@
 	cflags: [
 		"-Wno-unused-parameter",
 		"-Wno-unused-variable",
+		"-fexceptions",
 	],
 }
 
@@ -71,5 +72,6 @@
 		"-Wno-unused-parameter",
 		"-Wno-unused-variable",
 		"-DENABLE_THERMAL_NETLINK",
+		"-fexceptions",
 	],
 }
diff --git a/thermalCommon.cpp b/thermalCommon.cpp
index 2bcf929..f5a6a8c 100644
--- a/thermalCommon.cpp
+++ b/thermalCommon.cpp
@@ -372,18 +372,30 @@
 {
 	char file_name[MAX_PATH];
 	std::string buf;
-	int ret = 0;
+	int ret = 0, ct = 0;
+	bool read_ok = false;
 
-	LOG(DEBUG) << "Entering " <<__func__;
 	snprintf(file_name, sizeof(file_name), CDEV_CUR_STATE_PATH,
 			cdev.cdevn);
-	ret = readLineFromFile(std::string(file_name), buf);
-	if (ret <= 0) {
-		LOG(ERROR) << "Cdev state read error:"<< ret <<
-			" for cdev: " << cdev.c.name;
-		return -1;
-	}
-	cdev.c.value = std::stoi(buf, nullptr, 0);
+	do {
+		ret = readLineFromFile(std::string(file_name), buf);
+		if (ret <= 0) {
+			LOG(ERROR) << "Cdev state read error:"<< ret <<
+				" for cdev: " << cdev.c.name;
+			return -1;
+		}
+		try {
+			cdev.c.value = std::stoi(buf, nullptr, 0);
+			read_ok = true;
+		}
+		catch (std::exception &err) {
+			LOG(ERROR) << "Cdev read stoi error:" << err.what()
+				<< " cdev:" << cdev.c.name << " ID:"
+				<< cdev.cdevn << " buf:" << buf <<
+				std::endl;
+		}
+		ct++;
+	} while (!read_ok && ct < RETRY_CT);
 	LOG(DEBUG) << "cdev Name:" << cdev.c.name << ". state:" <<
 		cdev.c.value << std::endl;
 
@@ -425,7 +437,8 @@
 	}
 	if (idx >= 0)
 		severity = (ThrottlingSeverity)(idx);
-	LOG(DEBUG) << "Sensor Name:" << sensor.t.name << ". prev severity:" <<
+	LOG(INFO) << "Sensor Name:" << sensor.t.name << "temp: " <<
+		temp << ". prev severity:" <<
 		(int)sensor.lastThrottleStatus << ". cur severity:" <<
 		(int)sensor.t.throttlingStatus << " New severity:" <<
 		(int)severity << std::endl;
@@ -442,18 +455,32 @@
 	char file_name[MAX_PATH];
 	float temp;
 	std::string buf;
-	int ret = 0;
+	int ret = 0, ct = 0;
+	bool read_ok = false;
 
-	LOG(DEBUG) << "Entering " <<__func__;
-	snprintf(file_name, sizeof(file_name), TEMPERATURE_FILE_FORMAT,
+	do {
+		snprintf(file_name, sizeof(file_name), TEMPERATURE_FILE_FORMAT,
 			sensor.tzn);
-	ret = readLineFromFile(std::string(file_name), buf);
-	if (ret <= 0) {
-		LOG(ERROR) << "Temperature read error:"<< ret <<
-			" for sensor " << sensor.t.name;
-		return -1;
-	}
-	sensor.t.value = (float)std::stoi(buf, nullptr, 0) / (float)sensor.mulFactor;
+		ret = readLineFromFile(std::string(file_name), buf);
+		if (ret <= 0) {
+			LOG(ERROR) << "Temperature read error:"<< ret <<
+				" for sensor " << sensor.t.name;
+			return -1;
+		}
+		try {
+			sensor.t.value = (float)std::stoi(buf, nullptr, 0) /
+				 (float)sensor.mulFactor;
+			read_ok = true;
+		}
+		catch (std::exception &err) {
+			LOG(ERROR) << "Temperature buf stoi error: "
+				<< err.what()
+				<< " buf:" << buf << " sensor:"
+				<< sensor.t.name << " TZ:" <<
+				sensor.tzn << std::endl;
+		}
+		ct++;
+	} while (!read_ok && ct < RETRY_CT);
 	LOG(DEBUG) << "Sensor Name:" << sensor.t.name << ". Temperature:" <<
 		(float)sensor.t.value << std::endl;
 
diff --git a/thermalCommon.h b/thermalCommon.h
index 6a1b348..e61bb2a 100644
--- a/thermalCommon.h
+++ b/thermalCommon.h
@@ -39,6 +39,8 @@
 namespace V2_0 {
 namespace implementation {
 
+#define RETRY_CT 3
+
 class ThermalCommon {
 	public:
 		ThermalCommon();
diff --git a/thermalConfig.cpp b/thermalConfig.cpp
index c7086a5..ed65346 100644
--- a/thermalConfig.cpp
+++ b/thermalConfig.cpp
@@ -867,12 +867,24 @@
 		std::vector<struct target_therm_cfg>::iterator it_vec;
 		bool bcl_defined = false;
 		std::string soc_val;
+		int ct = 0;
+		bool read_ok = false;
 
-		if (cmnInst.readFromFile(socIDPath, soc_val) <= 0) {
-			LOG(ERROR) <<"soc ID fetch error";
-			return;
-		}
-		soc_id = std::stoi(soc_val, nullptr, 0);
+		do {
+			if (cmnInst.readFromFile(socIDPath, soc_val) <= 0) {
+				LOG(ERROR) <<"soc ID fetch error";
+				return;
+			}
+			try {
+				soc_id = std::stoi(soc_val, nullptr, 0);
+				read_ok = true;
+			}
+			catch (std::exception &err) {
+				LOG(ERROR) <<"soc id stoi err:" << err.what()
+					<< " buf:" << soc_val;
+			}
+			ct++;
+		} while (!read_ok && ct < RETRY_CT);
 		if (soc_id <= 0) {
 			LOG(ERROR) << "Invalid soc ID: " << soc_id;
 			return;
