diff --git a/ghc/driver/ghc-iface.lprl b/ghc/driver/ghc-iface.lprl
index d72f128be2508fa6f04efb698f77fd907124d21a..f3e3a3edd3463b0746866a23d1866af373fbbdca 100644
--- a/ghc/driver/ghc-iface.lprl
+++ b/ghc/driver/ghc-iface.lprl
@@ -12,7 +12,7 @@
 %HiHasBeenRead = ('old', 0,  'new', 0);
 %ModuleVersion = ('old', 0,  'new', 0);
 
-
+%HiSections = ();
 
 sub postprocessHiFile {
     local($hsc_hi,		# The iface info produced by hsc.
@@ -51,7 +51,19 @@ sub postprocessHiFile {
     # if we produced an interface file "no matter what",
     # print what we got on stderr (ToDo: honor -ohi flag)
     if ( $HiOnStdout ) {
-        system("$Cat $new_hi 1>&2"); # if $Verbose;
+        if ( $HiWith ne '' ) {
+	    # output some of the sections
+	    local($hi_after)  = "$Tmp_prefix.hi-now";
+
+	    foreach $hi ( split(' ',$HiWith) ) { 
+	    	$HiSection{$hi} = 1; 
+	    }
+	    &hiSectionsOnly($new_hi, $hi_after);
+
+	    system("$Cat $hi_after 1>&2 ; $Rm $hi_after; ");
+	} else {
+            system("$Cat $new_hi 1>&2");
+	}
     } else {
 	&run_something("$Cmp -s $hifile_target $new_hi || ( $Rm $hifile_target && $Cp $new_hi $hifile_target )",
 	   "Replace .$HiSuffix file, if changed");
@@ -85,6 +97,27 @@ sub deUsagifyHi {
     close(OLDHIF) || &tidy_up_and_die(1,"Failed reading from $ifile\n");
     close(NEWHIF) || &tidy_up_and_die(1,"Failed writing to $ofile\n");
 }
+
+sub hiSectionsOnly {
+    local($ifile,$ofile) = @_;
+
+    open(OLDHIF, "< $ifile") || &tidy_up_and_die(1,"Can't open $ifile (read)\n");
+    open(NEWHIF, "> $ofile") || &tidy_up_and_die(1,"Can't open $ofile (write)\n");
+
+    # read up to _usages_ line
+    $_ = <OLDHIF>;
+    while ($_ ne '' ) {
+	if ( /^_(.*)_/ && $HiSection{$1} )  {
+       	     do { print NEWHIF $_;
+       	          $_ = <OLDHIF>;} until ($_ eq '' || /^_/ );
+        } else {
+          $_ = <OLDHIF>;
+	}
+    }
+
+    close(OLDHIF) || &tidy_up_and_die(1,"Failed reading from $ifile\n");
+    close(NEWHIF) || &tidy_up_and_die(1,"Failed writing to $ofile\n");
+}
 \end{code}
 
 \begin{code}
@@ -341,13 +374,6 @@ sub printNewItemVersion {
 }
 \end{code}
 
-\begin{code}
-sub findHiChanges {
-    local($hsc_hi,	        # The iface info produced by hsc.
-	  $hifile_target) = @_; # Pre-existing .hi filename (if it exists)
-}
-\end{code}
-
 \begin{code}
 # make "require"r happy...
 1;