anchor.diff:                
           // Skip attributes in the old text
           | (Attribute (tokensText, moreOrigTokens)), _ ->
  -            Debug.WriteLine("skip matching of attribute tokens '{0}'", tokensText)            
  +            Debug.WriteLine("skip matching of attribute tokens '{0}'", box tokensText)
               loop moreOrigTokens newTokens   
   
           // Matching tokens
           | (origTok :: moreOrigTokens), (newTok :: moreNewTokens) when tokensMatch origTok newTok ->
  -            Debug.WriteLine("matching token '{0}'", origTok.Text)
  +            Debug.WriteLine("matching token '{0}'", box origTok.Text)
               addText (snd newTok)
               loop moreOrigTokens moreNewTokens 
   
           // Matching tokens, after one new token, compensating for insertions of "|", ";" and others
           | (origTok :: moreOrigTokens), (newTok1 :: NewTokenAfterWhitespaceOrNewLine(whiteTokens, newTok2, moreNewTokens)) 
               when tokensMatch origTok newTok2 ->
  -            Debug.WriteLine("fresh non-matching new token '%s'", snd newTok1)
  +            Debug.WriteLine("fresh non-matching new token '{0}'", snd newTok1 |> box)
               addText (snd newTok1)
  -            Debug.WriteLine("matching token '{0}' (after one fresh new token)", snd newTok2)
  +            Debug.WriteLine("matching token '{0}' (after one fresh new token)", snd newTok2 |> box)
               for x in whiteTokens do addText x
               addText (snd newTok2)
               loop moreOrigTokens moreNewTokens 
   
           // Not a comment, drop the original token text until something matches
           | (origTok :: moreOrigTokens), _ ->
  -            Debug.WriteLine("dropping '{0}' from original text", origTok.Text)
  +            Debug.WriteLine("dropping '{0}' from original text", box origTok.Text)
               loop moreOrigTokens newTokens 
   
           // Dangling text at the end 
           | [], ((_, newTokText) :: moreNewTokens) ->
  -            Debug.WriteLine("dangling new token '{0}'", newTokText)
  +            Debug.WriteLine("dangling new token '{0}'", box newTokText)
               addText newTokText 
               loop [] moreNewTokens 
   
           // Dangling input text - extra comments or whitespace
           | (Marked(origTok, origTokText, _) :: moreOrigTokens), [] ->
  -            Debug.WriteLine("dropping dangling old token '{0}'", origTokText)
  +            Debug.WriteLine("dropping dangling old token '{0}'", box origTokText)
               loop moreOrigTokens [] 
   
           | [], [] -> 
  
positive.code:         // Inject inactive code
          // These chunks come out from any #else branch in our scenarios
          | (InactiveCodeChunk (tokensText, moreOrigTokens)),  _ ->
              Debug.WriteLine("injecting inactive code '{0}'", String.concat "" tokensText)
              let text = String.concat "" tokensText
              let lines = text.Replace("\r\n", "\n").Split([|'\r'; '\n'|], StringSplitOptions.RemoveEmptyEntries)
              // What is current indentation of this chunk
  
negative.code:         // Assume that only #endif directive follows by an EOL 
          | (PreprocessorDirectiveChunk (tokensText, moreOrigTokens)), newTokens ->            
              let text = String.concat "" tokensText
              Debug.WriteLine("injecting preprocessor directive '{0}'", box text)
              addText System.Environment.NewLine
              for x in tokensText do addText x
              let moreNewTokens =
  