Major rewrite (bug fix)