diff --git a/ghc/driver/ghc.lprl b/ghc/driver/ghc.lprl
index 9f96736deebe451a74d55fbd1d99a9de040bd25e..3a1e23ceeb83e75033f48134f03e9d24d0d045e7 100644
--- a/ghc/driver/ghc.lprl
+++ b/ghc/driver/ghc.lprl
@@ -704,6 +704,17 @@ sub setupOptimiseFlags {
 #	  '-fsimpl-uf-use-threshold0',
 #	  '-fessential-unfoldings-only',
 
+	  #
+	  # The presence of -fclone-binds is *temporary* to work around
+          # the fact that the desugarer in 3.0{2.3} does generate
+	  # bindings with identical ids, and the type checker doesn't perform
+	  # properly cloned type substitutions. Instead, we make sure that all 
+	  # binders are cloned first time through the simplifier.
+          #
+	  # Will be properly fixed in the `new compiler` I hear, at which point
+	  # the cloning can be turned off here.
+          '-fclone-binds',
+
 	  $Oopt_MaxSimplifierIterations,
 	  $Oopt_ShowSimplifierProgress,
 	  ']',
@@ -739,6 +750,9 @@ sub setupOptimiseFlags {
 #	  '-fessential-unfoldings-only',
 #	  '-fsimpl-uf-use-threshold0',
 
+	  # See remark re: cloning in defn of minusnotO
+	  '-fclone-binds',
+
 	  '-fmax-simplifier-iterations1',
 	  $Oopt_PedanticBottoms,
 	  ']',
@@ -2833,7 +2847,7 @@ arg: while($_ = $Args[0]) {
 			    } elsif ( $syslib eq 'misc' && 
 				      $TargetPlatform =~ /-solaris2$/ ) {
 				# needed for Berkeley socket/nwork stuff.
-				push(@SysLibrary, '-lnsl');
+				push(@SysLibrary, '-lnsl -lsocket');
 			    } elsif ( $syslib eq 'win32' && 
 				      $TargetPlatform =~ /-cygwin32$/ ) {
 				# need to get at UI/Graphics functionality.
@@ -2983,6 +2997,9 @@ arg: while($_ = $Args[0]) {
     /^-funfolding-.*$/
 		    && do { push(@HsC_flags, $_); next arg };
 
+    /^-funfold-casms-in-hi-file$/
+		    && do { push(@HsC_flags, $_); next arg };
+
     /^(-fmax-simplifier-iterations)(.*)$/
 		    && do { $Oopt_MaxSimplifierIterations = $1 . &grab_arg_arg(*Args,$1, $2);
 			    next arg; };