diff --git a/ReadDB.py b/ReadDB.py
index 7c7235a..b1194d5 100644
--- a/ReadDB.py
+++ b/ReadDB.py
@@ -1,42 +1,75 @@
 import pandas as pd
 import json
+from filelock import FileLock, Timeout
+import time
+
+# Define the path to the Excel file and the lock file
+excel_file_path = "./interview_database.xlsx"
+lock_file_path = "./interview_database.xlsx.lock"
+
 def ReadDatabase():
     """ 
     Reads the Database
 
     ``REQUIRES``: None
     
-    ``PROMISES``: JSON (Interview Avaiable Slots)
+    ``PROMISES``: JSON (Interview Available Slots)
 
-    ``Develop in part by``: Ahmad
+    ``Developed in part by``: Ahmad
 
     ``Contact``: ahmad.ahmad1@ucalgary.ca
 
     """
-    # Load the updated Excel file into a pandas DataFrame
-    excel_file_path = "./interview_database.xlsx"
-    df = pd.read_excel(excel_file_path)
+    # Retry parameters
+    max_retries = 60  # Maximum number of retries if the file is locked
+    retry_interval = 0.5  # Wait time (in seconds) between retries
 
-    # Initialize the dictionary to store the structured data
-    interview_data = {}
+    retries = 0
+    while retries < max_retries:
+        try:
+            # Attempt to acquire a shared read (non-blocking) access
+            with FileLock(lock_file_path, timeout=0):  # Non-blocking, checks if the lock exists
+                # Load the Excel file into a pandas DataFrame
+                df = pd.read_excel(excel_file_path)
 
-    # Group the DataFrame by Date, Start Time, and Slot for organization
-    for _, row in df.iterrows():
-        date = str(row['Date'])
-        start_time = str(row['Start Time'])
-        slot = int(row['Slot']) if not pd.isna(row['Slot']) else 0
-        #Returns amount of interviewees in the slot and if it's empty it will return 0
-        interviewee_amount = len(str(row['Interviewee Name']).split()) if str(row['Interviewee Name']) != "nan" else 0
-        
-        # Check if the slot is available for an interviewee to attend
-        avaliable_slots = interviewee_amount != slot
-        if avaliable_slots:
-            # Initialize nested structure if not present
-            if date not in interview_data:
-                interview_data[date] = {}
-            #Adds the start time and duration if not present
-            if start_time not in interview_data[date]:
-                    interview_data[date][start_time] = {
-                        'Meeting Duration': row['Meeting Duration'],
-                    }
-    return interview_data
+                # Initialize the dictionary to store the structured data
+                interview_data = {}
+
+                # Group the DataFrame by Date, Start Time, and Slot for organization
+                for _, row in df.iterrows():
+                    date = str(row['Date'])
+                    start_time = str(row['Start Time'])
+                    slot = int(row['Slot']) if not pd.isna(row['Slot']) else 0
+
+                    # Returns the number of interviewees in the slot; returns 0 if empty
+                    interviewee_amount = len(str(row['Interviewee Name']).split()) if str(row['Interviewee Name']) != "nan" else 0
+
+                    # Check if the slot is available for an interviewee to attend
+                    available_slots = interviewee_amount != slot
+                    if available_slots:
+                        # Initialize nested structure if not present
+                        if date not in interview_data:
+                            interview_data[date] = {}
+                        # Add the start time and duration if not present
+                        if start_time not in interview_data[date]:
+                            interview_data[date][start_time] = {
+                                'Meeting Duration': row['Meeting Duration'],
+                            }
+                return interview_data  # Successfully read the database
+
+        except Timeout:
+            # File is locked; wait and retry
+            retries += 1
+            print(f"File is locked, retrying ({retries}/{max_retries})...")
+            time.sleep(retry_interval)
+
+    # If max retries are exceeded, raise an error
+    raise RuntimeError("Unable to access the database after multiple attempts due to a file lock.")
+
+# Example usage of the ReadDatabase function
+if __name__ == "__main__":
+    try:
+        data = ReadDatabase()
+        print(json.dumps(data, indent=4))
+    except RuntimeError as e:
+        print(e)