diff --git a/IPython/frontend/cocoa/cocoa_frontend.py b/IPython/frontend/cocoa/cocoa_frontend.py
index cea94d9..3c0a46e 100644
--- a/IPython/frontend/cocoa/cocoa_frontend.py
+++ b/IPython/frontend/cocoa/cocoa_frontend.py
@@ -197,7 +197,7 @@ class IPythonCocoaController(NSObject, FrontEndBase):
             return True
         
         elif(selector == 'moveDown:'):
-            nextBlock = self.get_history_next(self.currentBlock())
+            nextBlock = self.get_history_next()
             if(nextBlock != None):
                 self.replaceCurrentBlockWithString(textView, nextBlock)
             else:
diff --git a/IPython/frontend/frontendbase.py b/IPython/frontend/frontendbase.py
index 12e1dc3..195f4ce 100644
--- a/IPython/frontend/frontendbase.py
+++ b/IPython/frontend/frontendbase.py
@@ -115,10 +115,11 @@ class IFrontEnd(zi.Interface):
     
     
     def get_history_previous(currentBlock):
-        """Returns the block previous in  the history."""
+        """Returns the block previous in  the history. Saves currentBlock if
+        the history_cursor is currently at the end of the input history"""
         pass
     
-    def get_history_next(currentBlock):
+    def get_history_next():
         """Returns the next block in the history."""
         
         pass
@@ -261,21 +262,21 @@ class FrontEndBase(object):
     def get_history_previous(self, currentBlock):
         """ Returns previous history string and decrement history cursor.
         """
-        print self.history
         command = self.history.get_history_item(self.history_cursor - 1)
-        print command
+        
         if command is not None:
-            self.history.input_cache[self.history_cursor] = currentBlock
+            if(self.history_cursor == len(self.history.input_cache)):
+                self.history.input_cache[self.history_cursor] = currentBlock
             self.history_cursor -= 1
         return command
     
     
-    def get_history_next(self, currentBlock):
+    def get_history_next(self):
         """ Returns next history string and increment history cursor.
         """
-        command = self.history.get_history_item(self.history_cursor + 1)
+        command = self.history.get_history_item(self.history_cursor+1)
+        
         if command is not None:
-            self.history.input_cache[self.history_cursor] = currentBlock
             self.history_cursor += 1
         return command
     
diff --git a/IPython/frontend/tests/test_frontendbase.py b/IPython/frontend/tests/test_frontendbase.py
index 0bd1bca..35949c4 100644
--- a/IPython/frontend/tests/test_frontendbase.py
+++ b/IPython/frontend/tests/test_frontendbase.py
@@ -110,5 +110,30 @@ class TestFrontendBase(unittest.TestCase):
     def checkRenderError(self, result):
         assert(self.fb.renderErrorCalled)
     
-    # TODO: add tests for history
+    def test_history_returns_expected_block(self):
+        """Make sure history browsing doesn't fail"""
+        
+        blocks = ["a=1","a=2","a=3"]
+        for b in blocks:
+            d = self.fb.execute(b)
+        
+        # d is now the deferred for the last executed block
+        d.addCallback(self.historyTests, blocks)
+        
+    
+    def historyTests(self, result, blocks):
+        """historyTests"""
+        
+        assert(len(blocks) >= 3)
+        assert(self.fb.get_history_previous("") == blocks[-2])
+        assert(self.fb.get_history_previous("") == blocks[-3])
+        assert(self.fb.get_history_next() == blocks[-2])
+    
+    
+    def test_history_returns_none_at_startup(self):
+        """test_history_returns_none_at_startup"""
+        
+        assert(self.fb.get_history_previous("")==None)
+        assert(self.fb.get_history_next()==None)
+