diff -ru -x TAGS orig-8.3pl2/configure patch-8.3pl2/configure
--- orig-8.3pl2/configure	2011-04-19 09:19:00.000000000 +0200
+++ coq-8.3pl2/configure	2011-04-29 17:13:22.000000000 +0200
@@ -6,7 +6,7 @@
 # 
 ##################################
 
-VERSION=8.3pl2
+VERSION=8.3pl2.ID
 VOMAGIC=08300
 STATEMAGIC=58300
 DATE=`LANG=C date +"%B %Y"`
diff -ru -x TAGS orig-8.3pl2/parsing/printer.ml patch-8.3pl2/parsing/printer.ml
--- orig-8.3pl2/parsing/printer.ml	2010-09-02 10:03:01.000000000 +0200
+++ coq-8.3pl2/parsing/printer.ml	2011-04-29 17:10:55.000000000 +0200
@@ -297,12 +297,18 @@
 		       str "============================" ++ fnl ()  ++
 		       thesis ++ str " " ++  pc) ++ fnl ()
 
+(* display a goal tag *)
+let pr_goal_tag g =
+  let s = "(ID " ^ (string_of_int (evar_tag g)) ^ ")" in
+  str (emacs_str s s)
+
 (* display the conclusion of a goal *)
 let pr_concl n g =
   let env = evar_env g in
   let pc = pr_ltype_env_at_top env g.evar_concl in
     str (emacs_str (String.make 1 (Char.chr 253)) "")  ++
-      str "subgoal " ++ int n ++ str " is:" ++ cut () ++ str" "  ++ pc
+      str "subgoal " ++ int n ++ str " " ++ (pr_goal_tag g) ++
+      str " is:" ++ cut () ++ str" "  ++ pc
 
 (* display evar type: a context and a type *)
 let pr_evgl_sign gl =
@@ -326,13 +332,27 @@
               str (string_of_existential ev)  ++ str " : " ++ pegl)) ++
       fnl () ++ pei
 
+(* Print the names of instantiated existential variables *)
+let pr_inst_evars sigma = 
+  let rec pvrec = function
+    | [] -> (mt ())
+    | (ev,evd)::rest ->
+      str (string_of_existential ev) ++ str " " ++ (pvrec rest)
+  in
+  pvrec (Evarutil.instantiated sigma)
+
 let default_pr_subgoal n =
   let rec prrec p = function
     | [] -> error "No such goal."
     | g::rest ->
        	if p = 1 then
           let pg = default_pr_goal g in
-          v 0 (str "subgoal " ++ int n ++ str " is:" ++ cut () ++ pg)
+	  let sigma = (top_goal_of_pftreestate (get_pftreestate ())).sigma in
+	  let inst_evars = pr_inst_evars sigma in
+          v 0 (str "subgoal " ++ int n ++ str " "
+	       ++ (pr_goal_tag g)
+	       ++ str " is:" ++ cut () ++ pg ++ cut ()
+	       ++ str "Instantiated existentials: " ++ inst_evars)
        	else
 	  prrec (p-1) rest
   in
@@ -357,7 +377,11 @@
       end
   | [g] ->
       let pg = default_pr_goal g in
-      v 0 (str ("1 "^"subgoal") ++cut () ++ pg)
+      let inst_evars = pr_inst_evars sigma in
+      v 0 (str ("1 "^"subgoal") ++ str " " 
+	   ++ (pr_goal_tag g)
+	   ++ cut () ++ pg ++ cut ()
+	   ++ str "Instantiated existentials: " ++ inst_evars)
   | g1::rest ->
       let rec pr_rec n = function
         | [] -> (mt ())
@@ -367,9 +391,13 @@
             (cut () ++ pc ++ prest)
       in
       let pg1 = default_pr_goal g1 in
+      let inst_evars = pr_inst_evars sigma in
       let prest = pr_rec 2 rest in
-      v 0 (int(List.length rest+1) ++ str" subgoals" ++ cut ()
-	   ++ pg1 ++ prest ++ fnl ())
+      v 0 (int(List.length rest+1) ++ str" subgoals, subgoal 1 " 
+	   ++ (pr_goal_tag g1)
+	   ++ cut ()
+	   ++ pg1 ++ prest ++ cut ()
+	   ++ str "Instantiated existentials: " ++ inst_evars)
 
 
 (**********************************************************************)
diff -ru -x TAGS orig-8.3pl2/pretyping/evarutil.ml patch-8.3pl2/pretyping/evarutil.ml
--- orig-8.3pl2/pretyping/evarutil.ml	2010-07-27 00:12:43.000000000 +0200
+++ coq-8.3pl2/pretyping/evarutil.ml	2011-04-29 17:10:55.000000000 +0200
@@ -139,6 +139,16 @@
 	 ((ev,nf_evar_info sigma evi)::l) else l)
     [] listev
 
+(* The list of instantiated existential declarations *)
+
+let instantiated sigma =
+  let listev = to_list sigma in
+  List.fold_left
+    (fun l (ev,evi) ->
+       if evi.evar_body <> Evar_empty then
+	 ((ev,nf_evar_info sigma evi)::l) else l)
+    [] listev
+
 (**********************)
 (* Creating new evars *)
 (**********************)
diff -ru -x TAGS orig-8.3pl2/pretyping/evarutil.mli patch-8.3pl2/pretyping/evarutil.mli
--- orig-8.3pl2/pretyping/evarutil.mli	2010-07-24 17:57:30.000000000 +0200
+++ coq-8.3pl2/pretyping/evarutil.mli	2011-04-29 17:10:55.000000000 +0200
@@ -69,6 +69,8 @@
 
 val non_instantiated : evar_map -> (evar * evar_info) list
 
+val instantiated : evar_map -> (evar * evar_info) list
+
 (***********************************************************)
 (* Unification utils *)
 
diff -ru -x TAGS orig-8.3pl2/pretyping/evd.ml patch-8.3pl2/pretyping/evd.ml
--- orig-8.3pl2/pretyping/evd.ml	2011-03-10 16:50:24.000000000 +0100
+++ coq-8.3pl2/pretyping/evd.ml	2011-04-29 17:10:55.000000000 +0200
@@ -51,22 +51,29 @@
   evar_body : evar_body;
   evar_filter : bool list;
   evar_source : hole_kind located;
-  evar_extra : Dyn.t option}
+  evar_extra : Dyn.t option;
+  evar_tag : int}
 
-let make_evar hyps ccl = {
-  evar_concl = ccl;
-  evar_hyps = hyps;
-  evar_body = Evar_empty;
-  evar_filter = List.map (fun _ -> true) (named_context_of_val hyps);
-  evar_source = (dummy_loc,InternalHole);
-  evar_extra = None
-}
+let evar_counter = ref 0
+
+let make_evar hyps ccl = 
+  incr evar_counter;
+  {
+    evar_concl = ccl;
+    evar_hyps = hyps;
+    evar_body = Evar_empty;
+    evar_filter = List.map (fun _ -> true) (named_context_of_val hyps);
+    evar_source = (dummy_loc,InternalHole);
+    evar_extra = None;
+    evar_tag = !evar_counter
+  }
 
 let evar_concl evi = evi.evar_concl
 let evar_hyps evi = evi.evar_hyps
 let evar_context evi = named_context_of_val evi.evar_hyps
 let evar_body evi = evi.evar_body
 let evar_filter evi = evi.evar_filter
+let evar_tag evi = evi.evar_tag
 let evar_unfiltered_env evi = Global.env_of_context evi.evar_hyps
 let evar_filtered_context evi =
   snd (list_filter2 (fun b c -> b) (evar_filter evi,evar_context evi))
@@ -531,14 +538,21 @@
       assert (List.length filter = List.length (named_context_of_val hyps));
       filter)
   in
+  let evar_add = 
+    incr evar_counter;
+    {
+      evar_hyps = hyps;
+      evar_concl = ty;
+      evar_body = Evar_empty;
+      evar_filter = filter;
+      evar_source = src;
+      evar_extra = None;
+      evar_tag = !evar_counter
+    }
+  in
   { evd with
-    evars = EvarMap.add evd.evars evk
-      {evar_hyps = hyps;
-       evar_concl = ty;
-       evar_body = Evar_empty;
-       evar_filter = filter;
-       evar_source = src;
-       evar_extra = None} }
+    evars = EvarMap.add evd.evars evk evar_add 
+  }
 
 let is_defined_evar evd (evk,_) = EvarMap.is_defined evd.evars evk
 
diff -ru -x TAGS orig-8.3pl2/pretyping/evd.mli patch-8.3pl2/pretyping/evd.mli
--- orig-8.3pl2/pretyping/evd.mli	2011-03-10 16:50:24.000000000 +0100
+++ coq-8.3pl2/pretyping/evd.mli	2011-04-29 17:10:55.000000000 +0200
@@ -122,7 +122,10 @@
   evar_body : evar_body;
   evar_filter : bool list;
   evar_source : hole_kind located;
-  evar_extra : Dyn.t option}
+  evar_extra : Dyn.t option;
+  evar_tag : int}
+
+val evar_counter : int ref
 
 val eq_evar_info : evar_info -> evar_info -> bool
 
@@ -133,6 +136,7 @@
 val evar_hyps : evar_info -> named_context_val
 val evar_body : evar_info -> evar_body
 val evar_filter : evar_info -> bool list
+val evar_tag : evar_info -> int
 val evar_unfiltered_env :  evar_info -> env
 val evar_env :  evar_info -> env
 
diff -ru -x TAGS orig-8.3pl2/proofs/proof_trees.ml patch-8.3pl2/proofs/proof_trees.ml
--- orig-8.3pl2/proofs/proof_trees.ml	2010-07-24 17:57:30.000000000 +0200
+++ coq-8.3pl2/proofs/proof_trees.ml	2011-04-29 17:10:55.000000000 +0200
@@ -34,10 +34,13 @@
 (* Functions on goals *)
 
 let mk_goal hyps cl extra =
+  incr evar_counter;
   { evar_hyps = hyps; evar_concl = cl;
     evar_filter = List.map (fun _ -> true) (named_context_of_val hyps);
     evar_body = Evar_empty; evar_source = (dummy_loc,GoalEvar); 
-    evar_extra = extra }
+    evar_extra = extra;
+    evar_tag = !evar_counter
+  }
 
 (* Functions on proof trees *)
 
