Index: src/main/java/org/gbif/api/vocabulary/Kingdom.java
===================================================================
--- src/main/java/org/gbif/api/vocabulary/Kingdom.java	(revision 1152)
+++ src/main/java/org/gbif/api/vocabulary/Kingdom.java	(working copy)
@@ -15,11 +15,14 @@
  */
 package org.gbif.api.vocabulary;
 
+import java.util.Map;
+
+import com.google.common.collect.ImmutableMap;
+
 /**
  * A simple enumeration of all kingdoms found in the GBIF Backbone Taxonomy and also Catalogue of Life.
  */
 public enum Kingdom {
-
   INCERTAE_SEDIS('I'),
   ANIMALIA('A'),
   ARCHAEA('R'),
@@ -30,6 +33,34 @@
   PROTOZOA('Z'),
   VIRUSES('V');
 
+  // Enable fast lookup by the constant NUB IDs
+  public static final Map<Integer, Kingdom> NUB_INDEX = 
+    new ImmutableMap.Builder<Integer, Kingdom>()
+      .put(0, INCERTAE_SEDIS)
+      .put(1, ANIMALIA)
+      .put(2, ARCHAEA)
+      .put(3, BACTERIA)
+      .put(4, CHROMISTA)
+      .put(5, FUNGI)
+      .put(6, PLANTAE)
+      .put(7, PROTOZOA)
+      .put(8, VIRUSES)
+      .build();
+      
+  // Enable fast lookup by the abbreviation
+  public static final Map<Character, Kingdom> ABBREV_INDEX = 
+    new ImmutableMap.Builder<Character, Kingdom>()
+      .put('I', INCERTAE_SEDIS)
+      .put('A', ANIMALIA)
+      .put('R', ARCHAEA)
+      .put('B', BACTERIA)
+      .put('C', CHROMISTA)
+      .put('F', FUNGI)
+      .put('P', PLANTAE)
+      .put('Z', PROTOZOA)
+      .put('V', VIRUSES)
+      .build();
+      
   private final char abbrev;
 
   /**
@@ -40,12 +71,7 @@
    * @return the matching kingdom or null
    */
   public static Kingdom byNubUsageId(Integer usageID) {
-    for (Kingdom term : Kingdom.values()) {
-      if (term.nubUsageID().equals(usageID)) {
-        return term;
-      }
-    }
-    return null;
+    return ABBREV_INDEX.get(usageID);
   }
 
   /**
@@ -54,13 +80,7 @@
    * @return the kingdom or null.
    */
   public static Kingdom byChar(char kingdomAbbrev) {
-    kingdomAbbrev = Character.toUpperCase(kingdomAbbrev);
-    for (Kingdom term : Kingdom.values()) {
-      if (term.abbrev == kingdomAbbrev) {
-        return term;
-      }
-    }
-    return null;
+    return ABBREV_INDEX.get(Character.toUpperCase(kingdomAbbrev));
   }
 
   Kingdom(char abbrev) {
