falls back to opts.title if no hubName