diff --git a/ProForma-Exporters/20210819-ProForma-formatter-MSPT.cs b/ProForma-Exporters/20210819-ProForma-formatter-MSPT.cs
new file mode 100644
index 0000000000000000000000000000000000000000..3cfb0ecbd5565c85ccf64db10d5e5e75a986badc
--- /dev/null
+++ b/ProForma-Exporters/20210819-ProForma-formatter-MSPT.cs
@@ -0,0 +1,115 @@
+using System;
+using System.IO;
+using System.Data;
+using System.Text;
+
+namespace ProFormaFormatter {
+    class Program {
+	static void Main(string[] args)
+	{
+	    if (args.Length==0) {
+		Console.WriteLine("Supply the name of the _IcTarget.tsv file for processing.");
+		Environment.Exit(1);
+	    }
+	    DataTable datatable = new DataTable();
+	    string FileString = args[0];
+	    StreamReader streamreader = new StreamReader(FileString);
+	    //skip the header
+	    //	for (int i=0; i<27; i++) {
+	    //	string Header=streamreader.ReadLine();
+	    //  Console.WriteLine(Header);
+	    //  }
+	    char[] delimiter = new char[] { '\t' };
+	    char[] PathDelimiters = new char[] { '\\','/' };
+	    string FNameTrailer = "_IcTarget.tsv";
+	    string[] columnheaders = streamreader.ReadLine().Split(delimiter);
+	    foreach (string columnheader in columnheaders)
+	    {
+		datatable.Columns.Add(columnheader);
+	    }
+	    
+	    while (streamreader.Peek() > 0)
+	    {
+		DataRow datarow = datatable.NewRow();
+		datarow.ItemArray = streamreader.ReadLine().Split(delimiter);
+		datatable.Rows.Add(datarow);
+	    }
+
+	    foreach (DataRow row in datatable.Rows) {
+		//		string FName = Convert.ToString(row["Data file name"]);
+		string OutScan = Convert.ToString(row["Scan"]);
+		string OutProForma = Convert.ToString(row["Sequence"]);
+		string OutSequence = OutProForma;
+		string OutCharge = Convert.ToString(row["Charge"]);
+		string OutAccession = Convert.ToString(row["ProteinName"]);
+		int    OutMassAdded = 0;
+		string PTMs = Convert.ToString(row["Modifications"]);
+		float Probability = Convert.ToSingle(row["Probability"]);
+		float Evalue = Convert.ToSingle(row["EValue"]);
+		double OutEVal = -Math.Log(Convert.ToDouble(row["EValue"]));
+		if ((Probability > 0.5) && (Evalue < 0.01)) {
+		    // string[] FNameChunks = FName.Split(PathDelimiters);
+		    string OutFile = FileString;
+		    if (OutFile.EndsWith(FNameTrailer)) {
+			OutFile = OutFile.Substring(0,OutFile.Length-FNameTrailer.Length);
+		    }
+		    // Parse out just the second bit of the UniProt accession
+		    string[] AccessionArray = OutAccession.Split('|');
+		    OutAccession = AccessionArray[1];
+		    // Create a decorated sequence by incorporating PTM string data.
+		    string[] PTMArray = PTMs.Split(',');
+		    int CurrentOutProFormaPos = 0;
+		    StringBuilder DecoratedOutProForma = new StringBuilder();
+		    foreach (string ThisPTM in PTMArray) {
+			if (ThisPTM.Length > 0) {
+			    string[] PTMFields = ThisPTM.Split(' ');
+			    int Pos = Convert.ToInt32(PTMFields[1]);
+			    string PTMID = PTMFields[0];
+			    if (PTMID == "Oxidation")
+				OutMassAdded += 16;
+			    else if (PTMID == "Methyl")
+				OutMassAdded += 14;
+			    else if (PTMID == "Acetyl")
+				OutMassAdded += 42;
+			    else if (PTMID == "Carbamidomethyl")
+				OutMassAdded += 57;
+			    else if (PTMID == "Phospho")
+				OutMassAdded += 80;
+			    if (Pos == 0) {
+				DecoratedOutProForma.Append("[");
+				DecoratedOutProForma.Append(Convert.ToString(PTMFields[0]));
+				DecoratedOutProForma.Append("]-");
+				DecoratedOutProForma.Append(OutProForma.Substring(CurrentOutProFormaPos, Pos-CurrentOutProFormaPos));
+			    }
+			    else {
+				DecoratedOutProForma.Append(OutProForma.Substring(CurrentOutProFormaPos, Pos-CurrentOutProFormaPos));
+				DecoratedOutProForma.Append("[");
+				DecoratedOutProForma.Append(Convert.ToString(PTMFields[0]));
+				DecoratedOutProForma.Append("]");
+			    }
+			    CurrentOutProFormaPos = Pos;
+			}
+		    }
+		    DecoratedOutProForma.Append(OutProForma.Substring(CurrentOutProFormaPos));
+		    OutProForma = Convert.ToString(DecoratedOutProForma);
+
+		    Console.Write(OutFile);
+		    Console.Write("\t");
+		    Console.Write(OutScan);
+		    Console.Write("\t");
+		    Console.Write(OutCharge);
+		    Console.Write("\t");
+		    Console.Write(OutAccession);
+		    Console.Write("\t");
+		    Console.Write(OutSequence);
+		    Console.Write("\t");
+		    Console.Write(OutMassAdded);
+		    Console.Write("\t");
+		    Console.Write(OutProForma);
+		    Console.Write("\t");
+		    Console.WriteLine(OutEVal);
+		}
+	    }
+	}
+    }
+}