diff --git a/src/core/SkTMultiMap.h b/src/core/SkTMultiMap.h
index c0b59ba..70076f0 100644
--- a/src/core/SkTMultiMap.h
+++ b/src/core/SkTMultiMap.h
@@ -37,7 +37,7 @@
 
     void insert(const Key& key, T* value) {
         ValueList* list = fHash.find(key);
-        if (NULL != list) {
+        if (list) {
             // The new ValueList entry is inserted as the second element in the
             // linked list, and it will contain the value of the first element.
             ValueList* newEntry = SkNEW_ARGS(ValueList, (list->fValue));
@@ -57,19 +57,19 @@
         ValueList* list = fHash.find(key);
         // Since we expect the caller to be fully aware of what is stored, just
         // assert that the caller removes an existing value.
-        SkASSERT(NULL != list);
+        SkASSERT(list);
         ValueList* prev = NULL;
         while (list->fValue != value) {
             prev = list;
             list = list->fNext;
         }
 
-        if (NULL != list->fNext) {
+        if (list->fNext) {
             ValueList* next = list->fNext;
             list->fValue = next->fValue;
             list->fNext = next->fNext;
             SkDELETE(next);
-        } else if (NULL != prev) {
+        } else if (prev) {
             prev->fNext = NULL;
             SkDELETE(list);
         } else {
@@ -82,7 +82,7 @@
 
     T* find(const Key& key) const {
         ValueList* list = fHash.find(key);
-        if (NULL != list) {
+        if (list) {
             return list->fValue;
         }
         return NULL;
@@ -91,7 +91,7 @@
     template<class FindPredicate>
     T* find(const Key& key, const FindPredicate f) {
         ValueList* list = fHash.find(key);
-        while (NULL != list) {
+        while (list) {
             if (f(list->fValue)){
                 return list->fValue;
             }
