private String ValueToString(Object value)
 {
     if (value == null)
     {
         return "null";
     }
     String s;
     var selfDesc = value as ISelfDescribing;            
     if (selfDesc != null)
     {
         var d = new Description();
         selfDesc.DescribeTo(d);
         s = d.ToString();
     }
     else
     {
         s = value.ToPrettyString();
     }
     //remove any start/end cruft
     var cleaned = ReTabReplace.Replace(s.Trim(),Indent);
     //ensure properly indented
     var indented = ReNewlineReplace.Replace(cleaned, Environment.NewLine + m_currentIndent);
     return indented;
 }