Index: jdbc2/jtssrc/org/postgis/jts/JtsGeometry.java
===================================================================
RCS file: /home/cvs/postgis/postgis/jdbc2/jtssrc/org/postgis/jts/JtsGeometry.java,v
retrieving revision 1.11
diff -u -r1.11 JtsGeometry.java
--- jdbc2/jtssrc/org/postgis/jts/JtsGeometry.java	9 May 2006 13:06:56 -0000	1.11
+++ jdbc2/jtssrc/org/postgis/jts/JtsGeometry.java	10 May 2006 10:48:03 -0000
@@ -126,6 +126,9 @@
     }
 
     public String toString() {
+        if (geom == null) {
+            return null;
+        }
         return geom.toString();
     }
 
@@ -140,14 +143,16 @@
     }
 
     public boolean equals(Object obj) {
-        if ((obj != null) && (obj instanceof JtsGeometry)) {
-            Geometry other = ((JtsGeometry) obj).geom;
-            if (this.geom == other) { // handles identity as well as both ==null
-                return true;
-            } else if (this.geom != null && other != null) {
-                return other.equals(this.geom);
-            }
+        if (obj == this)
+            return true;
+        if (!(obj instanceof JtsGeometry))
+            return false;
+
+        Geometry other = ((JtsGeometry) obj).geom;
+        if (other == null) {
+            return (this.geom == null);
+        } else {
+            return other.equals(this.geom);
         }
-        return false;
     }
 }
Index: jdbc2/src/org/postgis/ComposedGeom.java
===================================================================
RCS file: /home/cvs/postgis/postgis/jdbc2/src/org/postgis/ComposedGeom.java,v
retrieving revision 1.7
diff -u -r1.7 ComposedGeom.java
--- jdbc2/src/org/postgis/ComposedGeom.java	28 Jul 2005 12:23:16 -0000	1.7
+++ jdbc2/src/org/postgis/ComposedGeom.java	10 May 2006 10:48:04 -0000
@@ -126,10 +126,15 @@
      */
     protected abstract Geometry[] createSubGeomArray(int size);
 
-    protected boolean equalsintern(Geometry other) {
-        // Can be assumed to be the same subclass of Geometry, so it must be a
-        // ComposedGeom, too.
-        ComposedGeom cother = (ComposedGeom) other;
+    public boolean equals(Object obj) {
+        if (obj == this)
+            return true;
+    	if (!(obj instanceof ComposedGeom)) 
+            return false;    	
+    	if (!super.equals(obj)) 
+            return false;
+    	
+        ComposedGeom cother = (ComposedGeom) obj;
 
         if (cother.subgeoms == null && subgeoms == null) {
             return true;
@@ -141,7 +146,7 @@
             return true;
         } else {
             for (int i = 0; i < subgeoms.length; i++) {
-                if (!cother.subgeoms[i].equalsintern(this.subgeoms[i])) {
+                if (!cother.subgeoms[i].equals(this.subgeoms[i])) {
                     return false;
                 }
             }
@@ -150,7 +155,7 @@
     }
 
     public int numPoints() {
-        if ((subgeoms == null) || (subgeoms.length == 0)) {
+        if (isEmpty()) {
             return 0;
         } else {
             int result = 0;
@@ -164,7 +169,7 @@
     public Point getPoint(int n) {
         if (n < 0) {
             throw new ArrayIndexOutOfBoundsException("Negative index not allowed");
-        } else if ((subgeoms == null) || (subgeoms.length == 0)) {
+        } else if (isEmpty()) {
             throw new ArrayIndexOutOfBoundsException("Empty Geometry has no Points!");
         } else {
             for (int i = 0; i < subgeoms.length; i++) {
@@ -185,7 +190,7 @@
      * Optimized version
      */
     public Point getLastPoint() {
-        if ((subgeoms == null) || (subgeoms.length == 0)) {
+        if (isEmpty()) {
             throw new ArrayIndexOutOfBoundsException("Empty Geometry has no Points!");
         } else {
             return subgeoms[subgeoms.length - 1].getLastPoint();
@@ -196,7 +201,7 @@
      * Optimized version
      */
     public Point getFirstPoint() {
-        if ((subgeoms == null) || (subgeoms.length == 0)) {
+        if (isEmpty()) {
             throw new ArrayIndexOutOfBoundsException("Empty Geometry has no Points!");
         } else {
             return subgeoms[0].getFirstPoint();
@@ -207,12 +212,12 @@
         return java.util.Arrays.asList(subgeoms).iterator();
     }
 
-    public boolean isEmpty() {
+    public final boolean isEmpty() {
         return (subgeoms == null) || (subgeoms.length == 0);
     }
 
     protected void mediumWKT(StringBuffer sb) {
-        if ((subgeoms == null) || (subgeoms.length == 0)) {
+        if (isEmpty()) {
             sb.append(" EMPTY");
         } else {
             sb.append('(');
Index: jdbc2/src/org/postgis/Geometry.java
===================================================================
RCS file: /home/cvs/postgis/postgis/jdbc2/src/org/postgis/Geometry.java,v
retrieving revision 1.8
diff -u -r1.8 Geometry.java
--- jdbc2/src/org/postgis/Geometry.java	9 May 2006 13:06:55 -0000	1.8
+++ jdbc2/src/org/postgis/Geometry.java	10 May 2006 10:48:04 -0000
@@ -136,35 +136,21 @@
     /**
      * java.lang.Object equals implementation
      */
-    public boolean equals(Object other) {
-        return (other != null) && (other instanceof Geometry) && equals((Geometry) other);
+    public boolean equals(Object obj) {
+        if (obj == this)
+            return true;
+    	if (!(obj instanceof Geometry))
+            return false;
+
+    	Geometry other = (Geometry)obj;
+    	
+    	return (this.dimension == other.dimension) 
+            && (this.type == other.type)
+            && (this.srid == other.srid) 
+            && (this.haveMeasure == other.haveMeasure);
     }
 
     /**
-     * geometry specific equals implementation - only defined for non-null
-     * values
-     */
-    public boolean equals(Geometry other) {
-        boolean firstline = (other != null) && (this.dimension == other.dimension)
-                && (this.type == other.type);
-        boolean sridequals = (this.srid == other.srid);
-        boolean measEquals = (this.haveMeasure == other.haveMeasure);
-        boolean secondline = sridequals && measEquals;
-        boolean classequals = other.getClass().equals(this.getClass());
-        boolean equalsintern = this.equalsintern(other);
-        boolean result = firstline && secondline && classequals && equalsintern;
-        return result;
-    }
-
-    /**
-     * Whether test coordinates for geometry - subclass specific code
-     * 
-     * Implementors can assume that dimensin, type, srid and haveMeasure are
-     * equal, other != null and other is the same subclass.
-     */
-    protected abstract boolean equalsintern(Geometry other);
-
-    /**
      * Return the number of Points of the geometry
      */
     public abstract int numPoints();
Index: jdbc2/src/org/postgis/Point.java
===================================================================
RCS file: /home/cvs/postgis/postgis/jdbc2/src/org/postgis/Point.java,v
retrieving revision 1.12
diff -u -r1.12 Point.java
--- jdbc2/src/org/postgis/Point.java	10 May 2006 10:47:35 -0000	1.12
+++ jdbc2/src/org/postgis/Point.java	10 May 2006 10:48:05 -0000
@@ -45,12 +45,16 @@
         return (int) (v ^ (v >>> 32));
     }
 
-    protected boolean equalsintern(Geometry otherg) {
-        Point other = (Point) otherg;
-        return equals(other);
-    }
+    public boolean equals(Object obj) {
+        if (obj == this)
+            return true;
+        if (!(obj instanceof Point))
+            return false;
+        if ( !super.equals(obj) ) 
+            return false;
+
+        Point other = (Point)obj;
 
-    public final boolean equals(Point other) {
         boolean xequals = x == other.x;
         boolean yequals = y == other.y;
         boolean zequals = ((dimension == 2) || (z == other.z));
