diff --git a/pySim/cards.py b/pySim/cards.py
index dd8fe8b..61d2624 100644
--- a/pySim/cards.py
+++ b/pySim/cards.py
@@ -44,7 +44,7 @@
 		return
 
 	def file_exists(self, fid):
-		res_arr = self._scc.try_select_file(fid)
+		res_arr = self._scc.try_select_path(fid)
 		for res in res_arr:
 			if res[1] != '9000':
 				return False
@@ -477,7 +477,7 @@
 		"""
 		f = self._files['name']
 
-		r = self._scc.select_file(['3f00', '7f4d', f[0]])
+		r = self._scc.select_path(['3f00', '7f4d', f[0]])
 		rec_len = int(r[-1][28:30], 16)
 		tlen = int(r[-1][4:8],16)
 		rec_cnt = (tlen / rec_len) - 1
@@ -489,7 +489,7 @@
 
 	def program(self, p):
 		# Go to dir
-		self._scc.select_file(['3f00', '7f4d'])
+		self._scc.select_path(['3f00', '7f4d'])
 
 		# Home PLMN in PLMN_Sel format
 		hplmn = enc_plmn(p['mcc'], p['mnc'])
@@ -533,7 +533,7 @@
 			# FIXME
 
 		# Write PLMN_Sel forcefully as well
-		r = self._scc.select_file(['3f00', '7f20', '6f30'])
+		r = self._scc.select_path(['3f00', '7f20', '6f30'])
 		tl = int(r[-1][4:8], 16)
 
 		hplmn = enc_plmn(p['mcc'], p['mnc'])
@@ -607,7 +607,7 @@
 		and entry size
 		"""
 
-		r = self._scc.select_file(['3f00', '000c'])
+		r = self._scc.select_path(['3f00', '000c'])
 		rec_len = int(r[-1][28:30], 16)
 		tlen = int(r[-1][4:8],16)
 		rec_cnt = (tlen / rec_len) - 1
@@ -619,7 +619,7 @@
 
 	def program(self, p):
 		# Home PLMN
-		r = self._scc.select_file(['3f00', '7f20', '6f30'])
+		r = self._scc.select_path(['3f00', '7f20', '6f30'])
 		tl = int(r[-1][4:8], 16)
 
 		hplmn = enc_plmn(p['mcc'], p['mnc'])
@@ -674,11 +674,11 @@
 		self._scc.verify_chv(5, pin)
 
 		# EF.ICCID
-		r = self._scc.select_file(['3f00', '2fe2'])
+		r = self._scc.select_path(['3f00', '2fe2'])
 		data, sw = self._scc.update_binary('2fe2', enc_iccid(p['iccid']))
 
 		# EF.IMSI
-		r = self._scc.select_file(['3f00', '7f20', '6f07'])
+		r = self._scc.select_path(['3f00', '7f20', '6f07'])
 		data, sw = self._scc.update_binary('6f07', enc_imsi(p['imsi']))
 
 		# EF.ACC
@@ -687,7 +687,7 @@
 
 		# EF.SMSP
 		if p.get('smsp'):
-			r = self._scc.select_file(['3f00', '7f10', '6f42'])
+			r = self._scc.select_path(['3f00', '7f10', '6f42'])
 			data, sw = self._scc.update_record('6f42', 1, lpad(p['smsp'], 80))
 
 		# Set the Ki using proprietary command
@@ -695,13 +695,13 @@
 		data, sw = self._scc._tp.send_apdu(pdu)
 
 		# EF.HPLMN
-		r = self._scc.select_file(['3f00', '7f20', '6f30'])
+		r = self._scc.select_path(['3f00', '7f20', '6f30'])
 		size = int(r[-1][4:8], 16)
 		hplmn = enc_plmn(p['mcc'], p['mnc'])
 		self._scc.update_binary('6f30', hplmn + 'ff' * (size-3))
 
 		# EF.SPN (Service Provider Name)
-		r = self._scc.select_file(['3f00', '7f20', '6f30'])
+		r = self._scc.select_path(['3f00', '7f20', '6f30'])
 		size = int(r[-1][4:8], 16)
 		# FIXME
 
@@ -772,7 +772,7 @@
 	def program(self, p):
 
 		# select MF
-		r = self._scc.select_file(['3f00'])
+		r = self._scc.select_path(['3f00'])
 
 		# authenticate as SUPER ADM using default key
 		self._scc.verify_chv(0x0b, h2b("3838383838383838"))
@@ -798,7 +798,7 @@
 		data, sw = self._scc.update_binary('2fe2', enc_iccid(p['iccid']))
 
 		# select DF_GSM
-		r = self._scc.select_file(['7f20'])
+		r = self._scc.select_path(['7f20'])
 
 		# write EF.IMSI
 		data, sw = self._scc.update_binary('6f07', enc_imsi(p['imsi']))
@@ -808,7 +808,7 @@
 			data, sw = self._scc.update_binary('6f78', lpad(p['acc'], 4))
 
 		# get size and write EF.HPLMN
-		r = self._scc.select_file(['6f30'])
+		r = self._scc.select_path(['6f30'])
 		size = int(r[-1][4:8], 16)
 		hplmn = enc_plmn(p['mcc'], p['mnc'])
 		self._scc.update_binary('6f30', hplmn + 'ff' * (size-3))
@@ -820,7 +820,7 @@
 		data, sw = self._scc.update_binary('0001', p['ki'], 3)
 
 		# select DF_TELECOM
-		r = self._scc.select_file(['3f00', '7f10'])
+		r = self._scc.select_path(['3f00', '7f10'])
 
 		# write EF.SMSP
 		if p.get('smsp'):
@@ -862,13 +862,13 @@
 		self.verify_adm(h2b(p['pin_adm']))
 
 		# select MF
-		r = self._scc.select_file(['3f00'])
+		r = self._scc.select_path(['3f00'])
 
 		# write EF.ICCID
 		data, sw = self._scc.update_binary('2fe2', enc_iccid(p['iccid']))
 
 		# select DF_GSM
-		r = self._scc.select_file(['7f20'])
+		r = self._scc.select_path(['7f20'])
 
 		# set Ki in proprietary file
 		data, sw = self._scc.update_binary('00FF', p['ki'])
@@ -921,7 +921,7 @@
 
 		# EF.SMSP
 		if p.get('smsp'):
-			r = self._scc.select_file(['3f00', '7f10'])
+			r = self._scc.select_path(['3f00', '7f10'])
 			data, sw = self._scc.update_record('6f42', 1, lpad(p['smsp'], 104), force_len=True)
 
 		# EF.MSISDN
@@ -932,7 +932,7 @@
 			msisdn = enc_msisdn(p['msisdn'])
 			data = 'ff' * 20 + msisdn + 'ff' * 2
 
-			r = self._scc.select_file(['3f00', '7f10'])
+			r = self._scc.select_path(['3f00', '7f10'])
 			data, sw = self._scc.update_record('6F40', 1, data, force_len=True)
 
 
@@ -1106,12 +1106,12 @@
 		self._scc.verify_chv(0x0A, h2b(p['pin_adm']))
 
 		# select MF
-		r = self._scc.select_file(['3f00'])
+		r = self._scc.select_path(['3f00'])
 
 		# write EF.ICCID
 		data, sw = self._scc.update_binary('2fe2', enc_iccid(p['iccid']))
 
-		r = self._scc.select_file(['7ff0'])
+		r = self._scc.select_path(['7ff0'])
 
 		# set Ki in proprietary file
 		data, sw = self._scc.update_binary('FF02', p['ki'])
@@ -1120,7 +1120,7 @@
 		data, sw = self._scc.update_binary('FF01', p['opc'])
 
 		# select DF_GSM
-		r = self._scc.select_file(['7f20'])
+		r = self._scc.select_path(['7f20'])
 
 		# write EF.IMSI
 		data, sw = self._scc.update_binary('6f07', enc_imsi(p['imsi']))
@@ -1269,7 +1269,7 @@
 			print("Warning: Programming of the ICCID is not implemented for this type of card.")
 
 		# select DF_GSM
-		self._scc.select_file(['7f20'])
+		self._scc.select_path(['7f20'])
 
 		# write EF.IMSI
 		if p.get('imsi'):
@@ -1307,7 +1307,7 @@
 
 		# EF.SMSP
 		if p.get('smsp'):
-			r = self._scc.select_file(['3f00', '7f10'])
+			r = self._scc.select_path(['3f00', '7f10'])
 			data, sw = self._scc.update_record('6f42', 1, lpad(p['smsp'], 104), force_len=True)
 
 		# EF.MSISDN
@@ -1318,7 +1318,7 @@
 			msisdn = enc_msisdn(p['msisdn'])
 			content = 'ff' * 20 + msisdn + 'ff' * 2
 
-			r = self._scc.select_file(['3f00', '7f10'])
+			r = self._scc.select_path(['3f00', '7f10'])
 			data, sw = self._scc.update_record('6F40', 1, content, force_len=True)
 
 		# EF.ACC
@@ -1332,8 +1332,8 @@
 
 		# update EF-SIM_AUTH_KEY (and EF-USIM_AUTH_KEY_2G, which is
 		# hard linked to EF-USIM_AUTH_KEY)
-		self._scc.select_file(['3f00'])
-		self._scc.select_file(['a515'])
+		self._scc.select_path(['3f00'])
+		self._scc.select_path(['a515'])
 		if p.get('ki'):
 			self._scc.update_binary('6f20', p['ki'], 1)
 		if p.get('opc'):
