diff --git a/UDP-client-server.py b/UDP-client-server.py
index 2a71c8676f3e6b99acb69dc6219f11d34f804478..efa15edcbb097b09a8236255a8e2e25e88c725df 100755
--- a/UDP-client-server.py
+++ b/UDP-client-server.py
@@ -37,11 +37,13 @@ def udp_client_receive(UDP_RECEIVE_IP, UDP_RECEIVE_PORT):
     global min_delay
     global max_delay
     global rt_delay_array
+    global jitter
     min_delay = 100.
     max_delay = 0.
     rt_delay_array = array('f')
     packet_count_rcvd = 0
     cumulative_delay = 0.
+    jitter = 0.
 
     try:
         rcv_sock.bind(ADDR)
@@ -144,6 +146,27 @@ def udp_client_send(UDP_DEST_IP,  UDP_DEST_PORT,
     if rt_delay_array:
         print('std.dev = ', np.std(rt_delay_array))
 
+#CALCULATE JITTER
+# Clear for a clean slate
+    jitter = 0
+    jitter_2 = 0
+
+    # Simple version, no weight
+    for rt0, rt1 in zip(rt_delay_array[:-1], rt_delay_array[1:]):
+        jitter_2 += np.fabs(rt0 - rt1)
+
+    jitter_2 = jitter_2 / (len(rt_delay_array) - 1)
+
+
+    # Version used in RFC 1889, also by iperf
+    for rt0, rt1 in zip(rt_delay_array[:-1], rt_delay_array[1:]):
+        jitter += (np.fabs(rt0 - rt1) - jitter) / 16.
+
+    #jitter = jitter / (len(rt_delay_array) - 1)
+
+    print("jitter = ", jitter)
+    print("jitter = ", jitter_2)
+
 #NETWORK STABILITY BASED ON PACKET LOSS AND DELAY, VALUE 0-100
     network_stability = 0
     if packet_count_rcvd == 0:
@@ -156,6 +179,26 @@ def udp_client_send(UDP_DEST_IP,  UDP_DEST_PORT,
         print('avg.rtt = ', avg_packet_delay)
         print('stability = ', network_stability)
 
+# Calculating MOS
+# http://en.wikipedia.org/wiki/Mean_opinion_score
+#MOS Quality    Impairment
+#5   Excellent  Imperceptible
+#4   Good       Perceptible but not annoying
+#3   Fair       Slightly annoying
+#2   Poor       Annoying
+#1   Bad        Very annoying
+
+    EffectiveLatency = avg_packet_delay + jitter * 2 + 10
+    if EffectiveLatency < 160:
+        R = 93.2 - (EffectiveLatency / 40)
+    else:
+        R = 93.2 - (EffectiveLatency - 120) / 10
+        # Now, let's deduct 2.5 R values per percentage of packet loss
+        R = R - ((packet_count_sent - packet_count_rcvd) * 2.5)
+        # Convert the R into an MOS value.(this is a known formula)
+    mos = 1 + (0.035) * R + (.000007) * R * (R-60) * (100-R)
+
+    print("MOS: ", mos)
 
 #START THE THREADS FOR SENDER AND RECEIVER
 if __name__ == "__main__":
@@ -178,3 +221,5 @@ if __name__ == "__main__":
         sender_thread.start()
         while sender_thread.is_alive():
             time.sleep(1)
+# While testing, end after one iteration
+        sys.exit()