updated to address more sneaky approach by svd