This needs to be rethunk, currently it calculates scores on the fly which is inefficient.
This needs to be rethunk, currently it calculates scores on the fly which is inefficient.