Reimplementation - Still much things to do.