Improve performance substantially.  Include support for weights