diff --git a/src/main/java/org/apache/bsf/BSF_Log.java b/src/main/java/org/apache/bsf/BSF_Log.java
index f241c09..62ed63e 100644
--- a/src/main/java/org/apache/bsf/BSF_Log.java
+++ b/src/main/java/org/apache/bsf/BSF_Log.java
@@ -48,7 +48,7 @@
     //NOTUSED final static private Method      oac_LogFactoryGetLog_Clazz;
     final static private Method      oac_LogFactoryGetLog_String;
 
-    final static private Method meths[] = new Method [18];  // store the Log methods
+    final static private Method[] meths = new Method [18];  // store the Log methods
         // define the slots in the array
     final private static int debug1 =  0 ;
     final private static int debug2 =  1 ;
diff --git a/src/main/java/org/apache/bsf/util/BSFEventProcessor.java b/src/main/java/org/apache/bsf/util/BSFEventProcessor.java
index ce905c5..e8c85e0 100644
--- a/src/main/java/org/apache/bsf/util/BSFEventProcessor.java
+++ b/src/main/java/org/apache/bsf/util/BSFEventProcessor.java
@@ -102,7 +102,7 @@
           return bRes;
       }
 
-      final String chunks[]=filter.replace('+',' ').split(" ");
+      final String[] chunks =filter.replace('+',' ').split(" ");
       for (int i=0;i<chunks.length;i++)
       {
           bRes=chunks[i].equalsIgnoreCase(inFilter);
diff --git a/src/main/java/org/apache/bsf/util/BSFEventProcessorReturningEventInfos.java b/src/main/java/org/apache/bsf/util/BSFEventProcessorReturningEventInfos.java
index 931f155..63573ac 100644
--- a/src/main/java/org/apache/bsf/util/BSFEventProcessorReturningEventInfos.java
+++ b/src/main/java/org/apache/bsf/util/BSFEventProcessorReturningEventInfos.java
@@ -173,7 +173,7 @@
             return bRes;
         }
 
-        final String chunks[]=filter.replace('+',' ').split(" ");
+        final String[] chunks =filter.replace('+',' ').split(" ");
         for (int i=0;i<chunks.length;i++)
         {
             bRes=chunks[i].equalsIgnoreCase(inFilter);
diff --git a/src/main/java/org/apache/bsf/util/EngineUtils.java b/src/main/java/org/apache/bsf/util/EngineUtils.java
index d3d66cb..07e7d61 100644
--- a/src/main/java/org/apache/bsf/util/EngineUtils.java
+++ b/src/main/java/org/apache/bsf/util/EngineUtils.java
@@ -55,7 +55,7 @@
     static boolean bMethodHasSetAccessible=false;
     static {
         final Class mc=Method.class;            // get the "Method" class object
-        final Class arg[]={boolean.class};      // define an array with the primitive "boolean" pseudo class object
+        final Class[] arg ={boolean.class};      // define an array with the primitive "boolean" pseudo class object
         try {
             mc.getMethod("setAccessible", arg ); // is this method available?
             bMethodHasSetAccessible=true; // no exception, hence method exists
diff --git a/src/main/java/org/apache/bsf/util/JavaUtils.java b/src/main/java/org/apache/bsf/util/JavaUtils.java
index 75fcb89..8438900 100644
--- a/src/main/java/org/apache/bsf/util/JavaUtils.java
+++ b/src/main/java/org/apache/bsf/util/JavaUtils.java
@@ -34,7 +34,7 @@
 
     public static boolean JDKcompile(final String fileName, final String classPath) {
         final String option = (logger.isDebugEnabled()) ? "-g" : "-O";
-        final String args[] = { "javac", option, "-classpath", classPath, fileName };
+        final String[] args = { "javac", option, "-classpath", classPath, fileName };
 
         logger.debug("JavaEngine: Compiling " + fileName);
         logger.debug("JavaEngine: Classpath is " + classPath);
diff --git a/src/main/java/org/apache/bsf/util/ReflectionUtils.java b/src/main/java/org/apache/bsf/util/ReflectionUtils.java
index b937061..c080a2d 100644
--- a/src/main/java/org/apache/bsf/util/ReflectionUtils.java
+++ b/src/main/java/org/apache/bsf/util/ReflectionUtils.java
@@ -93,7 +93,7 @@
     // find the event set descriptor for this event
     final BeanInfo bi = Introspector.getBeanInfo (source.getClass ());
 
-    final EventSetDescriptor arrESD[]=bi.getEventSetDescriptors ();
+    final EventSetDescriptor[] arrESD =bi.getEventSetDescriptors ();
     final EventSetDescriptor esd=(EventSetDescriptor) findFeatureByName ("event", eventSetName, arrESD);
 
     if (esd == null)        // no events found, maybe a proxy from OpenOffice.org?
@@ -133,7 +133,7 @@
 
 
                     // iterate over listener methods and display their names in sorted order
-                  final Method m[]=tmpESD.getListenerMethods();
+                  final Method[] m =tmpESD.getListenerMethods();
                   final TreeSet tsM=new TreeSet(new Comparator () {
                           public int    compare(final Object o1, final Object o2) {return ((Method)o1).getName().compareToIgnoreCase(((Method)o2).getName());}
                           public boolean equals(final Object o1, final Object o2) {return ((Method)o1).getName().equalsIgnoreCase   (((Method)o2).getName());}
diff --git a/src/main/java/org/apache/bsf/util/event/generator/ByteUtility.java b/src/main/java/org/apache/bsf/util/event/generator/ByteUtility.java
index 76cfed7..dabe1ed 100644
--- a/src/main/java/org/apache/bsf/util/event/generator/ByteUtility.java
+++ b/src/main/java/org/apache/bsf/util/event/generator/ByteUtility.java
@@ -29,7 +29,7 @@
   {
     if( null != array )
     {
-      final byte newarray[] = new byte[array.length + value.length];
+      final byte[] newarray = new byte[array.length + value.length];
       System.arraycopy(array,0,newarray,0,array.length);
       System.arraycopy(value,0,newarray,array.length,value.length);
       array = newarray;
@@ -44,7 +44,7 @@
   {
     if( null != array )
     {
-      final byte newarray[] = new byte[array.length + 1];
+      final byte[] newarray = new byte[array.length + 1];
       System.arraycopy(array,0,newarray,0,array.length);
       newarray[newarray.length-1] = value;
       array = newarray;
@@ -60,7 +60,7 @@
   {
     if( null != array )
     {
-      final byte newarray[] = new byte[array.length + 3];
+      final byte[] newarray = new byte[array.length + 3];
       System.arraycopy(array,0,newarray,0,array.length);
       newarray[newarray.length-3] = (byte) (( value >> 16 ) & 0xFF);
       newarray[newarray.length-2] = (byte) (( value >>  8 ) & 0xFF);
@@ -80,7 +80,7 @@
   {
     if( null != array )
     {
-      final byte newarray[] = new byte[array.length + 4];
+      final byte[] newarray = new byte[array.length + 4];
       System.arraycopy(array,0,newarray,0,array.length);
       newarray[newarray.length-4] = (byte) (( value >> 24 ) & 0xFF);
       newarray[newarray.length-3] = (byte) (( value >> 16 ) & 0xFF);
@@ -104,7 +104,7 @@
     {
       if( null != array)
       {
-        final byte newarray[] = new byte[array.length + value.length()];
+        final byte[] newarray = new byte[array.length + value.length()];
         System.arraycopy(array,0,newarray,0,array.length);
         System.arraycopy(value.getBytes(),0,newarray,array.length,value.length());
         array = newarray;
@@ -120,7 +120,7 @@
   {
     if( null != array)
     {
-      final byte newarray[] = new byte[array.length + 2];
+      final byte[] newarray = new byte[array.length + 2];
       System.arraycopy(array,0,newarray,0,array.length);
       newarray[newarray.length-2] = (byte) (( value >> 8 ) & 0xFF);
       newarray[newarray.length-1] = (byte) (  value        & 0xFF);
@@ -151,8 +151,8 @@
   }
   public static double byteArrayToDouble(final byte value[])
   {
-    final byte high[] = new byte[4];
-    final byte low[] = new byte[4];
+    final byte[] high = new byte[4];
+    final byte[] low = new byte[4];
     high[0] = value[0];
     high[1] = value[1];
     high[2] = value[2];
@@ -183,8 +183,8 @@
   }
   public static long byteArrayToLong(final byte value[])
   {
-    final byte high[] = new byte[4];
-    final byte low[] = new byte[4];
+    final byte[] high = new byte[4];
+    final byte[] low = new byte[4];
     high[0] = value[0];
     high[1] = value[1];
     high[2] = value[2];
diff --git a/src/main/java/org/apache/bsf/util/event/generator/EventAdapterGenerator.java b/src/main/java/org/apache/bsf/util/event/generator/EventAdapterGenerator.java
index d5d9b68..37aeb11 100644
--- a/src/main/java/org/apache/bsf/util/event/generator/EventAdapterGenerator.java
+++ b/src/main/java/org/apache/bsf/util/event/generator/EventAdapterGenerator.java
@@ -217,7 +217,7 @@
     {
       boolean exceptionable    = false;
       boolean nonExceptionable = false;
-      byte    constantPool[]   = null;
+      byte[] constantPool = null;
       short   cpBaseIndex;
       short   cpCount          = 0;
       short   cpExceptionBaseIndex;
@@ -263,7 +263,7 @@
       final String eventListenerName = listenerTypeName.replace('.', '/');
 
       /* method stuff */
-      final java.lang.reflect.Method lms[] = listenerType.getMethods();
+      final java.lang.reflect.Method[] lms = listenerType.getMethods();
 
       /* ****************************************************************************************** */
       // Listener interface
@@ -285,7 +285,7 @@
       // do we have nonExceptionalble event, exceptionable or both
       for (int i = 0 ; i < lms.length ; ++i)
       {
-        final Class exceptionTypes[] = lms[i].getExceptionTypes();
+        final Class[] exceptionTypes = lms[i].getExceptionTypes();
         if( 0 < exceptionTypes.length)
         { exceptionable = true; }
         else
@@ -357,7 +357,7 @@
         constantPool = Bytecode.addString(constantPool,(short)(BASECPCOUNT+cpCount-3));
       }/* End for*/
 
-      final boolean propertyChangeFlag[] = new boolean[lms.length];
+      final boolean[] propertyChangeFlag = new boolean[lms.length];
       int cpIndexPCE = 0;
       for (int i = 0 ; i < lms.length ; ++i)
       {
@@ -393,7 +393,7 @@
       final int excpIndex[][] = new int[lms.length][];
       for (int i = 0 ; i < lms.length ; ++i)
       {
-        final Class exceptionTypes[] = lms[i].getExceptionTypes();
+        final Class[] exceptionTypes = lms[i].getExceptionTypes();
         excpIndex[i] = new int[exceptionTypes.length];
         for ( int j = 0 ; j < exceptionTypes.length ; j++)
         {
@@ -409,7 +409,7 @@
       // put the Class byte array together
 
       /* start */
-      byte newClass[] = CLASSHEADER;                                   // magic, version      (fixed)
+      byte[] newClass = CLASSHEADER;                                   // magic, version      (fixed)
       final short count = (short)(BASECPCOUNT + cpCount);
       newClass = ByteUtility.addBytes(newClass,count);                 // constant_pool_count (variable)
       newClass = ByteUtility.addBytes(newClass,BASECP);                // constant_pool       (fixed)
diff --git a/src/test/java/org/apache/bsf/util/EngineUtilsTest.java b/src/test/java/org/apache/bsf/util/EngineUtilsTest.java
index bc5b137..bc40d04 100644
--- a/src/test/java/org/apache/bsf/util/EngineUtilsTest.java
+++ b/src/test/java/org/apache/bsf/util/EngineUtilsTest.java
@@ -84,7 +84,7 @@
 
     public void testCreateBean() throws BSFException {
 
-        final Object args[] = new Object[]{ "test" };
+        final Object[] args = new Object[]{ "test" };
 
         try {
             result = EngineUtils.createBean("org.apache.bsf.util.TestBean", args);
