diff --git a/batik-anim/src/main/java/org/apache/batik/anim/dom/SVGOMAnimatedPathData.java b/batik-anim/src/main/java/org/apache/batik/anim/dom/SVGOMAnimatedPathData.java
index f8d07e2..4c9d879 100644
--- a/batik-anim/src/main/java/org/apache/batik/anim/dom/SVGOMAnimatedPathData.java
+++ b/batik-anim/src/main/java/org/apache/batik/anim/dom/SVGOMAnimatedPathData.java
@@ -617,68 +617,60 @@
             switch (command) {
                 case SVGPathSeg.PATHSEG_ARC_ABS:
                 case SVGPathSeg.PATHSEG_ARC_REL:
-                    return new SVGPathSegArcItem
-                        (command, PATHSEG_LETTERS[command],
-                         parameters[j[0]++],
-                         parameters[j[0]++],
-                         parameters[j[0]++],
-                         parameters[j[0]++] != 0,
-                         parameters[j[0]++] != 0,
-                         parameters[j[0]++],
-                         parameters[j[0]++]);
+                    return new SVGPathSegArcItem(command, PATHSEG_LETTERS[command],
+                            parameters[j[0]++],
+                            parameters[j[0]++],
+                            parameters[j[0]++],
+                            parameters[j[0]++] != 0,
+                            parameters[j[0]++] != 0,
+                            parameters[j[0]++],
+                            parameters[j[0]++]);
                 case SVGPathSeg.PATHSEG_CLOSEPATH:
                     return new SVGPathSegItem
                         (command, PATHSEG_LETTERS[command]);
                 case SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS:
                 case SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL:
-                    return new SVGPathSegCurvetoCubicItem
-                        (command, PATHSEG_LETTERS[command],
-                         parameters[j[0]++],
-                         parameters[j[0]++],
-                         parameters[j[0]++],
-                         parameters[j[0]++],
-                         parameters[j[0]++],
-                         parameters[j[0]++]);
+                    return new SVGPathSegCurvetoCubicItem(command, PATHSEG_LETTERS[command],
+                            parameters[j[0]++],
+                            parameters[j[0]++],
+                            parameters[j[0]++],
+                            parameters[j[0]++],
+                            parameters[j[0]++],
+                            parameters[j[0]++]);
                 case SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS:
                 case SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL:
-                    return new SVGPathSegCurvetoCubicSmoothItem
-                        (command, PATHSEG_LETTERS[command],
-                         parameters[j[0]++],
-                         parameters[j[0]++],
-                         parameters[j[0]++],
-                         parameters[j[0]++]);
+                    return new SVGPathSegCurvetoCubicSmoothItem(command, PATHSEG_LETTERS[command],
+                            parameters[j[0]++],
+                            parameters[j[0]++],
+                            parameters[j[0]++],
+                            parameters[j[0]++]);
                 case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS:
                 case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL:
-                    return new SVGPathSegCurvetoQuadraticItem
-                        (command, PATHSEG_LETTERS[command],
-                         parameters[j[0]++],
-                         parameters[j[0]++],
-                         parameters[j[0]++],
-                         parameters[j[0]++]);
+                    return new SVGPathSegCurvetoQuadraticItem(command, PATHSEG_LETTERS[command],
+                            parameters[j[0]++],
+                            parameters[j[0]++],
+                            parameters[j[0]++],
+                            parameters[j[0]++]);
                 case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS:
                 case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL:
-                    return new SVGPathSegCurvetoQuadraticSmoothItem
-                        (command, PATHSEG_LETTERS[command],
-                         parameters[j[0]++],
-                         parameters[j[0]++]);
+                    return new SVGPathSegCurvetoQuadraticSmoothItem(command, PATHSEG_LETTERS[command],
+                            parameters[j[0]++],
+                            parameters[j[0]++]);
                 case SVGPathSeg.PATHSEG_LINETO_ABS:
                 case SVGPathSeg.PATHSEG_LINETO_REL:
                 case SVGPathSeg.PATHSEG_MOVETO_ABS:
                 case SVGPathSeg.PATHSEG_MOVETO_REL:
-                    return new SVGPathSegMovetoLinetoItem
-                        (command, PATHSEG_LETTERS[command],
-                         parameters[j[0]++],
-                         parameters[j[0]++]);
+                    return new SVGPathSegMovetoLinetoItem(command, PATHSEG_LETTERS[command],
+                            parameters[j[0]++],
+                            parameters[j[0]++]);
                 case SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL:
                 case SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS:
-                    return new SVGPathSegLinetoHorizontalItem
-                        (command, PATHSEG_LETTERS[command],
-                         parameters[j[0]++]);
+                    return new SVGPathSegLinetoHorizontalItem(command, PATHSEG_LETTERS[command],
+                            parameters[j[0]++]);
                 case SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL:
                 case SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS:
-                    return new SVGPathSegLinetoVerticalItem
-                        (command, PATHSEG_LETTERS[command],
-                         parameters[j[0]++]);
+                    return new SVGPathSegLinetoVerticalItem(command, PATHSEG_LETTERS[command],
+                            parameters[j[0]++]);
             }
             return null;
         }
diff --git a/batik-anim/src/main/java/org/apache/batik/anim/dom/SVGOMDocument.java b/batik-anim/src/main/java/org/apache/batik/anim/dom/SVGOMDocument.java
index 1bdb938..dcdff5f 100644
--- a/batik-anim/src/main/java/org/apache/batik/anim/dom/SVGOMDocument.java
+++ b/batik-anim/src/main/java/org/apache/batik/anim/dom/SVGOMDocument.java
@@ -549,7 +549,7 @@
     /**
      * DOM node inserted listener wrapper.
      */
-    protected class DOMNodeInsertedListenerWrapper implements EventListener {
+    protected static class DOMNodeInsertedListenerWrapper implements EventListener {
 
         /**
          * The CSSNavigableDocumentListener.
@@ -575,7 +575,7 @@
     /**
      * DOM node removed listener wrapper.
      */
-    protected class DOMNodeRemovedListenerWrapper implements EventListener {
+    protected static class DOMNodeRemovedListenerWrapper implements EventListener {
 
         /**
          * The CSSNavigableDocumentListener.
@@ -601,7 +601,7 @@
     /**
      * DOM subtree modified listener wrapper.
      */
-    protected class DOMSubtreeModifiedListenerWrapper implements EventListener {
+    protected static class DOMSubtreeModifiedListenerWrapper implements EventListener {
 
         /**
          * The CSSNavigableDocumentListener.
@@ -628,7 +628,7 @@
     /**
      * DOM character data modified listener wrapper.
      */
-    protected class DOMCharacterDataModifiedListenerWrapper
+    protected static class DOMCharacterDataModifiedListenerWrapper
             implements EventListener {
 
         /**
@@ -656,7 +656,7 @@
     /**
      * DOM attribute modified listener wrapper.
      */
-    protected class DOMAttrModifiedListenerWrapper implements EventListener {
+    protected static class DOMAttrModifiedListenerWrapper implements EventListener {
 
         /**
          * The CSSNavigableDocumentListener.
diff --git a/batik-awt-util/src/main/java/org/apache/batik/ext/awt/image/rendered/LRUCache.java b/batik-awt-util/src/main/java/org/apache/batik/ext/awt/image/rendered/LRUCache.java
index f78cd90..a84d29a 100644
--- a/batik-awt-util/src/main/java/org/apache/batik/ext/awt/image/rendered/LRUCache.java
+++ b/batik-awt-util/src/main/java/org/apache/batik/ext/awt/image/rendered/LRUCache.java
@@ -54,7 +54,7 @@
      * Interface for nodes in the LRU cache, basicly nodes in a doubly
      * linked list.
      */
-        public class LRUNode extends DoublyLinkedList.Node {
+        public static class LRUNode extends DoublyLinkedList.Node {
                 private   LRUObj  obj  = null;
                 public    LRUObj  getObj ()               { return obj; }
                 protected void    setObj (LRUObj  newObj) {
diff --git a/batik-bridge/src/main/java/org/apache/batik/bridge/AbstractSVGGradientElementBridge.java b/batik-bridge/src/main/java/org/apache/batik/bridge/AbstractSVGGradientElementBridge.java
index 9b59651..0d1fd16 100644
--- a/batik-bridge/src/main/java/org/apache/batik/bridge/AbstractSVGGradientElementBridge.java
+++ b/batik-bridge/src/main/java/org/apache/batik/bridge/AbstractSVGGradientElementBridge.java
@@ -25,7 +25,6 @@
 import java.util.LinkedList;
 import java.util.List;
 
-import org.apache.batik.dom.AbstractNode;
 import org.apache.batik.dom.util.XLinkSupport;
 import org.apache.batik.ext.awt.MultipleGradientPaint;
 import org.apache.batik.gvt.GraphicsNode;
diff --git a/batik-bridge/src/main/java/org/apache/batik/bridge/Location.java b/batik-bridge/src/main/java/org/apache/batik/bridge/Location.java
index d28c1b0..f0c67d6 100644
--- a/batik-bridge/src/main/java/org/apache/batik/bridge/Location.java
+++ b/batik-bridge/src/main/java/org/apache/batik/bridge/Location.java
@@ -18,8 +18,6 @@
  */
 package org.apache.batik.bridge;
 
-import org.apache.batik.dom.AbstractDocument;
-
 /**
  * This class implements the org.apache.batik.w3c.dom.Location interface for Batik
  *
diff --git a/batik-bridge/src/main/java/org/apache/batik/bridge/SVGAnimationEngine.java b/batik-bridge/src/main/java/org/apache/batik/bridge/SVGAnimationEngine.java
index f67a7be..5fa294a 100644
--- a/batik-bridge/src/main/java/org/apache/batik/bridge/SVGAnimationEngine.java
+++ b/batik-bridge/src/main/java/org/apache/batik/bridge/SVGAnimationEngine.java
@@ -151,9 +151,9 @@
      */
     protected Factory[] factories = {
         null, // TYPE_UNKNOWN
-        new AnimatableIntegerValueFactory(), // TYPE_INTEGER
-        new AnimatableNumberValueFactory(), // TYPE_NUMBER
-        new AnimatableLengthValueFactory(), // TYPE_LENGTH
+            new AnimatableIntegerValueFactory(), // TYPE_INTEGER
+            new AnimatableNumberValueFactory(), // TYPE_NUMBER
+            new AnimatableLengthValueFactory(), // TYPE_LENGTH
         null, // TYPE_NUMBER_OPTIONAL_NUMBER
         new AnimatableAngleValueFactory(), // TYPE_ANGLE
         new AnimatableColorValueFactory(), // TYPE_COLOR
@@ -163,8 +163,8 @@
         uncomputedAnimatableStringValueFactory, // TYPE_URI
         null, // TYPE_FREQUENCY
         null, // TYPE_TIME
-        new AnimatableNumberListValueFactory(), // TYPE_NUMBER_LIST
-        new AnimatableLengthListValueFactory(), // TYPE_LENGTH_LIST
+            new AnimatableNumberListValueFactory(), // TYPE_NUMBER_LIST
+            new AnimatableLengthListValueFactory(), // TYPE_LENGTH_LIST
         uncomputedAnimatableStringValueFactory, // TYPE_IDENT
         uncomputedAnimatableStringValueFactory, // TYPE_CDATA
         animatableLengthOrIdentFactory, // TYPE_LENGTH_OR_INHERIT
@@ -172,7 +172,7 @@
         uncomputedAnimatableStringValueFactory, // TYPE_CLIP_VALUE
         uncomputedAnimatableStringValueFactory, // TYPE_URI_OR_IDENT
         uncomputedAnimatableStringValueFactory, // TYPE_CURSOR_VALUE
-        new AnimatablePathDataFactory(), // TYPE_PATH_DATA
+            new AnimatablePathDataFactory(), // TYPE_PATH_DATA
         uncomputedAnimatableStringValueFactory, // TYPE_ENABLE_BACKGROUND_VALUE
         null, // TYPE_TIME_VALUE_LIST
         animatableNumberOrIdentFactory, // TYPE_NUMBER_OR_INHERIT
@@ -181,8 +181,8 @@
         new AnimatableNumberOrIdentFactory(true), // TYPE_FONT_WEIGHT_VALUE
         new AnimatableAngleOrIdentFactory(), // TYPE_ANGLE_OR_IDENT
         null, // TYPE_KEY_SPLINES_VALUE
-        new AnimatablePointListValueFactory(), // TYPE_POINTS_VALUE
-        new AnimatablePreserveAspectRatioValueFactory(), // TYPE_PRESERVE_ASPECT_RATIO_VALUE
+            new AnimatablePointListValueFactory(), // TYPE_POINTS_VALUE
+            new AnimatablePreserveAspectRatioValueFactory(), // TYPE_PRESERVE_ASPECT_RATIO_VALUE
         null, // TYPE_URI_LIST
         uncomputedAnimatableStringValueFactory, // TYPE_LENGTH_LIST_OR_IDENT
         null, // TYPE_CHARACTER_OR_UNICODE_RANGE_LIST
@@ -197,10 +197,10 @@
         animatableNumberOrIdentFactory, // TYPE_FONT_SIZE_ADJUST_VALUE
         null, // TYPE_LANG_VALUE
         null, // TYPE_LANG_LIST_VALUE
-        new AnimatableNumberOrPercentageValueFactory(), // TYPE_NUMBER_OR_PERCENTAGE
+            new AnimatableNumberOrPercentageValueFactory(), // TYPE_NUMBER_OR_PERCENTAGE
         null, // TYPE_TIMING_SPECIFIER_LIST
-        new AnimatableBooleanValueFactory(), // TYPE_BOOLEAN
-        new AnimatableRectValueFactory() // TYPE_RECT
+            new AnimatableBooleanValueFactory(), // TYPE_BOOLEAN
+            new AnimatableRectValueFactory() // TYPE_RECT
     };
 
     /**
@@ -1091,7 +1091,7 @@
     /**
      * Factory class for {@link AnimatableBooleanValue}s.
      */
-    protected class AnimatableBooleanValueFactory implements Factory {
+    protected static class AnimatableBooleanValueFactory implements Factory {
 
         /**
          * Creates a new AnimatableValue from a string.
@@ -1114,7 +1114,7 @@
     /**
      * Factory class for {@link AnimatableIntegerValue}s.
      */
-    protected class AnimatableIntegerValueFactory implements Factory {
+    protected static class AnimatableIntegerValueFactory implements Factory {
 
         /**
          * Creates a new AnimatableValue from a string.
@@ -1137,7 +1137,7 @@
     /**
      * Factory class for {@link AnimatableNumberValue}s.
      */
-    protected class AnimatableNumberValueFactory implements Factory {
+    protected static class AnimatableNumberValueFactory implements Factory {
 
         /**
          * Creates a new AnimatableValue from a string.
@@ -1159,7 +1159,7 @@
     /**
      * Factory class for {@link AnimatableNumberOrPercentageValue}s.
      */
-    protected class AnimatableNumberOrPercentageValueFactory
+    protected static class AnimatableNumberOrPercentageValueFactory
             implements Factory {
 
         /**
@@ -1200,7 +1200,7 @@
     /**
      * Factory class for {@link AnimatablePreserveAspectRatioValue}s.
      */
-    protected class AnimatablePreserveAspectRatioValueFactory implements Factory {
+    protected static class AnimatablePreserveAspectRatioValueFactory implements Factory {
 
         /**
          * The parsed 'align' value.
@@ -1353,7 +1353,7 @@
     /**
      * Factory class for {@link AnimatableLengthValue}s.
      */
-    protected class AnimatableLengthValueFactory implements Factory {
+    protected static class AnimatableLengthValueFactory implements Factory {
 
         /**
          * The parsed length unit type.
@@ -1447,7 +1447,7 @@
     /**
      * Factory class for {@link AnimatableLengthListValue}s.
      */
-    protected class AnimatableLengthListValueFactory implements Factory {
+    protected static class AnimatableLengthListValueFactory implements Factory {
 
         /**
          * Parser for length lists.
@@ -1498,7 +1498,7 @@
     /**
      * Factory class for {@link AnimatableNumberListValue}s.
      */
-    protected class AnimatableNumberListValueFactory implements Factory {
+    protected static class AnimatableNumberListValueFactory implements Factory {
 
         /**
          * Parser for number lists.
@@ -1545,7 +1545,7 @@
     /**
      * Factory class for {@link AnimatableNumberListValue}s.
      */
-    protected class AnimatableRectValueFactory implements Factory {
+    protected static class AnimatableRectValueFactory implements Factory {
 
         /**
          * Parser for number lists.
@@ -1596,7 +1596,7 @@
     /**
      * Factory class for {@link AnimatablePointListValue}s.
      */
-    protected class AnimatablePointListValueFactory implements Factory {
+    protected static class AnimatablePointListValueFactory implements Factory {
 
         /**
          * Parser for point lists.
@@ -1643,7 +1643,7 @@
     /**
      * Factory class for {@link AnimatablePathDataValue}s.
      */
-    protected class AnimatablePathDataFactory implements Factory {
+    protected static class AnimatablePathDataFactory implements Factory {
 
         /**
          * Parser for path data.
@@ -1691,7 +1691,7 @@
     /**
      * Factory class for {@link AnimatableStringValue}s.
      */
-    protected class UncomputedAnimatableStringValueFactory implements Factory {
+    protected static class UncomputedAnimatableStringValueFactory implements Factory {
 
         public AnimatableValue createValue(AnimationTarget target, String ns,
                                            String ln, boolean isCSS, String s) {
diff --git a/batik-bridge/src/main/java/org/apache/batik/bridge/SVGColorProfileElementBridge.java b/batik-bridge/src/main/java/org/apache/batik/bridge/SVGColorProfileElementBridge.java
index 6990022..e963939 100644
--- a/batik-bridge/src/main/java/org/apache/batik/bridge/SVGColorProfileElementBridge.java
+++ b/batik-bridge/src/main/java/org/apache/batik/bridge/SVGColorProfileElementBridge.java
@@ -21,7 +21,6 @@
 import java.awt.color.ICC_Profile;
 import java.io.IOException;
 
-import org.apache.batik.dom.AbstractNode;
 import org.apache.batik.dom.util.XLinkSupport;
 import org.apache.batik.ext.awt.color.NamedProfileCache;
 import org.apache.batik.util.ParsedURL;
diff --git a/batik-bridge/src/main/java/org/apache/batik/bridge/SVGTextElementBridge.java b/batik-bridge/src/main/java/org/apache/batik/bridge/SVGTextElementBridge.java
index 5a9dfec..4b7072a 100644
--- a/batik-bridge/src/main/java/org/apache/batik/bridge/SVGTextElementBridge.java
+++ b/batik-bridge/src/main/java/org/apache/batik/bridge/SVGTextElementBridge.java
@@ -1981,7 +1981,7 @@
      * Implementation of <code>SVGContext</code> for
      * the children of &lt;text&gt;
      */
-    public abstract class AbstractTextChildSVGContext
+    public abstract static class AbstractTextChildSVGContext
             extends AnimatableSVGBridge {
 
         /** Text bridge parent */
diff --git a/batik-bridge/src/main/java/org/apache/batik/bridge/SVGUtilities.java b/batik-bridge/src/main/java/org/apache/batik/bridge/SVGUtilities.java
index 74d749f..7d52874 100644
--- a/batik-bridge/src/main/java/org/apache/batik/bridge/SVGUtilities.java
+++ b/batik-bridge/src/main/java/org/apache/batik/bridge/SVGUtilities.java
@@ -27,7 +27,6 @@
 import java.util.StringTokenizer;
 
 import org.apache.batik.css.engine.CSSEngine;
-import org.apache.batik.dom.AbstractNode;
 import org.apache.batik.dom.util.XLinkSupport;
 import org.apache.batik.dom.util.XMLSupport;
 import org.apache.batik.gvt.GraphicsNode;
diff --git a/batik-bridge/src/main/java/org/apache/batik/bridge/StrokingTextPainter.java b/batik-bridge/src/main/java/org/apache/batik/bridge/StrokingTextPainter.java
index 0979e8c..8f21a22 100644
--- a/batik-bridge/src/main/java/org/apache/batik/bridge/StrokingTextPainter.java
+++ b/batik-bridge/src/main/java/org/apache/batik/bridge/StrokingTextPainter.java
@@ -1607,7 +1607,7 @@
 
     // inner classes
 
-    public class TextChunk {
+    public static class TextChunk {
 
         // the following denote indices of text runs over all chunks of text node,
         // where index 0 is first run of first chunk of text node; the begin index
@@ -1631,7 +1631,7 @@
      * Inner convenience class for associating a TextLayout for
      * sub-spans, and the ACI which iterates over that subspan.
      */
-    public class TextRun {
+    public static class TextRun {
 
         protected AttributedCharacterIterator aci;      // source aci
         protected TextSpanLayout layout;                // layout object
diff --git a/batik-bridge/src/main/java/org/apache/batik/bridge/URIResolver.java b/batik-bridge/src/main/java/org/apache/batik/bridge/URIResolver.java
index ba44317..60b48e5 100644
--- a/batik-bridge/src/main/java/org/apache/batik/bridge/URIResolver.java
+++ b/batik-bridge/src/main/java/org/apache/batik/bridge/URIResolver.java
@@ -22,7 +22,6 @@
 import java.net.MalformedURLException;
 
 import org.apache.batik.anim.dom.SVGOMDocument;
-import org.apache.batik.dom.AbstractNode;
 import org.apache.batik.util.ParsedURL;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
diff --git a/batik-bridge/src/main/java/org/apache/batik/bridge/UpdateManager.java b/batik-bridge/src/main/java/org/apache/batik/bridge/UpdateManager.java
index 5d315b7..4092322 100644
--- a/batik-bridge/src/main/java/org/apache/batik/bridge/UpdateManager.java
+++ b/batik-bridge/src/main/java/org/apache/batik/bridge/UpdateManager.java
@@ -602,7 +602,7 @@
         outOfDateTime = 0;
     }
 
-    protected class SuspensionInfo {
+    protected static class SuspensionInfo {
         /**
          * The index of this redraw suspension
          */
@@ -621,7 +621,7 @@
         public long getResumeMilli() { return resumeMilli; }
     }
 
-    protected class RepaintTimerTask extends TimerTask {
+    protected static class RepaintTimerTask extends TimerTask {
         UpdateManager um;
         RepaintTimerTask(UpdateManager um) {
             this.um = um;
@@ -675,7 +675,7 @@
     int addRedrawSuspension(int max_wait_milliseconds) {
         long resumeTime = System.currentTimeMillis() + max_wait_milliseconds;
         SuspensionInfo si = new SuspensionInfo(nextSuspensionIndex++,
-                                               resumeTime);
+                resumeTime);
         if (resumeTime > allResumeTime) {
             allResumeTime = resumeTime;
             // System.err.println("Added AllRes Time: " + allResumeTime);
diff --git a/batik-bridge/src/main/java/org/apache/batik/bridge/svg12/DefaultXBLManager.java b/batik-bridge/src/main/java/org/apache/batik/bridge/svg12/DefaultXBLManager.java
index 10ca774..ad551f9 100644
--- a/batik-bridge/src/main/java/org/apache/batik/bridge/svg12/DefaultXBLManager.java
+++ b/batik-bridge/src/main/java/org/apache/batik/bridge/svg12/DefaultXBLManager.java
@@ -447,7 +447,7 @@
             }
         }
         defRec = new DefinitionRecord(namespaceURI, localName, def,
-                                      template, imp);
+                template, imp);
         defs.add(defRec);
         definitions.put(def, imp, defRec);
         addDefinitionElementListeners(def, ir);
@@ -1186,7 +1186,7 @@
     /**
      * Record class for storing information about an XBL definition.
      */
-    protected class DefinitionRecord implements Comparable {
+    protected static class DefinitionRecord implements Comparable {
 
         /**
          * The namespace URI.
@@ -1376,7 +1376,7 @@
     /**
      * DOM node removed listener for imported XBL trees.
      */
-    protected class ImportRemovedListener implements EventListener {
+    protected static class ImportRemovedListener implements EventListener {
 
         /**
          * List of definition elements to be removed from the document.
diff --git a/batik-bridge/src/main/java/org/apache/batik/bridge/svg12/SVG12BridgeContext.java b/batik-bridge/src/main/java/org/apache/batik/bridge/svg12/SVG12BridgeContext.java
index b61d992..5c3dddb 100644
--- a/batik-bridge/src/main/java/org/apache/batik/bridge/svg12/SVG12BridgeContext.java
+++ b/batik-bridge/src/main/java/org/apache/batik/bridge/svg12/SVG12BridgeContext.java
@@ -245,8 +245,8 @@
              "DOMNodeRemoved",
              domNodeRemovedEventListener, true);
 
-        domCharacterDataModifiedEventListener = 
-            new EventListenerWrapper(new DOMCharacterDataModifiedEventListener());
+        domCharacterDataModifiedEventListener =
+                new EventListenerWrapper(new DOMCharacterDataModifiedEventListener());
         evtSupport.addImplementationEventListenerNS
             (XMLConstants.XML_EVENTS_NAMESPACE_URI,
              "DOMCharacterDataModified",
@@ -467,7 +467,7 @@
      * Wrapper for DOM event listeners so that they will see only
      * original events (i.e., not retargetted).
      */
-    protected class EventListenerWrapper implements EventListener {
+    protected static class EventListenerWrapper implements EventListener {
 
         /**
          * The wrapped listener.
diff --git a/batik-bridge/src/main/java/org/apache/batik/bridge/svg12/SVG12BridgeEventSupport.java b/batik-bridge/src/main/java/org/apache/batik/bridge/svg12/SVG12BridgeEventSupport.java
index 2689b05..003c4d7 100644
--- a/batik-bridge/src/main/java/org/apache/batik/bridge/svg12/SVG12BridgeEventSupport.java
+++ b/batik-bridge/src/main/java/org/apache/batik/bridge/svg12/SVG12BridgeEventSupport.java
@@ -25,7 +25,6 @@
 import org.apache.batik.bridge.BridgeEventSupport;
 import org.apache.batik.bridge.FocusManager;
 import org.apache.batik.bridge.UserAgent;
-import org.apache.batik.dom.events.AbstractEvent;
 import org.apache.batik.dom.events.DOMKeyboardEvent;
 import org.apache.batik.dom.events.DOMMouseEvent;
 import org.apache.batik.dom.events.DOMTextEvent;
diff --git a/batik-bridge/src/main/java/org/apache/batik/bridge/svg12/SVG12FocusManager.java b/batik-bridge/src/main/java/org/apache/batik/bridge/svg12/SVG12FocusManager.java
index 368bf8e..c75faeb 100644
--- a/batik-bridge/src/main/java/org/apache/batik/bridge/svg12/SVG12FocusManager.java
+++ b/batik-bridge/src/main/java/org/apache/batik/bridge/svg12/SVG12FocusManager.java
@@ -21,7 +21,6 @@
 import org.apache.batik.anim.dom.XBLEventSupport;
 import org.apache.batik.bridge.FocusManager;
 import org.apache.batik.dom.AbstractNode;
-import org.apache.batik.dom.events.AbstractEvent;
 import org.apache.batik.dom.events.DOMUIEvent;
 import org.apache.batik.dom.events.EventSupport;
 import org.apache.batik.util.XMLConstants;
diff --git a/batik-css/src/main/java/org/apache/batik/css/dom/CSSOMValue.java b/batik-css/src/main/java/org/apache/batik/css/dom/CSSOMValue.java
index 72725a3..656e865 100644
--- a/batik-css/src/main/java/org/apache/batik/css/dom/CSSOMValue.java
+++ b/batik-css/src/main/java/org/apache/batik/css/dom/CSSOMValue.java
@@ -726,7 +726,7 @@
     /**
      * This class provides an abstract implementation of a ModificationHandler.
      */
-    public abstract class AbstractModificationHandler
+    public abstract static class AbstractModificationHandler
         implements ModificationHandler {
 
         /**
diff --git a/batik-dom/src/main/java/org/apache/batik/dom/AbstractAttr.java b/batik-dom/src/main/java/org/apache/batik/dom/AbstractAttr.java
index 80b1d65..6d9d2ab 100644
--- a/batik-dom/src/main/java/org/apache/batik/dom/AbstractAttr.java
+++ b/batik-dom/src/main/java/org/apache/batik/dom/AbstractAttr.java
@@ -338,7 +338,7 @@
     /**
      * Inner class to hold type information about this attribute.
      */
-    public class AttrTypeInfo implements TypeInfo {
+    public static class AttrTypeInfo implements TypeInfo {
 
         /**
          * Type namespace.
diff --git a/batik-dom/src/main/java/org/apache/batik/dom/AbstractDocument.java b/batik-dom/src/main/java/org/apache/batik/dom/AbstractDocument.java
index 3575578..5ea6568 100644
--- a/batik-dom/src/main/java/org/apache/batik/dom/AbstractDocument.java
+++ b/batik-dom/src/main/java/org/apache/batik/dom/AbstractDocument.java
@@ -1702,16 +1702,16 @@
                                       Exception e) {
         try {
             return new DocumentError(type,
-                                     severity,
-                                     getCurrentDocument().formatMessage(key, args),
-                                     related,
-                                     e);
+                    severity,
+                    getCurrentDocument().formatMessage(key, args),
+                    related,
+                    e);
         } catch (Exception ex) {
             return new DocumentError(type,
-                                     severity,
-                                     key,
-                                     related,
-                                     e);
+                    severity,
+                    key,
+                    related,
+                    e);
         }
     }
 
@@ -1746,7 +1746,7 @@
     /**
      * DOMError implementation.
      */
-    protected class DocumentError implements DOMError {
+    protected static class DocumentError implements DOMError {
 
         /**
          * The error type.
@@ -2580,7 +2580,7 @@
     /**
      * An XPathNSResolver that uses Node.lookupNamespaceURI.
      */
-    protected class XPathNodeNSResolver implements XPathNSResolver {
+    protected static class XPathNodeNSResolver implements XPathNSResolver {
 
         /**
          * The context node for namespace prefix resolution.
diff --git a/batik-dom/src/main/java/org/apache/batik/dom/AbstractElement.java b/batik-dom/src/main/java/org/apache/batik/dom/AbstractElement.java
index d692f29..c9e28a3 100644
--- a/batik-dom/src/main/java/org/apache/batik/dom/AbstractElement.java
+++ b/batik-dom/src/main/java/org/apache/batik/dom/AbstractElement.java
@@ -1107,7 +1107,7 @@
     /**
      * Inner class to hold type information about this element.
      */
-    public class ElementTypeInfo implements TypeInfo {
+    public static class ElementTypeInfo implements TypeInfo {
 
         /**
          * Type namespace.
diff --git a/batik-dom/src/main/java/org/apache/batik/dom/events/EventListenerList.java b/batik-dom/src/main/java/org/apache/batik/dom/events/EventListenerList.java
index cced6a8..c2de62d 100644
--- a/batik-dom/src/main/java/org/apache/batik/dom/events/EventListenerList.java
+++ b/batik-dom/src/main/java/org/apache/batik/dom/events/EventListenerList.java
@@ -176,7 +176,7 @@
     /**
      * EventListenerTable entry class.
      */
-    public class Entry {
+    public static class Entry {
         
         /**
          * The event listener.
diff --git a/batik-extension/src/main/java/org/apache/batik/extension/svg/BatikFlowTextElementBridge.java b/batik-extension/src/main/java/org/apache/batik/extension/svg/BatikFlowTextElementBridge.java
index 9ba8342..d6096ca 100644
--- a/batik-extension/src/main/java/org/apache/batik/extension/svg/BatikFlowTextElementBridge.java
+++ b/batik-extension/src/main/java/org/apache/batik/extension/svg/BatikFlowTextElementBridge.java
@@ -26,7 +26,6 @@
 import java.text.AttributedString;
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
diff --git a/batik-gui-util/src/main/java/org/apache/batik/util/gui/MemoryMonitor.java b/batik-gui-util/src/main/java/org/apache/batik/util/gui/MemoryMonitor.java
index 1159446..b5cc2a7 100644
--- a/batik-gui-util/src/main/java/org/apache/batik/util/gui/MemoryMonitor.java
+++ b/batik-gui-util/src/main/java/org/apache/batik/util/gui/MemoryMonitor.java
@@ -168,7 +168,7 @@
     /**
      * The action associated with the 'Collect' button of the memory monitor.
      */
-    protected class CollectButtonAction extends AbstractAction {
+    protected static class CollectButtonAction extends AbstractAction {
         public void actionPerformed(ActionEvent e) {
             System.gc();
         }
diff --git a/batik-gvt/src/main/java/org/apache/batik/gvt/UpdateTracker.java b/batik-gvt/src/main/java/org/apache/batik/gvt/UpdateTracker.java
index 829a9fe..dd9bbdd 100644
--- a/batik-gvt/src/main/java/org/apache/batik/gvt/UpdateTracker.java
+++ b/batik-gvt/src/main/java/org/apache/batik/gvt/UpdateTracker.java
@@ -282,7 +282,7 @@
         fromBounds.put(gnWRef, r2d);
     }
 
-    class ChngSrcRect extends Rectangle2D.Float {
+    static class ChngSrcRect extends Rectangle2D.Float {
         ChngSrcRect(Rectangle2D r2d) {
             super((float)r2d.getX(), (float)r2d.getY(),
                   (float)r2d.getWidth(), (float)r2d.getHeight());
diff --git a/batik-gvt/src/main/java/org/apache/batik/gvt/text/GVTACIImpl.java b/batik-gvt/src/main/java/org/apache/batik/gvt/text/GVTACIImpl.java
index b894779..0c04164 100644
--- a/batik-gvt/src/main/java/org/apache/batik/gvt/text/GVTACIImpl.java
+++ b/batik-gvt/src/main/java/org/apache/batik/gvt/text/GVTACIImpl.java
@@ -386,7 +386,7 @@
      * SVGAttributedCharacterIterator.TextAttribute.X, TextAttribute.Y,
      * TextAttribute.ROTATE attributes to TextAttribute.TRANSFORM attributes.
      */
-    public class TransformAttributeFilter implements
+    public static class TransformAttributeFilter implements
                      GVTAttributedCharacterIterator.AttributeFilter {
 
         /**
diff --git a/batik-svg-dom/src/main/java/org/apache/batik/dom/svg/AbstractSVGNormPathSegList.java b/batik-svg-dom/src/main/java/org/apache/batik/dom/svg/AbstractSVGNormPathSegList.java
index fed4e04..76ab300 100644
--- a/batik-svg-dom/src/main/java/org/apache/batik/dom/svg/AbstractSVGNormPathSegList.java
+++ b/batik-svg-dom/src/main/java/org/apache/batik/dom/svg/AbstractSVGNormPathSegList.java
@@ -74,7 +74,7 @@
         public void startPath() throws ParseException {
             listHandler.startList();
             lastAbs = new SVGPathSegGenericItem(SVGPathSeg.PATHSEG_MOVETO_ABS,
-                    PATHSEG_MOVETO_ABS_LETTER, 0,0,0,0,0,0);
+                    PATHSEG_MOVETO_ABS_LETTER, 0, 0, 0, 0, 0, 0);
         }
 
         /**
@@ -95,9 +95,8 @@
          * Implements {@link org.apache.batik.parser.PathHandler#movetoAbs(float,float)}.
          */
         public void movetoAbs(float x, float y) throws ParseException {
-            listHandler.item(new SVGPathSegMovetoLinetoItem
-                    (SVGPathSeg.PATHSEG_MOVETO_ABS,PATHSEG_MOVETO_ABS_LETTER,
-                            x,y));
+            listHandler.item(new SVGPathSegMovetoLinetoItem(SVGPathSeg.PATHSEG_MOVETO_ABS, PATHSEG_MOVETO_ABS_LETTER,
+                    x, y));
             lastAbs.setX(x);
             lastAbs.setY(y);
             lastAbs.setPathSegType(SVGPathSeg.PATHSEG_MOVETO_ABS);
@@ -122,9 +121,8 @@
          * Implements {@link org.apache.batik.parser.PathHandler#linetoAbs(float,float)}.
          */
         public void linetoAbs(float x, float y) throws ParseException {
-            listHandler.item(new SVGPathSegMovetoLinetoItem
-                    (SVGPathSeg.PATHSEG_LINETO_ABS,PATHSEG_LINETO_ABS_LETTER,
-                            x,y));
+            listHandler.item(new SVGPathSegMovetoLinetoItem(SVGPathSeg.PATHSEG_LINETO_ABS, PATHSEG_LINETO_ABS_LETTER,
+                    x, y));
             lastAbs.setX(x);
             lastAbs.setY(y);
             lastAbs.setPathSegType(SVGPathSeg.PATHSEG_LINETO_ABS);
@@ -177,9 +175,8 @@
         public void curvetoCubicAbs(float x1, float y1,
                 float x2, float y2,
                 float x, float y) throws ParseException {
-            listHandler.item(new SVGPathSegCurvetoCubicItem
-                    (SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS,PATHSEG_CURVETO_CUBIC_ABS_LETTER,
-                            x1,y1,x2,y2,x,y));
+            listHandler.item(new SVGPathSegCurvetoCubicItem(SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS, PATHSEG_CURVETO_CUBIC_ABS_LETTER,
+                    x1, y1, x2, y2, x, y));
             lastAbs.setValue(x1,y1,x2,y2,x,y);
             lastAbs.setPathSegType(SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS);
         }
@@ -321,7 +318,7 @@
     }
 
 
-    protected class SVGPathSegGenericItem extends SVGPathSegItem {
+    protected static class SVGPathSegGenericItem extends SVGPathSegItem {
 
         public SVGPathSegGenericItem(short type, String letter,
                 float x1, float y1, float x2, float y2, float x, float y){
diff --git a/batik-svg-dom/src/main/java/org/apache/batik/dom/svg/AbstractSVGNumberList.java b/batik-svg-dom/src/main/java/org/apache/batik/dom/svg/AbstractSVGNumberList.java
index 7b5b69a..f0570fb 100644
--- a/batik-svg-dom/src/main/java/org/apache/batik/dom/svg/AbstractSVGNumberList.java
+++ b/batik-svg-dom/src/main/java/org/apache/batik/dom/svg/AbstractSVGNumberList.java
@@ -160,7 +160,7 @@
      * Helper class to interface the {@link NumberListParser} and the
      * {@link NumberListHandler}.
      */
-    protected class NumberListBuilder implements NumberListHandler {
+    protected static class NumberListBuilder implements NumberListHandler {
 
         /**
          * The ListHandler to notify of parsed numbers.
diff --git a/batik-svg-dom/src/main/java/org/apache/batik/dom/svg/AbstractSVGPathSegList.java b/batik-svg-dom/src/main/java/org/apache/batik/dom/svg/AbstractSVGPathSegList.java
index fdf2277..0993c94 100644
--- a/batik-svg-dom/src/main/java/org/apache/batik/dom/svg/AbstractSVGPathSegList.java
+++ b/batik-svg-dom/src/main/java/org/apache/batik/dom/svg/AbstractSVGPathSegList.java
@@ -224,7 +224,7 @@
         return pathSegItem;
     }
 
-    public class SVGPathSegMovetoLinetoItem extends SVGPathSegItem
+    public static class SVGPathSegMovetoLinetoItem extends SVGPathSegItem
         implements SVGPathSegMovetoAbs,
                    SVGPathSegMovetoRel,
                    SVGPathSegLinetoAbs,
@@ -282,7 +282,7 @@
         }
     }
 
-    public class SVGPathSegCurvetoCubicItem extends SVGPathSegItem
+    public static class SVGPathSegCurvetoCubicItem extends SVGPathSegItem
         implements SVGPathSegCurvetoCubicAbs,
                    SVGPathSegCurvetoCubicRel {
 
@@ -367,7 +367,7 @@
         }
     }
 
-    public class SVGPathSegCurvetoQuadraticItem extends SVGPathSegItem
+    public static class SVGPathSegCurvetoQuadraticItem extends SVGPathSegItem
         implements SVGPathSegCurvetoQuadraticAbs,
                    SVGPathSegCurvetoQuadraticRel {
 
@@ -434,7 +434,7 @@
          }
     }
 
-    public class SVGPathSegArcItem extends SVGPathSegItem
+    public static class SVGPathSegArcItem extends SVGPathSegItem
         implements SVGPathSegArcAbs,
                    SVGPathSegArcRel {
 
@@ -539,7 +539,7 @@
         }
     }
 
-    public class SVGPathSegLinetoHorizontalItem
+    public static class SVGPathSegLinetoHorizontalItem
         extends SVGPathSegItem
         implements SVGPathSegLinetoHorizontalAbs,
                    SVGPathSegLinetoHorizontalRel {
@@ -576,7 +576,7 @@
         }
     }
 
-    public class SVGPathSegLinetoVerticalItem
+    public static class SVGPathSegLinetoVerticalItem
         extends SVGPathSegItem
     implements SVGPathSegLinetoVerticalAbs,
                SVGPathSegLinetoVerticalRel {
@@ -614,7 +614,7 @@
         }
     }
 
-    public class SVGPathSegCurvetoCubicSmoothItem extends SVGPathSegItem
+    public static class SVGPathSegCurvetoCubicSmoothItem extends SVGPathSegItem
         implements SVGPathSegCurvetoCubicSmoothAbs,
                    SVGPathSegCurvetoCubicSmoothRel {
 
@@ -679,7 +679,7 @@
         }
     }
 
-    public class SVGPathSegCurvetoQuadraticSmoothItem extends SVGPathSegItem
+    public static class SVGPathSegCurvetoQuadraticSmoothItem extends SVGPathSegItem
         implements SVGPathSegCurvetoQuadraticSmoothAbs ,
                    SVGPathSegCurvetoQuadraticSmoothRel {
 
@@ -750,18 +750,16 @@
          * Implements {@link org.apache.batik.parser.PathHandler#movetoRel(float,float)}.
          */
         public void movetoRel(float x, float y) throws ParseException {
-            listHandler.item(new SVGPathSegMovetoLinetoItem
-                (SVGPathSeg.PATHSEG_MOVETO_REL,PATHSEG_MOVETO_REL_LETTER,
-                 x,y));
+            listHandler.item(new SVGPathSegMovetoLinetoItem(SVGPathSeg.PATHSEG_MOVETO_REL, PATHSEG_MOVETO_REL_LETTER,
+                    x, y));
         }
 
         /**
          * Implements {@link org.apache.batik.parser.PathHandler#movetoAbs(float,float)}.
          */
         public void movetoAbs(float x, float y) throws ParseException {
-            listHandler.item(new SVGPathSegMovetoLinetoItem
-                (SVGPathSeg.PATHSEG_MOVETO_ABS,PATHSEG_MOVETO_ABS_LETTER,
-                 x,y));
+            listHandler.item(new SVGPathSegMovetoLinetoItem(SVGPathSeg.PATHSEG_MOVETO_ABS, PATHSEG_MOVETO_ABS_LETTER,
+                    x, y));
         }
 
         /**
@@ -777,54 +775,48 @@
          * Implements {@link org.apache.batik.parser.PathHandler#linetoRel(float,float)}.
          */
         public void linetoRel(float x, float y) throws ParseException {
-            listHandler.item(new SVGPathSegMovetoLinetoItem
-                (SVGPathSeg.PATHSEG_LINETO_REL,PATHSEG_LINETO_REL_LETTER,
-                 x,y));
+            listHandler.item(new SVGPathSegMovetoLinetoItem(SVGPathSeg.PATHSEG_LINETO_REL, PATHSEG_LINETO_REL_LETTER,
+                    x, y));
         }
 
         /**
          * Implements {@link org.apache.batik.parser.PathHandler#linetoAbs(float,float)}.
          */
         public void linetoAbs(float x, float y) throws ParseException {
-            listHandler.item(new SVGPathSegMovetoLinetoItem
-                (SVGPathSeg.PATHSEG_LINETO_ABS,PATHSEG_LINETO_ABS_LETTER,
-                 x,y));
+            listHandler.item(new SVGPathSegMovetoLinetoItem(SVGPathSeg.PATHSEG_LINETO_ABS, PATHSEG_LINETO_ABS_LETTER,
+                    x, y));
         }
 
         /**
          * Implements {@link org.apache.batik.parser.PathHandler#linetoHorizontalRel(float)}.
          */
         public void linetoHorizontalRel(float x) throws ParseException {
-            listHandler.item(new SVGPathSegLinetoHorizontalItem
-                (SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL,PATHSEG_LINETO_HORIZONTAL_REL_LETTER,
-                 x));
+            listHandler.item(new SVGPathSegLinetoHorizontalItem(SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL, PATHSEG_LINETO_HORIZONTAL_REL_LETTER,
+                    x));
         }
 
         /**
          * Implements {@link org.apache.batik.parser.PathHandler#linetoHorizontalAbs(float)}.
          */
         public void linetoHorizontalAbs(float x) throws ParseException {
-            listHandler.item(new SVGPathSegLinetoHorizontalItem
-                (SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS,PATHSEG_LINETO_HORIZONTAL_ABS_LETTER,
-                 x));
+            listHandler.item(new SVGPathSegLinetoHorizontalItem(SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS, PATHSEG_LINETO_HORIZONTAL_ABS_LETTER,
+                    x));
         }
 
         /**
          * Implements {@link org.apache.batik.parser.PathHandler#linetoVerticalRel(float)}.
          */
         public void linetoVerticalRel(float y) throws ParseException {
-            listHandler.item(new SVGPathSegLinetoVerticalItem
-                (SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL,PATHSEG_LINETO_VERTICAL_REL_LETTER,
-                 y));
+            listHandler.item(new SVGPathSegLinetoVerticalItem(SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL, PATHSEG_LINETO_VERTICAL_REL_LETTER,
+                    y));
         }
 
         /**
          * Implements {@link org.apache.batik.parser.PathHandler#linetoVerticalAbs(float)}.
          */
         public void linetoVerticalAbs(float y) throws ParseException {
-            listHandler.item(new SVGPathSegLinetoVerticalItem
-                (SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS,PATHSEG_LINETO_VERTICAL_ABS_LETTER,
-                 y));
+            listHandler.item(new SVGPathSegLinetoVerticalItem(SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS, PATHSEG_LINETO_VERTICAL_ABS_LETTER,
+                    y));
         }
 
         /**
@@ -834,9 +826,8 @@
         public void curvetoCubicRel(float x1, float y1,
                                     float x2, float y2,
                                     float x, float y) throws ParseException {
-            listHandler.item(new SVGPathSegCurvetoCubicItem
-                (SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL,PATHSEG_CURVETO_CUBIC_REL_LETTER,
-                 x1,y1,x2,y2,x,y));
+            listHandler.item(new SVGPathSegCurvetoCubicItem(SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL, PATHSEG_CURVETO_CUBIC_REL_LETTER,
+                    x1, y1, x2, y2, x, y));
         }
 
         /**
@@ -846,9 +837,8 @@
         public void curvetoCubicAbs(float x1, float y1,
                                     float x2, float y2,
                                     float x, float y) throws ParseException {
-            listHandler.item(new SVGPathSegCurvetoCubicItem
-                (SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS,PATHSEG_CURVETO_CUBIC_ABS_LETTER,
-                 x1,y1,x2,y2,x,y));
+            listHandler.item(new SVGPathSegCurvetoCubicItem(SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS, PATHSEG_CURVETO_CUBIC_ABS_LETTER,
+                    x1, y1, x2, y2, x, y));
         }
 
         /**
@@ -857,9 +847,9 @@
          */
         public void curvetoCubicSmoothRel(float x2, float y2,
                                           float x, float y) throws ParseException {
-            listHandler.item(new SVGPathSegCurvetoCubicSmoothItem
-                (SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL,PATHSEG_CURVETO_CUBIC_SMOOTH_REL_LETTER,
-                 x2,y2,x,y));
+            listHandler.item(new SVGPathSegCurvetoCubicSmoothItem(SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL,
+                    PATHSEG_CURVETO_CUBIC_SMOOTH_REL_LETTER,
+                    x2, y2, x, y));
         }
 
         /**
@@ -868,9 +858,9 @@
          */
         public void curvetoCubicSmoothAbs(float x2, float y2,
                                           float x, float y) throws ParseException {
-            listHandler.item(new SVGPathSegCurvetoCubicSmoothItem
-                (SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS,PATHSEG_CURVETO_CUBIC_SMOOTH_ABS_LETTER,
-                 x2,y2,x,y));
+            listHandler.item(new SVGPathSegCurvetoCubicSmoothItem(SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS,
+                    PATHSEG_CURVETO_CUBIC_SMOOTH_ABS_LETTER,
+                    x2, y2, x, y));
         }
 
         /**
@@ -879,9 +869,9 @@
          */
         public void curvetoQuadraticRel(float x1, float y1,
                                         float x, float y) throws ParseException {
-            listHandler.item(new SVGPathSegCurvetoQuadraticItem
-                (SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL,PATHSEG_CURVETO_QUADRATIC_REL_LETTER,
-                 x1,y1,x,y));
+            listHandler.item(new SVGPathSegCurvetoQuadraticItem(SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL,
+                    PATHSEG_CURVETO_QUADRATIC_REL_LETTER,
+                    x1, y1, x, y));
         }
 
         /**
@@ -890,9 +880,9 @@
          */
         public void curvetoQuadraticAbs(float x1, float y1,
                                         float x, float y) throws ParseException {
-            listHandler.item(new SVGPathSegCurvetoQuadraticItem
-                (SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS,PATHSEG_CURVETO_QUADRATIC_ABS_LETTER,
-                 x1,y1,x,y));
+            listHandler.item(new SVGPathSegCurvetoQuadraticItem(SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS,
+                    PATHSEG_CURVETO_QUADRATIC_ABS_LETTER,
+                    x1, y1, x, y));
         }
 
         /**
@@ -900,9 +890,9 @@
          */
         public void curvetoQuadraticSmoothRel(float x, float y)
             throws ParseException {
-            listHandler.item(new SVGPathSegCurvetoQuadraticSmoothItem
-                (SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL,PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL_LETTER,
-                 x,y));
+            listHandler.item(new SVGPathSegCurvetoQuadraticSmoothItem(SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL,
+                    PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL_LETTER,
+                    x, y));
         }
 
         /**
@@ -910,9 +900,9 @@
          */
         public void curvetoQuadraticSmoothAbs(float x, float y)
             throws ParseException {
-            listHandler.item(new SVGPathSegCurvetoQuadraticSmoothItem
-                (SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS,PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS_LETTER,
-                 x,y));
+            listHandler.item(new SVGPathSegCurvetoQuadraticSmoothItem(SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS,
+                    PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS_LETTER,
+                    x, y));
         }
 
         /**
@@ -923,9 +913,8 @@
                            float xAxisRotation,
                            boolean largeArcFlag, boolean sweepFlag,
                            float x, float y) throws ParseException {
-            listHandler.item(new SVGPathSegArcItem
-                (SVGPathSeg.PATHSEG_ARC_REL,PATHSEG_ARC_REL_LETTER,
-                 rx,ry,xAxisRotation,largeArcFlag,sweepFlag,x,y));
+            listHandler.item(new SVGPathSegArcItem(SVGPathSeg.PATHSEG_ARC_REL, PATHSEG_ARC_REL_LETTER,
+                    rx, ry, xAxisRotation, largeArcFlag, sweepFlag, x, y));
         }
 
         /**
@@ -936,9 +925,8 @@
                            float xAxisRotation,
                            boolean largeArcFlag, boolean sweepFlag,
                            float x, float y) throws ParseException {
-            listHandler.item(new SVGPathSegArcItem
-                (SVGPathSeg.PATHSEG_ARC_ABS,PATHSEG_ARC_ABS_LETTER,
-                 rx,ry,xAxisRotation,largeArcFlag,sweepFlag,x,y));
+            listHandler.item(new SVGPathSegArcItem(SVGPathSeg.PATHSEG_ARC_ABS, PATHSEG_ARC_ABS_LETTER,
+                    rx, ry, xAxisRotation, largeArcFlag, sweepFlag, x, y));
         }
     }
 }
diff --git a/batik-svg-dom/src/main/java/org/apache/batik/dom/svg/AbstractSVGPointList.java b/batik-svg-dom/src/main/java/org/apache/batik/dom/svg/AbstractSVGPointList.java
index 21f5754..dc1226a 100644
--- a/batik-svg-dom/src/main/java/org/apache/batik/dom/svg/AbstractSVGPointList.java
+++ b/batik-svg-dom/src/main/java/org/apache/batik/dom/svg/AbstractSVGPointList.java
@@ -141,7 +141,7 @@
      * Helper class to interface the {@link PointsParser} and the
      * {@link PointsHandler}.
      */
-    protected class PointsListBuilder implements PointsHandler {
+    protected static class PointsListBuilder implements PointsHandler {
 
         /**
          * The {@link ListHandler} to pass newly created {@link SVGPointItem}
diff --git a/batik-svg-dom/src/main/java/org/apache/batik/dom/svg/AbstractSVGPreserveAspectRatio.java b/batik-svg-dom/src/main/java/org/apache/batik/dom/svg/AbstractSVGPreserveAspectRatio.java
index fc74cba..c0c8eeb 100644
--- a/batik-svg-dom/src/main/java/org/apache/batik/dom/svg/AbstractSVGPreserveAspectRatio.java
+++ b/batik-svg-dom/src/main/java/org/apache/batik/dom/svg/AbstractSVGPreserveAspectRatio.java
@@ -173,7 +173,7 @@
         return value + ' ' + MEET_OR_SLICE_VALUES[meetOrSlice];
     }
 
-    protected class PreserveAspectRatioParserHandler
+    protected static class PreserveAspectRatioParserHandler
         extends DefaultPreserveAspectRatioHandler {
         public short align =
             SVGPreserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMIDYMID;
diff --git a/batik-svg-dom/src/main/java/org/apache/batik/dom/svg/AbstractSVGTransformList.java b/batik-svg-dom/src/main/java/org/apache/batik/dom/svg/AbstractSVGTransformList.java
index 62d1d66..0702606 100644
--- a/batik-svg-dom/src/main/java/org/apache/batik/dom/svg/AbstractSVGTransformList.java
+++ b/batik-svg-dom/src/main/java/org/apache/batik/dom/svg/AbstractSVGTransformList.java
@@ -192,7 +192,7 @@
     /**
      * An {@link SVGTransform} in the list.
      */
-    public class SVGTransformItem
+    public static class SVGTransformItem
             extends AbstractSVGTransform
             implements SVGItem {
 
diff --git a/batik-svgbrowser/src/main/java/org/apache/batik/apps/svgbrowser/NodePickerPanel.java b/batik-svgbrowser/src/main/java/org/apache/batik/apps/svgbrowser/NodePickerPanel.java
index 45c226c..950017d 100644
--- a/batik-svgbrowser/src/main/java/org/apache/batik/apps/svgbrowser/NodePickerPanel.java
+++ b/batik-svgbrowser/src/main/java/org/apache/batik/apps/svgbrowser/NodePickerPanel.java
@@ -1339,7 +1339,7 @@
     /**
      * The panel to view and edit the elements xml representation.
      */
-    protected class SVGInputPanel extends JPanel {
+    protected static class SVGInputPanel extends JPanel {
 
         /**
          * The text area.
diff --git a/batik-svgbrowser/src/main/java/org/apache/batik/apps/svgbrowser/WindowsAltFileSystemView.java b/batik-svgbrowser/src/main/java/org/apache/batik/apps/svgbrowser/WindowsAltFileSystemView.java
index c51605e..4580386 100644
--- a/batik-svgbrowser/src/main/java/org/apache/batik/apps/svgbrowser/WindowsAltFileSystemView.java
+++ b/batik-svgbrowser/src/main/java/org/apache/batik/apps/svgbrowser/WindowsAltFileSystemView.java
@@ -128,7 +128,7 @@
 
         // Create the A: drive whether it is mounted or not
         FileSystemRoot floppy = new FileSystemRoot(Resources.getString(FLOPPY_DRIVE)
-                                                   + "\\");
+                + "\\");
         rootsVector.add(floppy);
 
         // Run through all possible mount points and check
@@ -146,7 +146,7 @@
         return roots;
     }
 
-    class FileSystemRoot extends File {
+    static class FileSystemRoot extends File {
         public FileSystemRoot(File f) {
             super(f, "");
         }
diff --git a/batik-svgbrowser/src/main/java/org/apache/batik/apps/svgbrowser/XMLInputHandler.java b/batik-svgbrowser/src/main/java/org/apache/batik/apps/svgbrowser/XMLInputHandler.java
index a9637d9..350416c 100644
--- a/batik-svgbrowser/src/main/java/org/apache/batik/apps/svgbrowser/XMLInputHandler.java
+++ b/batik-svgbrowser/src/main/java/org/apache/batik/apps/svgbrowser/XMLInputHandler.java
@@ -317,7 +317,7 @@
      * Implements the URIResolver interface so that relative urls used in 
      * transformations are resolved properly.
      */
-    public class DocumentURIResolver implements URIResolver {
+    public static class DocumentURIResolver implements URIResolver {
         String documentURI;
 
         public DocumentURIResolver(String documentURI) {
diff --git a/batik-svgpp/src/main/java/org/apache/batik/apps/svgpp/Main.java b/batik-svgpp/src/main/java/org/apache/batik/apps/svgpp/Main.java
index f41b47f..1a6623b 100644
--- a/batik-svgpp/src/main/java/org/apache/batik/apps/svgpp/Main.java
+++ b/batik-svgpp/src/main/java/org/apache/batik/apps/svgpp/Main.java
@@ -20,7 +20,6 @@
 package org.apache.batik.apps.svgpp;
 
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.Map;
 
 import org.apache.batik.i18n.LocalizableSupport;
diff --git a/batik-swing/src/main/java/org/apache/batik/swing/JSVGCanvas.java b/batik-swing/src/main/java/org/apache/batik/swing/JSVGCanvas.java
index b75116a..7695ade 100644
--- a/batik-swing/src/main/java/org/apache/batik/swing/JSVGCanvas.java
+++ b/batik-swing/src/main/java/org/apache/batik/swing/JSVGCanvas.java
@@ -1153,7 +1153,7 @@
      * Helper class. Simply keeps track of the last known mouse
      * position over the canvas.
      */
-    protected class LocationListener extends MouseMotionAdapter {
+    protected static class LocationListener extends MouseMotionAdapter {
 
         protected int lastX, lastY;
 
diff --git a/batik-test-old/src/test/java/org/apache/batik/bridge/ExternalResourcesTest.java b/batik-test-old/src/test/java/org/apache/batik/bridge/ExternalResourcesTest.java
index 439cb37..e725071 100644
--- a/batik-test-old/src/test/java/org/apache/batik/bridge/ExternalResourcesTest.java
+++ b/batik-test-old/src/test/java/org/apache/batik/bridge/ExternalResourcesTest.java
@@ -416,7 +416,7 @@
         }
     }
 
-    class MyUserAgentAdapter extends UserAgentAdapter implements MyUserAgent {
+    static class MyUserAgentAdapter extends UserAgentAdapter implements MyUserAgent {
         Exception ex = null;
         public void displayError(Exception ex) {
             this.ex = ex;
diff --git a/batik-test-old/src/test/java/org/apache/batik/svggen/ShowGraphics2DOutput.java b/batik-test-old/src/test/java/org/apache/batik/svggen/ShowGraphics2DOutput.java
index f3808ff..21b61e0 100644
--- a/batik-test-old/src/test/java/org/apache/batik/svggen/ShowGraphics2DOutput.java
+++ b/batik-test-old/src/test/java/org/apache/batik/svggen/ShowGraphics2DOutput.java
@@ -90,7 +90,7 @@
         }
     }
 
-    class TestUserAgent extends UserAgentAdapter {
+    static class TestUserAgent extends UserAgentAdapter {
         boolean failed;
 
         public void displayError(Exception e) {
diff --git a/batik-test-old/src/test/java/org/apache/batik/swing/JSVGInterruptTest.java b/batik-test-old/src/test/java/org/apache/batik/swing/JSVGInterruptTest.java
index 61e1ec7..7820531 100644
--- a/batik-test-old/src/test/java/org/apache/batik/swing/JSVGInterruptTest.java
+++ b/batik-test-old/src/test/java/org/apache/batik/swing/JSVGInterruptTest.java
@@ -388,7 +388,7 @@
      * A call to abort() can <i>prevent</i> the start of the Runable before it is
      * started - it does not abort after it started.
      */
-    class DelayRunnable extends Thread {
+    static class DelayRunnable extends Thread {
 
         /**
          * delay in milliSeconds - must not change after creation.
diff --git a/batik-transcoder/src/main/java/org/apache/batik/transcoder/wmf/tosvg/TextureFactory.java b/batik-transcoder/src/main/java/org/apache/batik/transcoder/wmf/tosvg/TextureFactory.java
index db44805..9d68448 100644
--- a/batik-transcoder/src/main/java/org/apache/batik/transcoder/wmf/tosvg/TextureFactory.java
+++ b/batik-transcoder/src/main/java/org/apache/batik/transcoder/wmf/tosvg/TextureFactory.java
@@ -170,7 +170,7 @@
     /** Contain a handle to a Colored texture, with optional foreground and
      * background colors.
      */
-    private class ColoredTexture {
+    private static class ColoredTexture {
 
         final int textureId;
         final Color foreground;
