diff --git a/post-process.py b/post-process.py
index ce70ff1b7ad9ab8f1c4c6e21c15a6e55f655b13c..458fae25a26a1a2a6be033449dc3c7ef94e294fd 100755
--- a/post-process.py
+++ b/post-process.py
@@ -28,7 +28,8 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 """
 
 import matplotlib
-matplotlib.use("Agg")
+#matplotlib.use("Agg")
+import matplotlib.pyplot as plt
 import numpy
 import pylab as pl
 import sys
@@ -118,6 +119,7 @@ with open(infile, "r") as fp:
             nrecvs = nrecvs + 1
 
 #  Now output. Note we could have unmatched recv keys, we don't check for that.
+msends = [None] * nsends
 with open(outfile, "w") as fp:
     fp.write("# send_logticin send_logtic send_injtic send_endtic send_dtic send_step send_rank send_otherrank send_itype send_isubtype send_tag send_size send_nr_tests send_tsum send_tmin send_tmax recv_logticin recv_logtic recv_injtic recv_endtic recv_dtic recv_step recv_rank recv_otherrank recv_itype recv_isubtype recv_tag recv_size recv_nr_tests recv_tsum recv_tmin recv_tmax\n")
     for key in keysends:
@@ -125,11 +127,52 @@ with open(outfile, "w") as fp:
             if len(keysends[key]) == 1 and len(keyrecvs[key]) == 1:
                 isend = keysends[key][0]
                 irecv = keyrecvs[key][0]
+                msends[isend] = irecv
                 fp.write(" ".join(sends[isend]) + " " + " ".join(recvs[irecv]) + "\n")
             else:
                 print "# ERROR: found ", len(keysends[key]), "/", len(keyrecvs[key]), " matches for key: ", key, " should be 1/1"
         else:
             print "# ERROR: missing recv key: ", key
 
+print "# Matched sends and recvs written to file: ", outfile
+
+# Reorder recvs to same order as sends.
+recvs = [recvs[i] for i in msends]
+
+# Do a plot. Display and saves the graphic, uncomment the "Agg" line above to just save.
+def doplot(x, y, xlabel, ylabel, title, outpng):
+    axmax1 = max(x)
+    axmax2 = max(y)
+    axmax = max([axmax1, axmax2])
+    fig,ax = plt.subplots()
+    ax.set_xlim(0,axmax)
+    ax.set_ylim(0,axmax)
+    ax.plot(x, y, ',')
+    ax.set_xlabel(xlabel)
+    ax.set_ylabel(ylabel)
+    ax.set_title("SWIFTmpistepsim plot: " + title)
+    fig.tight_layout()
+    plt.savefig(outpng,  bbox_inches="tight")
+    print "# Saved plot to: ", outpng
+    plt.show()
+
+#  Plot no. 1: sends injection time against time of local handoff.
+send_injects = [float(send[injcol]) for send in [line for line in sends]]
+send_ends = [float(send[endcol]) for send in [line for line in sends]]
+doplot(send_injects, send_ends, "Message start time",
+       "Message local completion time", "local send completions",
+       "local_sends.png")
+
+#  Plot no. 2: recv injection time against time of local handoff.
+recv_injects = [float(recv[injcol]) for recv in [line for line in recvs]]
+recv_ends = [float(recv[endcol]) for recv in [line for line in recvs]]
+doplot(recv_injects, recv_ends, "Message start time",
+       "Message local completion time", "local recv completions",
+       "local_recvs.png")
+
+#  Plot no. 3: send injection time against time of remote completion.
+doplot(send_injects, recv_ends, "Message start time",
+       "Global message completion time", "message completion times",
+       "completions.png")
 
 sys.exit(0)