diff --git a/conman/connection_manager.py b/conman/connection_manager.py
index cbb3b5b..2ab4763 100755
--- a/conman/connection_manager.py
+++ b/conman/connection_manager.py
@@ -798,11 +798,11 @@
     return ''
 
 
-def _get_quantenna_interface():
+def _get_quantenna_interfaces():
   try:
-    return subprocess.check_output(['get-quantenna-interface']).strip()
+    return subprocess.check_output(['get-quantenna-interfaces']).split()
   except subprocess.CalledProcessError:
-    logging.fatal('Failed to call get-quantenna-interface')
+    logging.fatal('Failed to call get-quantenna-interfaces')
     raise
 
 
@@ -812,6 +812,7 @@
   Returns:
     A dict mapping wireless client interfaces to their supported bands.
   """
+  # TODO(mikemu): Use wifi_files instead of "wifi show".
 
   current_band = None
   result = collections.defaultdict(lambda: collections.defaultdict(set))
@@ -821,10 +822,9 @@
     elif line.startswith('Client Interface:'):
       result[line.split()[2]]['bands'].add(current_band)
 
-  # TODO(rofrankel):  Make 'wifi show' (or wifi_files) include this information
-  # so we don't need a subprocess call to check.
-  quantenna_interface = _get_quantenna_interface()
-  if quantenna_interface in result:
-    result[quantenna_interface]['frenzy'] = True
+  for quantenna_interface in _get_quantenna_interfaces():
+    if quantenna_interface.startswith('wcli'):
+      result[quantenna_interface]['bands'].add('5')
+      result[quantenna_interface]['frenzy'] = True
 
   return result
diff --git a/conman/connection_manager_test.py b/conman/connection_manager_test.py
index d96022e..e651cb1 100755
--- a/conman/connection_manager_test.py
+++ b/conman/connection_manager_test.py
@@ -106,22 +106,12 @@
 
 Band: 5
 RegDomain: 00
-Interface: wlan0  # 5 GHz ap
-AutoChannel: False
-Station List for band: 5
-
-Client Interface: wlan1  # 5 GHz client
 """
 
 WIFI_SHOW_OUTPUT_FRENZY = """Band: 2.4
 RegDomain: 00
 Band: 5
 RegDomain: 00
-Interface: wlan0  # 5 GHz ap
-AutoChannel: False
-Station List for band: 5
-
-Client Interface: wlan0  # 5 GHz client
 """
 
 IW_SCAN_DEFAULT_OUTPUT = """BSS 00:11:22:33:44:55(on wcli0)
@@ -141,14 +131,22 @@
 @wvtest.wvtest
 def get_client_interfaces_test():
   """Test get_client_interfaces."""
+  wifi_show = None
+  quantenna_interfaces = None
+
   # pylint: disable=protected-access
-  original_wifi_show = connection_manager._wifi_show
-  original_get_quantenna_interface = connection_manager._get_quantenna_interface
-  connection_manager._get_quantenna_interface = lambda: ''
-  connection_manager._wifi_show = lambda: WIFI_SHOW_OUTPUT_MARVELL8897
+  old_wifi_show = connection_manager._wifi_show
+  old_get_quantenna_interfaces = connection_manager._get_quantenna_interfaces
+  connection_manager._wifi_show = lambda: wifi_show
+  connection_manager._get_quantenna_interfaces = lambda: quantenna_interfaces
+
+  wifi_show = WIFI_SHOW_OUTPUT_MARVELL8897
+  quantenna_interfaces = []
   wvtest.WVPASSEQ(connection_manager.get_client_interfaces(),
                   {'wcli0': {'bands': set(['2.4', '5'])}})
-  connection_manager._wifi_show = lambda: WIFI_SHOW_OUTPUT_ATH9K_ATH10K
+
+  wifi_show = WIFI_SHOW_OUTPUT_ATH9K_ATH10K
+  quantenna_interfaces = []
   wvtest.WVPASSEQ(connection_manager.get_client_interfaces(), {
       'wcli0': {'bands': set(['2.4'])},
       'wcli1': {'bands': set(['5'])}
@@ -157,21 +155,21 @@
   # Test Quantenna devices.
 
   # 2.4 GHz cfg80211 radio + 5 GHz Frenzy (Optimus Prime).
-  connection_manager._wifi_show = lambda: WIFI_SHOW_OUTPUT_ATH9K_FRENZY
-  connection_manager._get_quantenna_interface = lambda: 'wlan1'
+  wifi_show = WIFI_SHOW_OUTPUT_ATH9K_FRENZY
+  quantenna_interfaces = ['wlan1', 'wlan1_portal', 'wcli1']
   wvtest.WVPASSEQ(connection_manager.get_client_interfaces(), {
       'wcli0': {'bands': set(['2.4'])},
-      'wlan1': {'frenzy': True, 'bands': set(['5'])}
+      'wcli1': {'frenzy': True, 'bands': set(['5'])}
   })
 
   # Only Frenzy (e.g. Lockdown).
-  connection_manager._wifi_show = lambda: WIFI_SHOW_OUTPUT_FRENZY
-  connection_manager._get_quantenna_interface = lambda: 'wlan0'
+  wifi_show = WIFI_SHOW_OUTPUT_FRENZY
+  quantenna_interfaces = ['wlan0', 'wlan0_portal', 'wcli0']
   wvtest.WVPASSEQ(connection_manager.get_client_interfaces(),
-                  {'wlan0': {'frenzy': True, 'bands': set(['5'])}})
+                  {'wcli0': {'frenzy': True, 'bands': set(['5'])}})
 
-  connection_manager._wifi_show = original_wifi_show
-  connection_manager._get_quantenna_interface = original_get_quantenna_interface
+  connection_manager._wifi_show = old_wifi_show
+  connection_manager._get_quantenna_interfaces = old_get_quantenna_interfaces
 
 
 class WLANConfiguration(connection_manager.WLANConfiguration):
@@ -495,7 +493,7 @@
 
 
 def connection_manager_test(radio_config, wlan_configs=None,
-                            quantenna_interface='', **cm_kwargs):
+                            quantenna_interfaces=None, **cm_kwargs):
   """Returns a decorator that does ConnectionManager test boilerplate."""
   if wlan_configs is None:
     wlan_configs = {}
@@ -510,11 +508,12 @@
       wifi_scan_period_s = run_duration_s * wifi_scan_period
 
       # pylint: disable=protected-access
-      original_wifi_show = connection_manager._wifi_show
+      old_wifi_show = connection_manager._wifi_show
       connection_manager._wifi_show = lambda: radio_config
 
-      original_gqi = connection_manager._get_quantenna_interface
-      connection_manager._get_quantenna_interface = lambda: quantenna_interface
+      old_gqi = connection_manager._get_quantenna_interfaces
+      connection_manager._get_quantenna_interfaces = (
+          lambda: quantenna_interfaces or [])
 
       try:
         # No initial state.
@@ -523,7 +522,6 @@
         os.mkdir(os.path.join(tmp_dir, 'interfaces'))
         moca_tmp_dir = tempfile.mkdtemp()
         wpa_control_interface = tempfile.mkdtemp()
-        FrenzyWifi.WPACtrl.WIFIINFO_PATH = tempfile.mkdtemp()
 
         for band, access_point in wlan_configs.iteritems():
           write_wlan_config(config_dir, band, 'initial ssid', 'initial psk')
@@ -551,10 +549,9 @@
         shutil.rmtree(config_dir)
         shutil.rmtree(moca_tmp_dir)
         shutil.rmtree(wpa_control_interface)
-        shutil.rmtree(FrenzyWifi.WPACtrl.WIFIINFO_PATH)
         # pylint: disable=protected-access
-        connection_manager._wifi_show = original_wifi_show
-        connection_manager._get_quantenna_interface = original_gqi
+        connection_manager._wifi_show = old_wifi_show
+        connection_manager._get_quantenna_interfaces = old_gqi
 
     actual_test.func_name = f.func_name
     return actual_test
@@ -853,21 +850,24 @@
 
 @wvtest.wvtest
 @connection_manager_test(WIFI_SHOW_OUTPUT_ATH9K_FRENZY,
-                         quantenna_interface='wlan1')
+                         quantenna_interfaces=['wlan1', 'wlan1_portal', 'wcli1']
+                        )
 def connection_manager_test_generic_ath9k_frenzy_2g(c):
   connection_manager_test_generic(c, '2.4')
 
 
 @wvtest.wvtest
 @connection_manager_test(WIFI_SHOW_OUTPUT_ATH9K_FRENZY,
-                         quantenna_interface='wlan1')
+                         quantenna_interfaces=['wlan1', 'wlan1_portal', 'wcli1']
+                        )
 def connection_manager_test_generic_ath9k_frenzy_5g(c):
   connection_manager_test_generic(c, '5')
 
 
 @wvtest.wvtest
 @connection_manager_test(WIFI_SHOW_OUTPUT_FRENZY,
-                         quantenna_interface='wlan0')
+                         quantenna_interfaces=['wlan0', 'wlan0_portal', 'wcli0']
+                        )
 def connection_manager_test_generic_frenzy_5g(c):
   connection_manager_test_generic(c, '5')
 
@@ -970,7 +970,8 @@
 
 @wvtest.wvtest
 @connection_manager_test(WIFI_SHOW_OUTPUT_ATH9K_FRENZY,
-                         quantenna_interface='wlan1')
+                         quantenna_interfaces=['wlan1', 'wlan1_portal', 'wcli1']
+                        )
 def connection_manager_test_dual_band_two_radios_ath9k_frenzy(c):
   connection_manager_test_dual_band_two_radios(c)
 
diff --git a/wifi/quantenna.py b/wifi/quantenna.py
index 33378ba..de53ba7 100755
--- a/wifi/quantenna.py
+++ b/wifi/quantenna.py
@@ -2,7 +2,6 @@
 
 """Wifi commands for Quantenna using QCSAPI."""
 
-import json
 import os
 import subprocess
 import time
@@ -10,9 +9,6 @@
 import utils
 
 
-WIFIINFO_PATH = '/tmp/wifi/wifiinfo'
-
-
 ALREADY_MEMBER_FMT = ('device %s is already a member of a bridge; '
                       "can't enslave it to bridge %s.")
 NOT_MEMBER_FMT = 'device %s is not a slave of %s'
@@ -44,18 +40,6 @@
                                  stderr=subprocess.STDOUT).strip()
 
 
-def info_parsed(interface):
-  """Fake version of iw.info_parsed."""
-  wifiinfo_filename = os.path.join(WIFIINFO_PATH, interface)
-
-  if not os.path.exists(wifiinfo_filename):
-    return {}
-
-  wifiinfo = json.load(open(wifiinfo_filename))
-  return {'addr' if k == 'BSSID' else k.lower(): v
-          for k, v in wifiinfo.iteritems()}
-
-
 def _set_interface_in_bridge(bridge, interface, want_in_bridge):
   """Add/remove Quantenna interface from/to the bridge."""
   if want_in_bridge:
diff --git a/wifi/quantenna_test.py b/wifi/quantenna_test.py
index ebef2a0..802b7a3 100755
--- a/wifi/quantenna_test.py
+++ b/wifi/quantenna_test.py
@@ -2,11 +2,8 @@
 
 """Tests for quantenna.py."""
 
-import json
 import os
-import shutil
 from subprocess import CalledProcessError
-import tempfile
 
 from configs_test import FakeOptDict
 import quantenna
@@ -214,27 +211,6 @@
 
 
 @wvtest.wvtest
-def info_parsed_test():
-  set_fakes()
-
-  try:
-    quantenna.WIFIINFO_PATH = tempfile.mkdtemp()
-    json.dump({
-        'Channel': '64',
-        'SSID': 'my ssid',
-        'BSSID': '00:00:00:00:00:00',
-    }, open(os.path.join(quantenna.WIFIINFO_PATH, 'wlan0'), 'w'))
-
-    wvtest.WVPASSEQ(quantenna.info_parsed('wlan0'), {
-        'ssid': 'my ssid',
-        'addr': '00:00:00:00:00:00',
-        'channel': '64',
-    })
-  finally:
-    shutil.rmtree(quantenna.WIFIINFO_PATH)
-
-
-@wvtest.wvtest
 def parse_scan_result_test():
   result = '  " ssid with "quotes" " 00:11:22:33:44:55 40 25 0 0 0 0 0 1 40  '
   wvtest.WVPASSEQ(quantenna._parse_scan_result(result),
diff --git a/wifi/wifi.py b/wifi/wifi.py
index 7d0d301..b0ef7f9 100755
--- a/wifi/wifi.py
+++ b/wifi/wifi.py
@@ -459,7 +459,6 @@
     True.
   """
   for band in opt.band.split():
-    frenzy = False
     print('Band: %s' % band)
     for tokens in utils.subprocess_line_tokens(('iw', 'reg', 'get')):
       if len(tokens) >= 2 and tokens[0] == 'country':
@@ -471,20 +470,11 @@
       interface = iw.find_interface_from_band(
           band, interface_type, opt.interface_suffix)
       if interface is None:
-        if band == '5':
-          interface = _get_quantenna_interface()
-          if interface:
-            frenzy = True
-        if not interface:
-          continue
-
+        continue
       print('%sInterface: %s  # %s GHz %s' %
-            (prefix, interface, band, prefix.lower() or 'ap'))
+            (prefix, interface, band, 'client' if 'cli' in interface else 'ap'))
 
-      if frenzy:
-        info_parsed = quantenna.info_parsed(interface)
-      else:
-        info_parsed = iw.info_parsed(interface)
+      info_parsed = iw.info_parsed(interface)
       for k, label in (('channel', 'Channel'),
                        ('ssid', 'SSID'),
                        ('addr', 'BSSID')):
@@ -511,13 +501,6 @@
   return True
 
 
-def _get_quantenna_interface():
-  try:
-    return subprocess.check_output(['get-quantenna-interface']).strip()
-  except subprocess.CalledProcessError as e:
-    utils.log('Failed to call get-quantenna-interface: %s', e)
-
-
 @iw.requires_iw
 def scan_wifi(opt):
   """Prints 'iw scan' results.
