-/// The History class stores statistics about how often different moves
-/// have been successful or unsuccessful during the current search. These
-/// statistics are used for reduction and move ordering decisions. History
-/// entries are stored according only to moving piece and destination square,
-/// in particular two moves with different origin but same destination and
-/// same piece will be considered identical.
-
-class History {
-public:
+/// The Stats struct stores moves statistics. According to the template parameter
+/// the class can store History, Gains and Refutations statistics. History records
+/// how often different moves have been successful or unsuccessful during the
+/// current search and is used for reduction and move ordering decisions. Gains
+/// records the move's best evaluation gain from one ply to the next and is used
+/// for pruning decisions. Refutations store the move that refute a previous one.
+/// Entries are stored according only to moving piece and destination square, in
+/// particular two moves with different origin but same destination and same piece
+/// will be considered identical.
+template<bool Gain, typename T>
+struct Stats {