docs: def Extract_Checkpoints(self):
  		'''
  			Extract the checkpoints and store in self.tracking_data
  		'''
  
  		# Make sure page is available
  		if self.page is None:
  			raise Exception("The HTML data was not fetched due to some reasons")
  
  		# Check for invalid tracking number
  		if 'Invalid number / data not currently available' in self.page:
  			raise ValueError('Invalid number/data not currently available')
  
  		# Checkpoints extraction begins here 
  		
  		soup = BeautifulSoup(self.page,'html.parser')
  		
  		# Assign the current status of the shipment - self.status
  
  		current_status = soup.find('span',id='spnCurrentStatusValue').text.strip()
  		if current_status == 'Supporting Document Returned to Shipper':	
  			self.status = 'R'
  		elif current_status == 'Delivered':
  			self.status = 'C'
  		else:											 # The shipment is in Transit
  			self.status = 'T'
  
  		# Get all rows of the Checkpoints table (no particular order)
  		rows = soup.findAll('div',{'class':'fullWidth odd leftFloat bottomGreyBorder'})
  		rows += soup.findAll('div',{'class':'fullWidth even leftFloat bottomGreyBorder'})
  
  		for row in rows:
  			# Get the data
  
  			location = row.find('div',{'class':'leftFloat thirdWidth'}).string.strip()
  			date_time = row.find('div',{'class':'leftFloat shipmentSummaryLabel'}).string.strip()
  			status = row.find('div',{'class':'leftFloat shipmentHistoryActivityLabel'}).string.strip()
  
  			# Clean it
  			location = self.remove_non_ascii(location)
  			date_time_format = "%d-%b-%Y %H:%M"
  			date_time = parse(self.remove_non_ascii(date_time))
  			status = self.remove_non_ascii(status)
  
  			# Add it to the checkpoint list
  			self.tracking_data.append({'status':status,'date':date_time,'location':location})
  
  		self.tracking_data = sorted(self.tracking_data, key=lambda k: k['date'])