fixes and changes; no more 'by' argument, instead just smarter handling of weights