All rules implemented; transpose is now a method