added spree like variant functionality