diff --git a/src/main/java/org/apache/maven/shared/utils/xml/PrettyPrintXMLWriter.java b/src/main/java/org/apache/maven/shared/utils/xml/PrettyPrintXMLWriter.java
index 851cffb..b0d1a7d 100644
--- a/src/main/java/org/apache/maven/shared/utils/xml/PrettyPrintXMLWriter.java
+++ b/src/main/java/org/apache/maven/shared/utils/xml/PrettyPrintXMLWriter.java
@@ -23,7 +23,6 @@
 import java.io.PrintWriter;
 import java.io.Writer;
 import java.util.ArrayList;
-import org.apache.maven.shared.utils.Os;
 
 /**
  * XMLWriter with nice indentation.
@@ -101,7 +100,7 @@
      */
     public PrettyPrintXMLWriter( PrintWriter writer, String lineIndent, String encoding, String doctype )
     {
-        this( writer, lineIndent.toCharArray(), Os.LINE_SEP.toCharArray(), encoding, doctype );
+        this( writer, lineIndent.toCharArray(), "\n".toCharArray(), encoding, doctype );
     }
 
     /**
@@ -122,7 +121,7 @@
      */
     public PrettyPrintXMLWriter( PrintWriter writer, String encoding, String doctype )
     {
-        this( writer, DEFAULT_LINE_INDENT, Os.LINE_SEP.toCharArray(), encoding, doctype );
+        this( writer, DEFAULT_LINE_INDENT, "\n".toCharArray(), encoding, doctype );
     }
 
     /**
diff --git a/src/main/java/org/apache/maven/shared/utils/xml/Xpp3DomBuilder.java b/src/main/java/org/apache/maven/shared/utils/xml/Xpp3DomBuilder.java
index 9493a98..2b8f4ab 100644
--- a/src/main/java/org/apache/maven/shared/utils/xml/Xpp3DomBuilder.java
+++ b/src/main/java/org/apache/maven/shared/utils/xml/Xpp3DomBuilder.java
@@ -208,8 +208,6 @@
             attachToParent( child );
             pushOnStack( child );
 
-            // Todo: Detecting tags that close immediately seem to be impossible in sax ?
-            // http://stackoverflow.com/questions/12968390/detecting-self-closing-tags-in-sax
             values.add( new StringBuilder() );
 
             int size = attributes.getLength();
diff --git a/src/test/java/org/apache/maven/shared/utils/xml/PrettyPrintXmlWriterTest.java b/src/test/java/org/apache/maven/shared/utils/xml/PrettyPrintXmlWriterTest.java
index 70f078c..4830f43 100644
--- a/src/test/java/org/apache/maven/shared/utils/xml/PrettyPrintXmlWriterTest.java
+++ b/src/test/java/org/apache/maven/shared/utils/xml/PrettyPrintXmlWriterTest.java
@@ -24,7 +24,6 @@
 import javax.swing.text.html.HTML;
 import java.io.StringWriter;
 
-import org.apache.maven.shared.utils.Os;
 import org.apache.maven.shared.utils.StringUtils;
 import org.junit.Assert;
 import org.junit.Test;
@@ -51,7 +50,7 @@
 
         writer.endElement(); // Tag.HTML
 
-        Assert.assertEquals( expectedResult( Os.LINE_SEP ), w.toString() );
+        Assert.assertEquals( expectedResult(), w.toString() );
     }
 
     @Test
@@ -67,7 +66,7 @@
 
         writer.endElement(); // Tag.HTML
 
-        Assert.assertEquals( expectedResult( "\n" ), w.toString() );
+        Assert.assertEquals( expectedResult(), w.toString() );
     }
 
     @Test
@@ -83,7 +82,7 @@
 
         writer.endElement(); // Tag.HTML
 
-        Assert.assertEquals( expectedResult( "    ", Os.LINE_SEP ), w.toString() );
+        Assert.assertEquals( expectedResult( "    " ), w.toString() );
     }
 
     @Test
@@ -158,13 +157,15 @@
         writer.endElement(); // Tag.BODY
     }
 
-    private static String expectedResult( String lineSeparator )
+    private static String expectedResult()
     {
-        return expectedResult( "  ", lineSeparator );
+        return expectedResult( "  " );
     }
 
-    private static String expectedResult( String lineIndenter, String lineSeparator )
+    private static String expectedResult( String lineIndenter )
     {
+        
+        String lineSeparator = "\n";
         StringBuilder expected = new StringBuilder();
 
         expected.append( "<html>" ).append( lineSeparator );
diff --git a/src/test/java/org/apache/maven/shared/utils/xml/Xpp3DomBuilderTest.java b/src/test/java/org/apache/maven/shared/utils/xml/Xpp3DomBuilderTest.java
index a236ede..cef681e 100644
--- a/src/test/java/org/apache/maven/shared/utils/xml/Xpp3DomBuilderTest.java
+++ b/src/test/java/org/apache/maven/shared/utils/xml/Xpp3DomBuilderTest.java
@@ -19,9 +19,8 @@
  * under the License.
  */
 
-import org.apache.maven.shared.utils.StringUtils;
 import org.apache.maven.shared.utils.xml.pull.XmlPullParserException;
-
+import org.junit.Assert;
 import org.junit.Test;
 
 import java.io.ByteArrayInputStream;
@@ -43,16 +42,13 @@
 public class Xpp3DomBuilderTest
 {
 
-    private static final String LS = System.getProperty( "line.separator" );
-
-    private static final String xmlDeclaration = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
+    private static final String XML_DECLARATION = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
 
     @Test
     public void selfClosingTag()
         throws Exception
     {
 
-        // Todo:  http://stackoverflow.com/questions/12968390/detecting-self-closing-tags-in-sax
         String domString = selfClosingTagSource();
 
         Xpp3Dom dom = Xpp3DomBuilder.build( new StringReader( domString ) );
@@ -97,11 +93,15 @@
         assertEquals( "  preserve space  ", dom.getChild( "element6" ).getValue() );
     }
 
-    @Test(expected = XmlPullParserException.class)
-    public void malformedXml()
+    @Test
+    public void testMalformedXml()
     {
-        Xpp3DomBuilder.build( new StringReader( "<newRoot>" + createDomString() ) );
-        fail( "We're supposed to fail" );
+        try {
+            Xpp3DomBuilder.build( new StringReader( "<newRoot>" + createDomString() ) );
+            fail( "We're supposed to fail" );
+        } catch (XmlPullParserException ex) {
+            Assert.assertNotNull( ex.getMessage() );
+        }
     }
 
     @Test
@@ -137,9 +137,9 @@
     {
         StringBuilder domString = new StringBuilder();
         domString.append( "<root>" );
-        domString.append( LS );
+        domString.append( "\n" );
         domString.append( "  <el att=\"&lt;foo&gt;\">bar</el>" );
-        domString.append( LS );
+        domString.append( "\n" );
         domString.append( "</root>" );
 
         return domString.toString();
@@ -161,13 +161,13 @@
     {
         StringBuilder domString = new StringBuilder();
         domString.append( "<root>" );
-        domString.append( LS );
+        domString.append( "\n" );
         domString.append( "  <a1>\"msg\"</a1>" );
-        domString.append( LS );
+        domString.append( "\n" );
         domString.append( "  <a2>&lt;b&gt;\"msg\"&lt;/b&gt;</a2>" );
-        domString.append( LS );
+        domString.append( "\n" );
         domString.append( "  <a3>&lt;b&gt;\"msg\"&lt;/b&gt;</a3>" );
-        domString.append( LS );
+        domString.append( "\n" );
         domString.append( "</root>" );
         return domString.toString();
     }
@@ -195,12 +195,12 @@
         buf.append( "  <el4></el4>\n" );
         buf.append( "  <el5></el5>\n" );
         buf.append( "</root>" );
-        return StringUtils.unifyLineSeparators( buf.toString() );
+        return buf.toString();
     }
 
     private static String expectedSelfClosingTag()
     {
-        return StringUtils.unifyLineSeparators( xmlDeclaration + selfClosingTagSource() );
+        return XML_DECLARATION + selfClosingTagSource();
     }
 
 }
