As you know Mediocre supports both the UCI and xboard protocols (although it's always supported UCI a bit better). But fact is it hardly really supports xboard, there is atleast one bug that I know of (when playing multiple games) that causes Mediocre to play illegal moves.
I've not wanted to touch it since frankly I find xboard annoying and confusing.
But while implementing pondering I had to start digging in the mess again.
For UCI it took about an hour to get it to work, possibly with a bug or two (I haven't tried it extensively yet).
When trying to do the same for xboard I had to change a ton of things, mainly due to xboard thinking for some reason that it's a good idea to not give any information whatsoever to the engine.
The clearest example of this is UCI sending "go ponder" when it's time for the engine to ponder, and the neat little "ponderhit" UCI sends if the next move from the opponent is the same move as the engine said it was pondering on. If it wasn't a ponderhit UCI simply sends a new search-string.
Even if the pondering is not implemented like this (picking a move and thinking on it), the information can still be easily used to control the thinking (starting and stopping pondering).
Xboard does nothing, except telling the engine "hard" at the beginning of the game (logical choice of command I know).
When the opponent moves, the commands are sent as usual, even though the engine is pondering.
This completely messed up my way of handling interrupt of the search. Since I now have to store the commands sent during search (or else the engine will "forget" what move was played since the same command is used to tell the engine to stop ponder).
Ok I'll stop ranting for now. :) Atleast ponder will be done soon, if xboard allows me to.