Index: src/main/java/org/apache/jackrabbit/spi/LockInfo.java
===================================================================
--- src/main/java/org/apache/jackrabbit/spi/LockInfo.java	(revision 752106)
+++ src/main/java/org/apache/jackrabbit/spi/LockInfo.java	(working copy)
@@ -26,8 +26,8 @@
 public interface LockInfo {
 
     /**
-     * Returns the lock token for this lock if it is hold by the requesting
-     * session or <code>null</code> otherwise.
+     * Returns the lock token for this lock or <code>null</code> if the token
+     * should not be exposed to the API user.
      *
      * @return lock token or <code>null</code>
      * @see javax.jcr.lock.Lock#getLockToken()
@@ -35,7 +35,8 @@
     public String getLockToken();
 
     /**
-     * Returns the user ID of the user who owns this lock.
+     * Returns the user ID of the user who owns this lock or some user defined
+     * information about the lock owner.
      *
      * @return user ID of the user who owns this lock.
      * @see javax.jcr.lock.Lock#getLockOwner()
@@ -57,8 +58,30 @@
      * @see javax.jcr.lock.Lock#isSessionScoped()
      */
     public boolean isSessionScoped();
+ 
+    /**
+     * Returns the seconds remaining until the lock times out or
+     * ({@link Long#MAX_VALUE} if the timeout is unknown or infinite).
+     *
+     * @return number of seconds until the lock times out.
+     * @see javax.jcr.lock.Lock#getSecondsRemaining()
+     * @since JCR 2.0
+     */
+    public long getSecondsRemaining();
 
     /**
+     * Returns <code>true</code> if the <code>SessionInfo</code> used to
+     * retrieve this <code>LockInfo</code> is the lock holder and thus enabled
+     * to refresh or release the lock.
+     *
+     * @return <code>true</code> if the <code>SessionInfo</code> used to
+     * retrieve this <code>LockInfo</code> is the lock holder.
+     * @see javax.jcr.lock.Lock#isLockOwningSession()
+     * @since JCR 2.0
+     */
+    public boolean isLockOwner();
+
+    /**
      * Returns the <code>NodeId</code> of the lock-holding Node.
      *
      * @return the <code>NodeId</code> of the lock-holding Node.
Index: src/main/java/org/apache/jackrabbit/spi/RepositoryService.java
===================================================================
--- src/main/java/org/apache/jackrabbit/spi/RepositoryService.java	(revision 752106)
+++ src/main/java/org/apache/jackrabbit/spi/RepositoryService.java	(working copy)
@@ -511,6 +511,30 @@
     public LockInfo lock(SessionInfo sessionInfo, NodeId nodeId, boolean deep, boolean sessionScoped) throws UnsupportedRepositoryOperationException, LockException, AccessDeniedException, RepositoryException;
 
     /**
+     * Create a lock on the <code>Node</code> identified by the given id.
+     *
+     * @param sessionInfo
+     * @param nodeId
+     * @param deep
+     * @param sessionScoped
+     * @param timeoutHint long indicating the desired lock timeout in seconds.
+     * The implementation is free to ignore the hint.
+     * @param ownerHint String indicating the desired lockOwner info. The
+     * implementation is free to ignore the hint.
+     * @return The <code>LockInfo</code> associated with the new lock
+     * that has been created.
+     * @throws javax.jcr.UnsupportedRepositoryOperationException If this SPI
+     * implementation does not support locking at all.
+     * @throws javax.jcr.lock.LockException If the Node identified by the given
+     * id cannot be locked due to an existing lock or due to missing mixin type.
+     * @throws javax.jcr.AccessDeniedException
+     * @throws javax.jcr.RepositoryException If another error occurs.
+     * @see javax.jcr.lock.LockManager#lock(String, boolean, boolean, long, String)
+     * @since JCR 2.0
+     */
+    public LockInfo lock(SessionInfo sessionInfo, NodeId nodeId, boolean deep, boolean sessionScoped, long timeoutHint, String ownerHint) throws UnsupportedRepositoryOperationException, LockException, AccessDeniedException, RepositoryException;
+
+    /**
      * Explicit refresh of an existing lock. Existing locks should be refreshed
      * implicitely with all read and write methods listed here.
      *
