updated weighted algo