diff --git a/base/Status.cpp b/base/Status.cpp
index 7698ff8..41c9640 100644
--- a/base/Status.cpp
+++ b/base/Status.cpp
@@ -25,57 +25,26 @@
 namespace android {
 namespace hardware {
 
-static std::string statusToString(status_t s) {
-    const std::unordered_map<status_t, std::string> statusStrings{{
-        #define STATUS_TO_STRING_PAIR(STATUS) {STATUS, #STATUS}
-        STATUS_TO_STRING_PAIR(OK),
-        STATUS_TO_STRING_PAIR(UNKNOWN_ERROR),
-        STATUS_TO_STRING_PAIR(NO_MEMORY),
-        STATUS_TO_STRING_PAIR(INVALID_OPERATION),
-        STATUS_TO_STRING_PAIR(BAD_VALUE),
-        STATUS_TO_STRING_PAIR(BAD_TYPE),
-        STATUS_TO_STRING_PAIR(NAME_NOT_FOUND),
-        STATUS_TO_STRING_PAIR(PERMISSION_DENIED),
-        STATUS_TO_STRING_PAIR(NO_INIT),
-        STATUS_TO_STRING_PAIR(ALREADY_EXISTS),
-        STATUS_TO_STRING_PAIR(DEAD_OBJECT),
-        STATUS_TO_STRING_PAIR(FAILED_TRANSACTION),
-        STATUS_TO_STRING_PAIR(BAD_INDEX),
-        STATUS_TO_STRING_PAIR(NOT_ENOUGH_DATA),
-        STATUS_TO_STRING_PAIR(WOULD_BLOCK),
-        STATUS_TO_STRING_PAIR(TIMED_OUT),
-        STATUS_TO_STRING_PAIR(UNKNOWN_TRANSACTION),
-        STATUS_TO_STRING_PAIR(FDS_NOT_ALLOWED),
-        STATUS_TO_STRING_PAIR(UNEXPECTED_NULL)
-    }};
-    auto it = statusStrings.find(s);
-    if (it != statusStrings.end()) {
-        return it->second;
-    }
-    std::string str = std::to_string(s);
-    char *err = strerror(-s);
-    if (err != nullptr) {
-        str.append(1, ' ').append(err);
-    }
-    return str;
-}
 
 static std::string exceptionToString(int32_t ex) {
-    const std::unordered_map<int32_t, std::string> exceptionStrings{{
-        #define EXCEPTION_TO_STRING_PAIR(EXCEPTION) {Status::Exception::EXCEPTION, #EXCEPTION}
-        EXCEPTION_TO_STRING_PAIR(EX_NONE),
-        EXCEPTION_TO_STRING_PAIR(EX_SECURITY),
-        EXCEPTION_TO_STRING_PAIR(EX_BAD_PARCELABLE),
-        EXCEPTION_TO_STRING_PAIR(EX_ILLEGAL_ARGUMENT),
-        EXCEPTION_TO_STRING_PAIR(EX_NULL_POINTER),
-        EXCEPTION_TO_STRING_PAIR(EX_ILLEGAL_STATE),
-        EXCEPTION_TO_STRING_PAIR(EX_NETWORK_MAIN_THREAD),
-        EXCEPTION_TO_STRING_PAIR(EX_UNSUPPORTED_OPERATION),
-        EXCEPTION_TO_STRING_PAIR(EX_HAS_REPLY_HEADER),
-        EXCEPTION_TO_STRING_PAIR(EX_TRANSACTION_FAILED)
-    }};
-    auto it = exceptionStrings.find(ex);
-    return it == exceptionStrings.end() ? std::to_string(ex) : it->second;
+#define EXCEPTION_CASE(EXCEPTION)      \
+    case Status::Exception::EXCEPTION: \
+        return #EXCEPTION
+
+    switch (ex) {
+        EXCEPTION_CASE(EX_NONE);
+        EXCEPTION_CASE(EX_SECURITY);
+        EXCEPTION_CASE(EX_BAD_PARCELABLE);
+        EXCEPTION_CASE(EX_ILLEGAL_ARGUMENT);
+        EXCEPTION_CASE(EX_NULL_POINTER);
+        EXCEPTION_CASE(EX_ILLEGAL_STATE);
+        EXCEPTION_CASE(EX_NETWORK_MAIN_THREAD);
+        EXCEPTION_CASE(EX_UNSUPPORTED_OPERATION);
+        EXCEPTION_CASE(EX_HAS_REPLY_HEADER);
+        EXCEPTION_CASE(EX_TRANSACTION_FAILED);
+#undef EXCEPTION_CASE
+    }
+    return std::to_string(ex);
 }
 
 Status Status::ok() {
