new functions with neg. weight stuff