--- client/gui-gtk-2.0/helpdlg.c	2012-01-09 10:48:14.853159178 +0100
+++ client/gui-gtk-2.0/helpdlg.c	2012-01-09 10:22:55.000000000 +0100
@@ -821,6 +821,9 @@
   create_help_page(HELP_UNIT);
 
   if (utype) {
+    const char *req = REQ_LABEL_NONE;
+    char req_buf[512];
+
     sprintf(buf, "%d", utype_build_shield_cost(utype));
     gtk_label_set_text(GTK_LABEL(help_ulabel[0][1]), buf);
     sprintf(buf, "%d", utype->attack_strength);
@@ -837,13 +840,13 @@
 		       helptext_unit_upkeep_str(utype));
     sprintf(buf, "%d", (int)sqrt((double)utype->vision_radius_sq));
     gtk_label_set_text(GTK_LABEL(help_ulabel[3][4]), buf);
-    if (A_NEVER == utype->require_advance) {
-      gtk_label_set_text(GTK_LABEL(help_ulabel[4][1]), REQ_LABEL_NEVER);
-    } else {
-      gtk_label_set_text(GTK_LABEL(help_ulabel[4][1]),
-			 advance_name_for_player(client.conn.playing,
-				       advance_number(utype->require_advance)));
-    }
+
+    requirement_vector_iterate(&utype->reqs, preq) {
+      req = universal_name_translation(&preq->source, req_buf, sizeof(req_buf));
+      break;
+    } requirement_vector_iterate_end;
+    gtk_label_set_text(GTK_LABEL(help_ulabel[4][1]), req);
+
 /*    create_tech_tree(help_improvement_tree, 0, advance_number(utype->require_advance), 3);*/
     if (U_NOT_OBSOLETED == utype->obsoleted_by) {
       gtk_label_set_text(GTK_LABEL(help_ulabel[4][4]), REQ_LABEL_NONE);
@@ -852,8 +855,6 @@
 			 utype_name_translation(utype->obsoleted_by));
     }
 
-    helptext_unit(buf, sizeof(buf), client.conn.playing, pitem->text, utype);
-
     gtk_text_buffer_set_text(help_text, buf, -1);
     gtk_widget_show(help_text_sw);
 
@@ -880,10 +881,11 @@
 
     gtk_label_set_text(GTK_LABEL(help_ulabel[4][1]), REQ_LABEL_NEVER);
 /*    create_tech_tree(help_improvement_tree, 0, A_LAST, 3);*/
-    gtk_label_set_text(GTK_LABEL(help_ulabel[4][4]), REQ_LABEL_NONE);
 
+    helptext_unit(buf, sizeof(buf), client.conn.playing, pitem->text, utype);
     gtk_text_buffer_set_text(help_text, buf, -1);
     gtk_widget_show(help_text_sw);
+
   }
   gtk_widget_show(help_utable);
 }
@@ -997,16 +999,18 @@
     } improvement_iterate_end;
 
     unit_type_iterate(punittype) {
-      if (padvance != punittype->require_advance) {
-	continue;
-      }
-      hbox = gtk_hbox_new(FALSE, 0);
-      gtk_container_add(GTK_CONTAINER(help_vbox), hbox);
-      w = gtk_label_new(_("Allows"));
-      gtk_box_pack_start(GTK_BOX(hbox), w, FALSE, FALSE, 0);
-      w = help_slink_new(utype_name_translation(punittype), HELP_UNIT);
-      gtk_box_pack_start(GTK_BOX(hbox), w, FALSE, FALSE, 0);
-      gtk_widget_show_all(hbox);
+      requirement_vector_iterate(&punittype->reqs, preq) {
+	if (VUT_ADVANCE == preq->source.kind
+	    && preq->source.value.advance == padvance) {
+          hbox = gtk_hbox_new(FALSE, 0);
+          gtk_container_add(GTK_CONTAINER(help_vbox), hbox);
+          w = gtk_label_new(_("Allows"));
+          gtk_box_pack_start(GTK_BOX(hbox), w, FALSE, FALSE, 0);
+          w = help_slink_new(utype_name_translation(punittype), HELP_UNIT);
+          gtk_box_pack_start(GTK_BOX(hbox), w, FALSE, FALSE, 0);
+          gtk_widget_show_all(hbox);
+	}
+      } requirement_vector_iterate_end;
     } unit_type_iterate_end;
 
     advance_iterate(A_NONE, ptest) {
