Index: gecode/search/parallel/path.hh
===================================================================
--- gecode/search/parallel/path.hh	(revision 9185)
+++ gecode/search/parallel/path.hh	(working copy)
@@ -96,6 +96,7 @@
       /// Free memory for node
       void dispose(void);
     };
+  protected:
     /// Stack to store node information
     Support::DynamicStack<Node,Heap> ds;
     /// Number of nodes that have work for stealing
@@ -107,6 +108,10 @@
     const BranchingDesc* push(Worker& stat, Space* s, Space* c);
     /// Generate path for next node and return whether a next node exists
     bool next(Worker& s);
+    /// Provide access to topmost node
+    Node& top(void) const;
+    /// Test whether path is empty
+    bool empty(void) const;
     /// Return position on stack of last copy
     int lc(void) const;
     /// Unwind the stack up to position \a l (after failure)
@@ -223,6 +228,17 @@
     return false;
   }
 
+  forceinline Path::Node&
+  Path::top(void) const {
+    assert(!ds.empty());
+    return ds.top();
+  }
+
+  forceinline bool
+  Path::empty(void) const {
+    return ds.empty();
+  }
+
   forceinline void
   Path::commit(Space* s, int i) const {
     const Node& n = ds[i];
Index: gecode/search/sequential/path.hh
===================================================================
--- gecode/search/sequential/path.hh	(revision 9185)
+++ gecode/search/sequential/path.hh	(working copy)
@@ -90,6 +90,7 @@
       /// Free memory for node
       void dispose(void);
     };
+  protected:
     /// Stack to store node information
     Support::DynamicStack<Node,Heap> ds;
   public:
@@ -99,6 +100,10 @@
     const BranchingDesc* push(Worker& stat, Space* s, Space* c);
     /// Generate path for next node and return whether a next node exists
     bool next(Worker& s);
+    /// Provide access to topmost node
+    Node& top(void) const;
+    /// Test whether path is empty
+    bool empty(void) const;
     /// Return position on stack of last copy
     int lc(void) const;
     /// Unwind the stack up to position \a l (after failure)
@@ -195,6 +200,17 @@
     return false;
   }
 
+  forceinline Path::Node&
+  Path::top(void) const {
+    assert(!ds.empty());
+    return ds.top();
+  }
+
+  forceinline bool
+  Path::empty(void) const {
+    return ds.empty();
+  }
+
   forceinline void
   Path::commit(Space* s, int i) const {
     const Node& n = ds[i];
Index: changelog.in
===================================================================
--- changelog.in	(revision 9186)
+++ changelog.in	(working copy)
@@ -73,6 +73,14 @@
 The next release.
 
 [ENTRY]
+Module: search
+What:   change
+Rank:   minor
+Thanks: Vincent Barichard
+[DESCRIPTION]
+Path for search provides top and empty methods.
+
+[ENTRY]
 Module: driver
 What:   change
 Rank:   minor
