added xProductWith, though the code is low quality