improved many to many m:n