Index: src/test/org/apache/commons/lang/ObjectUtilsTest.java
===================================================================
--- src/test/org/apache/commons/lang/ObjectUtilsTest.java	(revision 591537)
+++ src/test/org/apache/commons/lang/ObjectUtilsTest.java	(working copy)
@@ -212,4 +212,32 @@
         assertSame( minComparable, ObjectUtils.min( nonNullComparable1, minComparable ) );
         assertSame( minComparable, ObjectUtils.min( minComparable, nonNullComparable1 ) );
     }
+
+    public void testLang360() {
+        StringBuffer buffer = new StringBuffer();
+        Object one = "one";
+        Object two = null;
+        Object three = "three";
+
+        // Old deprecated method - displaying bug
+        ObjectUtils.appendIdentityToString(
+            ObjectUtils.appendIdentityToString(
+                ObjectUtils.appendIdentityToString(buffer, one)
+                , two)
+            , three); 
+        assertFalse(
+                    buffer.toString().endsWith(
+                    "java.lang.String@" + Integer.toHexString(System.identityHashCode(three))
+                  ));
+
+        ObjectUtils.appendIdentity(
+            ObjectUtils.appendIdentity(
+                ObjectUtils.appendIdentity(buffer, one)
+                , two)
+            , three); 
+        assertTrue(buffer.toString().startsWith(
+                    "java.lang.String@" + Integer.toHexString(System.identityHashCode(one))
+                  ));
+    }
+
 }
Index: src/java/org/apache/commons/lang/ObjectUtils.java
===================================================================
--- src/java/org/apache/commons/lang/ObjectUtils.java	(revision 591537)
+++ src/java/org/apache/commons/lang/ObjectUtils.java	(working copy)
@@ -176,19 +176,65 @@
      * @param object  the object to create a toString for, may be <code>null</code>
      * @return the default toString text, or <code>null</code> if
      *  <code>null</code> passed in
+     * @deprecated in favour of {@link appendIdentity(StringBuffer, Object)} - which is more null-safe
      * @since 2.0
      */
     public static StringBuffer appendIdentityToString(StringBuffer buffer, Object object) {
         if (object == null) {
             return null;
         }
+        return appendIdentity(buffer, object);
+    }
+
+    /**
+     * <p>Appends the toString that would be produced by <code>Object</code>
+     * if a class did not override toString itself to a newly created 
+     * StringBuffer. </p>
+     *
+     * <pre>
+     * ObjectUtils.appendIdentity(Boolean.TRUE) = Buffer of "java.lang.Boolean@7fa"
+     * ObjectUtils.appendIdentity(null) = Buffer of "null"
+     * </pre>
+     *
+     * @param object  the object to create a toString for, may be <code>null</code>
+     * @return the default toString text
+     * @since 2.4
+     */
+    public static StringBuffer appendIdentityToNewBuffer(Object object) {
+        return appendIdentity(null, object);
+    }
+    /**
+     * <p>Appends the toString that would be produced by <code>Object</code>
+     * if a class did not override toString itself to the passed in StringBuffer. 
+     * A null StringBuffer will result in a new one being created, but it is 
+     * recommended that {@link appendIdentity(Object)} be used in that case. 
+     * <code>null</code> will append the String "null" to the StringBuffer. 
+     *
+     * <pre>
+     * ObjectUtils.appendIdentityToString(*, null)            = Buffer of "null"
+     * ObjectUtils.appendIdentityToString(null, "")           = Buffer of "java.lang.String@1e23"
+     * ObjectUtils.appendIdentityToString(null, Boolean.TRUE) = Buffer of "java.lang.Boolean@7fa"
+     * ObjectUtils.appendIdentityToString(buf, Boolean.TRUE)  = Buffer append "java.lang.Boolean@7fa"
+     * </pre>
+     *
+     * @param buffer  the buffer to append to, may be <code>null</code>
+     * @param object  the object to create a toString for, may be <code>null</code>
+     * @return a Buffer appended with the default toString text, or <code>"null"</code> if
+     *  <code>null</code> passed in
+     * @since 2.4
+     */
+    public static StringBuffer appendIdentity(StringBuffer buffer, Object object) {
         if (buffer == null) {
             buffer = new StringBuffer();
         }
-        return buffer
-            .append(object.getClass().getName())
-            .append('@')
-            .append(Integer.toHexString(System.identityHashCode(object)));
+        if (object == null) {
+            return buffer.append("null");
+        } else {
+            return buffer
+                .append(object.getClass().getName())
+                .append('@')
+                .append(Integer.toHexString(System.identityHashCode(object)));
+        }
     }
 
     // ToString
