added more direct product functions