implement weighted average timing