Emergency commit. Half way through development. Tests may not fully work.