After fixing the bug with the shell state which was making the forward button block the shell and the cursor disappear, and fixing the back button that showed only text, and no icon, I started expanding the feature to support insertion of the header/footer, footnotes, and internal hyperlinks.
This made me go all the way back to remember examining the feature and the things that happen in the similar programs (mainly M$ Word). At Caolan's suggestion, we added the support for the navigation buttons to remember the position before the first jump, which alone made the navigation feature much better than the one in Word 2007.
Aiming to add the support for the internal links, I started moving the functionality from the GotoContent() method to the lower level, more specific ones, e.g. GotoBookmark, etc.
I got completely stuck realizing that some of the methods for moving around the document are not located in SwWrtShell, where the navigation class was initially put. The first idea was to move the navigation manager up the class hierarchy, preferably SwCrsrShell, where a lot of the Goto* methods are. This was, unfortunatelly, impossible, because of the methods called on SwView that are used to fix the UI issues.
While believing that all the Goto* methods are in SwWrtShell/SwCrsrShell, there was an idea to somehow connect the two. Unfortunately, there were methods needed for the navigation located in SwFEShell.
The great idea Caolan suggested was to implement the extension of the Goto* methods in the SwWrtShell, without moving the navigation class, in which I could keep track of the navigation history and than call the superclass Goto* methods. Due to dynamic binding, whenever navigating from the Writer shell, these methods will be called and besides their usual function, keep track of the navigation history.
I took some time to realize for which components I need to have the history supported outside the Navigator. Firstly I concentrated on the components that can be used as internal links:

Eventually I ended up moving everything in the more specific Goto* methods, even if they aren't called from anywhere else other than the Navigator (i.e. it's GotoContent() method).
That way the navigation history will be supported for some of the features which are yet to be implemented.
I also added the method that adds the current position of the cursor to the navigation history. I realized that's a routine I've repeated more than twice. I left the one that adds a specific position - it might be handy when a navigation to a feature fails for some reason. I haven't yet succeeded in simulating such an event, but I think that I might come upon it during more thorough testing.
There was also a bug when navigating to images: navigation *to* images was working perfectly, selecting the image like when going from Navigator. When one would try to navigate *from* an image, a cursor would disappear and buttons would become disabled. This can be fixed by working with a shell in standard mode.
Since there was a lot of strange illogical behaviour of these buttons in Microsoft Word, I'm going to dedicate a next few days to try and avoid similar situations.
