diff --git a/build/build.properties.default b/build/build.properties.default
index ad380a9..c1abb73 100644
--- a/build/build.properties.default
+++ b/build/build.properties.default
@@ -12,10 +12,10 @@
 # ----- Vesion Control Flags -----
 version.major=5
 version.minor=5
-version.build=32
+version.build=33
 version.patch=0
 #Set the pretty version name
-version=5.5.32
+version=5.5.33
 
 # ----- Compile Control Flags -----
 compile.debug=on
diff --git a/connectors/util/java/org/apache/tomcat/util/ExceptionUtils.java b/connectors/util/java/org/apache/tomcat/util/ExceptionUtils.java
index 14f90f6..7546141 100644
--- a/connectors/util/java/org/apache/tomcat/util/ExceptionUtils.java
+++ b/connectors/util/java/org/apache/tomcat/util/ExceptionUtils.java
@@ -1,38 +1,38 @@
-/*
- * 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.
- */
-package org.apache.tomcat.util;
-
-/**
- * Utilities for handling Throwables and Exceptions.
- */
-public class ExceptionUtils {
-    
-    /**
-     * Checks whether the supplied Throwable is one that needs to be 
-     * rethrown and swallows all others.
-     * @param t the Throwable to check
-     */
-    public static void handleThrowable(Throwable t) {
-        if (t instanceof ThreadDeath) {
-            throw (ThreadDeath) t;
-        }
-        if (t instanceof VirtualMachineError) {
-            throw (VirtualMachineError) t;
-        }
-        // All other instances of Throwable will be silently swallowed
-    }
-}
+/*
+ * 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.
+ */
+package org.apache.tomcat.util;
+
+/**
+ * Utilities for handling Throwables and Exceptions.
+ */
+public class ExceptionUtils {
+    
+    /**
+     * Checks whether the supplied Throwable is one that needs to be 
+     * rethrown and swallows all others.
+     * @param t the Throwable to check
+     */
+    public static void handleThrowable(Throwable t) {
+        if (t instanceof ThreadDeath) {
+            throw (ThreadDeath) t;
+        }
+        if (t instanceof VirtualMachineError) {
+            throw (VirtualMachineError) t;
+        }
+        // All other instances of Throwable will be silently swallowed
+    }
+}
