refactored to use experimental matrix