major js revision, may or may not keep