Completely rewrote the Effect module