diff --git a/integration/Window.py b/integration/Window.py
index 5f2ff0199cdafb0d9718021ee2a4eb98aabea3b8..fd9b1a27ef676159e91e1c41fb86961f31049a09 100644
--- a/integration/Window.py
+++ b/integration/Window.py
@@ -47,23 +47,27 @@ class Window:
         label4 = tk.Label(self.frame4, text="Section 4")
         label4.place(relx=0.5, rely=0.5, anchor='center')
 
-        #self.imu_thread = threading.Thread(target=self.initial_IMU)
-        #self.emg_thread = threading.Thread(target=self._initialise_EMG_graph)
-        #self.emg_thread.start()
-        #self.imu_thread.start()
+        self.imu_thread = threading.Thread(target=self.initial_IMU)
+        self.emg_thread = threading.Thread(target=self._initialise_EMG_graph)
+        self.emg_thread.start()
+        self.imu_thread.start()
+
+
 
         self.emg_data_1 = [-1] * 41
         self.emg_data_2 = [-1] * 41
 
-        self.initial_IMU()
-        self._initialise_EMG_graph()
+        #self.initial_IMU()
+        #self._initialise_EMG_graph()
+        self.display_IMU_thread=threading.Thread(target=self.update_display)
+        self.display_EMG_thread=threading.Thread(target=self.EMG_Display)
 
 
 
     def initial_IMU(self):
         # Serial Port Setup
         if'COM6' in self.ports:#port maybe different on different laptop
-            self.arduino = serial.Serial('COM6', 115200)
+
             self.label2 = tk.Label(self.frame2, text="Port: COM6 ")
             self.label2.place(relx=0.35, rely=0.8, anchor='center')
             self.label1 = tk.Label(self.frame2,
@@ -89,6 +93,7 @@ class Window:
         sleep(1)
 
         # Conversions
+        self.transmitting = False
         self.toRad = 2 * np.pi / 360
         self.toDeg = 1 / self.toRad
 
@@ -160,16 +165,23 @@ class Window:
         # self.emg_label = tk.Label(self.frame1, text="Average EMG: 0", font=("Arial", 14))
         # self.emg_label.pack(pady=10)
 
+        self.roll_label = tk.Label(self.frame2, text="roll is : " )
+        self.roll_label.config(font=("Arial", 12))
+        self.roll_label.place(relx=0.2, rely=0.3, anchor='w')
+        self.pitch_label = tk.Label(self.frame2, text="pitch is : " )
+        self.pitch_label.config(font=("Arial", 12))
+        self.pitch_label.place(relx=0.2, rely=0.4, anchor='w')
+        self.yaw_label = tk.Label(self.frame2, text="yaw is : " )
+        self.yaw_label.config(font=("Arial", 12))
+        self.yaw_label.place(relx=0.2, rely=0.5, anchor='w')
 
 
-        # Initialize the data transmission flag
-        self.transmitting = False
 
 
 
     def _initialise_EMG_graph(self):
         if 'COM5' in self.ports:#port maybe different on different laptop
-            self.arduino_EMG = serial.Serial('COM5', 9600,timeout=1)
+
             self.label2 = tk.Label(self.frame3, text="Port: COM5 ")
             self.label2.place(relx=0.23, rely=0.8, anchor='center')
             self.label1 = tk.Label(self.frame3,
@@ -193,6 +205,7 @@ class Window:
             self.label1.place(relx=0.5, rely=0.9, anchor='center')
 
      # Create a figure and axis
+        self.EMG_transmitting = False
         fig = Figure(figsize=((self.width / 200), (self.height / 200)))  # Adjusting figsize based on frame size
         self.ax1 = fig.add_subplot(111)
 
@@ -228,32 +241,61 @@ class Window:
         self.canvas1 = FigureCanvasTkAgg(fig, master=self.frame4)
         self.canvas1.draw()
         self.canvas1.get_tk_widget().pack(fill=tk.BOTH, expand=True)
+        self.EMG_Display()
+
+        self.outer_EMG_label = tk.Label(self.frame3, text=f"EMG for Extensor Carpi Ulnaris is :")
+        self.outer_EMG_label.config(font=("Arial", 12))
+        self.outer_EMG_label.place(relx=0.1, rely=0.2, anchor='w')
+        self.outer_EMG_Number = tk.Label(self.frame3, text="",fg="red")
+        self.outer_EMG_Number.config(font=("Arial", 12))
+        self.outer_EMG_Number.place(relx=0.2, rely=0.3, anchor='w')
+        self.inner_EMG_label = tk.Label(self.frame3, text=f"EMG for Flexor Carpi Radialis is :")
+        self.inner_EMG_label.config(font=("Arial", 12))
+        self.inner_EMG_label.place(relx=0.1, rely=0.4, anchor='w')
+        self.inner_EMG_Number = tk.Label(self.frame3, text="",fg="blue")
+        self.inner_EMG_Number.config(font=("Arial", 12))
+        self.inner_EMG_Number.place(relx=0.2, rely=0.5, anchor='w')
+        self.gesture_label = tk.Label(self.frame3, text=f"Gesture is :")
+        self.gesture_label.config(font=("Arial", 12))
+        self.gesture_label.place(relx=0.1, rely=0.6, anchor='w')
+
+
 
-        self.EMG_transmitting = False
 
 
     def start_data_transmission(self):
         # Set the transmitting flag to True and start the update loop
+        self.arduino = serial.Serial('COM6', 115200)
         self.transmitting = True
         self.update_display()
 
     def start_EMG_data_transmission(self):
         # Set the transmitting flag to True and start the update loop
+        self.arduino_EMG = serial.Serial('COM5', 9600, timeout=1)
         self.EMG_transmitting = True
         self.EMG_Display()
 
     def disconnect(self):
         self.transmitting = False
+        self.root.after_cancel(self.update_display_id)
+        if self.arduino is not None:
+            self.arduino.close()
+            self.arduino = None
 
     def EMG_disconnect(self):
         self.EMG_transmitting = False
+        self.root.after_cancel(self.EMG_display_id)
+        if self.arduino_EMG is not None:
+            self.arduino_EMG.close()
+            self.arduino_EMG = None
 
 
 
     def update_display(self):
         if self.transmitting:
             try:
-                while self.arduino.inWaiting() > 0:
+                while ((self.arduino.inWaiting() > 0)and
+                       (self.transmitting==True)):
                     dataPacket = self.arduino.readline()
                     dataPacket = dataPacket.decode()
                     cleandata = dataPacket.replace("\r\n", "")
@@ -273,15 +315,9 @@ class Window:
                         pitch = -math.asin(2 * (q0 * q2 - q3 * q1))
                         yaw = -math.atan2(2 * (q0 * q3 + q1 * q2), 1 - 2 * (q2 * q2 + q3 * q3))
 
-                        roll_label=tk.Label(self.frame2, text="roll is : "+str(roll))
-                        roll_label.config(font=("Arial", 12))
-                        roll_label.place(relx=0.2, rely=0.3, anchor='w')
-                        pitch_label=tk.Label(self.frame2, text="pitch is : "+str(pitch))
-                        pitch_label.config(font=("Arial", 12))
-                        pitch_label.place(relx=0.2, rely=0.4, anchor='w')
-                        yaw_label=tk.Label(self.frame2, text="yaw is : "+str(yaw))
-                        yaw_label.config(font=("Arial", 12))
-                        yaw_label.place(relx=0.2, rely=0.5, anchor='w')
+                        self.roll_label.config( text="roll is : "+str(roll))
+                        self.pitch_label.config(text="pitch is : "+str(pitch))
+                        self.yaw_label.config(text="yaw is : "+str(yaw))
 
                         # Rotation matrices
                         Rz = np.array([
@@ -374,16 +410,24 @@ class Window:
                 print(f"An error occurred: {e}")
 
             # Call update_display() again after 50 milliseconds
-            self.root.after(50, self.update_display)
+            self.update_display_id =self.root.after(50, self.update_display)
 
     def EMG_Display(self):
         if self.EMG_transmitting:
             try:
+             while ((self.arduino_EMG.inWaiting() > 0) and
+                       (self.EMG_transmitting == True)):
                 data = self.arduino_EMG.readline()
                 emg_data = self._decode(data)
                 if emg_data is not None:
                     print(f"EMG 1: {emg_data[0]} , EMG 2: {emg_data[1]}")
 
+
+                    self.outer_EMG_Number.config(text=f"{emg_data[0]}")
+                    self.inner_EMG_Number.config(text=f"{emg_data[1]}")
+
+
+
                     # Append the new data to the lists
 
                     self.emg_data_1.append(emg_data[0])
@@ -403,7 +447,7 @@ class Window:
 
 
             # Call update_display() again after 50 milliseconds
-            self.root.after(50, self.EMG_Display)
+            self.EMG_display_id=self.root.after(50, self.EMG_Display)
 
     def _decode(self, serial_data):
         serial_string = serial_data.decode(errors="ignore")