diff --git a/lib/message_lookup_by_library.dart b/lib/message_lookup_by_library.dart
index e2139fc..131c028 100644
--- a/lib/message_lookup_by_library.dart
+++ b/lib/message_lookup_by_library.dart
@@ -23,38 +23,28 @@
   /// Return true if we have a message lookup for [localeName].
   bool localeExists(localeName) => availableMessages.containsKey(localeName);
 
-  /// The last locale in which we looked up messages.
-  ///
-  ///  If this locale matches the new one then we can skip looking up the
-  ///  messages and assume they will be the same as last time.
-  String _lastLocale;
-
-  /// Caches the last messages that we found
-  MessageLookupByLibrary _lastLookup;
-
   /// Look up the message with the given [name] and [locale] and return
   /// the translated version with the values in [args] interpolated.
   /// If nothing is found, return [message_str]. The [desc] and [examples]
   /// parameters are ignored
-  String lookupMessage(
-      String message_str, String locale, String name, List args) {
-    // If passed null, use the default.
-    var knownLocale = locale ?? Intl.getCurrentLocale();
-    var messages = (knownLocale == _lastLocale)
-        ? _lastLookup
-        : _lookupMessageCatalog(knownLocale);
-    // If we didn't find any messages for this locale, use the original string.
+  String lookupMessage(String message_str, String locale,
+      String name, List args) {
+    var verifiedLocale = findLocale(locale);
+    var messages = availableMessages[verifiedLocale];
     if (messages == null) return message_str;
-    return messages.lookupMessage(message_str, locale, name, args);
+    return messages.
+        lookupMessage(message_str, locale, name, args);
   }
 
-  /// Find the right message lookup for [locale].
-  MessageLookupByLibrary _lookupMessageCatalog(String locale) {
-    var verifiedLocale = Intl.verifiedLocale(locale, localeExists,
+  /// Given an initial locale or null, returns the locale that will be used
+  /// for messages.
+  String findLocale(String locale) {
+    var actualLocale = locale ?? Intl.getCurrentLocale();
+    // For this usage, if the locale doesn't exist for messages, just return
+    // it and we'll fall back to the original version.
+    var verifiedLocale = Intl.verifiedLocale(actualLocale, localeExists,
         onFailure: (locale) => locale);
-    _lastLocale = locale;
-    _lastLookup = availableMessages[verifiedLocale];
-    return _lastLookup;
+    return verifiedLocale;
   }
 
   /// If we do not already have a locale for [localeName] then
@@ -67,11 +57,6 @@
     if (newLocale != null) {
       availableMessages[localeName] = newLocale;
       availableMessages[canonical] = newLocale;
-      // If there was already a failed lookup for [newLocale], null the cache.
-      if (_lastLocale == newLocale) {
-        _lastLocale = null;
-        _lastLookup = null;
-      }
     }
   }
 }
@@ -100,8 +85,7 @@
   /// Ultimately, the information about the enclosing function and its arguments
   /// will be extracted automatically but for the time being it must be passed
   /// explicitly in the [name] and [args] arguments.
-  String lookupMessage(
-      String message_str, String locale, String name, List args) {
+  String lookupMessage(String message_str, String locale, String name, List args) {
     if (name == null) return message_str;
     var function = this[name];
     return function == null ? message_str : Function.apply(function, args);
