diff --git a/include/core/SkDeque.h b/include/core/SkDeque.h
index cbed930..99c8dd4 100644
--- a/include/core/SkDeque.h
+++ b/include/core/SkDeque.h
@@ -42,7 +42,7 @@
 
     void* push_front();
     void* push_back();
-    
+
     void pop_front();
     void pop_back();
 
@@ -50,9 +50,9 @@
     struct Head;
 
 public:
-    class Iter {
+    class F2BIter {
     public:
-        Iter(const SkDeque& d);
+        F2BIter(const SkDeque& d);
         void* next();
 
     private:
@@ -67,7 +67,7 @@
     size_t  fElemSize;
     void*   fInitialStorage;
     int     fCount;
-    
+
     friend class Iter;
 };
 
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
index b05d424..046c692 100644
--- a/src/core/SkCanvas.cpp
+++ b/src/core/SkCanvas.cpp
@@ -477,16 +477,16 @@
 
 SkDevice* SkCanvas::getDevice() const {
     // return root device
-    SkDeque::Iter   iter(fMCStack);
-    MCRec*          rec = (MCRec*)iter.next();
+    SkDeque::F2BIter iter(fMCStack);
+    MCRec*           rec = (MCRec*)iter.next();
     SkASSERT(rec && rec->fLayer);
     return rec->fLayer->fDevice;
 }
 
 SkDevice* SkCanvas::setDevice(SkDevice* device) {
     // return root device
-    SkDeque::Iter   iter(fMCStack);
-    MCRec*          rec = (MCRec*)iter.next();
+    SkDeque::F2BIter iter(fMCStack);
+    MCRec*           rec = (MCRec*)iter.next();
     SkASSERT(rec && rec->fLayer);
     SkDevice*       rootDevice = rec->fLayer->fDevice;
 
diff --git a/src/core/SkDeque.cpp b/src/core/SkDeque.cpp
index 4f15051..2c6ce64 100644
--- a/src/core/SkDeque.cpp
+++ b/src/core/SkDeque.cpp
@@ -2,16 +2,16 @@
 **
 ** Copyright 2006, The Android Open Source Project
 **
-** Licensed under the Apache License, Version 2.0 (the "License"); 
-** you may not use this file except in compliance with the License. 
-** You may obtain a copy of the License at 
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
 **
-**     http://www.apache.org/licenses/LICENSE-2.0 
+**     http://www.apache.org/licenses/LICENSE-2.0
 **
-** Unless required by applicable law or agreed to in writing, software 
-** distributed under the License is distributed on an "AS IS" BASIS, 
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
-** See the License for the specific language governing permissions and 
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
 ** limitations under the License.
 */
 
@@ -25,10 +25,10 @@
     char*   fBegin; // start of used section in this chunk
     char*   fEnd;   // end of used section in this chunk
     char*   fStop;  // end of the allocated chunk
-    
+
     char*       start() { return (char*)(this + 1); }
     const char* start() const { return (const char*)(this + 1); }
-    
+
     void init(size_t size) {
         fNext   = fPrev = NULL;
         fBegin  = fEnd = NULL;
@@ -44,7 +44,7 @@
 SkDeque::SkDeque(size_t elemSize, void* storage, size_t storageSize)
         : fElemSize(elemSize), fInitialStorage(storage), fCount(0) {
     SkASSERT(storageSize == 0 || storage != NULL);
-    
+
     if (storageSize >= sizeof(Head) + elemSize) {
         fFront = (Head*)storage;
         fFront->init(storageSize);
@@ -69,7 +69,7 @@
 
 const void* SkDeque::front() const {
     Head* front = fFront;
-    
+
     if (NULL == front) {
         return NULL;
     }
@@ -108,7 +108,7 @@
         fFront->init(sizeof(Head) + INIT_ELEM_COUNT * fElemSize);
         fBack = fFront;     // update our linklist
     }
-    
+
     Head*   first = fFront;
     char*   begin;
 
@@ -144,7 +144,7 @@
         fBack->init(sizeof(Head) + INIT_ELEM_COUNT * fElemSize);
         fFront = fBack; // update our linklist
     }
-    
+
     Head*   last = fBack;
     char*   end;
 
@@ -178,7 +178,7 @@
     Head*   first = fFront;
 
     SkASSERT(first != NULL);
-    
+
     if (first->fBegin == NULL) {  // we were marked empty from before
         first = first->fNext;
         first->fPrev = NULL;
@@ -202,9 +202,9 @@
     fCount -= 1;
 
     Head* last = fBack;
-    
+
     SkASSERT(last != NULL);
-    
+
     if (last->fEnd == NULL) {  // we were marked empty from before
         last = last->fPrev;
         last->fNext = NULL;
@@ -212,7 +212,7 @@
         fBack = last;
         SkASSERT(last != NULL);  // else we popped too far
     }
-    
+
     char* end = last->fEnd - fElemSize;
     SkASSERT(end >= last->fBegin);
 
@@ -225,7 +225,7 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 
-SkDeque::Iter::Iter(const SkDeque& d) : fElemSize(d.fElemSize) {
+SkDeque::F2BIter::F2BIter(const SkDeque& d) : fElemSize(d.fElemSize) {
     fHead = d.fFront;
     while (fHead != NULL && fHead->fBegin == NULL) {
         fHead = fHead->fNext;
@@ -233,9 +233,9 @@
     fPos = fHead ? fHead->fBegin : NULL;
 }
 
-void* SkDeque::Iter::next() {
+void* SkDeque::F2BIter::next() {
     char* pos = fPos;
-    
+
     if (pos) {   // if we were valid, try to move to the next setting
         char* next = pos + fElemSize;
         SkASSERT(next <= fHead->fEnd);
diff --git a/src/effects/SkLayerRasterizer.cpp b/src/effects/SkLayerRasterizer.cpp
index 168fbe9..851f418 100644
--- a/src/effects/SkLayerRasterizer.cpp
+++ b/src/effects/SkLayerRasterizer.cpp
@@ -37,7 +37,7 @@
 
 SkLayerRasterizer::~SkLayerRasterizer()
 {
-    SkDeque::Iter           iter(fLayers);
+    SkDeque::F2BIter        iter(fLayers);
     SkLayerRasterizer_Rec*  rec;
 
     while ((rec = (SkLayerRasterizer_Rec*)iter.next()) != NULL)
@@ -55,7 +55,7 @@
 static bool compute_bounds(const SkDeque& layers, const SkPath& path, const SkMatrix& matrix,
                            const SkIRect* clipBounds, SkIRect* bounds)
 {
-    SkDeque::Iter           iter(layers);
+    SkDeque::F2BIter        iter(layers);
     SkLayerRasterizer_Rec*  rec;
 
     bounds->set(SK_MaxS32, SK_MaxS32, SK_MinS32, SK_MinS32);
@@ -139,7 +139,7 @@
         // we set the matrixproc in the loop, as the matrix changes each time (potentially)
         draw.fBounder   = NULL;
 
-        SkDeque::Iter           iter(fLayers);
+        SkDeque::F2BIter        iter(fLayers);
         SkLayerRasterizer_Rec*  rec;
 
         while ((rec = (SkLayerRasterizer_Rec*)iter.next()) != NULL) {
@@ -219,7 +219,7 @@
 
     buffer.write32(fLayers.count());
 
-    SkDeque::Iter                   iter(fLayers);
+    SkDeque::F2BIter                iter(fLayers);
     const SkLayerRasterizer_Rec*    rec;
 
     while ((rec = (const SkLayerRasterizer_Rec*)iter.next()) != NULL)
diff --git a/tests/DequeTest.cpp b/tests/DequeTest.cpp
new file mode 100644
index 0000000..3b8991a
--- /dev/null
+++ b/tests/DequeTest.cpp
@@ -0,0 +1,62 @@
+#include "Test.h"
+#include "SkDeque.h"
+
+static void assert_count(skiatest::Reporter* reporter, const SkDeque& deq, int count) {
+    if (0 == count) {
+        REPORTER_ASSERT(reporter, deq.empty());
+        REPORTER_ASSERT(reporter, 0 == deq.count());
+        REPORTER_ASSERT(reporter, sizeof(int) == deq.elemSize());
+        REPORTER_ASSERT(reporter, NULL == deq.front());
+        REPORTER_ASSERT(reporter, NULL == deq.back());
+    } else {
+        REPORTER_ASSERT(reporter, !deq.empty());
+        REPORTER_ASSERT(reporter, count == deq.count());
+        REPORTER_ASSERT(reporter, sizeof(int) == deq.elemSize());
+        REPORTER_ASSERT(reporter, NULL != deq.front());
+        REPORTER_ASSERT(reporter, NULL != deq.back());
+        if (1 == count) {
+            REPORTER_ASSERT(reporter, deq.back() == deq.front());
+        } else {
+            REPORTER_ASSERT(reporter, deq.back() != deq.front());
+        }
+    }
+}
+
+static void assert_f2biter(skiatest::Reporter* reporter, const SkDeque& deq,
+                           int max, int min) {
+    SkDeque::F2BIter iter(deq);
+    void* ptr;
+
+    int value = max;
+    while ((ptr = iter.next()) != NULL) {
+        REPORTER_ASSERT(reporter, value == *(int*)ptr);
+        value -= 1;
+    }
+    REPORTER_ASSERT(reporter, value+1 == min);
+}
+
+static void TestDeque(skiatest::Reporter* reporter) {
+    SkDeque deq(sizeof(int));
+    int i;
+
+    assert_count(reporter, deq, 0);
+    for (i = 1; i <= 10; i++) {
+        *(int*)deq.push_front() = i;
+    }
+    assert_count(reporter, deq, 10);
+    assert_f2biter(reporter, deq, 10, 1);
+
+    for (i = 0; i < 5; i++) {
+        deq.pop_front();
+    }
+    assert_count(reporter, deq, 5);
+    assert_f2biter(reporter, deq, 5, 1);
+
+    for (i = 0; i < 5; i++) {
+        deq.pop_front();
+    }
+    assert_count(reporter, deq, 0);
+}
+
+#include "TestClassDef.h"
+DEFINE_TESTCLASS("Deque", TestDequeClass, TestDeque)
diff --git a/tests/tests_files.mk b/tests/tests_files.mk
index 1c6a0ef..40e8880 100644
--- a/tests/tests_files.mk
+++ b/tests/tests_files.mk
@@ -3,6 +3,7 @@
     BlitRowTest.cpp \
     ClipCubicTest.cpp \
     ClipperTest.cpp \
+    DequeTest.cpp \
     FillPathTest.cpp \
     FlateTest.cpp \
     GeometryTest.cpp \
