hub() factory