anchor.diff:  
   ;;; The modern interface
   
  -(define-condition neo4j-transaction-error (error)
  -  ((code :initarg :code :reader code)
  -   (message :initarg :message :reader message)))
  -
  -(define-condition neo4j-invalid-format-error (neo4j-transaction-error)
  -  ((code :initarg :code :reader code)
  -   (message :initarg :message :reader message)))
  -
  -(define-condition neo4j-integrity-error (neo4j-transaction-error)
  -  ((code :initarg :code :reader code)
  -   (message :initarg :message :reader message)))
  +;; Classes of Neo4J status codes
  +;; Based on the documentation at http://neo4j.com/docs/developer-manual/current/#status-codes
  +
  +;; The Client sent a bad request - changing the request might yield a successful outcome.
  +;; Effect on transaction: rollback
  +(define-condition client-error (error)
  +  ((code :initarg :code :reader code)
  +   (category :initarg :category :reader category)
  +   (title :initarg :title :reader title)
  +   (message :initarg :message :reader message)))
  +
  +;; There are notifications about the request sent by the client.
  +;; Effect on transaction: none
  +(define-condition client-notification ()
  +  ((code :initarg :code :reader code)
  +   (category :initarg :category :reader category)
  +   (title :initarg :title :reader title)
  +   (message :initarg :message :reader message)))
  +
  +;; The database cannot service the request right now, retrying later might yield a successful outcome.
  +;; Effect on transaction: rollback
  +(define-condition transient-error (error)
  +  ((code :initarg :code :reader code)
  +   (category :initarg :category :reader category)
  +   (title :initarg :title :reader title)
  +   (message :initarg :message :reader message)))
  +
  +;; The database failed to service the request.
  +;; Effect on transaction: rollback
  +(define-condition database-error (error)
  +  ((code :initarg :code :reader code)
  +   (category :initarg :category :reader category)
  +   (title :initarg :title :reader title)
  +   (message :initarg :message :reader message)))
  +
   
   (defun neo4j-transaction (endpoint statements)
     "Execute one or more Cypher statements, wrapped in a transaction.
  -  For now, we're simply issuing all statements in a batch and then committing, instead of building it up over several HTTP requests.
  -  Sample input:
  -  '((:statements
  -      ((:statement . \"MATCH (n:User {properties} ) RETURN n\")
  -       (:parameters (:properties (:name . \"bob\"))))))"
  +   For now, we're simply issuing all statements in a batch and then committing, instead of building it up over several HTTP requests.
  +   Sample input:
  +   '((:statements
  +       ((:statement . \"MATCH (n:User {properties} ) RETURN n\")
  +        (:parameters (:properties (:name . \"bob\"))))))
  +   If an error is detected, it will be signalled with whatever information was provided by Neo4J"
     (multiple-value-bind (reply-content code headers uri stream ignore reason)
       (drakma:http-request (concatenate 'string (base-url endpoint) "/db/data/transaction/commit")
                            :method :post
  
positive.code: (defun change-password (server new-password)
    "Change a Neo4J user's password.
     If the db operation is successful, update the server object so that this takes immediate effect within this server.
     NB: remember to update whatever you're using to init"
    (multiple-value-bind (body numeric verbal headers)
      (neo4j-cypher-post-request server
                                 `((:password . ,new-password))
  
negative.code: 
  (defun get-user-status (server)
    "Authenticate to the Neo4J server and confirm the status of the database user.
     200/OK means the credentials are good.
     401/Unauthorized means they're not.
     The presence of (:PASSWORD--CHANGE--REQUIRED . T) in the body of the reply, well, you get the hint."
    (neo4j-cypher-get-request server (concatenate 'string "/user/" (dbuser server))))
  
  (defun neo4j-cypher-post-request (endpoint content &optional uri)
  