diff --git a/src/org/apache/xml/serializer/AttributesImplSerializer.java b/src/org/apache/xml/serializer/AttributesImplSerializer.java
index 982366b..04c6895 100644
--- a/src/org/apache/xml/serializer/AttributesImplSerializer.java
+++ b/src/org/apache/xml/serializer/AttributesImplSerializer.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 2003-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/CharInfo.java b/src/org/apache/xml/serializer/CharInfo.java
index 65bb5f4..0035f0d 100644
--- a/src/org/apache/xml/serializer/CharInfo.java
+++ b/src/org/apache/xml/serializer/CharInfo.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 1999-2006 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/DOMSerializer.java b/src/org/apache/xml/serializer/DOMSerializer.java
index 5414da7..e03483b 100644
--- a/src/org/apache/xml/serializer/DOMSerializer.java
+++ b/src/org/apache/xml/serializer/DOMSerializer.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/ElemContext.java b/src/org/apache/xml/serializer/ElemContext.java
index 313fe08..d42602e 100644
--- a/src/org/apache/xml/serializer/ElemContext.java
+++ b/src/org/apache/xml/serializer/ElemContext.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 2003-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/ElemDesc.java b/src/org/apache/xml/serializer/ElemDesc.java
index 87986a6..08744f1 100644
--- a/src/org/apache/xml/serializer/ElemDesc.java
+++ b/src/org/apache/xml/serializer/ElemDesc.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/EmptySerializer.java b/src/org/apache/xml/serializer/EmptySerializer.java
index ab1822b..427304c 100644
--- a/src/org/apache/xml/serializer/EmptySerializer.java
+++ b/src/org/apache/xml/serializer/EmptySerializer.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 2003-2006 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/EncodingInfo.java b/src/org/apache/xml/serializer/EncodingInfo.java
index ab21ca4..840405b 100644
--- a/src/org/apache/xml/serializer/EncodingInfo.java
+++ b/src/org/apache/xml/serializer/EncodingInfo.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 1999-2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/Encodings.java b/src/org/apache/xml/serializer/Encodings.java
index bf5f308..f3db4b9 100644
--- a/src/org/apache/xml/serializer/Encodings.java
+++ b/src/org/apache/xml/serializer/Encodings.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 1999-2006 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/Encodings.properties b/src/org/apache/xml/serializer/Encodings.properties
index e9f114d..f1da1db 100644
--- a/src/org/apache/xml/serializer/Encodings.properties
+++ b/src/org/apache/xml/serializer/Encodings.properties
@@ -1,7 +1,9 @@
-###########################################################################
-# Copyright 2003-2006 The Apache Software Foundation.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
+##
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the  "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at
 #
@@ -12,7 +14,7 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-##########################################################################
+##
 #
 # $Id$
 #
diff --git a/src/org/apache/xml/serializer/ExtendedContentHandler.java b/src/org/apache/xml/serializer/ExtendedContentHandler.java
index 9ae354c..8cf35d3 100644
--- a/src/org/apache/xml/serializer/ExtendedContentHandler.java
+++ b/src/org/apache/xml/serializer/ExtendedContentHandler.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 2003-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/ExtendedLexicalHandler.java b/src/org/apache/xml/serializer/ExtendedLexicalHandler.java
index ac5ce19..bb7f90f 100644
--- a/src/org/apache/xml/serializer/ExtendedLexicalHandler.java
+++ b/src/org/apache/xml/serializer/ExtendedLexicalHandler.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 2003-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/HTMLEntities.properties b/src/org/apache/xml/serializer/HTMLEntities.properties
index 7700294..db273c9 100644
--- a/src/org/apache/xml/serializer/HTMLEntities.properties
+++ b/src/org/apache/xml/serializer/HTMLEntities.properties
@@ -1,7 +1,9 @@
-###########################################################################
-# Copyright 2003-2004 The Apache Software Foundation.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
+##
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the  "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at
 #
@@ -12,7 +14,7 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-##########################################################################
+##
 #
 # $Id$
 #
diff --git a/src/org/apache/xml/serializer/Method.java b/src/org/apache/xml/serializer/Method.java
index 1a78789..5843e79 100644
--- a/src/org/apache/xml/serializer/Method.java
+++ b/src/org/apache/xml/serializer/Method.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/NamespaceMappings.java b/src/org/apache/xml/serializer/NamespaceMappings.java
index a8b7225..7d533c0 100644
--- a/src/org/apache/xml/serializer/NamespaceMappings.java
+++ b/src/org/apache/xml/serializer/NamespaceMappings.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 2003-2006 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/ObjectFactory.java b/src/org/apache/xml/serializer/ObjectFactory.java
index 2296992..18ee5a3 100755
--- a/src/org/apache/xml/serializer/ObjectFactory.java
+++ b/src/org/apache/xml/serializer/ObjectFactory.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 2001-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/OutputPropertiesFactory.java b/src/org/apache/xml/serializer/OutputPropertiesFactory.java
index 89b5ad4..65ef5a5 100644
--- a/src/org/apache/xml/serializer/OutputPropertiesFactory.java
+++ b/src/org/apache/xml/serializer/OutputPropertiesFactory.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/OutputPropertyUtils.java b/src/org/apache/xml/serializer/OutputPropertyUtils.java
index 325c257..a1e3c38 100644
--- a/src/org/apache/xml/serializer/OutputPropertyUtils.java
+++ b/src/org/apache/xml/serializer/OutputPropertyUtils.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/SecuritySupport.java b/src/org/apache/xml/serializer/SecuritySupport.java
index d05c3f8..197bcac 100644
--- a/src/org/apache/xml/serializer/SecuritySupport.java
+++ b/src/org/apache/xml/serializer/SecuritySupport.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 2002-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/SecuritySupport12.java b/src/org/apache/xml/serializer/SecuritySupport12.java
index 449704e..350372a 100644
--- a/src/org/apache/xml/serializer/SecuritySupport12.java
+++ b/src/org/apache/xml/serializer/SecuritySupport12.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 2002-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/SerializationHandler.java b/src/org/apache/xml/serializer/SerializationHandler.java
index 764ad9d..ec3b4e1 100644
--- a/src/org/apache/xml/serializer/SerializationHandler.java
+++ b/src/org/apache/xml/serializer/SerializationHandler.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 2003-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/Serializer.java b/src/org/apache/xml/serializer/Serializer.java
index 72cdaa7..f7b01fb 100644
--- a/src/org/apache/xml/serializer/Serializer.java
+++ b/src/org/apache/xml/serializer/Serializer.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/SerializerBase.java b/src/org/apache/xml/serializer/SerializerBase.java
index ef5e080..3b9556f 100644
--- a/src/org/apache/xml/serializer/SerializerBase.java
+++ b/src/org/apache/xml/serializer/SerializerBase.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 2001-2006 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/SerializerConstants.java b/src/org/apache/xml/serializer/SerializerConstants.java
index da74c60..41cb456 100644
--- a/src/org/apache/xml/serializer/SerializerConstants.java
+++ b/src/org/apache/xml/serializer/SerializerConstants.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 2001-2006 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/SerializerFactory.java b/src/org/apache/xml/serializer/SerializerFactory.java
index 5017990..e452961 100644
--- a/src/org/apache/xml/serializer/SerializerFactory.java
+++ b/src/org/apache/xml/serializer/SerializerFactory.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/SerializerTrace.java b/src/org/apache/xml/serializer/SerializerTrace.java
index 3e0eb60..0c0f30c 100644
--- a/src/org/apache/xml/serializer/SerializerTrace.java
+++ b/src/org/apache/xml/serializer/SerializerTrace.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/SerializerTraceWriter.java b/src/org/apache/xml/serializer/SerializerTraceWriter.java
index 4d07e68..9de4534 100644
--- a/src/org/apache/xml/serializer/SerializerTraceWriter.java
+++ b/src/org/apache/xml/serializer/SerializerTraceWriter.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 2003-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/ToHTMLSAXHandler.java b/src/org/apache/xml/serializer/ToHTMLSAXHandler.java
index 0764282..73cdf52 100644
--- a/src/org/apache/xml/serializer/ToHTMLSAXHandler.java
+++ b/src/org/apache/xml/serializer/ToHTMLSAXHandler.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 2001-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/ToHTMLStream.java b/src/org/apache/xml/serializer/ToHTMLStream.java
index 35d3ac5..3056d3a 100644
--- a/src/org/apache/xml/serializer/ToHTMLStream.java
+++ b/src/org/apache/xml/serializer/ToHTMLStream.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 2001-2006 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/ToSAXHandler.java b/src/org/apache/xml/serializer/ToSAXHandler.java
index 7584da8..0373f1d 100644
--- a/src/org/apache/xml/serializer/ToSAXHandler.java
+++ b/src/org/apache/xml/serializer/ToSAXHandler.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 2001-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/ToStream.java b/src/org/apache/xml/serializer/ToStream.java
index 2007203..8ec8aa4 100644
--- a/src/org/apache/xml/serializer/ToStream.java
+++ b/src/org/apache/xml/serializer/ToStream.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 2001-2006 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/ToTextSAXHandler.java b/src/org/apache/xml/serializer/ToTextSAXHandler.java
index e354702..2ba5da4 100644
--- a/src/org/apache/xml/serializer/ToTextSAXHandler.java
+++ b/src/org/apache/xml/serializer/ToTextSAXHandler.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 2001-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/ToTextStream.java b/src/org/apache/xml/serializer/ToTextStream.java
index 9143a7e..312bc8b 100644
--- a/src/org/apache/xml/serializer/ToTextStream.java
+++ b/src/org/apache/xml/serializer/ToTextStream.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 2001-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/ToUnknownStream.java b/src/org/apache/xml/serializer/ToUnknownStream.java
index 342bba2..4bd0789 100644
--- a/src/org/apache/xml/serializer/ToUnknownStream.java
+++ b/src/org/apache/xml/serializer/ToUnknownStream.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/ToXMLSAXHandler.java b/src/org/apache/xml/serializer/ToXMLSAXHandler.java
index 72dceb4..eb18c8a 100644
--- a/src/org/apache/xml/serializer/ToXMLSAXHandler.java
+++ b/src/org/apache/xml/serializer/ToXMLSAXHandler.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 2001-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/ToXMLStream.java b/src/org/apache/xml/serializer/ToXMLStream.java
index 7092923..bbf17c0 100644
--- a/src/org/apache/xml/serializer/ToXMLStream.java
+++ b/src/org/apache/xml/serializer/ToXMLStream.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 2001-2006 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/TransformStateSetter.java b/src/org/apache/xml/serializer/TransformStateSetter.java
index b0d1f78..0375773 100644
--- a/src/org/apache/xml/serializer/TransformStateSetter.java
+++ b/src/org/apache/xml/serializer/TransformStateSetter.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/TreeWalker.java b/src/org/apache/xml/serializer/TreeWalker.java
index 1cbab45..756a5da 100644
--- a/src/org/apache/xml/serializer/TreeWalker.java
+++ b/src/org/apache/xml/serializer/TreeWalker.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 1999-2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/Version.java b/src/org/apache/xml/serializer/Version.java
index b4b7d20..fa29672 100644
--- a/src/org/apache/xml/serializer/Version.java
+++ b/src/org/apache/xml/serializer/Version.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -23,7 +25,7 @@
  * the Serializer release.
  * <P>This class implements the upcoming standard of having
  * org.apache.project-name.Version.getVersion() be a standard way 
- * to get version information.</P>
+ * to get version information.</P> 
  * @xsl.usage general
  */
 public final class Version
diff --git a/src/org/apache/xml/serializer/Version.src b/src/org/apache/xml/serializer/Version.src
index 4f0798a..deb2663 100644
--- a/src/org/apache/xml/serializer/Version.src
+++ b/src/org/apache/xml/serializer/Version.src
@@ -1,7 +1,9 @@
 /*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/WriterChain.java b/src/org/apache/xml/serializer/WriterChain.java
index b7eb8fc..b9d4d28 100644
--- a/src/org/apache/xml/serializer/WriterChain.java
+++ b/src/org/apache/xml/serializer/WriterChain.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/WriterToASCI.java b/src/org/apache/xml/serializer/WriterToASCI.java
index df262e2..50c6f20 100644
--- a/src/org/apache/xml/serializer/WriterToASCI.java
+++ b/src/org/apache/xml/serializer/WriterToASCI.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/WriterToUTF8Buffered.java b/src/org/apache/xml/serializer/WriterToUTF8Buffered.java
index 05d9852..e2c5e0c 100644
--- a/src/org/apache/xml/serializer/WriterToUTF8Buffered.java
+++ b/src/org/apache/xml/serializer/WriterToUTF8Buffered.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 1999-2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/XMLEntities.properties b/src/org/apache/xml/serializer/XMLEntities.properties
index d7fd082..2ac3a05 100644
--- a/src/org/apache/xml/serializer/XMLEntities.properties
+++ b/src/org/apache/xml/serializer/XMLEntities.properties
@@ -1,7 +1,9 @@
-###########################################################################
-# Copyright 2003-2004 The Apache Software Foundation.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
+##
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the  "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at
 #
@@ -12,7 +14,7 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-##########################################################################
+##
 #
 # $Id$
 #
diff --git a/src/org/apache/xml/serializer/XSLOutputAttributes.java b/src/org/apache/xml/serializer/XSLOutputAttributes.java
index 4b5c722..f5676f7 100644
--- a/src/org/apache/xml/serializer/XSLOutputAttributes.java
+++ b/src/org/apache/xml/serializer/XSLOutputAttributes.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 2003-2006 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/output_html.properties b/src/org/apache/xml/serializer/output_html.properties
index 6ce60f1..0788772 100644
--- a/src/org/apache/xml/serializer/output_html.properties
+++ b/src/org/apache/xml/serializer/output_html.properties
@@ -1,7 +1,9 @@
-###########################################################################
-# Copyright 2003-2004 The Apache Software Foundation.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
+##
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the  "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at
 #
@@ -12,7 +14,7 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-##########################################################################
+##
 #
 # $Id$
 #
diff --git a/src/org/apache/xml/serializer/output_text.properties b/src/org/apache/xml/serializer/output_text.properties
index d12182b..7864d4f 100644
--- a/src/org/apache/xml/serializer/output_text.properties
+++ b/src/org/apache/xml/serializer/output_text.properties
@@ -1,7 +1,9 @@
-##########################################################################
-# Copyright 2003-2004 The Apache Software Foundation.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
+##
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the  "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at
 #
@@ -12,7 +14,7 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-##########################################################################
+##
 #
 # $Id$
 #
@@ -32,4 +34,4 @@
 #              xalan:content-handler="MyContentHandler"/>
 #  ...
 # Note that the colon after the protocol needs to be escaped.
-{http\u003a//xml.apache.org/xalan}content-handler=org.apache.xml.serializer.ToTextStream
\ No newline at end of file
+{http\u003a//xml.apache.org/xalan}content-handler=org.apache.xml.serializer.ToTextStream
diff --git a/src/org/apache/xml/serializer/output_unknown.properties b/src/org/apache/xml/serializer/output_unknown.properties
index e66846c..995da3e 100644
--- a/src/org/apache/xml/serializer/output_unknown.properties
+++ b/src/org/apache/xml/serializer/output_unknown.properties
@@ -1,7 +1,9 @@
-###########################################################################
-# Copyright 2003-2004 The Apache Software Foundation.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
+##
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the  "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at
 #
@@ -12,7 +14,7 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-##########################################################################
+##
 #
 # $Id$
 #
diff --git a/src/org/apache/xml/serializer/output_xml.properties b/src/org/apache/xml/serializer/output_xml.properties
index 665a159..0c8f5be 100644
--- a/src/org/apache/xml/serializer/output_xml.properties
+++ b/src/org/apache/xml/serializer/output_xml.properties
@@ -1,7 +1,9 @@
-###########################################################################
-# Copyright 2003-2004 The Apache Software Foundation.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
+##
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the  "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at
 #
@@ -12,7 +14,7 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-##########################################################################
+##
 #
 # $Id$
 #
diff --git a/src/org/apache/xml/serializer/package.html b/src/org/apache/xml/serializer/package.html
index 0736085..d4dffd1 100644
--- a/src/org/apache/xml/serializer/package.html
+++ b/src/org/apache/xml/serializer/package.html
@@ -1,7 +1,9 @@
 <!--
- * Copyright 2003-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/utils/AttList.java b/src/org/apache/xml/serializer/utils/AttList.java
index 01a5809..8117130 100644
--- a/src/org/apache/xml/serializer/utils/AttList.java
+++ b/src/org/apache/xml/serializer/utils/AttList.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/utils/BoolStack.java b/src/org/apache/xml/serializer/utils/BoolStack.java
index 07a3c1b..68cea42 100644
--- a/src/org/apache/xml/serializer/utils/BoolStack.java
+++ b/src/org/apache/xml/serializer/utils/BoolStack.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/utils/DOM2Helper.java b/src/org/apache/xml/serializer/utils/DOM2Helper.java
index f241a90..c21cecf 100644
--- a/src/org/apache/xml/serializer/utils/DOM2Helper.java
+++ b/src/org/apache/xml/serializer/utils/DOM2Helper.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/utils/Messages.java b/src/org/apache/xml/serializer/utils/Messages.java
index 1919646..a8d9438 100644
--- a/src/org/apache/xml/serializer/utils/Messages.java
+++ b/src/org/apache/xml/serializer/utils/Messages.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/utils/MsgKey.java b/src/org/apache/xml/serializer/utils/MsgKey.java
index f029da4..b818760 100644
--- a/src/org/apache/xml/serializer/utils/MsgKey.java
+++ b/src/org/apache/xml/serializer/utils/MsgKey.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/utils/SerializerMessages.java b/src/org/apache/xml/serializer/utils/SerializerMessages.java
index e94c2e7..b683a8c 100644
--- a/src/org/apache/xml/serializer/utils/SerializerMessages.java
+++ b/src/org/apache/xml/serializer/utils/SerializerMessages.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/utils/SerializerMessages_ca.java b/src/org/apache/xml/serializer/utils/SerializerMessages_ca.java
index 2c0c77d..ded6b08 100644
--- a/src/org/apache/xml/serializer/utils/SerializerMessages_ca.java
+++ b/src/org/apache/xml/serializer/utils/SerializerMessages_ca.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 1999-2006 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/utils/SerializerMessages_cs.java b/src/org/apache/xml/serializer/utils/SerializerMessages_cs.java
index 9035d46..1313d25 100644
--- a/src/org/apache/xml/serializer/utils/SerializerMessages_cs.java
+++ b/src/org/apache/xml/serializer/utils/SerializerMessages_cs.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 1999-2006 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/utils/SerializerMessages_de.java b/src/org/apache/xml/serializer/utils/SerializerMessages_de.java
index f9e4047..29d996a 100644
--- a/src/org/apache/xml/serializer/utils/SerializerMessages_de.java
+++ b/src/org/apache/xml/serializer/utils/SerializerMessages_de.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 1999-2006 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/utils/SerializerMessages_en.java b/src/org/apache/xml/serializer/utils/SerializerMessages_en.java
index 9ac1bbd..0aa3807 100644
--- a/src/org/apache/xml/serializer/utils/SerializerMessages_en.java
+++ b/src/org/apache/xml/serializer/utils/SerializerMessages_en.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -25,4 +27,4 @@
  */
 public final class SerializerMessages_en extends SerializerMessages
 {
-}
\ No newline at end of file
+}
diff --git a/src/org/apache/xml/serializer/utils/SerializerMessages_es.java b/src/org/apache/xml/serializer/utils/SerializerMessages_es.java
index 595ac11..839481e 100644
--- a/src/org/apache/xml/serializer/utils/SerializerMessages_es.java
+++ b/src/org/apache/xml/serializer/utils/SerializerMessages_es.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 1999-2006 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/utils/SerializerMessages_fr.java b/src/org/apache/xml/serializer/utils/SerializerMessages_fr.java
index 2d7af35..b6ec10a 100644
--- a/src/org/apache/xml/serializer/utils/SerializerMessages_fr.java
+++ b/src/org/apache/xml/serializer/utils/SerializerMessages_fr.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 1999-2006 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/utils/SerializerMessages_hu.java b/src/org/apache/xml/serializer/utils/SerializerMessages_hu.java
index 24820ae..74487c3 100644
--- a/src/org/apache/xml/serializer/utils/SerializerMessages_hu.java
+++ b/src/org/apache/xml/serializer/utils/SerializerMessages_hu.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 1999-2006 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/utils/SerializerMessages_it.java b/src/org/apache/xml/serializer/utils/SerializerMessages_it.java
index 2479149..48698f4 100644
--- a/src/org/apache/xml/serializer/utils/SerializerMessages_it.java
+++ b/src/org/apache/xml/serializer/utils/SerializerMessages_it.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 1999-2006 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/utils/SerializerMessages_ja.java b/src/org/apache/xml/serializer/utils/SerializerMessages_ja.java
index 0b6405d..ac922dd 100644
--- a/src/org/apache/xml/serializer/utils/SerializerMessages_ja.java
+++ b/src/org/apache/xml/serializer/utils/SerializerMessages_ja.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 1999-2006 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/utils/SerializerMessages_ko.java b/src/org/apache/xml/serializer/utils/SerializerMessages_ko.java
index 729d88e..fd2d702 100644
--- a/src/org/apache/xml/serializer/utils/SerializerMessages_ko.java
+++ b/src/org/apache/xml/serializer/utils/SerializerMessages_ko.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 1999-2006 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/utils/SerializerMessages_pl.java b/src/org/apache/xml/serializer/utils/SerializerMessages_pl.java
index 818a583..3cdc99c 100644
--- a/src/org/apache/xml/serializer/utils/SerializerMessages_pl.java
+++ b/src/org/apache/xml/serializer/utils/SerializerMessages_pl.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 1999-2006 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/utils/SerializerMessages_pt_BR.java b/src/org/apache/xml/serializer/utils/SerializerMessages_pt_BR.java
index ac8ec38..55b506c 100644
--- a/src/org/apache/xml/serializer/utils/SerializerMessages_pt_BR.java
+++ b/src/org/apache/xml/serializer/utils/SerializerMessages_pt_BR.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 1999-2006 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/utils/SerializerMessages_ru.java b/src/org/apache/xml/serializer/utils/SerializerMessages_ru.java
index 31fde89..d8205d8 100644
--- a/src/org/apache/xml/serializer/utils/SerializerMessages_ru.java
+++ b/src/org/apache/xml/serializer/utils/SerializerMessages_ru.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 1999-2006 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/utils/SerializerMessages_sk.java b/src/org/apache/xml/serializer/utils/SerializerMessages_sk.java
index 6882ea8..532164b 100755
--- a/src/org/apache/xml/serializer/utils/SerializerMessages_sk.java
+++ b/src/org/apache/xml/serializer/utils/SerializerMessages_sk.java
@@ -1,204 +1,206 @@
-/*
- * Copyright 2004-2006 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: SerializerMessages_sk.java,v 1.7 2005/03/07 20:34:36 minchau Exp $
- */
-
-package org.apache.xml.serializer.utils;
-
-import java.util.ListResourceBundle;
-import java.util.Locale;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-/**
- * An instance of this class is a ListResourceBundle that
- * has the required getContents() method that returns
- * an array of message-key/message associations.
- * <p>
- * The message keys are defined in {@link MsgKey}. The
- * messages that those keys map to are defined here.
- * <p>
- * The messages in the English version are intended to be
- * translated.
- *
- * This class is not a public API, it is only public because it is
- * used in org.apache.xml.serializer.
- *
- * @xsl.usage internal
- */
-public class SerializerMessages_sk extends ListResourceBundle {
-
-    /*
-     * This file contains error and warning messages related to
-     * Serializer Error Handling.
-     *
-     *  General notes to translators:
-
-     *  1) A stylesheet is a description of how to transform an input XML document
-     *     into a resultant XML document (or HTML document or text).  The
-     *     stylesheet itself is described in the form of an XML document.
-
-     *
-     *  2) An element is a mark-up tag in an XML document; an attribute is a
-     *     modifier on the tag.  For example, in <elem attr='val' attr2='val2'>
-     *     "elem" is an element name, "attr" and "attr2" are attribute names with
-     *     the values "val" and "val2", respectively.
-     *
-     *  3) A namespace declaration is a special attribute that is used to associate
-     *     a prefix with a URI (the namespace).  The meanings of element names and
-     *     attribute names that use that prefix are defined with respect to that
-     *     namespace.
-     *
-     *
-     */
-
-    /** The lookup table for error messages.   */
-    public Object[][] getContents() {
-        Object[][] contents = new Object[][] {
-            {   MsgKey.BAD_MSGKEY,
-                "K\u013e\u00fa\u010d spr\u00e1vy ''{0}'' sa nenach\u00e1dza v triede spr\u00e1v ''{1}''" },
-
-            {   MsgKey.BAD_MSGFORMAT,
-                "Zlyhal form\u00e1t spr\u00e1vy ''{0}'' v triede spr\u00e1v ''{1}''." },
-
-            {   MsgKey.ER_SERIALIZER_NOT_CONTENTHANDLER,
-                "Trieda serializ\u00e1tora ''{0}'' neimplementuje org.xml.sax.ContentHandler." },
-
-            {   MsgKey.ER_RESOURCE_COULD_NOT_FIND,
-                    "Prostriedok [ {0} ] nemohol by\u0165 n\u00e1jden\u00fd.\n {1}" },
-
-            {   MsgKey.ER_RESOURCE_COULD_NOT_LOAD,
-                    "Prostriedok [ {0} ] sa nedal na\u010d\u00edta\u0165: {1} \n {2} \t {3}" },
-
-            {   MsgKey.ER_BUFFER_SIZE_LESSTHAN_ZERO,
-                    "Ve\u013ekos\u0165 vyrovn\u00e1vacej pam\u00e4te <=0" },
-
-            {   MsgKey.ER_INVALID_UTF16_SURROGATE,
-                    "Bolo zisten\u00e9 neplatn\u00e9 nahradenie UTF-16: {0} ?" },
-
-            {   MsgKey.ER_OIERROR,
-                "chyba IO" },
-
-            {   MsgKey.ER_ILLEGAL_ATTRIBUTE_POSITION,
-                "Nie je mo\u017en\u00e9 prida\u0165 atrib\u00fat {0} po uzloch potomka alebo pred vytvoren\u00edm elementu.  Atrib\u00fat bude ignorovan\u00fd." },
-
-            /*
-             * Note to translators:  The stylesheet contained a reference to a
-             * namespace prefix that was undefined.  The value of the substitution
-             * text is the name of the prefix.
-             */
-            {   MsgKey.ER_NAMESPACE_PREFIX,
-                "N\u00e1zvov\u00fd priestor pre predponu ''{0}'' nebol deklarovan\u00fd." },
-
-            /*
-             * Note to translators:  This message is reported if the stylesheet
-             * being processed attempted to construct an XML document with an
-             * attribute in a place other than on an element.  The substitution text
-             * specifies the name of the attribute.
-             */
-            {   MsgKey.ER_STRAY_ATTRIBUTE,
-                "Atrib\u00fat ''{0}'' je mimo prvku." },
-
-            /*
-             * Note to translators:  As with the preceding message, a namespace
-             * declaration has the form of an attribute and is only permitted to
-             * appear on an element.  The substitution text {0} is the namespace
-             * prefix and {1} is the URI that was being used in the erroneous
-             * namespace declaration.
-             */
-            {   MsgKey.ER_STRAY_NAMESPACE,
-                "Deklar\u00e1cia n\u00e1zvov\u00e9ho priestoru ''{0}''=''{1}'' je mimo prvku." },
-
-            {   MsgKey.ER_COULD_NOT_LOAD_RESOURCE,
-                "Nebolo mo\u017en\u00e9 zavies\u0165 ''{0}'' (skontrolujte CLASSPATH), teraz sa pou\u017e\u00edvaj\u00fa iba \u0161tandardn\u00e9 nastavenia" },
-
-            {   MsgKey.ER_ILLEGAL_CHARACTER,
-                "Pokus o v\u00fdstup znaku integr\u00e1lnej hodnoty {0}, ktor\u00e1 nie je reprezentovan\u00e1 v zadanom v\u00fdstupnom k\u00f3dovan\u00ed {1}." },
-
-            {   MsgKey.ER_COULD_NOT_LOAD_METHOD_PROPERTY,
-                "Nebolo mo\u017en\u00e9 zavies\u0165 s\u00fabor vlastnost\u00ed ''{0}'' pre v\u00fdstupn\u00fa met\u00f3du ''{1}'' (skontrolujte CLASSPATH)" },
-
-            {   MsgKey.ER_INVALID_PORT,
-                "Neplatn\u00e9 \u010d\u00edslo portu" },
-
-            {   MsgKey.ER_PORT_WHEN_HOST_NULL,
-                "Nem\u00f4\u017ee by\u0165 stanoven\u00fd port, ak je hostite\u013e nulov\u00fd" },
-
-            {   MsgKey.ER_HOST_ADDRESS_NOT_WELLFORMED,
-                "Hostite\u013e nie je spr\u00e1vne form\u00e1tovan\u00e1 adresa" },
-
-            {   MsgKey.ER_SCHEME_NOT_CONFORMANT,
-                "Nezhodn\u00e1 sch\u00e9ma." },
-
-            {   MsgKey.ER_SCHEME_FROM_NULL_STRING,
-                "Nie je mo\u017en\u00e9 stanovi\u0165 sch\u00e9mu z nulov\u00e9ho re\u0165azca" },
-
-            {   MsgKey.ER_PATH_CONTAINS_INVALID_ESCAPE_SEQUENCE,
-                "Cesta obsahuje neplatn\u00fa \u00fanikov\u00fa sekvenciu" },
-
-            {   MsgKey.ER_PATH_INVALID_CHAR,
-                "Cesta obsahuje neplatn\u00fd znak: {0}" },
-
-            {   MsgKey.ER_FRAG_INVALID_CHAR,
-                "Fragment obsahuje neplatn\u00fd znak" },
-
-            {   MsgKey.ER_FRAG_WHEN_PATH_NULL,
-                "Ak je cesta nulov\u00e1, nem\u00f4\u017ee by\u0165 stanoven\u00fd fragment" },
-
-            {   MsgKey.ER_FRAG_FOR_GENERIC_URI,
-                "Fragment m\u00f4\u017ee by\u0165 stanoven\u00fd len pre v\u0161eobecn\u00e9 URI" },
-
-            {   MsgKey.ER_NO_SCHEME_IN_URI,
-                "V URI nebola n\u00e1jden\u00e1 \u017eiadna sch\u00e9ma" },
-
-            {   MsgKey.ER_CANNOT_INIT_URI_EMPTY_PARMS,
-                "Nie je mo\u017en\u00e9 inicializova\u0165 URI s pr\u00e1zdnymi parametrami" },
-
-            {   MsgKey.ER_NO_FRAGMENT_STRING_IN_PATH,
-                "Fragment nem\u00f4\u017ee by\u0165 zadan\u00fd v ceste, ani vo fragmente" },
-
-            {   MsgKey.ER_NO_QUERY_STRING_IN_PATH,
-                "Re\u0165azec dotazu nem\u00f4\u017ee by\u0165 zadan\u00fd v ceste a re\u0165azci dotazu" },
-
-            {   MsgKey.ER_NO_PORT_IF_NO_HOST,
-                "Ak nebol zadan\u00fd hostite\u013e, mo\u017eno nebol zadan\u00fd port" },
-
-            {   MsgKey.ER_NO_USERINFO_IF_NO_HOST,
-                "Ak nebol zadan\u00fd hostite\u013e, mo\u017eno nebolo zadan\u00e9 userinfo" },
-            {   MsgKey.ER_XML_VERSION_NOT_SUPPORTED,
-                "Varovanie:  Verzia v\u00fdstupn\u00e9ho dokumentu mus\u00ed by\u0165 povinne ''{0}''.  T\u00e1to verzia XML nie je podporovan\u00e1.  Verzia v\u00fdstupn\u00e9ho dokumentu bude ''1.0''." },
-
-            {   MsgKey.ER_SCHEME_REQUIRED,
-                "Je po\u017eadovan\u00e1 sch\u00e9ma!" },
-
-            /*
-             * Note to translators:  The words 'Properties' and
-             * 'SerializerFactory' in this message are Java class names
-             * and should not be translated.
-             */
-            {   MsgKey.ER_FACTORY_PROPERTY_MISSING,
-                "Objekt Properties, ktor\u00fd pre\u0161iel do SerializerFactory, nem\u00e1 vlastnos\u0165 ''{0}''." },
-
-            {   MsgKey.ER_ENCODING_NOT_SUPPORTED,
-                "Varovanie:  Java runtime nepodporuje k\u00f3dovanie ''{0}''." },
-
-
-        };
-
-        return contents;
-    }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/*
+ * $Id: SerializerMessages_sk.java,v 1.7 2005/03/07 20:34:36 minchau Exp $
+ */
+
+package org.apache.xml.serializer.utils;
+
+import java.util.ListResourceBundle;
+import java.util.Locale;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * An instance of this class is a ListResourceBundle that
+ * has the required getContents() method that returns
+ * an array of message-key/message associations.
+ * <p>
+ * The message keys are defined in {@link MsgKey}. The
+ * messages that those keys map to are defined here.
+ * <p>
+ * The messages in the English version are intended to be
+ * translated.
+ *
+ * This class is not a public API, it is only public because it is
+ * used in org.apache.xml.serializer.
+ *
+ * @xsl.usage internal
+ */
+public class SerializerMessages_sk extends ListResourceBundle {
+
+    /*
+     * This file contains error and warning messages related to
+     * Serializer Error Handling.
+     *
+     *  General notes to translators:
+
+     *  1) A stylesheet is a description of how to transform an input XML document
+     *     into a resultant XML document (or HTML document or text).  The
+     *     stylesheet itself is described in the form of an XML document.
+
+     *
+     *  2) An element is a mark-up tag in an XML document; an attribute is a
+     *     modifier on the tag.  For example, in <elem attr='val' attr2='val2'>
+     *     "elem" is an element name, "attr" and "attr2" are attribute names with
+     *     the values "val" and "val2", respectively.
+     *
+     *  3) A namespace declaration is a special attribute that is used to associate
+     *     a prefix with a URI (the namespace).  The meanings of element names and
+     *     attribute names that use that prefix are defined with respect to that
+     *     namespace.
+     *
+     *
+     */
+
+    /** The lookup table for error messages.   */
+    public Object[][] getContents() {
+        Object[][] contents = new Object[][] {
+            {   MsgKey.BAD_MSGKEY,
+                "K\u013e\u00fa\u010d spr\u00e1vy ''{0}'' sa nenach\u00e1dza v triede spr\u00e1v ''{1}''" },
+
+            {   MsgKey.BAD_MSGFORMAT,
+                "Zlyhal form\u00e1t spr\u00e1vy ''{0}'' v triede spr\u00e1v ''{1}''." },
+
+            {   MsgKey.ER_SERIALIZER_NOT_CONTENTHANDLER,
+                "Trieda serializ\u00e1tora ''{0}'' neimplementuje org.xml.sax.ContentHandler." },
+
+            {   MsgKey.ER_RESOURCE_COULD_NOT_FIND,
+                    "Prostriedok [ {0} ] nemohol by\u0165 n\u00e1jden\u00fd.\n {1}" },
+
+            {   MsgKey.ER_RESOURCE_COULD_NOT_LOAD,
+                    "Prostriedok [ {0} ] sa nedal na\u010d\u00edta\u0165: {1} \n {2} \t {3}" },
+
+            {   MsgKey.ER_BUFFER_SIZE_LESSTHAN_ZERO,
+                    "Ve\u013ekos\u0165 vyrovn\u00e1vacej pam\u00e4te <=0" },
+
+            {   MsgKey.ER_INVALID_UTF16_SURROGATE,
+                    "Bolo zisten\u00e9 neplatn\u00e9 nahradenie UTF-16: {0} ?" },
+
+            {   MsgKey.ER_OIERROR,
+                "chyba IO" },
+
+            {   MsgKey.ER_ILLEGAL_ATTRIBUTE_POSITION,
+                "Nie je mo\u017en\u00e9 prida\u0165 atrib\u00fat {0} po uzloch potomka alebo pred vytvoren\u00edm elementu.  Atrib\u00fat bude ignorovan\u00fd." },
+
+            /*
+             * Note to translators:  The stylesheet contained a reference to a
+             * namespace prefix that was undefined.  The value of the substitution
+             * text is the name of the prefix.
+             */
+            {   MsgKey.ER_NAMESPACE_PREFIX,
+                "N\u00e1zvov\u00fd priestor pre predponu ''{0}'' nebol deklarovan\u00fd." },
+
+            /*
+             * Note to translators:  This message is reported if the stylesheet
+             * being processed attempted to construct an XML document with an
+             * attribute in a place other than on an element.  The substitution text
+             * specifies the name of the attribute.
+             */
+            {   MsgKey.ER_STRAY_ATTRIBUTE,
+                "Atrib\u00fat ''{0}'' je mimo prvku." },
+
+            /*
+             * Note to translators:  As with the preceding message, a namespace
+             * declaration has the form of an attribute and is only permitted to
+             * appear on an element.  The substitution text {0} is the namespace
+             * prefix and {1} is the URI that was being used in the erroneous
+             * namespace declaration.
+             */
+            {   MsgKey.ER_STRAY_NAMESPACE,
+                "Deklar\u00e1cia n\u00e1zvov\u00e9ho priestoru ''{0}''=''{1}'' je mimo prvku." },
+
+            {   MsgKey.ER_COULD_NOT_LOAD_RESOURCE,
+                "Nebolo mo\u017en\u00e9 zavies\u0165 ''{0}'' (skontrolujte CLASSPATH), teraz sa pou\u017e\u00edvaj\u00fa iba \u0161tandardn\u00e9 nastavenia" },
+
+            {   MsgKey.ER_ILLEGAL_CHARACTER,
+                "Pokus o v\u00fdstup znaku integr\u00e1lnej hodnoty {0}, ktor\u00e1 nie je reprezentovan\u00e1 v zadanom v\u00fdstupnom k\u00f3dovan\u00ed {1}." },
+
+            {   MsgKey.ER_COULD_NOT_LOAD_METHOD_PROPERTY,
+                "Nebolo mo\u017en\u00e9 zavies\u0165 s\u00fabor vlastnost\u00ed ''{0}'' pre v\u00fdstupn\u00fa met\u00f3du ''{1}'' (skontrolujte CLASSPATH)" },
+
+            {   MsgKey.ER_INVALID_PORT,
+                "Neplatn\u00e9 \u010d\u00edslo portu" },
+
+            {   MsgKey.ER_PORT_WHEN_HOST_NULL,
+                "Nem\u00f4\u017ee by\u0165 stanoven\u00fd port, ak je hostite\u013e nulov\u00fd" },
+
+            {   MsgKey.ER_HOST_ADDRESS_NOT_WELLFORMED,
+                "Hostite\u013e nie je spr\u00e1vne form\u00e1tovan\u00e1 adresa" },
+
+            {   MsgKey.ER_SCHEME_NOT_CONFORMANT,
+                "Nezhodn\u00e1 sch\u00e9ma." },
+
+            {   MsgKey.ER_SCHEME_FROM_NULL_STRING,
+                "Nie je mo\u017en\u00e9 stanovi\u0165 sch\u00e9mu z nulov\u00e9ho re\u0165azca" },
+
+            {   MsgKey.ER_PATH_CONTAINS_INVALID_ESCAPE_SEQUENCE,
+                "Cesta obsahuje neplatn\u00fa \u00fanikov\u00fa sekvenciu" },
+
+            {   MsgKey.ER_PATH_INVALID_CHAR,
+                "Cesta obsahuje neplatn\u00fd znak: {0}" },
+
+            {   MsgKey.ER_FRAG_INVALID_CHAR,
+                "Fragment obsahuje neplatn\u00fd znak" },
+
+            {   MsgKey.ER_FRAG_WHEN_PATH_NULL,
+                "Ak je cesta nulov\u00e1, nem\u00f4\u017ee by\u0165 stanoven\u00fd fragment" },
+
+            {   MsgKey.ER_FRAG_FOR_GENERIC_URI,
+                "Fragment m\u00f4\u017ee by\u0165 stanoven\u00fd len pre v\u0161eobecn\u00e9 URI" },
+
+            {   MsgKey.ER_NO_SCHEME_IN_URI,
+                "V URI nebola n\u00e1jden\u00e1 \u017eiadna sch\u00e9ma" },
+
+            {   MsgKey.ER_CANNOT_INIT_URI_EMPTY_PARMS,
+                "Nie je mo\u017en\u00e9 inicializova\u0165 URI s pr\u00e1zdnymi parametrami" },
+
+            {   MsgKey.ER_NO_FRAGMENT_STRING_IN_PATH,
+                "Fragment nem\u00f4\u017ee by\u0165 zadan\u00fd v ceste, ani vo fragmente" },
+
+            {   MsgKey.ER_NO_QUERY_STRING_IN_PATH,
+                "Re\u0165azec dotazu nem\u00f4\u017ee by\u0165 zadan\u00fd v ceste a re\u0165azci dotazu" },
+
+            {   MsgKey.ER_NO_PORT_IF_NO_HOST,
+                "Ak nebol zadan\u00fd hostite\u013e, mo\u017eno nebol zadan\u00fd port" },
+
+            {   MsgKey.ER_NO_USERINFO_IF_NO_HOST,
+                "Ak nebol zadan\u00fd hostite\u013e, mo\u017eno nebolo zadan\u00e9 userinfo" },
+            {   MsgKey.ER_XML_VERSION_NOT_SUPPORTED,
+                "Varovanie:  Verzia v\u00fdstupn\u00e9ho dokumentu mus\u00ed by\u0165 povinne ''{0}''.  T\u00e1to verzia XML nie je podporovan\u00e1.  Verzia v\u00fdstupn\u00e9ho dokumentu bude ''1.0''." },
+
+            {   MsgKey.ER_SCHEME_REQUIRED,
+                "Je po\u017eadovan\u00e1 sch\u00e9ma!" },
+
+            /*
+             * Note to translators:  The words 'Properties' and
+             * 'SerializerFactory' in this message are Java class names
+             * and should not be translated.
+             */
+            {   MsgKey.ER_FACTORY_PROPERTY_MISSING,
+                "Objekt Properties, ktor\u00fd pre\u0161iel do SerializerFactory, nem\u00e1 vlastnos\u0165 ''{0}''." },
+
+            {   MsgKey.ER_ENCODING_NOT_SUPPORTED,
+                "Varovanie:  Java runtime nepodporuje k\u00f3dovanie ''{0}''." },
+
+
+        };
+
+        return contents;
+    }
+}
diff --git a/src/org/apache/xml/serializer/utils/SerializerMessages_sl.java b/src/org/apache/xml/serializer/utils/SerializerMessages_sl.java
index 73a9974..799480e 100755
--- a/src/org/apache/xml/serializer/utils/SerializerMessages_sl.java
+++ b/src/org/apache/xml/serializer/utils/SerializerMessages_sl.java
@@ -1,204 +1,206 @@
-/*
- * Copyright 2004-2006 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: SerializerMessages_sl.java,v 1.7 2005/03/07 20:34:36 minchau Exp $
- */
-
-package org.apache.xml.serializer.utils;
-
-import java.util.ListResourceBundle;
-import java.util.Locale;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-/**
- * An instance of this class is a ListResourceBundle that
- * has the required getContents() method that returns
- * an array of message-key/message associations.
- * <p>
- * The message keys are defined in {@link MsgKey}. The
- * messages that those keys map to are defined here.
- * <p>
- * The messages in the English version are intended to be
- * translated.
- *
- * This class is not a public API, it is only public because it is
- * used in org.apache.xml.serializer.
- *
- * @xsl.usage internal
- */
-public class SerializerMessages_sl extends ListResourceBundle {
-
-    /*
-     * This file contains error and warning messages related to
-     * Serializer Error Handling.
-     *
-     *  General notes to translators:
-
-     *  1) A stylesheet is a description of how to transform an input XML document
-     *     into a resultant XML document (or HTML document or text).  The
-     *     stylesheet itself is described in the form of an XML document.
-
-     *
-     *  2) An element is a mark-up tag in an XML document; an attribute is a
-     *     modifier on the tag.  For example, in <elem attr='val' attr2='val2'>
-     *     "elem" is an element name, "attr" and "attr2" are attribute names with
-     *     the values "val" and "val2", respectively.
-     *
-     *  3) A namespace declaration is a special attribute that is used to associate
-     *     a prefix with a URI (the namespace).  The meanings of element names and
-     *     attribute names that use that prefix are defined with respect to that
-     *     namespace.
-     *
-     *
-     */
-
-    /** The lookup table for error messages.   */
-    public Object[][] getContents() {
-        Object[][] contents = new Object[][] {
-            {   MsgKey.BAD_MSGKEY,
-                "Klju\u010d sporo\u010dila ''{0}'' ni v rezredu sporo\u010dila ''{1}''" },
-
-            {   MsgKey.BAD_MSGFORMAT,
-                "Format sporo\u010dila ''{0}'' v razredu sporo\u010dila ''{1}'' je spodletel." },
-
-            {   MsgKey.ER_SERIALIZER_NOT_CONTENTHANDLER,
-                "Razred serializerja ''{0}'' ne izvede org.xml.sax.ContentHandler." },
-
-            {   MsgKey.ER_RESOURCE_COULD_NOT_FIND,
-                    "Vira [ {0} ] ni mogo\u010de najti.\n {1}" },
-
-            {   MsgKey.ER_RESOURCE_COULD_NOT_LOAD,
-                    "Sredstva [ {0} ] ni bilo mogo\u010de nalo\u017eiti: {1} \n {2} \t {3}" },
-
-            {   MsgKey.ER_BUFFER_SIZE_LESSTHAN_ZERO,
-                    "Velikost medpomnilnika <=0" },
-
-            {   MsgKey.ER_INVALID_UTF16_SURROGATE,
-                    "Zaznan neveljaven nadomestek UTF-16: {0} ?" },
-
-            {   MsgKey.ER_OIERROR,
-                "Napaka V/I" },
-
-            {   MsgKey.ER_ILLEGAL_ATTRIBUTE_POSITION,
-                "Atributa {0} ne morem dodati za podrejenimi vozli\u0161\u010di ali pred izdelavo elementa.  Atribut bo prezrt." },
-
-            /*
-             * Note to translators:  The stylesheet contained a reference to a
-             * namespace prefix that was undefined.  The value of the substitution
-             * text is the name of the prefix.
-             */
-            {   MsgKey.ER_NAMESPACE_PREFIX,
-                "Imenski prostor za predpono ''{0}'' ni bil naveden." },
-
-            /*
-             * Note to translators:  This message is reported if the stylesheet
-             * being processed attempted to construct an XML document with an
-             * attribute in a place other than on an element.  The substitution text
-             * specifies the name of the attribute.
-             */
-            {   MsgKey.ER_STRAY_ATTRIBUTE,
-                "Atribut ''{0}'' je zunaj elementa." },
-
-            /*
-             * Note to translators:  As with the preceding message, a namespace
-             * declaration has the form of an attribute and is only permitted to
-             * appear on an element.  The substitution text {0} is the namespace
-             * prefix and {1} is the URI that was being used in the erroneous
-             * namespace declaration.
-             */
-            {   MsgKey.ER_STRAY_NAMESPACE,
-                "Deklaracija imenskega prostora ''{0}''=''{1}'' je zunaj elementa." },
-
-            {   MsgKey.ER_COULD_NOT_LOAD_RESOURCE,
-                "Ni bilo mogo\u010de nalo\u017eiti ''{0}'' (preverite CLASSPATH), trenutno se uporabljajo samo privzete vrednosti" },
-
-            {   MsgKey.ER_ILLEGAL_CHARACTER,
-                "Poskus izpisa znaka integralne vrednosti {0}, ki v navedenem izhodnem kodiranju {1} ni zastopan." },
-
-            {   MsgKey.ER_COULD_NOT_LOAD_METHOD_PROPERTY,
-                "Datoteke z lastnostmi ''{0}'' ni bilo mogo\u010de nalo\u017eiti za izhodno metodo ''{1}'' (preverite CLASSPATH)" },
-
-            {   MsgKey.ER_INVALID_PORT,
-                "Neveljavna \u0161tevilka vrat" },
-
-            {   MsgKey.ER_PORT_WHEN_HOST_NULL,
-                "Ko je gostitelj NULL, nastavitev vrat ni mogo\u010da" },
-
-            {   MsgKey.ER_HOST_ADDRESS_NOT_WELLFORMED,
-                "Naslov gostitelja ni pravilno oblikovan" },
-
-            {   MsgKey.ER_SCHEME_NOT_CONFORMANT,
-                "Shema ni skladna." },
-
-            {   MsgKey.ER_SCHEME_FROM_NULL_STRING,
-                "Ni mogo\u010de nastaviti sheme iz niza NULL" },
-
-            {   MsgKey.ER_PATH_CONTAINS_INVALID_ESCAPE_SEQUENCE,
-                "Pot vsebuje neveljavno zaporedje za izhod" },
-
-            {   MsgKey.ER_PATH_INVALID_CHAR,
-                "Pot vsebuje neveljaven znak: {0}" },
-
-            {   MsgKey.ER_FRAG_INVALID_CHAR,
-                "Fragment vsebuje neveljaven znak" },
-
-            {   MsgKey.ER_FRAG_WHEN_PATH_NULL,
-                "Ko je pot NULL, nastavitev fragmenta ni mogo\u010da" },
-
-            {   MsgKey.ER_FRAG_FOR_GENERIC_URI,
-                "Fragment je lahko nastavljen samo za splo\u0161ni URI" },
-
-            {   MsgKey.ER_NO_SCHEME_IN_URI,
-                "Ne najdem sheme v URI" },
-
-            {   MsgKey.ER_CANNOT_INIT_URI_EMPTY_PARMS,
-                "Ni mogo\u010de inicializirati URI-ja s praznimi parametri" },
-
-            {   MsgKey.ER_NO_FRAGMENT_STRING_IN_PATH,
-                "Fragment ne more biti hkrati naveden v poti in v fragmentu" },
-
-            {   MsgKey.ER_NO_QUERY_STRING_IN_PATH,
-                "Poizvedbeni niz ne more biti naveden v nizu poti in poizvedbenem nizu" },
-
-            {   MsgKey.ER_NO_PORT_IF_NO_HOST,
-                "Vrata ne morejo biti navedena, \u010de ni naveden gostitelj" },
-
-            {   MsgKey.ER_NO_USERINFO_IF_NO_HOST,
-                "Informacije o uporabniku ne morejo biti navedene, \u010de ni naveden gostitelj" },
-            {   MsgKey.ER_XML_VERSION_NOT_SUPPORTED,
-                "Opozorilo: Zahtevana razli\u010dica izhodnega dokumenta je ''{0}''.  Ta razli\u010dica XML ni podprta.  Razli\u010dica izhodnega dokumenta bo ''1.0''." },
-
-            {   MsgKey.ER_SCHEME_REQUIRED,
-                "Zahtevana je shema!" },
-
-            /*
-             * Note to translators:  The words 'Properties' and
-             * 'SerializerFactory' in this message are Java class names
-             * and should not be translated.
-             */
-            {   MsgKey.ER_FACTORY_PROPERTY_MISSING,
-                "Predmet Properties (lastnosti), ki je prene\u0161en v SerializerFactory, nima lastnosti ''{0}''." },
-
-            {   MsgKey.ER_ENCODING_NOT_SUPPORTED,
-                "Opozorilo:  Izvajalno okolje Java ne podpira kodiranja ''{0}''." },
-
-
-        };
-
-        return contents;
-    }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/*
+ * $Id: SerializerMessages_sl.java,v 1.7 2005/03/07 20:34:36 minchau Exp $
+ */
+
+package org.apache.xml.serializer.utils;
+
+import java.util.ListResourceBundle;
+import java.util.Locale;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * An instance of this class is a ListResourceBundle that
+ * has the required getContents() method that returns
+ * an array of message-key/message associations.
+ * <p>
+ * The message keys are defined in {@link MsgKey}. The
+ * messages that those keys map to are defined here.
+ * <p>
+ * The messages in the English version are intended to be
+ * translated.
+ *
+ * This class is not a public API, it is only public because it is
+ * used in org.apache.xml.serializer.
+ *
+ * @xsl.usage internal
+ */
+public class SerializerMessages_sl extends ListResourceBundle {
+
+    /*
+     * This file contains error and warning messages related to
+     * Serializer Error Handling.
+     *
+     *  General notes to translators:
+
+     *  1) A stylesheet is a description of how to transform an input XML document
+     *     into a resultant XML document (or HTML document or text).  The
+     *     stylesheet itself is described in the form of an XML document.
+
+     *
+     *  2) An element is a mark-up tag in an XML document; an attribute is a
+     *     modifier on the tag.  For example, in <elem attr='val' attr2='val2'>
+     *     "elem" is an element name, "attr" and "attr2" are attribute names with
+     *     the values "val" and "val2", respectively.
+     *
+     *  3) A namespace declaration is a special attribute that is used to associate
+     *     a prefix with a URI (the namespace).  The meanings of element names and
+     *     attribute names that use that prefix are defined with respect to that
+     *     namespace.
+     *
+     *
+     */
+
+    /** The lookup table for error messages.   */
+    public Object[][] getContents() {
+        Object[][] contents = new Object[][] {
+            {   MsgKey.BAD_MSGKEY,
+                "Klju\u010d sporo\u010dila ''{0}'' ni v rezredu sporo\u010dila ''{1}''" },
+
+            {   MsgKey.BAD_MSGFORMAT,
+                "Format sporo\u010dila ''{0}'' v razredu sporo\u010dila ''{1}'' je spodletel." },
+
+            {   MsgKey.ER_SERIALIZER_NOT_CONTENTHANDLER,
+                "Razred serializerja ''{0}'' ne izvede org.xml.sax.ContentHandler." },
+
+            {   MsgKey.ER_RESOURCE_COULD_NOT_FIND,
+                    "Vira [ {0} ] ni mogo\u010de najti.\n {1}" },
+
+            {   MsgKey.ER_RESOURCE_COULD_NOT_LOAD,
+                    "Sredstva [ {0} ] ni bilo mogo\u010de nalo\u017eiti: {1} \n {2} \t {3}" },
+
+            {   MsgKey.ER_BUFFER_SIZE_LESSTHAN_ZERO,
+                    "Velikost medpomnilnika <=0" },
+
+            {   MsgKey.ER_INVALID_UTF16_SURROGATE,
+                    "Zaznan neveljaven nadomestek UTF-16: {0} ?" },
+
+            {   MsgKey.ER_OIERROR,
+                "Napaka V/I" },
+
+            {   MsgKey.ER_ILLEGAL_ATTRIBUTE_POSITION,
+                "Atributa {0} ne morem dodati za podrejenimi vozli\u0161\u010di ali pred izdelavo elementa.  Atribut bo prezrt." },
+
+            /*
+             * Note to translators:  The stylesheet contained a reference to a
+             * namespace prefix that was undefined.  The value of the substitution
+             * text is the name of the prefix.
+             */
+            {   MsgKey.ER_NAMESPACE_PREFIX,
+                "Imenski prostor za predpono ''{0}'' ni bil naveden." },
+
+            /*
+             * Note to translators:  This message is reported if the stylesheet
+             * being processed attempted to construct an XML document with an
+             * attribute in a place other than on an element.  The substitution text
+             * specifies the name of the attribute.
+             */
+            {   MsgKey.ER_STRAY_ATTRIBUTE,
+                "Atribut ''{0}'' je zunaj elementa." },
+
+            /*
+             * Note to translators:  As with the preceding message, a namespace
+             * declaration has the form of an attribute and is only permitted to
+             * appear on an element.  The substitution text {0} is the namespace
+             * prefix and {1} is the URI that was being used in the erroneous
+             * namespace declaration.
+             */
+            {   MsgKey.ER_STRAY_NAMESPACE,
+                "Deklaracija imenskega prostora ''{0}''=''{1}'' je zunaj elementa." },
+
+            {   MsgKey.ER_COULD_NOT_LOAD_RESOURCE,
+                "Ni bilo mogo\u010de nalo\u017eiti ''{0}'' (preverite CLASSPATH), trenutno se uporabljajo samo privzete vrednosti" },
+
+            {   MsgKey.ER_ILLEGAL_CHARACTER,
+                "Poskus izpisa znaka integralne vrednosti {0}, ki v navedenem izhodnem kodiranju {1} ni zastopan." },
+
+            {   MsgKey.ER_COULD_NOT_LOAD_METHOD_PROPERTY,
+                "Datoteke z lastnostmi ''{0}'' ni bilo mogo\u010de nalo\u017eiti za izhodno metodo ''{1}'' (preverite CLASSPATH)" },
+
+            {   MsgKey.ER_INVALID_PORT,
+                "Neveljavna \u0161tevilka vrat" },
+
+            {   MsgKey.ER_PORT_WHEN_HOST_NULL,
+                "Ko je gostitelj NULL, nastavitev vrat ni mogo\u010da" },
+
+            {   MsgKey.ER_HOST_ADDRESS_NOT_WELLFORMED,
+                "Naslov gostitelja ni pravilno oblikovan" },
+
+            {   MsgKey.ER_SCHEME_NOT_CONFORMANT,
+                "Shema ni skladna." },
+
+            {   MsgKey.ER_SCHEME_FROM_NULL_STRING,
+                "Ni mogo\u010de nastaviti sheme iz niza NULL" },
+
+            {   MsgKey.ER_PATH_CONTAINS_INVALID_ESCAPE_SEQUENCE,
+                "Pot vsebuje neveljavno zaporedje za izhod" },
+
+            {   MsgKey.ER_PATH_INVALID_CHAR,
+                "Pot vsebuje neveljaven znak: {0}" },
+
+            {   MsgKey.ER_FRAG_INVALID_CHAR,
+                "Fragment vsebuje neveljaven znak" },
+
+            {   MsgKey.ER_FRAG_WHEN_PATH_NULL,
+                "Ko je pot NULL, nastavitev fragmenta ni mogo\u010da" },
+
+            {   MsgKey.ER_FRAG_FOR_GENERIC_URI,
+                "Fragment je lahko nastavljen samo za splo\u0161ni URI" },
+
+            {   MsgKey.ER_NO_SCHEME_IN_URI,
+                "Ne najdem sheme v URI" },
+
+            {   MsgKey.ER_CANNOT_INIT_URI_EMPTY_PARMS,
+                "Ni mogo\u010de inicializirati URI-ja s praznimi parametri" },
+
+            {   MsgKey.ER_NO_FRAGMENT_STRING_IN_PATH,
+                "Fragment ne more biti hkrati naveden v poti in v fragmentu" },
+
+            {   MsgKey.ER_NO_QUERY_STRING_IN_PATH,
+                "Poizvedbeni niz ne more biti naveden v nizu poti in poizvedbenem nizu" },
+
+            {   MsgKey.ER_NO_PORT_IF_NO_HOST,
+                "Vrata ne morejo biti navedena, \u010de ni naveden gostitelj" },
+
+            {   MsgKey.ER_NO_USERINFO_IF_NO_HOST,
+                "Informacije o uporabniku ne morejo biti navedene, \u010de ni naveden gostitelj" },
+            {   MsgKey.ER_XML_VERSION_NOT_SUPPORTED,
+                "Opozorilo: Zahtevana razli\u010dica izhodnega dokumenta je ''{0}''.  Ta razli\u010dica XML ni podprta.  Razli\u010dica izhodnega dokumenta bo ''1.0''." },
+
+            {   MsgKey.ER_SCHEME_REQUIRED,
+                "Zahtevana je shema!" },
+
+            /*
+             * Note to translators:  The words 'Properties' and
+             * 'SerializerFactory' in this message are Java class names
+             * and should not be translated.
+             */
+            {   MsgKey.ER_FACTORY_PROPERTY_MISSING,
+                "Predmet Properties (lastnosti), ki je prene\u0161en v SerializerFactory, nima lastnosti ''{0}''." },
+
+            {   MsgKey.ER_ENCODING_NOT_SUPPORTED,
+                "Opozorilo:  Izvajalno okolje Java ne podpira kodiranja ''{0}''." },
+
+
+        };
+
+        return contents;
+    }
+}
diff --git a/src/org/apache/xml/serializer/utils/SerializerMessages_sv.java b/src/org/apache/xml/serializer/utils/SerializerMessages_sv.java
index 560eb6f..a300948 100644
--- a/src/org/apache/xml/serializer/utils/SerializerMessages_sv.java
+++ b/src/org/apache/xml/serializer/utils/SerializerMessages_sv.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/utils/SerializerMessages_tr.java b/src/org/apache/xml/serializer/utils/SerializerMessages_tr.java
index f24c257..68e1d74 100644
--- a/src/org/apache/xml/serializer/utils/SerializerMessages_tr.java
+++ b/src/org/apache/xml/serializer/utils/SerializerMessages_tr.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 1999-2006 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/utils/SerializerMessages_zh.java b/src/org/apache/xml/serializer/utils/SerializerMessages_zh.java
index d8439fe..6288805 100755
--- a/src/org/apache/xml/serializer/utils/SerializerMessages_zh.java
+++ b/src/org/apache/xml/serializer/utils/SerializerMessages_zh.java
@@ -1,202 +1,204 @@
-/*
- * Copyright 2004-2006 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: SerializerMessages_zh.java,v 1.7 2005/03/07 20:34:36 minchau Exp $
- */
-
-
-package org.apache.xml.serializer.utils;
-
-import java.util.ListResourceBundle;
-import java.util.Locale;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-/**
- * An instance of this class is a ListResourceBundle that
- * has the required getContents() method that returns
- * an array of message-key/message associations.
- * <p>
- * The message keys are defined in {@link MsgKey}. The
- * messages that those keys map to are defined here.
- * <p>
- * The messages in the English version are intended to be
- * translated.
- *
- * This class is not a public API, it is only public because it is
- * used in org.apache.xml.serializer.
- *
- * @xsl.usage internal
- */
-public class SerializerMessages_zh extends ListResourceBundle {
-
-    /*
-     * This file contains error and warning messages related to
-     * Serializer Error Handling.
-     *
-     *  General notes to translators:
-
-     *  1) A stylesheet is a description of how to transform an input XML document
-     *     into a resultant XML document (or HTML document or text).  The
-     *     stylesheet itself is described in the form of an XML document.
-
-     *
-     *  2) An element is a mark-up tag in an XML document; an attribute is a
-     *     modifier on the tag.  For example, in <elem attr='val' attr2='val2'>
-     *     "elem" is an element name, "attr" and "attr2" are attribute names with
-     *     the values "val" and "val2", respectively.
-     *
-     *  3) A namespace declaration is a special attribute that is used to associate
-     *     a prefix with a URI (the namespace).  The meanings of element names and
-     *     attribute names that use that prefix are defined with respect to that
-     *     namespace.
-     *
-     *
-     */
-
-    /** The lookup table for error messages.   */
-    public Object[][] getContents() {
-        Object[][] contents = new Object[][] {
-            {   MsgKey.BAD_MSGKEY,
-                "\u6d88\u606f\u5bc6\u94a5\u201c{0}\u201d\u4e0d\u5728\u6d88\u606f\u7c7b\u201c{1}\u201d\u4e2d" },
-
-            {   MsgKey.BAD_MSGFORMAT,
-                "\u6d88\u606f\u7c7b\u201c{1}\u201d\u4e2d\u7684\u6d88\u606f\u201c{0}\u201d\u7684\u683c\u5f0f\u65e0\u6548\u3002" },
-
-            {   MsgKey.ER_SERIALIZER_NOT_CONTENTHANDLER,
-                "\u4e32\u884c\u5668\u7c7b\u201c{0}\u201d\u4e0d\u80fd\u5b9e\u73b0 org.xml.sax.ContentHandler\u3002" },
-
-            {   MsgKey.ER_RESOURCE_COULD_NOT_FIND,
-                    "\u627e\u4e0d\u5230\u8d44\u6e90 [ {0} ]\u3002\n {1}" },
-
-            {   MsgKey.ER_RESOURCE_COULD_NOT_LOAD,
-                    "\u8d44\u6e90 [ {0} ] \u65e0\u6cd5\u88c5\u5165\uff1a{1} \n {2} \t {3}" },
-
-            {   MsgKey.ER_BUFFER_SIZE_LESSTHAN_ZERO,
-                    "\u7f13\u51b2\u533a\u5927\u5c0f <=0" },
-
-            {   MsgKey.ER_INVALID_UTF16_SURROGATE,
-                    "\u68c0\u6d4b\u5230\u65e0\u6548\u7684 UTF-16 \u8d85\u5927\u5b57\u7b26\u96c6\uff1a{0}\uff1f" },
-
-            {   MsgKey.ER_OIERROR,
-                "IO \u9519\u8bef" },
-
-            {   MsgKey.ER_ILLEGAL_ATTRIBUTE_POSITION,
-                "\u5728\u751f\u6210\u5b50\u8282\u70b9\u4e4b\u540e\u6216\u5728\u751f\u6210\u5143\u7d20\u4e4b\u524d\u65e0\u6cd5\u6dfb\u52a0\u5c5e\u6027 {0}\u3002\u5c06\u5ffd\u7565\u5c5e\u6027\u3002" },
-
-            /*
-             * Note to translators:  The stylesheet contained a reference to a
-             * namespace prefix that was undefined.  The value of the substitution
-             * text is the name of the prefix.
-             */
-            {   MsgKey.ER_NAMESPACE_PREFIX,
-                "\u5c1a\u672a\u58f0\u660e\u524d\u7f00\u201c{0}\u201d\u7684\u540d\u79f0\u7a7a\u95f4\u3002" },
-
-            /*
-             * Note to translators:  This message is reported if the stylesheet
-             * being processed attempted to construct an XML document with an
-             * attribute in a place other than on an element.  The substitution text
-             * specifies the name of the attribute.
-             */
-            {   MsgKey.ER_STRAY_ATTRIBUTE,
-                "\u5c5e\u6027\u201c{0}\u201d\u5728\u5143\u7d20\u5916\u3002" },
-
-            /*
-             * Note to translators:  As with the preceding message, a namespace
-             * declaration has the form of an attribute and is only permitted to
-             * appear on an element.  The substitution text {0} is the namespace
-             * prefix and {1} is the URI that was being used in the erroneous
-             * namespace declaration.
-             */
-            {   MsgKey.ER_STRAY_NAMESPACE,
-                "\u540d\u79f0\u7a7a\u95f4\u58f0\u660e\u201c{0}\u201d=\u201c{1}\u201d\u5728\u5143\u7d20\u5916\u3002" },
-
-            {   MsgKey.ER_COULD_NOT_LOAD_RESOURCE,
-                "\u65e0\u6cd5\u88c5\u5165\u201c{0}\u201d\uff08\u68c0\u67e5 CLASSPATH\uff09\uff0c\u73b0\u5728\u53ea\u4f7f\u7528\u7f3a\u7701\u503c" },
-
-            {   MsgKey.ER_ILLEGAL_CHARACTER,
-                "\u5c1d\u8bd5\u8f93\u51fa\u6574\u6570\u503c {0}\uff08\u5b83\u4e0d\u662f\u4ee5\u6307\u5b9a\u7684 {1} \u8f93\u51fa\u7f16\u7801\u8868\u793a\uff09\u7684\u5b57\u7b26\u3002" },
-
-            {   MsgKey.ER_COULD_NOT_LOAD_METHOD_PROPERTY,
-                "\u65e0\u6cd5\u4e3a\u8f93\u51fa\u65b9\u6cd5\u201c{1}\u201d\u88c5\u5165\u5c5e\u6027\u6587\u4ef6\u201c{0}\u201d\uff08\u68c0\u67e5 CLASSPATH\uff09" },
-
-            {   MsgKey.ER_INVALID_PORT,
-                "\u7aef\u53e3\u53f7\u65e0\u6548" },
-
-            {   MsgKey.ER_PORT_WHEN_HOST_NULL,
-                "\u4e3b\u673a\u4e3a\u7a7a\u65f6\uff0c\u65e0\u6cd5\u8bbe\u7f6e\u7aef\u53e3" },
-
-            {   MsgKey.ER_HOST_ADDRESS_NOT_WELLFORMED,
-                "\u4e3b\u673a\u4e0d\u662f\u683c\u5f0f\u6b63\u786e\u7684\u5730\u5740" },
-
-            {   MsgKey.ER_SCHEME_NOT_CONFORMANT,
-                "\u6a21\u5f0f\u4e0d\u4e00\u81f4\u3002" },
-
-            {   MsgKey.ER_SCHEME_FROM_NULL_STRING,
-                "\u65e0\u6cd5\u4ece\u7a7a\u5b57\u7b26\u4e32\u8bbe\u7f6e\u6a21\u5f0f" },
-
-            {   MsgKey.ER_PATH_CONTAINS_INVALID_ESCAPE_SEQUENCE,
-                "\u8def\u5f84\u5305\u542b\u65e0\u6548\u7684\u8f6c\u4e49\u5e8f\u5217" },
-
-            {   MsgKey.ER_PATH_INVALID_CHAR,
-                "\u8def\u5f84\u5305\u542b\u65e0\u6548\u7684\u5b57\u7b26\uff1a{0}" },
-
-            {   MsgKey.ER_FRAG_INVALID_CHAR,
-                "\u7247\u6bb5\u5305\u542b\u65e0\u6548\u7684\u5b57\u7b26" },
-
-            {   MsgKey.ER_FRAG_WHEN_PATH_NULL,
-                "\u8def\u5f84\u4e3a\u7a7a\u65f6\uff0c\u65e0\u6cd5\u8bbe\u7f6e\u7247\u6bb5" },
-
-            {   MsgKey.ER_FRAG_FOR_GENERIC_URI,
-                "\u53ea\u80fd\u4e3a\u7c7b\u5c5e URI \u8bbe\u7f6e\u7247\u6bb5" },
-
-            {   MsgKey.ER_NO_SCHEME_IN_URI,
-                "URI \u4e2d\u627e\u4e0d\u5230\u4efb\u4f55\u6a21\u5f0f" },
-
-            {   MsgKey.ER_CANNOT_INIT_URI_EMPTY_PARMS,
-                "\u4e0d\u80fd\u4ee5\u7a7a\u53c2\u6570\u521d\u59cb\u5316 URI" },
-
-            {   MsgKey.ER_NO_FRAGMENT_STRING_IN_PATH,
-                "\u8def\u5f84\u548c\u7247\u6bb5\u4e2d\u90fd\u4e0d\u80fd\u6307\u5b9a\u7247\u6bb5" },
-
-            {   MsgKey.ER_NO_QUERY_STRING_IN_PATH,
-                "\u8def\u5f84\u548c\u67e5\u8be2\u5b57\u7b26\u4e32\u4e2d\u4e0d\u80fd\u6307\u5b9a\u67e5\u8be2\u5b57\u7b26\u4e32" },
-
-            {   MsgKey.ER_NO_PORT_IF_NO_HOST,
-                "\u5982\u679c\u6ca1\u6709\u6307\u5b9a\u4e3b\u673a\uff0c\u5219\u4e0d\u53ef\u4ee5\u6307\u5b9a\u7aef\u53e3" },
-
-            {   MsgKey.ER_NO_USERINFO_IF_NO_HOST,
-                "\u5982\u679c\u6ca1\u6709\u6307\u5b9a\u4e3b\u673a\uff0c\u5219\u4e0d\u53ef\u4ee5\u6307\u5b9a\u7528\u6237\u4fe1\u606f" },
-            {   MsgKey.ER_XML_VERSION_NOT_SUPPORTED,
-                "\u8b66\u544a\uff1a\u8981\u6c42\u8f93\u51fa\u6587\u6863\u7684\u7248\u672c\u662f\u201c{0}\u201d\u3002\u4e0d\u652f\u6301\u6b64 XML \u7248\u672c\u3002\u8f93\u51fa\u6587\u6863\u7684\u7248\u672c\u5c06\u4f1a\u662f\u201c1.0\u201d\u3002" },
-
-            {   MsgKey.ER_SCHEME_REQUIRED,
-                "\u6a21\u5f0f\u662f\u5fc5\u9700\u7684\uff01" },
-
-            /*
-             * Note to translators:  The words 'Properties' and
-             * 'SerializerFactory' in this message are Java class names
-             * and should not be translated.
-             */
-            {   MsgKey.ER_FACTORY_PROPERTY_MISSING,
-                "\u4f20\u9012\u7ed9 SerializerFactory \u7684 Properties \u5bf9\u8c61\u4e0d\u5177\u6709\u5c5e\u6027\u201c{0}\u201d\u3002" },
-
-
-        };
-
-        return contents;
-    }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/*
+ * $Id: SerializerMessages_zh.java,v 1.7 2005/03/07 20:34:36 minchau Exp $
+ */
+
+
+package org.apache.xml.serializer.utils;
+
+import java.util.ListResourceBundle;
+import java.util.Locale;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+/**
+ * An instance of this class is a ListResourceBundle that
+ * has the required getContents() method that returns
+ * an array of message-key/message associations.
+ * <p>
+ * The message keys are defined in {@link MsgKey}. The
+ * messages that those keys map to are defined here.
+ * <p>
+ * The messages in the English version are intended to be
+ * translated.
+ *
+ * This class is not a public API, it is only public because it is
+ * used in org.apache.xml.serializer.
+ *
+ * @xsl.usage internal
+ */
+public class SerializerMessages_zh extends ListResourceBundle {
+
+    /*
+     * This file contains error and warning messages related to
+     * Serializer Error Handling.
+     *
+     *  General notes to translators:
+
+     *  1) A stylesheet is a description of how to transform an input XML document
+     *     into a resultant XML document (or HTML document or text).  The
+     *     stylesheet itself is described in the form of an XML document.
+
+     *
+     *  2) An element is a mark-up tag in an XML document; an attribute is a
+     *     modifier on the tag.  For example, in <elem attr='val' attr2='val2'>
+     *     "elem" is an element name, "attr" and "attr2" are attribute names with
+     *     the values "val" and "val2", respectively.
+     *
+     *  3) A namespace declaration is a special attribute that is used to associate
+     *     a prefix with a URI (the namespace).  The meanings of element names and
+     *     attribute names that use that prefix are defined with respect to that
+     *     namespace.
+     *
+     *
+     */
+
+    /** The lookup table for error messages.   */
+    public Object[][] getContents() {
+        Object[][] contents = new Object[][] {
+            {   MsgKey.BAD_MSGKEY,
+                "\u6d88\u606f\u5bc6\u94a5\u201c{0}\u201d\u4e0d\u5728\u6d88\u606f\u7c7b\u201c{1}\u201d\u4e2d" },
+
+            {   MsgKey.BAD_MSGFORMAT,
+                "\u6d88\u606f\u7c7b\u201c{1}\u201d\u4e2d\u7684\u6d88\u606f\u201c{0}\u201d\u7684\u683c\u5f0f\u65e0\u6548\u3002" },
+
+            {   MsgKey.ER_SERIALIZER_NOT_CONTENTHANDLER,
+                "\u4e32\u884c\u5668\u7c7b\u201c{0}\u201d\u4e0d\u80fd\u5b9e\u73b0 org.xml.sax.ContentHandler\u3002" },
+
+            {   MsgKey.ER_RESOURCE_COULD_NOT_FIND,
+                    "\u627e\u4e0d\u5230\u8d44\u6e90 [ {0} ]\u3002\n {1}" },
+
+            {   MsgKey.ER_RESOURCE_COULD_NOT_LOAD,
+                    "\u8d44\u6e90 [ {0} ] \u65e0\u6cd5\u88c5\u5165\uff1a{1} \n {2} \t {3}" },
+
+            {   MsgKey.ER_BUFFER_SIZE_LESSTHAN_ZERO,
+                    "\u7f13\u51b2\u533a\u5927\u5c0f <=0" },
+
+            {   MsgKey.ER_INVALID_UTF16_SURROGATE,
+                    "\u68c0\u6d4b\u5230\u65e0\u6548\u7684 UTF-16 \u8d85\u5927\u5b57\u7b26\u96c6\uff1a{0}\uff1f" },
+
+            {   MsgKey.ER_OIERROR,
+                "IO \u9519\u8bef" },
+
+            {   MsgKey.ER_ILLEGAL_ATTRIBUTE_POSITION,
+                "\u5728\u751f\u6210\u5b50\u8282\u70b9\u4e4b\u540e\u6216\u5728\u751f\u6210\u5143\u7d20\u4e4b\u524d\u65e0\u6cd5\u6dfb\u52a0\u5c5e\u6027 {0}\u3002\u5c06\u5ffd\u7565\u5c5e\u6027\u3002" },
+
+            /*
+             * Note to translators:  The stylesheet contained a reference to a
+             * namespace prefix that was undefined.  The value of the substitution
+             * text is the name of the prefix.
+             */
+            {   MsgKey.ER_NAMESPACE_PREFIX,
+                "\u5c1a\u672a\u58f0\u660e\u524d\u7f00\u201c{0}\u201d\u7684\u540d\u79f0\u7a7a\u95f4\u3002" },
+
+            /*
+             * Note to translators:  This message is reported if the stylesheet
+             * being processed attempted to construct an XML document with an
+             * attribute in a place other than on an element.  The substitution text
+             * specifies the name of the attribute.
+             */
+            {   MsgKey.ER_STRAY_ATTRIBUTE,
+                "\u5c5e\u6027\u201c{0}\u201d\u5728\u5143\u7d20\u5916\u3002" },
+
+            /*
+             * Note to translators:  As with the preceding message, a namespace
+             * declaration has the form of an attribute and is only permitted to
+             * appear on an element.  The substitution text {0} is the namespace
+             * prefix and {1} is the URI that was being used in the erroneous
+             * namespace declaration.
+             */
+            {   MsgKey.ER_STRAY_NAMESPACE,
+                "\u540d\u79f0\u7a7a\u95f4\u58f0\u660e\u201c{0}\u201d=\u201c{1}\u201d\u5728\u5143\u7d20\u5916\u3002" },
+
+            {   MsgKey.ER_COULD_NOT_LOAD_RESOURCE,
+                "\u65e0\u6cd5\u88c5\u5165\u201c{0}\u201d\uff08\u68c0\u67e5 CLASSPATH\uff09\uff0c\u73b0\u5728\u53ea\u4f7f\u7528\u7f3a\u7701\u503c" },
+
+            {   MsgKey.ER_ILLEGAL_CHARACTER,
+                "\u5c1d\u8bd5\u8f93\u51fa\u6574\u6570\u503c {0}\uff08\u5b83\u4e0d\u662f\u4ee5\u6307\u5b9a\u7684 {1} \u8f93\u51fa\u7f16\u7801\u8868\u793a\uff09\u7684\u5b57\u7b26\u3002" },
+
+            {   MsgKey.ER_COULD_NOT_LOAD_METHOD_PROPERTY,
+                "\u65e0\u6cd5\u4e3a\u8f93\u51fa\u65b9\u6cd5\u201c{1}\u201d\u88c5\u5165\u5c5e\u6027\u6587\u4ef6\u201c{0}\u201d\uff08\u68c0\u67e5 CLASSPATH\uff09" },
+
+            {   MsgKey.ER_INVALID_PORT,
+                "\u7aef\u53e3\u53f7\u65e0\u6548" },
+
+            {   MsgKey.ER_PORT_WHEN_HOST_NULL,
+                "\u4e3b\u673a\u4e3a\u7a7a\u65f6\uff0c\u65e0\u6cd5\u8bbe\u7f6e\u7aef\u53e3" },
+
+            {   MsgKey.ER_HOST_ADDRESS_NOT_WELLFORMED,
+                "\u4e3b\u673a\u4e0d\u662f\u683c\u5f0f\u6b63\u786e\u7684\u5730\u5740" },
+
+            {   MsgKey.ER_SCHEME_NOT_CONFORMANT,
+                "\u6a21\u5f0f\u4e0d\u4e00\u81f4\u3002" },
+
+            {   MsgKey.ER_SCHEME_FROM_NULL_STRING,
+                "\u65e0\u6cd5\u4ece\u7a7a\u5b57\u7b26\u4e32\u8bbe\u7f6e\u6a21\u5f0f" },
+
+            {   MsgKey.ER_PATH_CONTAINS_INVALID_ESCAPE_SEQUENCE,
+                "\u8def\u5f84\u5305\u542b\u65e0\u6548\u7684\u8f6c\u4e49\u5e8f\u5217" },
+
+            {   MsgKey.ER_PATH_INVALID_CHAR,
+                "\u8def\u5f84\u5305\u542b\u65e0\u6548\u7684\u5b57\u7b26\uff1a{0}" },
+
+            {   MsgKey.ER_FRAG_INVALID_CHAR,
+                "\u7247\u6bb5\u5305\u542b\u65e0\u6548\u7684\u5b57\u7b26" },
+
+            {   MsgKey.ER_FRAG_WHEN_PATH_NULL,
+                "\u8def\u5f84\u4e3a\u7a7a\u65f6\uff0c\u65e0\u6cd5\u8bbe\u7f6e\u7247\u6bb5" },
+
+            {   MsgKey.ER_FRAG_FOR_GENERIC_URI,
+                "\u53ea\u80fd\u4e3a\u7c7b\u5c5e URI \u8bbe\u7f6e\u7247\u6bb5" },
+
+            {   MsgKey.ER_NO_SCHEME_IN_URI,
+                "URI \u4e2d\u627e\u4e0d\u5230\u4efb\u4f55\u6a21\u5f0f" },
+
+            {   MsgKey.ER_CANNOT_INIT_URI_EMPTY_PARMS,
+                "\u4e0d\u80fd\u4ee5\u7a7a\u53c2\u6570\u521d\u59cb\u5316 URI" },
+
+            {   MsgKey.ER_NO_FRAGMENT_STRING_IN_PATH,
+                "\u8def\u5f84\u548c\u7247\u6bb5\u4e2d\u90fd\u4e0d\u80fd\u6307\u5b9a\u7247\u6bb5" },
+
+            {   MsgKey.ER_NO_QUERY_STRING_IN_PATH,
+                "\u8def\u5f84\u548c\u67e5\u8be2\u5b57\u7b26\u4e32\u4e2d\u4e0d\u80fd\u6307\u5b9a\u67e5\u8be2\u5b57\u7b26\u4e32" },
+
+            {   MsgKey.ER_NO_PORT_IF_NO_HOST,
+                "\u5982\u679c\u6ca1\u6709\u6307\u5b9a\u4e3b\u673a\uff0c\u5219\u4e0d\u53ef\u4ee5\u6307\u5b9a\u7aef\u53e3" },
+
+            {   MsgKey.ER_NO_USERINFO_IF_NO_HOST,
+                "\u5982\u679c\u6ca1\u6709\u6307\u5b9a\u4e3b\u673a\uff0c\u5219\u4e0d\u53ef\u4ee5\u6307\u5b9a\u7528\u6237\u4fe1\u606f" },
+            {   MsgKey.ER_XML_VERSION_NOT_SUPPORTED,
+                "\u8b66\u544a\uff1a\u8981\u6c42\u8f93\u51fa\u6587\u6863\u7684\u7248\u672c\u662f\u201c{0}\u201d\u3002\u4e0d\u652f\u6301\u6b64 XML \u7248\u672c\u3002\u8f93\u51fa\u6587\u6863\u7684\u7248\u672c\u5c06\u4f1a\u662f\u201c1.0\u201d\u3002" },
+
+            {   MsgKey.ER_SCHEME_REQUIRED,
+                "\u6a21\u5f0f\u662f\u5fc5\u9700\u7684\uff01" },
+
+            /*
+             * Note to translators:  The words 'Properties' and
+             * 'SerializerFactory' in this message are Java class names
+             * and should not be translated.
+             */
+            {   MsgKey.ER_FACTORY_PROPERTY_MISSING,
+                "\u4f20\u9012\u7ed9 SerializerFactory \u7684 Properties \u5bf9\u8c61\u4e0d\u5177\u6709\u5c5e\u6027\u201c{0}\u201d\u3002" },
+
+
+        };
+
+        return contents;
+    }
+}
diff --git a/src/org/apache/xml/serializer/utils/SerializerMessages_zh_CN.java b/src/org/apache/xml/serializer/utils/SerializerMessages_zh_CN.java
index 9900961..681147f 100644
--- a/src/org/apache/xml/serializer/utils/SerializerMessages_zh_CN.java
+++ b/src/org/apache/xml/serializer/utils/SerializerMessages_zh_CN.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 1999-2006 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/utils/SerializerMessages_zh_TW.java b/src/org/apache/xml/serializer/utils/SerializerMessages_zh_TW.java
index 33b3645..74f1b1f 100644
--- a/src/org/apache/xml/serializer/utils/SerializerMessages_zh_TW.java
+++ b/src/org/apache/xml/serializer/utils/SerializerMessages_zh_TW.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 1999-2006 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/utils/StringToIntTable.java b/src/org/apache/xml/serializer/utils/StringToIntTable.java
index 627a6c8..2bf6874 100644
--- a/src/org/apache/xml/serializer/utils/StringToIntTable.java
+++ b/src/org/apache/xml/serializer/utils/StringToIntTable.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/utils/SystemIDResolver.java b/src/org/apache/xml/serializer/utils/SystemIDResolver.java
index 5bae376..48906ea 100644
--- a/src/org/apache/xml/serializer/utils/SystemIDResolver.java
+++ b/src/org/apache/xml/serializer/utils/SystemIDResolver.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/utils/URI.java b/src/org/apache/xml/serializer/utils/URI.java
index 9100226..2c8794d 100644
--- a/src/org/apache/xml/serializer/utils/URI.java
+++ b/src/org/apache/xml/serializer/utils/URI.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/utils/Utils.java b/src/org/apache/xml/serializer/utils/Utils.java
index 0161931..b3da3be 100644
--- a/src/org/apache/xml/serializer/utils/Utils.java
+++ b/src/org/apache/xml/serializer/utils/Utils.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 2003-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/src/org/apache/xml/serializer/utils/WrappedRuntimeException.java b/src/org/apache/xml/serializer/utils/WrappedRuntimeException.java
index cff77b3..f4fce42 100644
--- a/src/org/apache/xml/serializer/utils/WrappedRuntimeException.java
+++ b/src/org/apache/xml/serializer/utils/WrappedRuntimeException.java
@@ -1,7 +1,9 @@
 /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the  "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
