diff --git a/b_asic/GUI/arrow.py b/b_asic/GUI/arrow.py
index 4014c78a4397f2d27823a2d570d1229d214f6393..575d6aeca164ed0bd5d0560593bbd284912e7a34 100644
--- a/b_asic/GUI/arrow.py
+++ b/b_asic/GUI/arrow.py
@@ -28,5 +28,7 @@ class Arrow(QGraphicsLineItem):
 
     def moveLine(self):
         self.setPen(QPen(Qt.black, 3))
-        self.setLine(QLineF(self.source.x()+50, self.source.y()+25,\
-             self.destination.x(), self.destination.y()+25))
\ No newline at end of file
+        self.setLine(QLineF(self.source.operation.x()+self.source.x()+14,\
+             self.source.operation.y()+self.source.y()+7.5,\
+             self.destination.operation.x()+self.destination.x(),\
+             self.destination.operation.y()+self.destination.y()+7.5))
diff --git a/b_asic/GUI/drag_button.py b/b_asic/GUI/drag_button.py
index 9f2f26e439dff2706dc1ec13fb2b3224c6f8bf6f..9f10c1cebc9c8590a5a671063a15739954fb4a49 100644
--- a/b_asic/GUI/drag_button.py
+++ b/b_asic/GUI/drag_button.py
@@ -6,14 +6,12 @@ This class creates a dragbutton which can be clicked, dragged and dropped.
 
 import os.path
 
-from PyQt5.QtWidgets import QPushButton, QMenu
-from PyQt5.QtCore import Qt, QSize, pyqtSignal, QMimeData
+from PyQt5.QtWidgets import QPushButton
+from PyQt5.QtCore import Qt, QSize
 from PyQt5.QtGui import QIcon
 
 
 class DragButton(QPushButton):
-    connectionRequested = pyqtSignal(QPushButton)
-    moved = pyqtSignal()
     def __init__(self, name, operation, operation_path_name, window, parent = None):
         self.name = name
         self.__window = window
@@ -23,11 +21,6 @@ class DragButton(QPushButton):
         self.pressed = False
         super(DragButton, self).__init__(self.__window)
 
-    def contextMenuEvent(self, event):
-        menu = QMenu()
-        menu.addAction("Connect", lambda: self.connectionRequested.emit(self))
-        menu.exec_(self.cursor().pos())
-
     def mousePressEvent(self, event):
         self._mouse_press_pos = None
         self._mouse_move_pos = None
diff --git a/b_asic/GUI/improved_main_window.py b/b_asic/GUI/improved_main_window.py
index 2db960d65e4b1150aeb31f24f7641153439ed2d1..b2cad0f5e30f9cbd26b59fa739a6e04b0323ff10 100644
--- a/b_asic/GUI/improved_main_window.py
+++ b/b_asic/GUI/improved_main_window.py
@@ -3,12 +3,12 @@ B-ASIC GUI Module.
 This python file is the main window of the GUI for B-ASIC.
 """
 
-from os import getcwd
 import sys
 
 from drag_button import DragButton
 from gui_interface import Ui_main_window
 from arrow import Arrow
+from port_button import PortButton
 
 from b_asic import Constant, Addition, Subtraction, Absolute,\
 Multiplication, Division, ConstantMultiplication, SquareRoot, ComplexConjugate,\
@@ -51,6 +51,8 @@ class MainWindow(QMainWindow):
         self.operationList = []
         self.signalList = []
         self.pressed_button = []
+        self.portList = []
+        self.pressed_ports = []
         self.source = None
 
     def init_ui(self):
@@ -77,38 +79,50 @@ class MainWindow(QMainWindow):
 
     def add_ports(self, operation):
         if operation.operation.input_count == 2:
-            self.input_port_1 = QPushButton(">", operation)
+            self.input_port_1 = PortButton(">", operation, window)
+            self.input_port_1.setFixedSize(15, 15)
             self.input_port_1.setStyleSheet("background-color: white")
-            self.input_port_1.clicked.connect(self.print_input_port_1)
             self.input_port_1.show()
-            self.input_port_2 = QPushButton(">", operation)
+            self.input_port_2 = PortButton(">", operation, window)
+            self.input_port_2.setFixedSize(15, 15)
             self.input_port_2.setStyleSheet("background-color: white")
-            self.input_port_2.move(0, 33)
-            self.input_port_2.clicked.connect(self.print_input_port_2)
+            self.input_port_2.move(0, 35)
             self.input_port_2.show()
+            self.portList.append(self.input_port_1)
+            self.portList.append(self.input_port_2)           
+            self.input_port_1.connectionRequested.connect(self.connectButton)
+            self.input_port_2.connectionRequested.connect(self.connectButton) 
         else:
-            self.input_port_1 = QPushButton(">", operation)
+            self.input_port_1 = PortButton(">", operation, window)
+            self.input_port_1.setFixedSize(15, 15)
             self.input_port_1.setStyleSheet("background-color: white")
             self.input_port_1.move(0, 16)
-            self.input_port_1.clicked.connect(self.print_input_port_1)
             self.input_port_1.show()
+            self.portList.append(self.input_port_1)
+            self.input_port_1.connectionRequested.connect(self.connectButton)
         if operation.operation.output_count == 2:
-            self.output_port = QPushButton(">", operation)
+            self.output_port = PortButton(">", operation, window)
+            self.output_port.setFixedSize(15, 15)
             self.output_port.setStyleSheet("background-color: white")
             self.output_port.move(38, 0)
-            self.output_port.clicked.connect(self.print_output_port_1)
             self.output_port.show()
-            self.output_port2 = QPushButton(">", operation)
+            self.output_port2 = PortButton(">", operation, window)
+            self.output_port_2.setFixedSize(15, 15)
             self.output_port2.setStyleSheet("background-color: white")
             self.output_port2.move(38, 33)
-            self.output_port2.clicked.connect(self.print_output_port_2)
             self.output_port2.show()
+            self.portList.append(self.output_port)
+            self.portList.append(self.output_port_2)
+            self.output_port.connectionRequested.connect(self.connectButton)
+            self.output_port_2.connectionRequested.connect(self.connectButton)
         else:
-            self.output_port = QPushButton(">", operation)
+            self.output_port = PortButton(">", operation, window)
+            self.output_port.setFixedSize(15, 15)
             self.output_port.setStyleSheet("background-color: white")
-            self.output_port.move(38, 16)
-            self.output_port.clicked.connect(self.print_output_port_1)
+            self.output_port.move(38, 20)
             self.output_port.show()
+            self.portList.append(self.output_port)
+            self.output_port.connectionRequested.connect(self.connectButton)
 
     def create_addition_operation(self):
         self.add_counter += 1
@@ -118,28 +132,16 @@ class MainWindow(QMainWindow):
         self.addition_operation.move(250, 100)
         self.addition_operation.setFixedSize(50, 50)
         self.addition_operation.setStyleSheet("background-color: white; border-style: solid;\
-            border-color: black; border-width: 2px; border-radius: 10px")
+            border-color: black; border-width: 2px")
         self.addition_operation.setIcon(QIcon(r"operation_icons\addition.png"))
         self.addition_operation.setIconSize(QSize(50, 50))
         self.addition_operation.setParent(None)
         self.scene.addWidget(self.addition_operation)
         self.operationList.append(self.addition_operation)
-        self.addition_operation.connectionRequested.connect(self.connectButton)
+    
         self.operationList.append(self.addition_operation)
         self.add_ports(self.addition_operation)
 
-    def print_input_port_1(self):
-        print("Input port 1")
-
-    def print_input_port_2(self):
-        print("Input port 2")
-
-    def print_output_port_1(self):
-        print("Output port 1")
-
-    def print_output_port_2(self):
-        print("Output port 2")
-
     def create_subtraction_operation(self):
         self.sub_counter += 1
         subtraction_object = Subtraction()
@@ -423,11 +425,10 @@ class MainWindow(QMainWindow):
         super().keyPressEvent(event)
 
     def connectButton(self, button):
-        if len(self.pressed_button) < 2:
+        if len(self.pressed_ports) < 2:
             return
-
-        for i in range(len(self.pressed_button) - 1):
-            line = Arrow(self.pressed_button[i], self.pressed_button[i + 1], self)
+        for i in range(len(self.pressed_ports) - 1):
+            line = Arrow(self.pressed_ports[i], self.pressed_ports[i + 1], self)
             self.scene.addItem(line)
             self.signalList.append(line)
 
diff --git a/b_asic/GUI/port_button.py b/b_asic/GUI/port_button.py
new file mode 100644
index 0000000000000000000000000000000000000000..d9fd2b135d1b11c9677be8ee814d95fe01d8007a
--- /dev/null
+++ b/b_asic/GUI/port_button.py
@@ -0,0 +1,39 @@
+
+import sys
+
+from PyQt5.QtWidgets import QPushButton, QMenu
+from PyQt5.QtCore import Qt, pyqtSignal
+
+class PortButton(QPushButton):
+    connectionRequested = pyqtSignal(QPushButton)
+    moved = pyqtSignal()
+    def __init__(self, name, operation, window, parent=None):
+        self.pressed = False
+        self.window = window
+        self.operation = operation
+        self.clicked = 0
+        super(PortButton, self).__init__(name, operation)
+
+    def contextMenuEvent(self, event):
+        menu = QMenu()
+        menu.addAction("Connect", lambda: self.connectionRequested.emit(self))
+        menu.exec_(self.cursor().pos())
+
+    def mousePressEvent(self, event):
+        
+        if event.button() == Qt.LeftButton:
+            self.clicked += 1
+            if self.clicked == 1:
+                self.setStyleSheet("background-color: grey")
+                self.pressed = True
+                self.window.pressed_ports.append(self)
+            elif self.clicked == 2:
+                self.setStyleSheet("background-color: white")
+                self.pressed = False                
+                self.clicked = 0
+                self.window.pressed_ports.remove(self)
+        super(PortButton, self).mousePressEvent(event)
+            
+    def mouseReleaseEvent(self, event):
+        super(PortButton, self).mouseReleaseEvent(event)
+