I took the liberty of partitioning your code into functions for each formatting step. For part 2, you simply need to edit the `$PreRead` so that it never actually sees `Null`. Here's a function that does that: boxExpr[body_] := RowBox@{"Replace", "[", "\"thisIsJustATag\"", ";", body, ",", "Null", "->", "\"\"", "]"}; The `"thisIsJustATag"` there will make more sense in a moment. Then I pulled out the note extraction task and used `boxExpr` everywhere there was `RowBox[{body}]`. Note that I'm using the `styleNote` function I defined in my suggestion at the bottom. extractNotes[boxes_] := Replace[boxes, {RowBox[{note1_String?(StringMatchQ[#, "\"*\""] &), ";", body__, ";", note2_String?(StringMatchQ[#, "\"*\""] &)}] :> ($note1 = styleNote[note1, "Before"]; $note2 = styleNote[note2, "After"]; boxExpr@body), RowBox[{body__, ";", note_String?(StringMatchQ[#, "\"*\""] &)}] :> ($note2 = styleNote[note, "After"]; $note1 = Null; boxExpr@body), RowBox[{note_String?(StringMatchQ[#, "\"*\""] &), ";", body__}] :> ($note1 = styleNote[note, "After"]; $note2 = Null; boxExpr@body), RowBox[{note_String?(StringMatchQ[#, "\"*\""] &), ";"}] :> ($note3 = styleNote[note, "Neither"]; $note2 = Null; $note1 = Null; note), e_ :> ($note1 = Null; $note2 = Null; e)}]; Next I tackled joining the two parts. Easiest to do via a two step process. First we apply the Part 1 code you supplied plus a tweak to remove the `Replace` expression we added in `boxExpr` (this is where the tag is important): applyFormatting[out_] := With[{line = $Line}, TraditionalForm@HoldForm[In[line] = $placeHolder] /. DownValues[In] /. { $placeHolder -> out, HoldPattern[ Replace[CompoundExpression["thisIsJustATag", expr_], Null -> ""]] :> expr } /. { HoldPattern[a_ = ""] :> a, HoldPattern[a_ = a_] :> a, HoldPattern[a_ = HoldForm[a_]] :> a, HoldPattern[(c : (a_ = b_)) = b_] :> c, HoldPattern[(a_ = b_) = c_] :> HoldForm[a = b = c] } ]; And then I pulled out the note formatting function and cleaned that up a little (using `Switch` is easier than `Which` here I think): addNotes[formatted_] := Switch[{$note1, $note2, $note3}, {Null, Null, Except@Null}, With[{r = $note3}, $note3 = Null; r], {Except@Null, Except@Null, _}, With[{r1 = $note1, r2 = $note2}, $note1 = $note2 = Null; Row[{r1, Pane[formatted], r2}, Spacer[5]] ], {Except@Null, _, _}, With[{r = $note1}, $note1 = Null; Row[{r, Pane[formatted]}, Spacer[5]] ], {_, Except@Null, _}, With[{r = $note2}, $note2 = Null; Row[{Pane[formatted], r}, Spacer[5]] ], _, formatted ]; And then all we need is this: $PreRead = extractNotes; $PrePrint = addNotes@*applyFormatting; to get the desired result. ###Suggestion To make your life easier I'd suggest adding a store of text styles like: $outputStyles = <| "Default" -> { Blue, 15, Italic, FontFamily -> "Times" }, "Before" -> { Blue, 15, Italic, FontFamily -> "Times" }, "After" -> { Blue, 15, Italic, FontFamily -> "Times" } |>; and a styling function like: styleNote[note_, style_] := Style[ToExpression@note, Sequence @@ Lookup[$outputStyles, style, $outputStyles["Default"]]]; And then you can replace all of your note styling calls with a simple `styleNote` calls which will allow you to change how you do the styling without changing your `$PreRead` at all. For example you can change the color for your after note text like this: $outputStyles["After"] = $outputStyles["After"] /. Blue -> Red No need to edit the `$PreRead` function at all this way. ###All together For those who don't want to copy all the pieces in, this is all the formatting code as I have it: $note1 = Null; $note2 = Null; $note3 = Null; $outputStyles = <| "Default" -> { Blue, 15, Italic, FontFamily -> "Times" }, "Before" -> { Blue, 15, Italic, FontFamily -> "Times" }, "After" -> { Blue, 15, Italic, FontFamily -> "Times" } |>; boxExpr[body_] := RowBox@{"Replace", "[", "\"thisIsJustATag\"", ";", body, ",", "Null", "->", "\"\"", "]"}; styleNote[note_, style_] := Style[ToExpression@note, Sequence @@ Lookup[$outputStyles, style, $outputStyles["Default"]]]; extractNotes[boxes_] := Replace[boxes, {RowBox[{note1_String?(StringMatchQ[#, "\"*\""] &), ";", body__, ";", note2_String?(StringMatchQ[#, "\"*\""] &)}] :> ($note1 = styleNote[note1, "Before"]; $note2 = styleNote[note2, "After"]; boxExpr@body), RowBox[{body__, ";", note_String?(StringMatchQ[#, "\"*\""] &)}] :> ($note2 = styleNote[note, "After"]; $note1 = Null; boxExpr@body), RowBox[{note_String?(StringMatchQ[#, "\"*\""] &), ";", body__}] :> ($note1 = styleNote[note, "After"]; $note2 = Null; boxExpr@body), RowBox[{note_String?(StringMatchQ[#, "\"*\""] &), ";"}] :> ($note3 = styleNote[note, "Neither"]; $note2 = Null; $note1 = Null; note), e_ :> ($note1 = Null; $note2 = Null; e)}]; applyFormatting[out_] := With[{line = $Line}, TraditionalForm@HoldForm[In[line] = $placeHolder] /. DownValues[In] /. { $placeHolder -> out, HoldPattern[ Replace[CompoundExpression["thisIsJustATag", expr_], Null -> ""]] :> expr } /. { HoldPattern[a_ = ""] :> a, HoldPattern[a_ = a_] :> a, HoldPattern[a_ = HoldForm[a_]] :> a, HoldPattern[(c : (a_ = b_)) = b_] :> c, HoldPattern[(a_ = b_) = c_] :> HoldForm[a = b = c] } ]; addNotes[formatted_] := Switch[{$note1, $note2, $note3}, {Null, Null, Except@Null}, With[{r = $note3}, $note3 = Null; r], {Except@Null, Except@Null, _}, With[{r1 = $note1, r2 = $note2}, $note1 = $note2 = Null; Row[{r1, Pane[formatted], r2}, Spacer[5]] ], {Except@Null, _, _}, With[{r = $note1}, $note1 = Null; Row[{r, Pane[formatted]}, Spacer[5]] ], {_, Except@Null, _}, With[{r = $note2}, $note2 = Null; Row[{Pane[formatted], r}, Spacer[5]] ], _, formatted ]; $PreRead = extractNotes; $PrePrint = addNotes@*applyFormatting;