diff --git a/ov9/program1.py b/ov9/program1.py
index b419bf76a604ec4d28db41fdaeab52cbc4cbc7a2..4580ad2e1207933552edddb3c24dd556920393a3 100644
--- a/ov9/program1.py
+++ b/ov9/program1.py
@@ -1,4 +1,6 @@
 import sys
+from queue import PriorityQueue
+
 
 class int_points (object):
     def __init__(self, id, type, name):
@@ -21,10 +23,11 @@ class edges (object):
         self.speed = speed 
 
 class results(object):
-    def __init__(self, node, time, visited, prev):
+    def __init__(self, node, total_time, visited, in_que, prev):
         self.node = node
-        self.time = time
+        self.total_time = total_time
         self.visited = visited
+        self.in_que = in_que
         self.prev = prev
 
 
@@ -73,7 +76,11 @@ max_num = max(edge_arr,key=lambda item:item.time)
 res_arr = []
 def init_table():
     for i in range(num_of_nodes):
-        res_arr.append(results(i, max_num.time+1, False, None))
+        res_arr.append(results(i, max_num.time+1, False, False, None))
+
+
+
+print('prep done, files loaded to lists')
 
 # def rec_func(node, counter, global_fra, end_switch):
 #     if not end_switch:
@@ -93,82 +100,95 @@ def init_table():
 #             return rec_func(node, counter, global_fra, end_switch)
 
 
-def rec_func2(node, counter, global_fra):
+def rec_func2(node, global_fra):
     path=[]
     while node.node != global_fra:
-        counter +=node.time
         path.append(node.node)
         node = [a for a in res_arr if a.node == node.prev][0]
     path.append(node.node)
-    return counter,path
+    return path
 
 
 
-def calculate_shortest_path(current_node, time, current_neighbour, slutt):
-    count_a = 0
-    count_a, _ = rec_func2(current_neighbour, count_a, slutt)
-    count_b = 0
-    count_b, _ = rec_func2(current_node, count_b, slutt)
-    count_b += time
-    if count_b < count_a:
-        return True
-    else: 
-        return False
+# def calculate_shortest_path(current_node, time, current_neighbour, slutt):
+#     count_a = 0
+#     count_a, _ = rec_func2(current_neighbour, count_a, slutt)
+#     count_b = 0
+#     count_b, _ = rec_func2(current_node, count_b, slutt)
+#     count_b += time
+#     if count_b < count_a:
+#         return True
+#     else: 
+#         return False
 
 
 
-def update_que(que):
-    tmp_arr = [a for a in res_arr if a.node in que]
-    tmp_arr.sort(key=lambda x: x.time, reverse=True)
-    que = [a.node for a in tmp_arr if a in tmp_arr]
-    return que
+# def update_que(que):
+#     tmp_arr = [a for a in res_arr if a.node in que]
+#     tmp_arr.sort(key=lambda x: x.total_time, reverse=True)
+#     que = [a.node for a in tmp_arr if a in tmp_arr]
+#     return que
 
-end_que = []
-queue = [] 
+
+
+end_que = PriorityQueue()
+queue = PriorityQueue()
 we_soon_to_be_done = False
-def dijkstras(slutt, fra, start):
+def dijkstras(slutt, start):
     global we_soon_to_be_done
     global queue
     if we_soon_to_be_done:
-        end_que.pop(0)
-    current_node = [b for b in res_arr if b.node == fra][0]
+        tmp_que_item = end_que.get()
+        current_node = [b for b in res_arr if b.node == tmp_que_item][0]
+    else:
+        tmp_que_item = queue.get()
+        current_node = [b for b in res_arr if b.total_time == tmp_que_item and b.in_que][0]
     for tmp_edge in edge_arr:
-        if tmp_edge.fra == fra:
+        if tmp_edge.fra == current_node.node:
             current_neighbour = [a for a in res_arr if a.node == tmp_edge.til][0]
-            if current_neighbour.visited == False and current_neighbour.node not in queue:
-                current_neighbour.time = tmp_edge.time
-                current_neighbour.prev = fra 
+            if not current_neighbour.visited and not current_neighbour.in_que:
+                current_neighbour.total_time = current_node.total_time + tmp_edge.time
+                current_neighbour.prev = current_node.node
                 if tmp_edge.til == slutt:
                     current_node.visited = True
+                    current_node.in_que = False
                     we_soon_to_be_done = True
-                    end_que.append(tmp_edge.til)
+                    end_que.put(tmp_edge.til)
                 else:
                     if tmp_edge.fra == slutt:
-                        end_que.append(tmp_edge.til)
+                        end_que.put(tmp_edge.til)
                     else:
-                        queue.append(tmp_edge.til)
+                        current_neighbour.in_que = True 
+                        queue.put(current_neighbour.total_time)
 
             elif current_neighbour.node != start:
-                if calculate_shortest_path(current_node, tmp_edge.time, current_neighbour, start):
-                    current_neighbour.time = tmp_edge.time
-                    current_neighbour.prev = tmp_edge.fra
-    if we_soon_to_be_done and not len(end_que): 
-        #not finished
+                if current_node.total_time + tmp_edge.time < current_neighbour.total_time:
+                    index_in_que = queue.queue.index(current_neighbour.total_time)
+                    current_neighbour.total_time = tmp_edge.time + current_node.total_time
+                    current_neighbour.prev = current_node.node
+                    queue.queue[index_in_que] = current_neighbour.total_time
+        
+    if we_soon_to_be_done and end_que.empty(): 
         end_node = [b for b in res_arr if b.node == slutt][0]
-        total_time = 0
-        total_time,travel_arr = rec_func2(end_node, total_time, start)
+        travel_arr = rec_func2(end_node, start)
         travel_arr = reversed(travel_arr)
-        print(f'total time: {total_time}\nshortest path: {"->".join(str(v) for v in travel_arr)}')
+        print(f'total time: {end_node.total_time}\nshortest path: {"->".join(str(v) for v in travel_arr)}')
+        count = 0
+        for i in res_arr:
+            if i.total_time != max_num.time +1:
+                count +=1 
+        print('total nodes added to map: ', count)
         exit()
     else:
         if we_soon_to_be_done:
             current_node.visited = True
-            dijkstras(slutt,end_que[0],start)
+            current_node.in_que = False
+            dijkstras(slutt,start)
         else:
-            queue.pop(0)
             current_node.visited = True
-            queue = update_que(queue)  
-            dijkstras(slutt,queue[0],start)
+            current_node.in_que = False
+            #queue = update_que(queue)  
+            dijkstras(slutt,start)
              
 
 
@@ -178,12 +198,13 @@ def init_things():
         if sys.argv[1] == '-d':
             #node_id
             start = 20
-            slutt = 25
+            slutt = 30
             init_table()
-            queue.append(start)
-            start_node = [a for a in res_arr if a.node == start][0]
-            start_node.time = 0
-            dijkstras(slutt, start, start)
+            queue.put(0)
+            start_node = next(a for a in res_arr if a.node == start)
+            start_node.total_time = 0
+            start_node.in_que = True
+            dijkstras(slutt, start)
         elif sys.argv[1] == '-a':
             print('A* not yet implemented')
         else:
diff --git a/ov9/test_files/set_test.py b/ov9/test_files/set_test.py
index 0da8ebe4e0c56467c4b282c45465e9f6ce41611e..ec5a2901e9c61f9b155ac0f882fbe18444bc9256 100644
--- a/ov9/test_files/set_test.py
+++ b/ov9/test_files/set_test.py
@@ -1,4 +1,6 @@
 import sys
+from queue import PriorityQueue
+
 
 class int_points (object):
     def __init__(self, id, type, name):
@@ -21,10 +23,11 @@ class edges (object):
         self.speed = speed 
 
 class results(object):
-    def __init__(self, node, total_time, visited, prev):
+    def __init__(self, node, total_time, visited, in_que, prev):
         self.node = node
         self.total_time = total_time
         self.visited = visited
+        self.in_que = in_que
         self.prev = prev
 
 
@@ -73,7 +76,11 @@ max_num = max(edge_arr,key=lambda item:item.time)
 res_arr = []
 def init_table():
     for i in range(num_of_nodes):
-        res_arr.append(results(i, max_num.time+1, False, None))
+        res_arr.append(results(i, max_num.time+1, False, False, None))
+
+
+
+print('prep done, files loaded to lists')
 
 # def rec_func(node, counter, global_fra, end_switch):
 #     if not end_switch:
@@ -116,59 +123,72 @@ def rec_func2(node, global_fra):
 
 
 
-def update_que(que):
-    tmp_arr = [a for a in res_arr if a.node in que]
-    tmp_arr.sort(key=lambda x: x.total_time, reverse=True)
-    que = [a.node for a in tmp_arr if a in tmp_arr]
-    return que
+# def update_que(que):
+#     tmp_arr = [a for a in res_arr if a.node in que]
+#     tmp_arr.sort(key=lambda x: x.total_time, reverse=True)
+#     que = [a.node for a in tmp_arr if a in tmp_arr]
+#     return que
 
 
 
-end_que = []
-queue = [] 
+end_que = PriorityQueue()
+queue = PriorityQueue()
 we_soon_to_be_done = False
-def dijkstras(slutt, fra, start):
+def dijkstras(slutt, start):
     global we_soon_to_be_done
     global queue
     if we_soon_to_be_done:
-        end_que.pop(0)
-    current_node = [b for b in res_arr if b.node == fra][0]
+        tmp_que_item = end_que.get()
+        current_node = [b for b in res_arr if b.node == tmp_que_item][0]
+    else:
+        tmp_que_item = queue.get()
+        current_node = [b for b in res_arr if b.total_time == tmp_que_item and b.in_que][0]
     for tmp_edge in edge_arr:
-        if tmp_edge.fra == fra:
+        if tmp_edge.fra == current_node.node:
             current_neighbour = [a for a in res_arr if a.node == tmp_edge.til][0]
-            if current_neighbour.visited == False and current_neighbour.node not in queue:
+            if not current_neighbour.visited and not current_neighbour.in_que:
                 current_neighbour.total_time = current_node.total_time + tmp_edge.time
                 current_neighbour.prev = current_node.node
                 if tmp_edge.til == slutt:
                     current_node.visited = True
+                    current_node.in_que = False
                     we_soon_to_be_done = True
-                    end_que.append(tmp_edge.til)
+                    end_que.put(tmp_edge.til)
                 else:
                     if tmp_edge.fra == slutt:
-                        end_que.append(tmp_edge.til)
+                        end_que.put(tmp_edge.til)
                     else:
-                        queue.append(tmp_edge.til)
+                        current_neighbour.in_que = True 
+                        queue.put(current_neighbour.total_time)
 
             elif current_neighbour.node != start:
-                    if current_node.total_time + tmp_edge.time < current_neighbour.total_time:
-                        current_neighbour.total_time = tmp_edge.time + current_node.total_time
-                        current_neighbour.prev = current_node.node
-    if we_soon_to_be_done and not len(end_que): 
-        #not finished
+                if current_node.total_time + tmp_edge.time < current_neighbour.total_time:
+                    index_in_que = queue.queue.index(current_neighbour.total_time)
+                    current_neighbour.total_time = tmp_edge.time + current_node.total_time
+                    current_neighbour.prev = current_node.node
+                    queue.queue[index_in_que] = current_neighbour.total_time
+        
+    if we_soon_to_be_done and end_que.empty(): 
         end_node = [b for b in res_arr if b.node == slutt][0]
         travel_arr = rec_func2(end_node, start)
         travel_arr = reversed(travel_arr)
         print(f'total time: {end_node.total_time}\nshortest path: {"->".join(str(v) for v in travel_arr)}')
+        count = 0
+        for i in res_arr:
+            if i.total_time != max_num.time +1:
+                count +=1 
+        print('total nodes added to map: ', count)
         exit()
     else:
         if we_soon_to_be_done:
             current_node.visited = True
-            dijkstras(slutt,end_que[0],start)
+            current_node.in_que = False
+            dijkstras(slutt,start)
         else:
-            queue.pop(0)
             current_node.visited = True
-            queue = update_que(queue)  
-            dijkstras(slutt,queue[0],start)
+            current_node.in_que = False
+            #queue = update_que(queue)  
+            dijkstras(slutt,start)
              
 
 
@@ -180,10 +200,11 @@ def init_things():
             start = 20
             slutt = 30
             init_table()
-            queue.append(start)
-            start_node = [a for a in res_arr if a.node == start][0]
+            queue.put(0)
+            start_node = next(a for a in res_arr if a.node == start)
             start_node.total_time = 0
-            dijkstras(slutt, start, start)
+            start_node.in_que = True
+            dijkstras(slutt, start)
         elif sys.argv[1] == '-a':
             print('A* not yet implemented')
         else: