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")

		soup = BeautifulSoup(self.page,'html.parser')

		if 'Delivery information not found' in self.page:
			raise ValueError('The Tracking number is invalid/Tracking number is over 45 days old.')

		# Assign the current status of the shipment

		if 'Delivered on' in self.page:
			self.status = 'C'
		else:											 # The shipment is in Transit
			self.status = 'T'						

		# Checkpoints extraction begins here 
		
		table = soup.findAll('table',{'cellpadding':'1','cellspacing':'1','border':'1','align':'center','style':"width:800px;border-color:#034291;"})[1]
		rows = table.findAll('tr')[1:]

		for row in rows:

			'''
				Each row will have 3 columns: Date--Location--Status
			'''
			row_cells = row.findAll('td')
			date = row_cells[0].string.strip()
			date = datetime.strptime(date,"%A, %B %d, %Y")
			location = row_cells[1].find('a').string.strip()
			if location is '':		# ignore the days which are holidays
				continue
			status = row_cells[2].text.strip()
			
			self.tracking_data.append({'status':status,'date':date,'location':location})

		# Sort the checkpoints based on Date and Time --- this is important
		self.tracking_data = sorted(self.tracking_data, key=lambda k: k['date'])