diff --git a/collects/lazy/mz-without-promises.ss b/collects/lazy/mz-without-promises.rkt
similarity index 100%
rename from collects/lazy/mz-without-promises.ss
rename to collects/lazy/mz-without-promises.rkt
diff --git a/collects/mzlib/a-signature.ss b/collects/mzlib/a-signature.rkt
similarity index 100%
rename from collects/mzlib/a-signature.ss
rename to collects/mzlib/a-signature.rkt
diff --git a/collects/mzlib/a-unit.ss b/collects/mzlib/a-unit.rkt
similarity index 100%
rename from collects/mzlib/a-unit.ss
rename to collects/mzlib/a-unit.rkt
diff --git a/collects/mzlib/async-channel.ss b/collects/mzlib/async-channel.rkt
similarity index 100%
rename from collects/mzlib/async-channel.ss
rename to collects/mzlib/async-channel.rkt
diff --git a/collects/mzlib/awk.ss b/collects/mzlib/awk.rkt
similarity index 100%
rename from collects/mzlib/awk.ss
rename to collects/mzlib/awk.rkt
diff --git a/collects/mzlib/class.ss b/collects/mzlib/class.rkt
similarity index 53%
rename from collects/mzlib/class.ss
rename to collects/mzlib/class.rkt
index 55e0f0d..4e2e272 100644
--- a/collects/mzlib/class.ss
+++ b/collects/mzlib/class.rkt
@@ -1,3 +1,3 @@
 (module class mzscheme
-  (require scheme/private/class-internal)
+  (require racket/private/class-internal)
   (provide-public-names))
diff --git a/collects/mzlib/cm-accomplice.ss b/collects/mzlib/cm-accomplice.rkt
similarity index 100%
rename from collects/mzlib/cm-accomplice.ss
rename to collects/mzlib/cm-accomplice.rkt
diff --git a/collects/mzlib/cm.ss b/collects/mzlib/cm.rkt
similarity index 100%
rename from collects/mzlib/cm.ss
rename to collects/mzlib/cm.rkt
diff --git a/collects/mzlib/cmdline.ss b/collects/mzlib/cmdline.rkt
similarity index 100%
rename from collects/mzlib/cmdline.ss
rename to collects/mzlib/cmdline.rkt
diff --git a/collects/mzlib/cml.ss b/collects/mzlib/cml.rkt
similarity index 100%
rename from collects/mzlib/cml.ss
rename to collects/mzlib/cml.rkt
diff --git a/collects/mzlib/compat.ss b/collects/mzlib/compat.rkt
similarity index 100%
rename from collects/mzlib/compat.ss
rename to collects/mzlib/compat.rkt
diff --git a/collects/mzlib/contract.ss b/collects/mzlib/contract.rkt
similarity index 63%
rename from collects/mzlib/contract.ss
rename to collects/mzlib/contract.rkt
index 3c6ef88..8516d28 100644
--- a/collects/mzlib/contract.ss
+++ b/collects/mzlib/contract.rkt
@@ -1,4 +1,4 @@
-#lang scheme/base
+#lang racket/base
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
@@ -25,37 +25,37 @@
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
-;; provide everything from the scheme/ implementation
+;; provide everything from the racket/ implementation
 ;; except the arrow contracts
 ;;
 
-(require scheme/contract/private/base
-         scheme/contract/private/misc
-         scheme/contract/private/provide
-         scheme/contract/private/guts
-         scheme/contract/private/ds
-         scheme/contract/private/opt
-         scheme/contract/private/basic-opters)
+(require racket/contract/private/base
+         racket/contract/private/misc
+         racket/contract/private/provide
+         racket/contract/private/guts
+         racket/contract/private/ds
+         racket/contract/private/opt
+         racket/contract/private/basic-opters)
 
 (provide 
  opt/c define-opt/c ;(all-from "private/contract-opt.ss")
- (except-out (all-from-out scheme/contract/private/ds)
+ (except-out (all-from-out racket/contract/private/ds)
              lazy-depth-to-look)
  
- (all-from-out scheme/contract/private/base)
- (all-from-out scheme/contract/private/provide)
- (except-out (all-from-out scheme/contract/private/misc)
+ (all-from-out racket/contract/private/base)
+ (all-from-out racket/contract/private/provide)
+ (except-out (all-from-out racket/contract/private/misc)
              check-between/c
              string-len/c
              check-unary-between/c)
  (rename-out [or/c union])
  (rename-out [string-len/c string/len])
- (except-out (all-from-out scheme/contract/private/guts)
+ (except-out (all-from-out racket/contract/private/guts)
              check-flat-contract
              check-flat-named-contract))
 
 
-;; copied here because not provided by scheme/contract anymore
+;; copied here because not provided by racket/contract anymore
 (define (flat-contract/predicate? pred)
   (or (flat-contract? pred)
       (and (procedure? pred)
diff --git a/collects/mzlib/control.ss b/collects/mzlib/control.rkt
similarity index 100%
rename from collects/mzlib/control.ss
rename to collects/mzlib/control.rkt
diff --git a/collects/mzlib/date.ss b/collects/mzlib/date.rkt
similarity index 100%
rename from collects/mzlib/date.ss
rename to collects/mzlib/date.rkt
diff --git a/collects/mzlib/deflate.ss b/collects/mzlib/deflate.rkt
similarity index 100%
rename from collects/mzlib/deflate.ss
rename to collects/mzlib/deflate.rkt
diff --git a/collects/mzlib/defmacro.ss b/collects/mzlib/defmacro.rkt
similarity index 100%
rename from collects/mzlib/defmacro.ss
rename to collects/mzlib/defmacro.rkt
diff --git a/collects/mzlib/etc.ss b/collects/mzlib/etc.rkt
similarity index 79%
rename from collects/mzlib/etc.ss
rename to collects/mzlib/etc.rkt
index c9b28bb..3694123 100644
--- a/collects/mzlib/etc.ss
+++ b/collects/mzlib/etc.rkt
@@ -1,8 +1,9 @@
 #lang mzscheme
 
 (require setup/main-collects
-         scheme/local
-         scheme/bool
+         racket/local
+         racket/bool 
+         racket/block
          (only scheme/base
                build-string
                build-list
@@ -46,7 +47,7 @@
 
          hash-table
 
-         begin-with-definitions
+         (rename block begin-with-definitions)
 
          begin-lifted)
 
@@ -349,80 +350,6 @@
                 ht)))]
          [_else (raise-syntax-error 'hash-table "bad syntax" stx)]))]))
 
-(define-syntax (begin-with-definitions stx)
-  ;; Body can have mixed exprs and defns. Wrap expressions with
-  ;; `(define-values () ... (values))' as needed, and add a (void)
-  ;; at the end if needed.
-  (let* ([def-ctx (syntax-local-make-definition-context)]
-         [ctx (list (gensym 'intdef))]
-         [kernel-forms (kernel-form-identifier-list)]
-         [init-exprs (let ([v (syntax->list stx)])
-                       (unless v
-                         (raise-syntax-error #f "bad syntax" stx))
-                       (cdr v))]
-         [exprs (let loop ([exprs init-exprs])
-                  (apply
-                   append
-                   (map (lambda (expr)
-                          (let ([expr (local-expand expr ctx kernel-forms def-ctx)])
-                            (syntax-case expr (begin define-syntaxes define-values)
-                              [(begin . rest)
-                               (loop (syntax->list #'rest))]
-                              [(define-syntaxes (id ...) rhs)
-                               (andmap identifier? (syntax->list #'(id ...)))
-                               (with-syntax ([rhs (local-transformer-expand
-                                                   #'rhs
-                                                   'expression
-                                                   null)])
-                                 (syntax-local-bind-syntaxes
-                                  (syntax->list #'(id ...))
-                                  #'rhs def-ctx)
-                                 (list #'(define-syntaxes (id ...) rhs)))]
-                              [(define-values (id ...) rhs)
-                               (andmap identifier? (syntax->list #'(id ...)))
-                               (let ([ids (syntax->list #'(id ...))])
-                                 (syntax-local-bind-syntaxes ids #f def-ctx)
-                                 (list expr))]
-                              [else
-                               (list expr)])))
-                        exprs)))])
-    (internal-definition-context-seal def-ctx)
-    (let loop ([exprs exprs]
-               [prev-stx-defns null]
-               [prev-defns null]
-               [prev-exprs null])
-      (cond
-        [(null? exprs)
-         #`(letrec-syntaxes+values
-            #,(map stx-cdr (reverse prev-stx-defns))
-            #,(map stx-cdr (reverse prev-defns))
-            #,@(if (null? prev-exprs)
-                 (list #'(void))
-                 (reverse prev-exprs)))]
-        [(and (stx-pair? (car exprs))
-              (identifier? (stx-car (car exprs)))
-              (module-identifier=? #'define-syntaxes (stx-car (car exprs))))
-         (loop (cdr exprs)
-               (cons (car exprs) prev-stx-defns)
-               prev-defns
-               prev-exprs)]
-        [(and (stx-pair? (car exprs))
-              (identifier? (stx-car (car exprs)))
-              (module-identifier=? #'define-values (stx-car (car exprs))))
-         (loop (cdr exprs)
-               prev-stx-defns
-               (cons (car exprs)
-                     (append
-                      (map (lambda (expr)
-                             #`(define-values () (begin #,expr (values))))
-                           prev-exprs)
-                      prev-defns))
-               null)]
-        [else (loop (cdr exprs)
-                    prev-stx-defns
-                    prev-defns
-                    (cons (car exprs) prev-exprs))]))))
-
 (define-syntax (begin-lifted stx)
   (syntax-case stx ()
     [(_ expr0 expr ...)
diff --git a/collects/mzlib/file.ss b/collects/mzlib/file.rkt
similarity index 100%
rename from collects/mzlib/file.ss
rename to collects/mzlib/file.rkt
diff --git a/collects/mzlib/for.ss b/collects/mzlib/for.rkt
similarity index 100%
rename from collects/mzlib/for.ss
rename to collects/mzlib/for.rkt
diff --git a/collects/mzlib/foreign.ss b/collects/mzlib/foreign.rkt
similarity index 100%
rename from collects/mzlib/foreign.ss
rename to collects/mzlib/foreign.rkt
diff --git a/collects/mzlib/include.rkt b/collects/mzlib/include.rkt
new file mode 100644
index 0000000..b8f4606
--- /dev/null
+++ b/collects/mzlib/include.rkt
@@ -0,0 +1,216 @@
+
+(module include mzscheme
+  (require-for-syntax syntax/stx
+		      "private/increader.ss"
+		      "cm-accomplice.ss")
+  (require mzlib/etc)
+
+  (define-for-syntax (resolve-path-spec fn loc stx build-path-stx)
+    (let ([file
+	   (syntax-case* fn (lib) module-or-top-identifier=?
+	     [_
+	      (string? (syntax-e fn))
+	      (let ([s (syntax-e fn)])
+		(unless (or (relative-path? s)
+			    (absolute-path? s))
+		  (raise-syntax-error
+		   #f
+		   "bad pathname string"
+		   stx
+		   fn))
+		(string->path s))]
+	     [(-build-path elem ...)
+	      (module-or-top-identifier=? #'-build-path build-path-stx)
+	      (let ([l (syntax-object->datum (syntax (elem ...)))])
+		(when (null? l)
+		  (raise-syntax-error
+		   #f
+		   "`build-path' keyword is not followed by at least one string"
+		   stx
+		   fn))
+		(apply build-path l))]
+	     [(lib filename ...)
+	      (let ([l (syntax-object->datum (syntax (filename ...)))])
+		(unless (or (andmap string? l)
+			    (pair? l))
+		  (raise-syntax-error
+		   #f
+		   "`lib' keyword is not followed by a sequence of string datums"
+		   stx
+		   fn))
+		(build-path (if (null? (cdr l))
+				(collection-path "mzlib")
+				(apply collection-path (cdr l)))
+			    (car l)))]
+	     [else
+	      (raise-syntax-error
+	       #f
+	       "not a pathname string, `build-path' form, or `lib' form for file"
+	       stx
+	       fn)])])
+      (if (complete-path? file)
+	  file
+	  (path->complete-path
+	   file
+	   (cond
+	    ;; Src of include expression is a path?
+	    [(and (path? (syntax-source loc))
+		  (complete-path? (syntax-source loc)))
+	     (let-values ([(base name dir?) 
+			   (split-path (syntax-source loc))])
+	       (if dir?
+		   (syntax-source loc)
+		   base))]
+	    ;; Load relative?
+	    [(current-load-relative-directory)]
+	    ;; Current directory
+	    [(current-directory)])))))
+
+  (define-syntax-set (do-include ; private
+		      include-at/relative-to
+		      include
+		      include-at/relative-to/reader
+		      include/reader)
+
+    (define (do-include/proc stx)
+      (syntax-case stx ()
+	[(_ orig-stx ctx loc fn reader)
+	 ;; Parse the file name
+	 (let ([orig-c-file (resolve-path-spec (syntax fn) (syntax loc) (syntax orig-stx) #'build-path)]
+	       [ctx (syntax ctx)]
+	       [loc (syntax loc)]
+	       [reader (syntax reader)]
+	       [orig-stx (syntax orig-stx)]
+               [rkt->ss (lambda (p)
+                          (let ([b (path->bytes p)])
+                            (if (regexp-match? #rx#"[.]rkt$" b)
+                                (path-replace-suffix p #".ss")
+                                p)))])
+	   
+           (let ([c-file (if (file-exists? orig-c-file)
+                         orig-c-file
+                         (let ([p2 (rkt->ss orig-c-file)])
+                           (if (file-exists? p2)
+                               p2
+                               orig-c-file)))])
+             (register-external-file c-file)
+
+             (let ([read-syntax (if (syntax-e reader)
+                                    (reader-val
+                                     (let loop ([e (syntax-object->datum
+                                                    (local-expand reader 'expression null))])
+                                       (cond
+                                        [(reader? e) e]
+                                        [(pair? e) (or (loop (car e))
+                                                       (loop (cdr e)))]
+                                        [else #f])))
+                                    read-syntax)])
+               (unless (and (procedure? read-syntax)
+                            (procedure-arity-includes? read-syntax 2))
+                 (raise-syntax-error
+                  #f
+                  "reader is not a procedure of two arguments"
+                  orig-stx))
+
+               ;; Open the included file
+               (let ([p (with-handlers ([exn:fail?
+                                         (lambda (exn)
+                                           (raise-syntax-error
+                                            #f
+                                            (format
+                                             "can't open include file (~a)"
+                                             (if (exn? exn)
+                                                 (exn-message exn)
+                                                 exn))
+                                            orig-stx
+                                            c-file))])
+                          (open-input-file c-file))])
+                 (port-count-lines! p)
+                 ;; Read expressions from file
+                 (let ([content
+                        (let loop ()
+                          (let ([r (with-handlers ([exn:fail?
+                                                    (lambda (exn)
+                                                      (close-input-port p)
+                                                      (raise-syntax-error
+                                                       #f
+                                                       (format
+                                                        "read error (~a)"
+                                                        (if (exn? exn)
+                                                            (exn-message exn)
+                                                            exn))
+                                                       orig-stx))])
+                                     (read-syntax c-file p))])
+                            (if (eof-object? r)
+                                null
+                                (cons r (loop)))))])
+                   (close-input-port p)
+                   ;; Preserve src info for content, but set its
+                   ;; lexical context to be that of the include expression
+                   (let ([lexed-content
+                          (let loop ([content content])
+                            (cond
+                             [(pair? content)
+                              (cons (loop (car content))
+                                    (loop (cdr content)))]
+                             [(null? content) null]
+                             [else
+                              (let ([v (syntax-e content)])
+                                (datum->syntax-object
+                                 ctx
+                                 (cond
+                                  [(pair? v) 
+                                   (loop v)]
+                                  [(vector? v)
+                                   (list->vector (loop (vector->list v)))]
+                                  [(box? v)
+                                   (box (loop (unbox v)))]
+                                  [else
+                                   v])
+                                 content))]))])
+                     (datum->syntax-object
+                      (quote-syntax here)
+                      `(begin ,@lexed-content)
+                      orig-stx)))))))]))
+    
+    (define (include/proc stx)
+      (syntax-case stx ()
+	[(_ fn)
+	 (with-syntax ([_stx stx])
+	   (syntax/loc stx (do-include _stx _stx _stx fn #f)))]))
+
+    (define (include-at/relative-to/proc stx)
+      (syntax-case stx ()
+	[(_ ctx loc fn)
+	 (with-syntax ([_stx stx])
+	   (syntax/loc stx (do-include _stx ctx loc fn #f)))]))
+      
+    (define (include/reader/proc stx)
+      (syntax-case stx ()
+	[(_ fn reader)
+	 ;; Expand to do-include:
+	 (with-syntax ([_stx stx])
+	   (syntax/loc stx 
+	     (do-include _stx _stx _stx fn 
+			 (letrec-syntax ([the-reader (lambda (stx)
+						       (datum->syntax-object
+							#'here
+							(make-reader reader)))])
+			   the-reader))))]))
+    
+    (define (include-at/relative-to/reader/proc stx)
+      (syntax-case stx ()
+	[(_ ctx loc fn reader)
+	 (with-syntax ([_stx stx])
+	   (syntax/loc stx 
+	     (do-include _stx ctx loc fn 
+			 (letrec-syntax ([the-reader (lambda (stx)
+						       (datum->syntax-object
+							#'here
+							(make-reader reader)))])
+			   the-reader))))])))
+  
+  (provide include
+	   include-at/relative-to
+	   include/reader
+	   include-at/relative-to/reader))
diff --git a/collects/mzlib/include.ss b/collects/mzlib/include.ss
deleted file mode 100644
index d86dee9..0000000
--- a/collects/mzlib/include.ss
+++ /dev/null
@@ -1,205 +0,0 @@
-
-(module include mzscheme
-  (require-for-syntax syntax/stx
-		      "private/increader.ss"
-		      "cm-accomplice.ss")
-  (require mzlib/etc)
-
-  (define-for-syntax (resolve-path-spec fn loc stx build-path-stx)
-    (let ([file
-	   (syntax-case* fn (lib) module-or-top-identifier=?
-	     [_
-	      (string? (syntax-e fn))
-	      (let ([s (syntax-e fn)])
-		(unless (or (relative-path? s)
-			    (absolute-path? s))
-		  (raise-syntax-error
-		   #f
-		   "bad pathname string"
-		   stx
-		   fn))
-		(string->path s))]
-	     [(-build-path elem ...)
-	      (module-or-top-identifier=? #'-build-path build-path-stx)
-	      (let ([l (syntax-object->datum (syntax (elem ...)))])
-		(when (null? l)
-		  (raise-syntax-error
-		   #f
-		   "`build-path' keyword is not followed by at least one string"
-		   stx
-		   fn))
-		(apply build-path l))]
-	     [(lib filename ...)
-	      (let ([l (syntax-object->datum (syntax (filename ...)))])
-		(unless (or (andmap string? l)
-			    (pair? l))
-		  (raise-syntax-error
-		   #f
-		   "`lib' keyword is not followed by a sequence of string datums"
-		   stx
-		   fn))
-		(build-path (if (null? (cdr l))
-				(collection-path "mzlib")
-				(apply collection-path (cdr l)))
-			    (car l)))]
-	     [else
-	      (raise-syntax-error
-	       #f
-	       "not a pathname string, `build-path' form, or `lib' form for file"
-	       stx
-	       fn)])])
-      (if (complete-path? file)
-	  file
-	  (path->complete-path
-	   file
-	   (cond
-	    ;; Src of include expression is a path?
-	    [(and (path? (syntax-source loc))
-		  (complete-path? (syntax-source loc)))
-	     (let-values ([(base name dir?) 
-			   (split-path (syntax-source loc))])
-	       (if dir?
-		   (syntax-source loc)
-		   base))]
-	    ;; Load relative?
-	    [(current-load-relative-directory)]
-	    ;; Current directory
-	    [(current-directory)])))))
-
-  (define-syntax-set (do-include ; private
-		      include-at/relative-to
-		      include
-		      include-at/relative-to/reader
-		      include/reader)
-
-    (define (do-include/proc stx)
-      (syntax-case stx ()
-	[(_ orig-stx ctx loc fn reader)
-	 ;; Parse the file name
-	 (let ([c-file (resolve-path-spec (syntax fn) (syntax loc) (syntax orig-stx) #'build-path)]
-	       [ctx (syntax ctx)]
-	       [loc (syntax loc)]
-	       [reader (syntax reader)]
-	       [orig-stx (syntax orig-stx)])
-	   
-	   (register-external-file c-file)
-
-	   (let ([read-syntax (if (syntax-e reader)
-                                  (reader-val
-                                   (let loop ([e (syntax-object->datum
-                                                  (local-expand reader 'expression null))])
-                                     (cond
-                                       [(reader? e) e]
-                                       [(pair? e) (or (loop (car e))
-                                                      (loop (cdr e)))]
-                                       [else #f])))
-				  read-syntax)])
-	     (unless (and (procedure? read-syntax)
-			  (procedure-arity-includes? read-syntax 2))
-	       (raise-syntax-error
-		#f
-		"reader is not a procedure of two arguments"
-		orig-stx))
-
-	     ;; Open the included file
-	     (let ([p (with-handlers ([exn:fail?
-				       (lambda (exn)
-					 (raise-syntax-error
-					  #f
-					  (format
-					   "can't open include file (~a)"
-					   (if (exn? exn)
-					       (exn-message exn)
-					       exn))
-					  orig-stx
-					  c-file))])
-			(open-input-file c-file))])
-	       (port-count-lines! p)
-	       ;; Read expressions from file
-	       (let ([content
-		      (let loop ()
-			(let ([r (with-handlers ([exn:fail?
-						  (lambda (exn)
-						    (close-input-port p)
-						    (raise-syntax-error
-						     #f
-						     (format
-						      "read error (~a)"
-						      (if (exn? exn)
-							  (exn-message exn)
-							  exn))
-						     orig-stx))])
-				   (read-syntax c-file p))])
-			  (if (eof-object? r)
-			      null
-			      (cons r (loop)))))])
-		 (close-input-port p)
-		 ;; Preserve src info for content, but set its
-		 ;; lexical context to be that of the include expression
-		 (let ([lexed-content
-			(let loop ([content content])
-			  (cond
-			   [(pair? content)
-			    (cons (loop (car content))
-				  (loop (cdr content)))]
-			   [(null? content) null]
-			   [else
-			    (let ([v (syntax-e content)])
-			      (datum->syntax-object
-			       ctx
-			       (cond
-				[(pair? v) 
-				 (loop v)]
-				[(vector? v)
-				 (list->vector (loop (vector->list v)))]
-				[(box? v)
-				 (box (loop (unbox v)))]
-				[else
-				 v])
-			       content))]))])
-		   (datum->syntax-object
-		    (quote-syntax here)
-		    `(begin ,@lexed-content)
-		    orig-stx))))))]))
-    
-    (define (include/proc stx)
-      (syntax-case stx ()
-	[(_ fn)
-	 (with-syntax ([_stx stx])
-	   (syntax/loc stx (do-include _stx _stx _stx fn #f)))]))
-
-    (define (include-at/relative-to/proc stx)
-      (syntax-case stx ()
-	[(_ ctx loc fn)
-	 (with-syntax ([_stx stx])
-	   (syntax/loc stx (do-include _stx ctx loc fn #f)))]))
-      
-    (define (include/reader/proc stx)
-      (syntax-case stx ()
-	[(_ fn reader)
-	 ;; Expand to do-include:
-	 (with-syntax ([_stx stx])
-	   (syntax/loc stx 
-	     (do-include _stx _stx _stx fn 
-			 (letrec-syntax ([the-reader (lambda (stx)
-						       (datum->syntax-object
-							#'here
-							(make-reader reader)))])
-			   the-reader))))]))
-    
-    (define (include-at/relative-to/reader/proc stx)
-      (syntax-case stx ()
-	[(_ ctx loc fn reader)
-	 (with-syntax ([_stx stx])
-	   (syntax/loc stx 
-	     (do-include _stx ctx loc fn 
-			 (letrec-syntax ([the-reader (lambda (stx)
-						       (datum->syntax-object
-							#'here
-							(make-reader reader)))])
-			   the-reader))))])))
-  
-  (provide include
-	   include-at/relative-to
-	   include/reader
-	   include-at/relative-to/reader))
diff --git a/collects/mzlib/inflate.ss b/collects/mzlib/inflate.rkt
similarity index 100%
rename from collects/mzlib/inflate.ss
rename to collects/mzlib/inflate.rkt
diff --git a/collects/mzlib/integer-set.ss b/collects/mzlib/integer-set.rkt
similarity index 100%
rename from collects/mzlib/integer-set.ss
rename to collects/mzlib/integer-set.rkt
diff --git a/collects/mzlib/kw.ss b/collects/mzlib/kw.rkt
similarity index 100%
rename from collects/mzlib/kw.ss
rename to collects/mzlib/kw.rkt
diff --git a/collects/mzlib/list.ss b/collects/mzlib/list.rkt
similarity index 82%
rename from collects/mzlib/list.ss
rename to collects/mzlib/list.rkt
index c8b3a4d..ed658ee 100644
--- a/collects/mzlib/list.ss
+++ b/collects/mzlib/list.rkt
@@ -1,31 +1,13 @@
-#lang mzscheme
+#lang scheme/base
 
 ;; The `first', etc. operations in this library
 ;;  work on pairs, not lists.
 
-(require (only scheme/base
-               foldl
-               foldr
-
-               remv
-               remq
-               remove
-               remv*
-               remq*
-               remove*
-
-               findf
-               memf
-               assf
-
-               filter
-
-               sort)
-         (only scheme/list
-               cons?
-               empty?
-               empty
-               last-pair))
+(require (only-in scheme/list
+                  cons?
+                  empty?
+                  empty
+                  last-pair))
 
 (provide first
          second
diff --git a/collects/mzlib/match.rkt b/collects/mzlib/match.rkt
new file mode 100644
index 0000000..8362e9a
--- /dev/null
+++ b/collects/mzlib/match.rkt
@@ -0,0 +1,4 @@
+#lang racket/base
+
+(require racket/match/legacy-match)
+(provide (all-from-out racket/match/legacy-match))
diff --git a/collects/mzlib/match.ss b/collects/mzlib/match.ss
deleted file mode 100644
index d38a78a..0000000
--- a/collects/mzlib/match.ss
+++ /dev/null
@@ -1,4 +0,0 @@
-#lang scheme/base
-
-(require scheme/match/legacy-match)
-(provide (all-from-out scheme/match/legacy-match))
diff --git a/collects/mzlib/math.ss b/collects/mzlib/math.rkt
similarity index 100%
rename from collects/mzlib/math.ss
rename to collects/mzlib/math.rkt
diff --git a/collects/mzlib/md5.ss b/collects/mzlib/md5.rkt
similarity index 100%
rename from collects/mzlib/md5.ss
rename to collects/mzlib/md5.rkt
diff --git a/collects/mzlib/os.ss b/collects/mzlib/os.rkt
similarity index 100%
rename from collects/mzlib/os.ss
rename to collects/mzlib/os.rkt
diff --git a/collects/mzlib/plt-match.rkt b/collects/mzlib/plt-match.rkt
new file mode 100644
index 0000000..add845a
--- /dev/null
+++ b/collects/mzlib/plt-match.rkt
@@ -0,0 +1,4 @@
+#lang scheme/base
+
+(require racket/match/match)
+(provide (all-from-out racket/match/match))
diff --git a/collects/mzlib/plt-match.ss b/collects/mzlib/plt-match.ss
deleted file mode 100644
index 84e08e6..0000000
--- a/collects/mzlib/plt-match.ss
+++ /dev/null
@@ -1,4 +0,0 @@
-#lang scheme/base
-
-(require scheme/match/match)
-(provide (all-from-out scheme/match/match))
diff --git a/collects/mzlib/port.ss b/collects/mzlib/port.rkt
similarity index 97%
rename from collects/mzlib/port.ss
rename to collects/mzlib/port.rkt
index 56b1203..c588143 100644
--- a/collects/mzlib/port.ss
+++ b/collects/mzlib/port.rkt
@@ -1,8 +1,7 @@
-#lang scheme/base
+#lang racket/base
 
-(require (for-syntax scheme/base)
-         mzlib/etc
-         scheme/contract/base
+(require (for-syntax racket/base)
+         racket/contract/base
          mzlib/list
          "private/port.ss")
 
@@ -118,13 +117,13 @@
 ;;  0 always (which implies that the `read' proc must not return
 ;;  a pipe input port).
 (define make-input-port/read-to-peek
-  (opt-lambda (name read fast-peek close
-                    [location-proc #f]
-                    [count-lines!-proc void]
-                    [init-position 1]
-                    [buffer-mode-proc #f]
-                    [buffering? #f]
-                    [on-consumed #f])
+  (lambda (name read fast-peek close
+                [location-proc #f]
+                [count-lines!-proc void]
+                [init-position 1]
+                [buffer-mode-proc #f]
+                [buffering? #f]
+                [on-consumed #f])
     (define lock-semaphore (make-semaphore 1))
     (define commit-semaphore (make-semaphore 1))
     (define-values (peeked-r peeked-w) (make-pipe))
@@ -440,7 +439,7 @@
              (buffer-mode-proc mode)])))))
 
 (define peeking-input-port
-  (opt-lambda (orig-in [name (object-name orig-in)] [delta 0])
+  (lambda (orig-in [name (object-name orig-in)] [delta 0])
     (make-input-port/read-to-peek
      name
      (lambda (s)
@@ -452,11 +451,11 @@
      void)))
 
 (define relocate-input-port
-  (opt-lambda (p line col pos [close? #t])
+  (lambda (p line col pos [close? #t])
     (transplant-to-relocate transplant-input-port p line col pos close?)))
 
 (define transplant-input-port
-  (opt-lambda (p location-proc pos [close? #t] [count-lines!-proc void])
+  (lambda (p location-proc pos [close? #t] [count-lines!-proc void])
     (make-input-port
      (object-name p)
      (lambda (s)
@@ -486,7 +485,7 @@
   ;; thread when write evts are active; otherwise, we use a lock semaphore.
   ;; (Actually, the lock semaphore has to be used all the time, to guard
   ;; the flag indicating whether the manager thread is running.)
-  (opt-lambda ([limit (expt 2 64)] [in-name 'pipe] [out-name 'pipe])
+  (lambda ([limit (expt 2 64)] [in-name 'pipe] [out-name 'pipe])
     (let-values ([(r w) (make-pipe limit)]
                  [(more) null]
                  [(more-last) #f]
@@ -724,7 +723,7 @@
       (values in out))))
 
 (define input-port-append
-  (opt-lambda (close-orig? . ports)
+  (lambda (close-orig? . ports)
     (make-input-port
      (map object-name ports)
      (lambda (str)
@@ -815,7 +814,7 @@
             (loop half skip)))))))
 
 (define make-limited-input-port
-  (opt-lambda (port limit [close-orig? #t])
+  (lambda (port limit [close-orig? #t])
     (let ([got 0])
       (make-input-port
        (object-name port)
@@ -1208,13 +1207,13 @@
               (loop (add1 i) (add1 j))]))))]))
 
 (define reencode-input-port
-  (opt-lambda (port encoding [error-bytes #f] [close? #f]
-                    [name (object-name port)]
-                    [newline-convert? #f]
-                    [decode-error (lambda (msg port)
-                                    (error 'reencode-input-port
-                                           (format "~a: ~e" msg)
-                                           port))])
+  (lambda (port encoding [error-bytes #f] [close? #f]
+                [name (object-name port)]
+                [newline-convert? #f]
+                [decode-error (lambda (msg port)
+                                (error 'reencode-input-port
+                                       (format "~a: ~e" msg)
+                                       port))])
     (let ([c (let ([c (bytes-open-converter encoding "UTF-8")])
                (if newline-convert? (mcons c #f) c))]
           [ready-bytes (make-bytes 1024)]
@@ -1345,13 +1344,13 @@
 ;; --------------------------------------------------
 
 (define reencode-output-port
-  (opt-lambda (port encoding [error-bytes #f] [close? #f]
-                    [name (object-name port)]
-                    [convert-newlines-to #f]
-                    [decode-error (lambda (msg port)
-                                    (error 'reencode-input-port
-                                           (format "~a: ~e" msg)
-                                           port))])
+  (lambda (port encoding [error-bytes #f] [close? #f]
+                [name (object-name port)]
+                [convert-newlines-to #f]
+                [decode-error (lambda (msg port)
+                                (error 'reencode-input-port
+                                       (format "~a: ~e" msg)
+                                       port))])
     (let ([c (bytes-open-converter "UTF-8" encoding)]
           [ready-bytes (make-bytes 1024)]
           [ready-start 0]
@@ -1664,7 +1663,7 @@
 ;; ----------------------------------------
 
 (define dup-output-port
-  (opt-lambda (p [close? #f])
+  (lambda (p [close? #f])
     (let ([new (transplant-output-port
                 p
                 (lambda () (port-next-location p))
@@ -1677,7 +1676,7 @@
       new)))
 
 (define dup-input-port
-  (opt-lambda (p [close? #f])
+  (lambda (p [close? #f])
     (let ([new (transplant-input-port
                 p
                 (lambda () (port-next-location p))
diff --git a/collects/mzlib/pregexp.ss b/collects/mzlib/pregexp.rkt
similarity index 96%
rename from collects/mzlib/pregexp.ss
rename to collects/mzlib/pregexp.rkt
index bb6b362..fe41060 100644
--- a/collects/mzlib/pregexp.ss
+++ b/collects/mzlib/pregexp.rkt
@@ -3,7 +3,7 @@
 ;;   ;Portable regular expressions for Scheme
 ;;   ;Dorai Sitaram
 ;;   ;http://www.ccs.neu.edu/~dorai/pregexp/pregexp.html
-;; but `pregexp' functionality is now built into MzScheme, so
+;; but `pregexp' functionality is now built into Racket, so
 ;; this is mostly a wrapper module.
 
 (module pregexp mzscheme
diff --git a/collects/mzlib/pretty.ss b/collects/mzlib/pretty.rkt
similarity index 100%
rename from collects/mzlib/pretty.ss
rename to collects/mzlib/pretty.rkt
diff --git a/collects/mzlib/private/contract-arr-checks.ss b/collects/mzlib/private/contract-arr-checks.rkt
similarity index 99%
rename from collects/mzlib/private/contract-arr-checks.ss
rename to collects/mzlib/private/contract-arr-checks.rkt
index 5410d74..9bbb341 100644
--- a/collects/mzlib/private/contract-arr-checks.ss
+++ b/collects/mzlib/private/contract-arr-checks.rkt
@@ -1,7 +1,7 @@
-#lang scheme/base
+#lang racket/base
 
 (provide (all-defined-out))
-(require scheme/contract/private/guts)
+(require racket/contract/private/guts)
 
 (define empty-case-lambda/c
   (flat-named-contract '(case->)
diff --git a/collects/mzlib/private/contract-arr-obj-helpers.ss b/collects/mzlib/private/contract-arr-obj-helpers.rkt
similarity index 99%
rename from collects/mzlib/private/contract-arr-obj-helpers.ss
rename to collects/mzlib/private/contract-arr-obj-helpers.rkt
index cb38466..5123ffd 100644
--- a/collects/mzlib/private/contract-arr-obj-helpers.ss
+++ b/collects/mzlib/private/contract-arr-obj-helpers.rkt
@@ -4,7 +4,7 @@
 
 (require (for-syntax scheme/base))
 (require (for-template scheme/base)
-         (for-template scheme/contract/private/guts)
+         (for-template racket/contract/private/guts)
          (for-template "contract-arr-checks.ss"))
 
 (provide make-/proc ->/h ->*/h ->d/h ->d*/h ->r/h 
diff --git a/collects/mzlib/private/contract-arrow.ss b/collects/mzlib/private/contract-arrow.rkt
similarity index 99%
rename from collects/mzlib/private/contract-arrow.ss
rename to collects/mzlib/private/contract-arrow.rkt
index 2b13878..038951a 100644
--- a/collects/mzlib/private/contract-arrow.ss
+++ b/collects/mzlib/private/contract-arrow.rkt
@@ -1,11 +1,11 @@
-#lang scheme/base
+#lang racket/base
 
-(require scheme/contract/private/guts
-         scheme/contract/private/opt
+(require racket/contract/private/guts
+         racket/contract/private/opt
          "contract-arr-checks.ss")
-(require (for-syntax scheme/base)
-         (for-syntax scheme/contract/private/opt-guts)
-         (for-syntax scheme/contract/private/helpers)
+(require (for-syntax racket/base)
+         (for-syntax racket/contract/private/opt-guts)
+         (for-syntax racket/contract/private/helpers)
          (for-syntax "contract-arr-obj-helpers.ss")
          (for-syntax syntax/stx)
          (for-syntax syntax/name))
diff --git a/collects/mzlib/private/contract-define.ss b/collects/mzlib/private/contract-define.rkt
similarity index 93%
rename from collects/mzlib/private/contract-define.ss
rename to collects/mzlib/private/contract-define.rkt
index 4cece1f..faad09a 100644
--- a/collects/mzlib/private/contract-define.ss
+++ b/collects/mzlib/private/contract-define.rkt
@@ -1,11 +1,11 @@
-#lang scheme/base
+#lang racket/base
 
 (provide define/contract)
 
-(require (for-syntax scheme/base
+(require (for-syntax racket/base
                      unstable/srcloc
-                     (prefix-in a: scheme/contract/private/helpers))
-         (only-in scheme/contract/private/base contract))
+                     (prefix-in a: racket/contract/private/helpers))
+         (only-in racket/contract/private/base contract))
 
 ;; First, we have the old define/contract implementation, which
 ;; is still used in mzlib/contract.
diff --git a/collects/mzlib/private/contract-object.ss b/collects/mzlib/private/contract-object.rkt
similarity index 98%
rename from collects/mzlib/private/contract-object.ss
rename to collects/mzlib/private/contract-object.rkt
index 7b7579f..66cc2c5 100644
--- a/collects/mzlib/private/contract-object.ss
+++ b/collects/mzlib/private/contract-object.rkt
@@ -1,11 +1,11 @@
-#lang scheme/base
+#lang racket/base
 (require "contract-arrow.ss"
-         scheme/contract/private/guts
-         scheme/private/class-internal
+         racket/contract/private/guts
+         racket/private/class-internal
          "contract-arr-checks.ss")
 
-(require (for-syntax scheme/base
-                     scheme/contract/private/helpers
+(require (for-syntax racket/base
+                     racket/contract/private/helpers
                      "contract-arr-obj-helpers.ss"))
 
 (provide mixin-contract
diff --git a/collects/mzlib/private/package-helper.ss b/collects/mzlib/private/package-helper.rkt
similarity index 100%
rename from collects/mzlib/private/package-helper.ss
rename to collects/mzlib/private/package-helper.rkt
diff --git a/collects/mzlib/private/sigmatch.ss b/collects/mzlib/private/sigmatch.rkt
similarity index 100%
rename from collects/mzlib/private/sigmatch.ss
rename to collects/mzlib/private/sigmatch.rkt
diff --git a/collects/mzlib/private/sigutil.ss b/collects/mzlib/private/sigutil.rkt
similarity index 100%
rename from collects/mzlib/private/sigutil.ss
rename to collects/mzlib/private/sigutil.rkt
diff --git a/collects/mzlib/private/structure-helper.ss b/collects/mzlib/private/structure-helper.rkt
similarity index 100%
rename from collects/mzlib/private/structure-helper.ss
rename to collects/mzlib/private/structure-helper.rkt
diff --git a/collects/mzlib/private/stxparamkey.ss b/collects/mzlib/private/stxparamkey.rkt
similarity index 100%
rename from collects/mzlib/private/stxparamkey.ss
rename to collects/mzlib/private/stxparamkey.rkt
diff --git a/collects/mzlib/private/stxset.ss b/collects/mzlib/private/stxset.rkt
similarity index 100%
rename from collects/mzlib/private/stxset.ss
rename to collects/mzlib/private/stxset.rkt
diff --git a/collects/mzlib/private/unitidmap.ss b/collects/mzlib/private/unitidmap.rkt
similarity index 100%
rename from collects/mzlib/private/unitidmap.ss
rename to collects/mzlib/private/unitidmap.rkt
diff --git a/collects/mzlib/process.ss b/collects/mzlib/process.rkt
similarity index 100%
rename from collects/mzlib/process.ss
rename to collects/mzlib/process.rkt
diff --git a/collects/mzlib/runtime-path.ss b/collects/mzlib/runtime-path.rkt
similarity index 100%
rename from collects/mzlib/runtime-path.ss
rename to collects/mzlib/runtime-path.rkt
diff --git a/collects/mzlib/sandbox.ss b/collects/mzlib/sandbox.rkt
similarity index 100%
rename from collects/mzlib/sandbox.ss
rename to collects/mzlib/sandbox.rkt
diff --git a/collects/mzlib/sendevent.ss b/collects/mzlib/sendevent.rkt
similarity index 100%
rename from collects/mzlib/sendevent.ss
rename to collects/mzlib/sendevent.rkt
diff --git a/collects/mzlib/serialize.ss b/collects/mzlib/serialize.rkt
similarity index 99%
rename from collects/mzlib/serialize.ss
rename to collects/mzlib/serialize.rkt
index ed816f9..e455013 100644
--- a/collects/mzlib/serialize.ss
+++ b/collects/mzlib/serialize.rkt
@@ -4,13 +4,13 @@
 	   mzlib/etc
 	   mzlib/list
            ;; core [de]serializer:
-           scheme/private/serialize)
+           racket/private/serialize)
 
   (provide define-serializable-struct
 	   define-serializable-struct/versions
 
            ;; core [de]serializer:
-           (all-from scheme/private/serialize))
+           (all-from racket/private/serialize))
 
   ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   ;; define-serializable-struct
diff --git a/collects/mzlib/shared.ss b/collects/mzlib/shared.rkt
similarity index 91%
rename from collects/mzlib/shared.ss
rename to collects/mzlib/shared.rkt
index c49edd4..361fc01 100644
--- a/collects/mzlib/shared.ss
+++ b/collects/mzlib/shared.rkt
@@ -16,4 +16,4 @@
     (define make-check-cdr #f)
     ;; Include the implementation.
     ;; See private/shared-body.ss.
-    (include "private/shared-body.ss")))
+    (include "private/shared-body.rkt")))
diff --git a/collects/mzlib/string.ss b/collects/mzlib/string.rkt
similarity index 100%
rename from collects/mzlib/string.ss
rename to collects/mzlib/string.rkt
diff --git a/collects/mzlib/struct.ss b/collects/mzlib/struct.rkt
similarity index 100%
rename from collects/mzlib/struct.ss
rename to collects/mzlib/struct.rkt
diff --git a/collects/mzlib/stxparam.ss b/collects/mzlib/stxparam.rkt
similarity index 100%
rename from collects/mzlib/stxparam.ss
rename to collects/mzlib/stxparam.rkt
diff --git a/collects/mzlib/surrogate.ss b/collects/mzlib/surrogate.rkt
similarity index 100%
rename from collects/mzlib/surrogate.ss
rename to collects/mzlib/surrogate.rkt
diff --git a/collects/mzlib/tar.ss b/collects/mzlib/tar.rkt
similarity index 100%
rename from collects/mzlib/tar.ss
rename to collects/mzlib/tar.rkt
diff --git a/collects/mzlib/thread.ss b/collects/mzlib/thread.rkt
similarity index 100%
rename from collects/mzlib/thread.ss
rename to collects/mzlib/thread.rkt
diff --git a/collects/mzlib/trace.ss b/collects/mzlib/trace.rkt
similarity index 100%
rename from collects/mzlib/trace.ss
rename to collects/mzlib/trace.rkt
diff --git a/collects/mzlib/traceld.ss b/collects/mzlib/traceld.rkt
similarity index 100%
rename from collects/mzlib/traceld.ss
rename to collects/mzlib/traceld.rkt
diff --git a/collects/mzlib/trait.ss b/collects/mzlib/trait.rkt
similarity index 100%
rename from collects/mzlib/trait.ss
rename to collects/mzlib/trait.rkt
diff --git a/collects/mzlib/transcr.ss b/collects/mzlib/transcr.rkt
similarity index 100%
rename from collects/mzlib/transcr.ss
rename to collects/mzlib/transcr.rkt
diff --git a/collects/mzlib/unit-exptime.ss b/collects/mzlib/unit-exptime.rkt
similarity index 100%
rename from collects/mzlib/unit-exptime.ss
rename to collects/mzlib/unit-exptime.rkt
diff --git a/collects/mzlib/unit.ss b/collects/mzlib/unit.rkt
similarity index 81%
rename from collects/mzlib/unit.ss
rename to collects/mzlib/unit.rkt
index fb654f6..119774a 100644
--- a/collects/mzlib/unit.ss
+++ b/collects/mzlib/unit.rkt
@@ -8,6 +8,7 @@
                      syntax/name
                      syntax/parse
                      syntax/struct
+                     scheme/struct-info
                      syntax/stx
                      unstable/location
                      "private/unit-contract-syntax.ss"
@@ -15,17 +16,19 @@
                      "private/unit-syntax.ss"))
   
 (require mzlib/etc
-         scheme/contract/base
+         racket/contract/base
          scheme/stxparam
          unstable/location
          "private/unit-contract.ss"
          "private/unit-keywords.ss"
          "private/unit-runtime.ss"
-         "private/unit-utils.ss")
+         "private/unit-utils.ss"
+         (rename-in racket/private/struct [struct struct~]))
 
 (provide define-signature-form struct struct/ctc open
          define-signature provide-signature-elements
          only except rename import export prefix link tag init-depend extends contracted
+         define-values-for-export
          unit?
          (rename-out [:unit unit]) define-unit 
          compound-unit define-compound-unit compound-unit/infer define-compound-unit/infer
@@ -35,7 +38,9 @@
          define-unit-binding
          unit/new-import-export define-unit/new-import-export
          unit/s define-unit/s
-         unit/c define-unit/contract)
+         unit/c define-unit/contract
+         struct~s struct~s/ctc
+         struct~r struct~r/ctc)
 
 (define-syntax/err-param (define-signature-form stx)
   (syntax-case stx ()
@@ -130,6 +135,168 @@
       ((_)
        (raise-stx-err "missing name and fields")))))
 
+(begin-for-syntax
+ (define-struct self-name-struct-info (id)
+   #:super struct:struct-info
+   #:property prop:procedure (lambda (me stx)
+                               (syntax-case stx ()
+                                 [(_ arg ...) (datum->syntax
+                                               stx
+                                               (cons ((self-name-struct-info-id me))
+                                                     #'(arg ...))
+                                               stx
+                                               stx)]
+                                 [_ (let ([id ((self-name-struct-info-id me))])
+                                      (datum->syntax id
+                                                      (syntax-e id)
+                                                      stx
+                                                      stx))]))
+   #:omit-define-syntaxes))
+
+(define-for-syntax option-keywords
+  "#:mutable, #:constructor-name, #:extra-constructor-name, #:omit-constructor, #:omit-define-syntaxes, or #:omit-define-values")
+
+;; Replacement `struct' signature form for `scheme/unit':
+(define-for-syntax (do-struct~ stx extra-make?)
+  (syntax-case stx ()
+    ((_ name (field ...) opt ...)
+     (begin
+       (unless (identifier? #'name)
+         (raise-syntax-error #f
+                             "expected an identifier to name the structure type"
+                             stx
+                             #'name))
+       (for-each (lambda (field)
+                   (unless (identifier? field)
+                     (syntax-case field ()
+                       [(id #:mutable)
+                        (identifier? #'id)
+                        'ok]
+                       [_
+                        (raise-syntax-error #f
+                                            "bad field specification"
+                                            stx
+                                            field)])))
+                 (syntax->list #'(field ...)))
+       (let*-values ([(no-ctr? mutable? no-stx? no-rt? opt-cname)
+                      (let loop ([opts (syntax->list #'(opt ...))]
+                                 [no-ctr? #f]
+                                 [mutable? #f]
+                                 [no-stx? #f]
+                                 [no-rt? #f]
+                                 [cname #f])
+                        (if (null? opts)
+                            (values no-ctr? mutable? no-stx? no-rt? cname)
+                            (let ([opt (car opts)])
+                              (case (syntax-e opt)
+                                [(#:constructor-name #:extra-constructor-name)
+                                 (if cname
+                                     (raise-syntax-error #f
+                                                         "redundant option"
+                                                         stx
+                                                         opt)
+                                     (if (null? (cdr opts))
+                                         (raise-syntax-error #f
+                                                             "missing identifier after option"
+                                                             stx
+                                                             opt)
+                                         (if (identifier? (cadr opts))
+                                             (loop (cddr opts) #f mutable? no-stx? no-rt?
+                                                   (if (eq? (syntax-e opt) '#:extra-constructor-name)
+                                                       (list (cadr opts))
+                                                       (cadr opts)))
+                                             (raise-syntax-error #f
+                                                                 "not an identifier for a constructor name"
+                                                                 stx
+                                                                 (cadr opts)))))]
+                                [(#:omit-constructor)
+                                 (if no-ctr?
+                                     (raise-syntax-error #f
+                                                         "redundant option"
+                                                         stx
+                                                         opt)
+                                     (loop (cdr opts) #t mutable? no-stx? no-rt? cname))]
+                                [(#:mutable)
+                                 (if mutable?
+                                     (raise-syntax-error #f
+                                                         "redundant option"
+                                                         stx
+                                                         opt)
+                                     (loop (cdr opts) no-ctr? #t no-stx? no-rt? cname))]
+                                [(#:omit-define-syntaxes)
+                                 (if no-stx?
+                                     (raise-syntax-error #f
+                                                         "redundant option"
+                                                         stx
+                                                         opt)
+                                     (loop (cdr opts) no-ctr? mutable? #t no-rt? cname))]
+                                [(#:omit-define-values)
+                                 (if no-rt?
+                                     (raise-syntax-error #f
+                                                         "redundant option"
+                                                         stx
+                                                         opt)
+                                     (loop (cdr opts) no-ctr? mutable? no-stx? #t cname))]
+                                [else
+                                 (raise-syntax-error #f
+                                                     (string-append
+                                                      "expected a keyword to specify option: "
+                                                      option-keywords)
+                                                     stx
+                                                     opt)]))))]
+                     [(def-cname) (cond
+                                   [opt-cname (if (pair? opt-cname)
+                                                  (car opt-cname)
+                                                  opt-cname)]
+                                   [extra-make? #f]
+                                   [else (car (generate-temporaries #'(name)))])]
+                     [(cname) (cond
+                               [opt-cname (if (pair? opt-cname)
+                                              (cons def-cname #'name)
+                                              (cons opt-cname opt-cname))]
+                               [extra-make? #f]
+                               [else (cons def-cname #'name)])]
+                     [(self-ctr?) (and cname (bound-identifier=? #'name (cdr cname)))])
+         (cons
+          #`(define-syntaxes (name)
+              #,(let ([e (build-struct-expand-info
+                          #'name (syntax->list #'(field ...))
+                          #f (not mutable?)
+                          #f '(#f) '(#f)
+                          #:omit-constructor? no-ctr?
+                          #:constructor-name def-cname)])
+                  (if self-ctr?
+                      #`(make-self-name-struct-info 
+                         (lambda () #,e)
+                         (lambda () (quote-syntax #,def-cname)))
+                      e)))
+          (let ([names (build-struct-names #'name (syntax->list #'(field ...))
+                                           #f (not mutable?)
+                                           #:constructor-name def-cname)])
+            (cond
+             [no-ctr? (cons (car names) (cddr names))]
+             [self-ctr? (cons #`(define-values-for-export (#,def-cname) name) 
+                              names)]
+             [else names]))))))
+    ((_ name fields opt ...)
+     (raise-syntax-error #f
+                         "bad syntax; expected a parenthesized sequence of fields"
+                         stx
+                         #'fields))
+    ((_ name)
+     (raise-syntax-error #f
+                         "bad syntax; missing fields"
+                         stx))
+    ((_)
+     (raise-syntax-error #f
+                         "missing name and fields"
+                         stx))))
+
+(define-signature-form (struct~s stx)
+  (do-struct~ stx #t))
+(define-signature-form (struct~r stx)
+  (do-struct~ stx #f))
+
 (define-signature-form (struct/ctc stx)
   (parameterize ((error-syntax stx))
     (syntax-case stx ()
@@ -214,28 +381,205 @@
       ((_)
        (raise-stx-err "missing name and fields")))))
 
+;; Replacement struct/ctc form for `scheme/unit':
+(define-for-syntax (do-struct~/ctc stx extra-make?)
+  (syntax-case stx ()
+    ((_ name ([field ctc] ...) opt ...)
+     (begin
+       (unless (identifier? #'name)
+         (raise-syntax-error #f
+                             "expected an identifier to name the structure type"
+                             stx
+                             #'name))
+       (for-each (lambda (field)
+                   (unless (identifier? field)
+                     (syntax-case field ()
+                       [(id #:mutable)
+                        (identifier? #'id)
+                        'ok]
+                       [_
+                        (raise-syntax-error #f
+                                            "bad field specification"
+                                            stx
+                                            field)])))
+                 (syntax->list #'(field ...)))
+       (let*-values ([(no-ctr? mutable? no-stx? no-rt? opt-cname)
+                      (let loop ([opts (syntax->list #'(opt ...))]
+                                 [no-ctr? #f]
+                                 [mutable? #f]
+                                 [no-stx? #f]
+                                 [no-rt? #f]
+                                 [cname #f])
+                        (if (null? opts)
+                            (values no-ctr? mutable? no-stx? no-rt? cname)
+                            (let ([opt (car opts)])
+                              (case (syntax-e opt)
+                                [(#:constructor-name #:extra-constructor-name)
+                                 (if cname
+                                     (raise-syntax-error #f
+                                                         "redundant option"
+                                                         stx
+                                                         opt)
+                                     (if (null? (cdr opts))
+                                         (raise-syntax-error #f
+                                                             "missing identifier after option"
+                                                             stx
+                                                             opt)
+                                         (if (identifier? (cadr opts))
+                                             (loop (cddr opts) #f mutable? no-stx? no-rt?
+                                                   (if (eq? (syntax-e opt) '#:extra-constructor-name)
+                                                       (list (cadr opts))
+                                                       (cadr opts)))
+                                             (raise-syntax-error #f
+                                                                 "not an identifier for a constructor name"
+                                                                 stx
+                                                                 (cadr opts)))))]
+                                [(#:omit-constructor)
+                                 (if no-ctr?
+                                     (raise-syntax-error #f
+                                                         "redundant option"
+                                                         stx
+                                                         opt)
+                                     (loop (cdr opts) #t mutable? no-stx? no-rt? cname))]
+                                [(#:mutable)
+                                 (if mutable?
+                                     (raise-syntax-error #f
+                                                         "redundant option"
+                                                         stx
+                                                         opt)
+                                     (loop (cdr opts) no-ctr? #t no-stx? no-rt? cname))]
+                                [(#:omit-define-syntaxes)
+                                 (if no-stx?
+                                     (raise-syntax-error #f
+                                                         "redundant option"
+                                                         stx
+                                                         opt)
+                                     (loop (cdr opts) no-ctr? mutable? #t no-rt? cname))]
+                                [(#:omit-define-values)
+                                 (if no-rt?
+                                     (raise-syntax-error #f
+                                                         "redundant option"
+                                                         stx
+                                                         opt)
+                                     (loop (cdr opts) no-ctr? mutable? no-stx? #t cname))]
+                                [else
+                                 (raise-syntax-error #f
+                                                     (string-append
+                                                      "expected a keyword to specify option: "
+                                                      option-keywords)
+                                                     stx
+                                                     opt)]))))]
+                     [(def-cname) (cond
+                                   [opt-cname (if (pair? opt-cname)
+                                                  (car opt-cname)
+                                                  opt-cname)]
+                                   [extra-make? #f]
+                                   [else (car (generate-temporaries #'(name)))])]
+                     [(cname) (cond
+                               [opt-cname (if (pair? opt-cname)
+                                              (cons def-cname #'name)
+                                              (cons def-cname def-cname))]
+                               [extra-make? #f]
+                               [else (cons def-cname #'name)])]
+                     [(self-ctr?) (and cname (bound-identifier=? #'name (cdr cname)))])
+         (define (add-contracts l)
+           (let* ([pred (caddr l)]
+                  [ctor-ctc #`(-> ctc ... #,pred)]
+                  [pred-ctc #'(-> any/c boolean?)]
+                  [field-ctcs
+                   (apply append
+                          (map (λ (f c)
+                                  (cons #`(-> #,pred #,c)
+                                        (if (and (not mutable?)
+                                                 (not (pair? (syntax-e f))))
+                                            null
+                                            #`(-> #,pred #,c void?))))
+                               (syntax->list #'(field ...))
+                               (syntax->list #'(ctc ...))))])
+             (list* (car l)
+                    (list (cadr l) ctor-ctc)
+                    (list pred pred-ctc)
+                    (map list (cdddr l) field-ctcs))))
+         (cons
+          #`(define-syntaxes (name)
+              #,(let ([e (build-struct-expand-info
+                          #'name (syntax->list #'(field ...))
+                          #f (not mutable?)
+                          #f '(#f) '(#f)
+                          #:omit-constructor? no-ctr?
+                          #:constructor-name def-cname)])
+                  (if self-ctr?
+                      #`(make-self-name-struct-info 
+                         (lambda () #,e)
+                         (lambda () (quote-syntax #,def-cname)))
+                      e)))
+          (let* ([names (add-contracts
+                         (build-struct-names #'name (syntax->list #'(field ...))
+                                             #f (not mutable?)
+                                             #:constructor-name def-cname))]
+                 [cpairs (cons 'contracted
+                               (cond
+                                [no-ctr? (cddr names)]
+                                [else (cdr names)]))]
+                 [l (list (car names) cpairs)])
+            (if self-ctr?
+                (cons #`(define-values-for-export (#,def-cname) name) l)
+                l))))))
+    ((_ name fields opt ...)
+     (raise-syntax-error #f
+                         "bad syntax; expected a parenthesized sequence of fields"
+                         stx
+                         #'fields))
+    ((_ name)
+     (raise-syntax-error #f
+                         "bad syntax; missing fields"
+                         stx))
+    ((_)
+     (raise-syntax-error #f
+                         "missing name and fields"
+                         stx))))
+
+(define-signature-form (struct~s/ctc stx)
+  (do-struct~/ctc stx #t))
+(define-signature-form (struct~r/ctc stx)
+  (do-struct~/ctc stx #f))
 
 ;; build-val+macro-defs : sig -> (list syntax-object^3)
 (define-for-syntax (build-val+macro-defs sig)
   (with-syntax ([(((int-ivar . ext-ivar) ...)
                   ((((int-vid . ext-vid) ...) . vbody) ...)
                   ((((int-sid . ext-sid) ...) . sbody) ...)
-                  (cbody ...))
+                  _
+                  _)
                  (map-sig (lambda (x) x)
                           (make-syntax-introducer)
                           sig)])
     (list
      #'((ext-ivar ... ext-vid ... ... ext-sid ... ...)
         (values
-         (make-rename-transformer 
-          (quote-syntax int-ivar)) ...
-                                   (make-rename-transformer
-                                    (quote-syntax int-vid)) ... ...
-                                                            (make-rename-transformer
-                                                             (quote-syntax int-sid)) ... ...))
+         (make-rename-transformer (quote-syntax int-ivar)) ...
+         (make-rename-transformer (quote-syntax int-vid)) ... ...
+         (make-rename-transformer (quote-syntax int-sid)) ... ...))
      #'(((int-sid ...) sbody) ...)
      #'(((int-vid ...) vbody) ...))))
 
+;; build-post-val-defs : sig -> (list syntax-object)
+(define-for-syntax (build-post-val-defs sig)
+  (with-syntax ([(((int-ivar . ext-ivar) ...)
+                  ((((int-vid . ext-vid) ...) . _) ...)
+                  ((((int-sid . ext-sid) ...) . _) ...)
+                  _
+                  (((post-id ...) . post-rhs) ...))
+                 (map-sig (lambda (x) x)
+                          (make-syntax-introducer)
+                          sig)])
+    (list
+     #'((ext-ivar ... ext-vid ... ... ext-sid ... ...)
+        (values
+         (make-rename-transformer (quote-syntax int-ivar)) ...
+         (make-rename-transformer (quote-syntax int-vid)) ... ...
+         (make-rename-transformer (quote-syntax int-sid)) ... ...))
+     #'(post-rhs ...))))
 
 (define-signature-form (open stx)
   (define (build-sig-elems sig)
@@ -261,7 +605,9 @@
       (_
        (raise-stx-err (format "must match (~a export-spec)"
                               (syntax-e (stx-car stx))))))))
-  
+
+(define-signature-form (define-values-for-export stx)
+  (raise-syntax-error #f "internal error" stx))
 
 (define-for-syntax (introduce-def d)
   (cons (map syntax-local-introduce (car d))
@@ -273,7 +619,8 @@
     (raise-stx-err "expected syntax matching (sig-expr ...)" sig-exprs))
   (let ([ses (checked-syntax->list sig-exprs)])
     (define-values (super-names super-ctimes super-rtimes super-bindings
-                                super-val-defs super-stx-defs super-ctcs)
+                                super-val-defs super-stx-defs super-post-val-defs 
+                                super-ctcs)
       (if super-sigid
           (let* ([super-sig (lookup-signature super-sigid)]
                  [super-siginfo (signature-siginfo super-sig)])
@@ -284,22 +631,25 @@
                     (map syntax-local-introduce (signature-vars super-sig))
                     (map introduce-def (signature-val-defs super-sig))
                     (map introduce-def (signature-stx-defs super-sig))
+                    (map introduce-def (signature-post-val-defs super-sig))
                     (map (lambda (ctc)
                            (if ctc
                                (syntax-local-introduce ctc)
                                ctc))
                          (signature-ctcs super-sig))))
-          (values '() '() '() '() '() '() '())))
+          (values '() '() '() '() '() '() '() '())))
     (let loop ((sig-exprs ses)
                (bindings null)
                (val-defs null)
                (stx-defs null)
+               (post-val-defs null)
                (ctcs null))
       (cond
         ((null? sig-exprs)
          (let* ([all-bindings (append super-bindings (reverse bindings))]
                 [all-val-defs (append super-val-defs (reverse val-defs))]
                 [all-stx-defs (append super-stx-defs (reverse stx-defs))]
+                [all-post-val-defs (append super-post-val-defs (reverse post-val-defs))]
                 [all-ctcs (append super-ctcs (reverse ctcs))]
                 [dup
                  (check-duplicate-identifier
@@ -313,7 +663,8 @@
                          ((var ...) all-bindings)
                          ((ctc ...) all-ctcs)
                          ((((vid ...) . vbody) ...) all-val-defs)
-                         ((((sid ...) . sbody) ...) all-stx-defs))
+                         ((((sid ...) . sbody) ...) all-stx-defs)
+                         ((((pvid ...) . pvbody) ...) all-post-val-defs))
              #`(begin
                  (define signature-tag (gensym))
                  (define-syntax #,sigid
@@ -332,6 +683,10 @@
                                  ((syntax-local-certifier)
                                   (quote-syntax sbody)))
                            ...)
+                     (list (cons (list (quote-syntax pvid) ...)
+                                 ((syntax-local-certifier)
+                                  (quote-syntax pvbody)))
+                           ...)
                      (list #,@(map (lambda (c) 
                                      (if c
                                          #`((syntax-local-certifier)
@@ -351,7 +706,7 @@
          (syntax-case (car sig-exprs) (define-values define-syntaxes contracted)
            (x
             (identifier? #'x)
-            (loop (cdr sig-exprs) (cons #'x bindings) val-defs stx-defs (cons #f ctcs)))
+            (loop (cdr sig-exprs) (cons #'x bindings) val-defs stx-defs post-val-defs (cons #f ctcs)))
            ((x (y z) ...)
             (and (identifier? #'x)
                  (free-identifier=? #'x #'contracted)
@@ -360,6 +715,7 @@
                   (append (syntax->list #'(y ...)) bindings)
                   val-defs
                   stx-defs
+                  post-val-defs
                   (append (syntax->list #'(z ...)) ctcs)))
            ((x . z)
             (and (identifier? #'x)
@@ -371,7 +727,8 @@
            ((x . y)
             (and (identifier? #'x)
                  (or (free-identifier=? #'x #'define-values)
-                     (free-identifier=? #'x #'define-syntaxes)))
+                     (free-identifier=? #'x #'define-syntaxes)
+                     (free-identifier=? #'x #'define-values-for-export)))
             (begin
               (check-def-syntax (car sig-exprs))
               (syntax-case #'y ()
@@ -390,12 +747,19 @@
                                (cons (cons (syntax->list #'(name ...)) b)
                                      stx-defs)
                                stx-defs)
+                           (if (free-identifier=? #'x #'define-values-for-export)
+                               (cons (cons (syntax->list #'(name ...)) b)
+                                     post-val-defs)
+                               post-val-defs)
                            ctcs)))))))
            ((x . y)
             (let ((trans 
                    (set!-trans-extract
                     (syntax-local-value
-                     (syntax-local-introduce #'x)
+                     ;; redirect struct~ to struct~r
+                     (if (free-identifier=? #'x #'struct~)
+                         #'struct~r
+                         (syntax-local-introduce #'x))
                      (lambda ()
                        (raise-stx-err "unknown signature form" #'x))))))
               (unless (signature-form? trans)
@@ -409,6 +773,7 @@
                       bindings
                       val-defs
                       stx-defs
+                      post-val-defs
                       ctcs))))
            (x (raise-stx-err 
                "expected either an identifier or signature form"
@@ -532,6 +897,8 @@
                       (map build-val+macro-defs import-sigs)]
                      [(((int-ivar . ext-ivar) ...) ...) (map car import-sigs)]
                      [(((int-evar . ext-evar) ...) ...) (map car export-sigs)]
+                     [((((e-post-id ...) . _) ...) ...) (map (lambda (s) (list-ref s 4)) export-sigs)]
+                     [((post-renames (e-post-rhs ...)) ...) (map build-post-val-defs export-sigs)]
                      [((iloc ...) ...)
                       (map (lambda (x) (generate-temporaries (car x))) import-sigs)]
                      [((eloc ...) ...)
@@ -602,7 +969,10 @@
                                                       (int-evar ... ...)
                                                       (eloc ... ...)
                                                       (ectc ... ...)
-                                                      . body)))))
+                                                      (begin . body)
+                                                      (define-values (e-post-id ...) 
+                                                        (letrec-syntaxes+values (post-renames ...) ()
+                                                          e-post-rhs)) ... ...)))))
                     (unit-export ((export-key ...) (vector-immutable (λ () (unbox eloc)) ...)) ...)))))))
           import-tagged-sigids
           export-tagged-sigids
diff --git a/collects/mzlib/unit200.ss b/collects/mzlib/unit200.rkt
similarity index 100%
rename from collects/mzlib/unit200.ss
rename to collects/mzlib/unit200.rkt
diff --git a/collects/mzlib/unitsig.ss b/collects/mzlib/unitsig.rkt
similarity index 100%
rename from collects/mzlib/unitsig.ss
rename to collects/mzlib/unitsig.rkt
diff --git a/collects/mzlib/unitsig200.ss b/collects/mzlib/unitsig200.rkt
similarity index 100%
rename from collects/mzlib/unitsig200.ss
rename to collects/mzlib/unitsig200.rkt
diff --git a/collects/mzlib/zip.ss b/collects/mzlib/zip.rkt
similarity index 99%
rename from collects/mzlib/zip.ss
rename to collects/mzlib/zip.rkt
index 204ccca..e04296c 100644
--- a/collects/mzlib/zip.ss
+++ b/collects/mzlib/zip.rkt
@@ -249,7 +249,7 @@
   (define/kw (zip->output files #:optional [out (current-output-port)])
     (parameterize ([current-output-port out])
       (let* ([seekable? (seekable-port? (current-output-port))]
-             [headers ; note: MzScheme's `map' is always left-to-right
+             [headers ; note: Racket's `map' is always left-to-right
               (map (lambda (file)
                      (zip-one-entry (build-metadata file) seekable?))
                    files)])
diff --git a/collects/mzscheme/lang/reader.ss b/collects/mzscheme/lang/reader.rkt
similarity index 100%
rename from collects/mzscheme/lang/reader.ss
rename to collects/mzscheme/lang/reader.rkt
diff --git a/collects/mzscheme/main.ss b/collects/mzscheme/main.rkt
similarity index 100%
rename from collects/mzscheme/main.ss
rename to collects/mzscheme/main.rkt
diff --git a/collects/net/base64-sig.ss b/collects/net/base64-sig.rkt
similarity index 100%
rename from collects/net/base64-sig.ss
rename to collects/net/base64-sig.rkt
diff --git a/collects/net/base64-unit.ss b/collects/net/base64-unit.rkt
similarity index 100%
rename from collects/net/base64-unit.ss
rename to collects/net/base64-unit.rkt
diff --git a/collects/net/cgi-sig.ss b/collects/net/cgi-sig.rkt
similarity index 100%
rename from collects/net/cgi-sig.ss
rename to collects/net/cgi-sig.rkt
diff --git a/collects/net/cgi-unit.ss b/collects/net/cgi-unit.rkt
similarity index 97%
rename from collects/net/cgi-unit.ss
rename to collects/net/cgi-unit.rkt
index a42c3da..24a1ba3 100644
--- a/collects/net/cgi-unit.ss
+++ b/collects/net/cgi-unit.rkt
@@ -68,9 +68,9 @@
                ""
                "<html>"
                "<!-- The form was processed, and this document was generated,"
-               "     using the CGI utilities for MzScheme.  For more information"
-               "     on MzScheme, see"
-               "      http://www.plt-scheme.org/software/mzscheme/"
+               "     using the CGI utilities for Racket.  For more information"
+               "     on Racket, see"
+               "       http://racket-lang.org/"
                "     and for the CGI utilities, contact"
                "     (sk@cs.brown.edu). -->"
                "<head>"
diff --git a/collects/net/cookie-sig.ss b/collects/net/cookie-sig.rkt
similarity index 100%
rename from collects/net/cookie-sig.ss
rename to collects/net/cookie-sig.rkt
diff --git a/collects/net/cookie-unit.ss b/collects/net/cookie-unit.rkt
similarity index 99%
rename from collects/net/cookie-unit.ss
rename to collects/net/cookie-unit.rkt
index 64ff595..dd33424 100644
--- a/collects/net/cookie-unit.ss
+++ b/collects/net/cookie-unit.rkt
@@ -255,7 +255,7 @@
 ;; appear as a block to be legal, and " may only appear as \"
 (define (rfc2068:quoted-string? s)
   (and (regexp-match?
-        #rx"^\"([^\"#\u0000-#\u001F]| |#\return#\newline|#\tab|\\\\\")*\"$"
+        #rx"^\"([^\"\u0000-\u001F]| |\r\n|\t|\\\\\")*\"$"
         s)
        s))
 
diff --git a/collects/net/dns-sig.ss b/collects/net/dns-sig.rkt
similarity index 100%
rename from collects/net/dns-sig.ss
rename to collects/net/dns-sig.rkt
diff --git a/collects/net/dns-unit.ss b/collects/net/dns-unit.rkt
similarity index 100%
rename from collects/net/dns-unit.ss
rename to collects/net/dns-unit.rkt
diff --git a/collects/net/ftp-sig.ss b/collects/net/ftp-sig.rkt
similarity index 100%
rename from collects/net/ftp-sig.ss
rename to collects/net/ftp-sig.rkt
diff --git a/collects/net/ftp-unit.ss b/collects/net/ftp-unit.rkt
similarity index 100%
rename from collects/net/ftp-unit.ss
rename to collects/net/ftp-unit.rkt
diff --git a/collects/net/head-sig.ss b/collects/net/head-sig.rkt
similarity index 100%
rename from collects/net/head-sig.ss
rename to collects/net/head-sig.rkt
diff --git a/collects/net/head-unit.ss b/collects/net/head-unit.rkt
similarity index 100%
rename from collects/net/head-unit.ss
rename to collects/net/head-unit.rkt
diff --git a/collects/net/imap-sig.ss b/collects/net/imap-sig.rkt
similarity index 100%
rename from collects/net/imap-sig.ss
rename to collects/net/imap-sig.rkt
diff --git a/collects/net/imap-unit.ss b/collects/net/imap-unit.rkt
similarity index 100%
rename from collects/net/imap-unit.ss
rename to collects/net/imap-unit.rkt
diff --git a/collects/net/mime-sig.ss b/collects/net/mime-sig.rkt
similarity index 100%
rename from collects/net/mime-sig.ss
rename to collects/net/mime-sig.rkt
diff --git a/collects/net/mime-unit.ss b/collects/net/mime-unit.rkt
similarity index 100%
rename from collects/net/mime-unit.ss
rename to collects/net/mime-unit.rkt
diff --git a/collects/net/nntp-sig.ss b/collects/net/nntp-sig.rkt
similarity index 100%
rename from collects/net/nntp-sig.ss
rename to collects/net/nntp-sig.rkt
diff --git a/collects/net/nntp-unit.ss b/collects/net/nntp-unit.rkt
similarity index 100%
rename from collects/net/nntp-unit.ss
rename to collects/net/nntp-unit.rkt
diff --git a/collects/net/pop3-sig.ss b/collects/net/pop3-sig.rkt
similarity index 100%
rename from collects/net/pop3-sig.ss
rename to collects/net/pop3-sig.rkt
diff --git a/collects/net/pop3-unit.ss b/collects/net/pop3-unit.rkt
similarity index 100%
rename from collects/net/pop3-unit.ss
rename to collects/net/pop3-unit.rkt
diff --git a/collects/net/qp-sig.ss b/collects/net/qp-sig.rkt
similarity index 100%
rename from collects/net/qp-sig.ss
rename to collects/net/qp-sig.rkt
diff --git a/collects/net/qp-unit.ss b/collects/net/qp-unit.rkt
similarity index 100%
rename from collects/net/qp-unit.ss
rename to collects/net/qp-unit.rkt
diff --git a/collects/net/sendmail-sig.ss b/collects/net/sendmail-sig.rkt
similarity index 100%
rename from collects/net/sendmail-sig.ss
rename to collects/net/sendmail-sig.rkt
diff --git a/collects/net/sendmail-unit.ss b/collects/net/sendmail-unit.rkt
similarity index 98%
rename from collects/net/sendmail-unit.ss
rename to collects/net/sendmail-unit.rkt
index eefe4a2..87cec7b 100644
--- a/collects/net/sendmail-unit.ss
+++ b/collects/net/sendmail-unit.rkt
@@ -88,7 +88,7 @@
         (unless (null? cc-recipients)
           (write-recipient-header "CC" cc-recipients)))
       (fprintf writer "Subject: ~a\n" subject)
-      (fprintf writer "X-Mailer: MzScheme: see www.plt-scheme.org\n")
+      (fprintf writer "X-Mailer: Racket (racket-lang.org)\n")
       (for-each (lambda (s)
                   (display s writer)
                   (newline writer))
diff --git a/collects/net/smtp-sig.ss b/collects/net/smtp-sig.rkt
similarity index 100%
rename from collects/net/smtp-sig.ss
rename to collects/net/smtp-sig.rkt
diff --git a/collects/net/smtp-unit.ss b/collects/net/smtp-unit.rkt
similarity index 100%
rename from collects/net/smtp-unit.ss
rename to collects/net/smtp-unit.rkt
diff --git a/collects/net/uri-codec-sig.ss b/collects/net/uri-codec-sig.rkt
similarity index 100%
rename from collects/net/uri-codec-sig.ss
rename to collects/net/uri-codec-sig.rkt
diff --git a/collects/net/uri-codec-unit.ss b/collects/net/uri-codec-unit.rkt
similarity index 100%
rename from collects/net/uri-codec-unit.ss
rename to collects/net/uri-codec-unit.rkt
diff --git a/collects/net/url-sig.ss b/collects/net/url-sig.rkt
similarity index 100%
rename from collects/net/url-sig.ss
rename to collects/net/url-sig.rkt
diff --git a/collects/net/url-unit.ss b/collects/net/url-unit.rkt
similarity index 100%
rename from collects/net/url-unit.ss
rename to collects/net/url-unit.rkt
diff --git a/collects/scheme/mpair.ss b/collects/racket/mpair.rkt
similarity index 100%
rename from collects/scheme/mpair.ss
rename to collects/racket/mpair.rkt
diff --git a/collects/scheme/package.ss b/collects/racket/package.rkt
similarity index 100%
rename from collects/scheme/package.ss
rename to collects/racket/package.rkt
diff --git a/collects/scheme/private/old-ds.ss b/collects/racket/private/old-ds.rkt
similarity index 100%
rename from collects/scheme/private/old-ds.ss
rename to collects/racket/private/old-ds.rkt
diff --git a/collects/scheme/private/old-if.ss b/collects/racket/private/old-if.rkt
similarity index 100%
rename from collects/scheme/private/old-if.ss
rename to collects/racket/private/old-if.rkt
diff --git a/collects/scheme/private/old-procs.ss b/collects/racket/private/old-procs.rkt
similarity index 96%
rename from collects/scheme/private/old-procs.ss
rename to collects/racket/private/old-procs.rkt
index 7a074fd..632acb6 100644
--- a/collects/scheme/private/old-procs.ss
+++ b/collects/racket/private/old-procs.rkt
@@ -1,10 +1,10 @@
 
 (module old-procs '#%kernel
-  (#%require "small-scheme.ss"
-             "more-scheme.ss"
-             "misc.ss"
-             "stxmz-body.ss"
-             "define.ss")
+  (#%require "small-scheme.rkt"
+             "more-scheme.rkt"
+             "misc.rkt"
+             "stxmz-body.rkt"
+             "define.rkt")
 
   (#%provide make-namespace
              free-identifier=?*
diff --git a/collects/scheme/private/old-rp.ss b/collects/racket/private/old-rp.rkt
similarity index 96%
rename from collects/scheme/private/old-rp.ss
rename to collects/racket/private/old-rp.rkt
index 2634ece..74f1554 100644
--- a/collects/scheme/private/old-rp.ss
+++ b/collects/racket/private/old-rp.rkt
@@ -1,6 +1,6 @@
 
 (module old-rp '#%kernel
-  (#%require (for-syntax '#%kernel "stx.ss" "small-scheme.ss" "stxcase-scheme.ss"))
+  (#%require (for-syntax '#%kernel "stx.rkt" "small-scheme.rkt" "stxcase-scheme.rkt"))
 
   (#%provide require require-for-syntax require-for-template require-for-label
              provide provide-for-syntax provide-for-label)
diff --git a/collects/scheme/private/stxmz-body.ss b/collects/racket/private/stxmz-body.rkt
similarity index 84%
rename from collects/scheme/private/stxmz-body.ss
rename to collects/racket/private/stxmz-body.rkt
index 8ae50ce..e1c3ecf 100644
--- a/collects/scheme/private/stxmz-body.ss
+++ b/collects/racket/private/stxmz-body.rkt
@@ -2,10 +2,10 @@
 ;; mzscheme's `#%module-begin'
 
 (module stxmz-body '#%kernel
-  (#%require "stxcase-scheme.ss" "define.ss"
-             (for-syntax '#%kernel "stx.ss"))
+  (#%require "stxcase-scheme.rkt" "define.rkt"
+             (for-syntax '#%kernel "stx.rkt"))
 
-  ;; So that expansions print the way the MzScheme programmer expects:
+  ;; So that expansions print the way the Racket programmer expects:
   (#%require (rename '#%kernel #%plain-module-begin #%module-begin))
 
   (define-syntax mzscheme-in-stx-module-begin
diff --git a/collects/scheme/mpair.rkt b/collects/scheme/mpair.rkt
new file mode 100644
index 0000000..fd74621
--- /dev/null
+++ b/collects/scheme/mpair.rkt
@@ -0,0 +1,2 @@
+#lang scheme/private/provider
+racket/mpair
diff --git a/collects/scheme/package.rkt b/collects/scheme/package.rkt
new file mode 100644
index 0000000..332c173
--- /dev/null
+++ b/collects/scheme/package.rkt
@@ -0,0 +1,2 @@
+#lang scheme/private/provider
+racket/package
diff --git a/collects/tests/mzscheme/awk.ss b/collects/tests/racket/awk.rktl
similarity index 96%
rename from collects/tests/mzscheme/awk.ss
rename to collects/tests/racket/awk.rktl
index 047dd91..73d00c8 100644
--- a/collects/tests/mzscheme/awk.ss
+++ b/collects/tests/racket/awk.rktl
@@ -1,5 +1,5 @@
 
-(load-relative "loadtest.ss")
+(load-relative "loadtest.rktl")
 
 (Section 'awk)
 
diff --git a/collects/tests/mzscheme/binc.ss b/collects/tests/racket/binc.rktl
similarity index 100%
rename from collects/tests/mzscheme/binc.ss
rename to collects/tests/racket/binc.rktl
diff --git a/collects/tests/mzscheme/compat.ss b/collects/tests/racket/compat.rktl
similarity index 94%
rename from collects/tests/mzscheme/compat.ss
rename to collects/tests/racket/compat.rktl
index 11c4cb5..5e25b83 100644
--- a/collects/tests/mzscheme/compat.ss
+++ b/collects/tests/racket/compat.rktl
@@ -1,6 +1,6 @@
 
 
-(load-relative "loadtest.ss")
+(load-relative "loadtest.rktl")
 
 (Section 'compat)
 
diff --git a/collects/tests/mzscheme/contract-mzlib-test.ss b/collects/tests/racket/contract-mzlib-test.rktl
similarity index 99%
rename from collects/tests/mzscheme/contract-mzlib-test.ss
rename to collects/tests/racket/contract-mzlib-test.rktl
index ba6e30a..61a3953 100644
--- a/collects/tests/mzscheme/contract-mzlib-test.ss
+++ b/collects/tests/racket/contract-mzlib-test.rktl
@@ -1,12 +1,12 @@
 #|
 
-This file started out as a copy of contract-test.ss.
+This file started out as a copy of contract-test.rktl.
 Its purpose is to try to ensure that the mzlib version
 of the contract library does not change over time.
 
 |#
 
-(load-relative "loadtest.ss")
+(load-relative "loadtest.rktl")
 (Section 'mzlib/contract)
 
 (parameterize ([error-print-width 200])
@@ -4201,21 +4201,21 @@ so that propagation occurs.
 
   (test-name '(cons/c boolean? integer?) (cons/c boolean? (flat-contract integer?)))
   (test-name '(cons/c boolean? integer?) (cons/c boolean? (flat-contract integer?)))
-  (test-name '(cons/c boolean? (cons/c integer? null?)) (list/c boolean? (flat-contract integer?)))
-  (test-name '(cons/c boolean? (cons/c integer? null?)) (list/c boolean? (flat-contract integer?)))
+  (test-name '(list/c boolean? integer?) (list/c boolean? (flat-contract integer?)))
+  (test-name '(list/c boolean? integer?) (list/c boolean? (flat-contract integer?)))
 
   (test-name '(cons/c boolean? integer?) (cons/c boolean? (flat-contract integer?)))
   (test-name '(cons/c boolean? integer?) (cons/c boolean? (flat-contract integer?)))
   (test-name '(cons/c boolean? integer?) (cons/c boolean? (flat-contract integer?)))
   (test-name '(cons/c (-> boolean? boolean?) integer?) (cons/c (-> boolean? boolean?) integer?))
   
-  (test-name '(cons/c boolean? (cons/c integer? null?))
+  (test-name '(list/c boolean? integer?)
              (list/c boolean? (flat-contract integer?)))
-  (test-name '(cons/c boolean? (cons/c integer? null?)) 
+  (test-name '(list/c boolean? integer?) 
              (list/c boolean? (flat-contract integer?)))
-  (test-name '(cons/c boolean? (cons/c integer? null?))
+  (test-name '(list/c boolean? integer?)
              (list/c boolean? (flat-contract integer?)))
-  (test-name '(cons/c (-> boolean? boolean?) (cons/c integer? null?))
+  (test-name '(list/c (-> boolean? boolean?) integer?)
              (list/c (-> boolean? boolean?) integer?))
   
   (test-name '(parameter/c integer?) (parameter/c integer?))
@@ -4843,7 +4843,7 @@ so that propagation occurs.
                (provide/contract (struct register ([name any/c] [type any/c])))))
       
       (eval '(require 'pc13-common-msg-structs))
-      (eval '(require (lib "plt-match.ss")))
+      (eval '(require (lib "plt-match.rkt")))
       (eval '(match (make-register 1 2)
                [(struct register (name type))
                 (list name type)])))
diff --git a/collects/tests/mzscheme/etc.ss b/collects/tests/racket/etc.rktl
similarity index 97%
rename from collects/tests/mzscheme/etc.ss
rename to collects/tests/racket/etc.rktl
index 123ba85..4b462e9 100644
--- a/collects/tests/mzscheme/etc.ss
+++ b/collects/tests/racket/etc.rktl
@@ -1,5 +1,5 @@
 
-(load-relative "loadtest.ss")
+(load-relative "loadtest.rktl")
 
 (Section 'etc)
 
diff --git a/collects/tests/mzscheme/kw.ss b/collects/tests/racket/kw.rktl
similarity index 99%
rename from collects/tests/mzscheme/kw.ss
rename to collects/tests/racket/kw.rktl
index d89e8bd..185ae18 100644
--- a/collects/tests/mzscheme/kw.ss
+++ b/collects/tests/racket/kw.rktl
@@ -1,5 +1,5 @@
 
-(load-relative "loadtest.ss")
+(load-relative "loadtest.rktl")
 
 (Section 'kw)
 
diff --git a/collects/tests/mzscheme/macrolib.ss b/collects/tests/racket/macrolib.rktl
similarity index 99%
rename from collects/tests/mzscheme/macrolib.ss
rename to collects/tests/racket/macrolib.rktl
index 91a0bf0..23eb8b0 100644
--- a/collects/tests/mzscheme/macrolib.ss
+++ b/collects/tests/racket/macrolib.rktl
@@ -1,5 +1,5 @@
 
-(load-relative "loadtest.ss")
+(load-relative "loadtest.rktl")
 
 (Section 'macrolib)
 
diff --git a/collects/tests/mzscheme/pconvert.ss b/collects/tests/racket/pconvert.rktl
similarity index 99%
rename from collects/tests/mzscheme/pconvert.ss
rename to collects/tests/racket/pconvert.rktl
index 08f0905..534ec11 100644
--- a/collects/tests/mzscheme/pconvert.ss
+++ b/collects/tests/racket/pconvert.rktl
@@ -1,5 +1,5 @@
 
-(load-relative "loadtest.ss")
+(load-relative "loadtest.rktl")
 
 (Section 'pconvert)
 
@@ -367,7 +367,7 @@
 
 (test 'empty print-convert '())
 
-(let ([fn (make-temporary-file "pconvert.ss-test~a")])
+(let ([fn (make-temporary-file "pconvert.rktl-test~a")])
   (let ([in (open-input-file fn)])
     (test `(open-input-file ,fn) print-convert in)
     (close-input-port in))
diff --git a/collects/tests/mzscheme/restart.ss b/collects/tests/racket/restart.rktl
similarity index 97%
rename from collects/tests/mzscheme/restart.ss
rename to collects/tests/racket/restart.rktl
index a49cdc6..2fcaa5f 100644
--- a/collects/tests/mzscheme/restart.ss
+++ b/collects/tests/racket/restart.rktl
@@ -1,5 +1,5 @@
 
-(load-relative "loadtest.ss")
+(load-relative "loadtest.rktl")
 
 (require mzlib/restart)
 
diff --git a/collects/tests/mzscheme/string-mzlib.ss b/collects/tests/racket/string-mzlib.rktl
similarity index 99%
rename from collects/tests/mzscheme/string-mzlib.ss
rename to collects/tests/racket/string-mzlib.rktl
index e014b2c..2a5c20d 100644
--- a/collects/tests/mzscheme/string-mzlib.ss
+++ b/collects/tests/racket/string-mzlib.rktl
@@ -1,5 +1,5 @@
 
-(load-relative "loadtest.ss")
+(load-relative "loadtest.rktl")
 
 (Section 'mzlib-string)
 
diff --git a/collects/tests/mzscheme/structlib.ss b/collects/tests/racket/structlib.rktl
similarity index 97%
rename from collects/tests/mzscheme/structlib.ss
rename to collects/tests/racket/structlib.rktl
index 0a8ae1a..fc07a82 100644
--- a/collects/tests/mzscheme/structlib.ss
+++ b/collects/tests/racket/structlib.rktl
@@ -1,5 +1,5 @@
 
-(load-relative "loadtest.ss")
+(load-relative "loadtest.rktl")
 
 (Section 'structlib)
 
diff --git a/collects/tests/mzscheme/threadlib.ss b/collects/tests/racket/threadlib.rktl
similarity index 98%
rename from collects/tests/mzscheme/threadlib.ss
rename to collects/tests/racket/threadlib.rktl
index 1ae6ebb..b5b4d38 100644
--- a/collects/tests/mzscheme/threadlib.ss
+++ b/collects/tests/racket/threadlib.rktl
@@ -1,5 +1,5 @@
 
-(load-relative "loadtest.ss")
+(load-relative "loadtest.rktl")
 
 (Section 'threadlib)
 
diff --git a/collects/tests/racket/ttt/uinc4.rktl b/collects/tests/racket/ttt/uinc4.rktl
new file mode 100644
index 0000000..bd0a771
--- /dev/null
+++ b/collects/tests/racket/ttt/uinc4.rktl
@@ -0,0 +1,5 @@
+
+(define also-unused 'ok)
+
+(include (build-path up "uinc.rktl"))
+
diff --git a/collects/tests/mzscheme/uinc.ss b/collects/tests/racket/uinc.rktl
similarity index 100%
rename from collects/tests/mzscheme/uinc.ss
rename to collects/tests/racket/uinc.rktl
diff --git a/collects/tests/mzscheme/uinc2.ss b/collects/tests/racket/uinc2.rktl
similarity index 100%
rename from collects/tests/mzscheme/uinc2.ss
rename to collects/tests/racket/uinc2.rktl
diff --git a/collects/tests/racket/uinc3.rktl b/collects/tests/racket/uinc3.rktl
new file mode 100644
index 0000000..bc16584
--- /dev/null
+++ b/collects/tests/racket/uinc3.rktl
@@ -0,0 +1,7 @@
+
+(define unused 'hello)
+
+(include (build-path "ttt" "uinc4.rktl"))
+
+
+
diff --git a/collects/tests/mzscheme/unit.ss b/collects/tests/racket/unit.rktl
similarity index 99%
rename from collects/tests/mzscheme/unit.ss
rename to collects/tests/racket/unit.rktl
index 2769308..3264672 100644
--- a/collects/tests/mzscheme/unit.ss
+++ b/collects/tests/racket/unit.rktl
@@ -1,10 +1,10 @@
 
-(load-relative "loadtest.ss")
+(load-relative "loadtest.rktl")
 
 (Section 'unit)
 (require mzlib/unit200)
 
-;; Hide keywords from scheme/unit.ss:
+;; Hide keywords from scheme/unit.rkt:
 (define import #f)
 (define export #f)
 (define link #f)
@@ -231,7 +231,7 @@
     (export)))
 
   (test (string-append "(5 #<a> #<struct-type:a> (proc: y)"
-		       " (proc: make-x) (proc: x?)"
+		       " (proc: x) (proc: x?)"
 		       " (proc: x-z) (proc: both))"
 		       "(5 #t #<a> #t #f #<x> #t #t #f #t)")
 	get-output-string p))
diff --git a/collects/tests/mzscheme/unitsig.ss b/collects/tests/racket/unitsig.rktl
similarity index 98%
rename from collects/tests/mzscheme/unitsig.ss
rename to collects/tests/racket/unitsig.rktl
index 57b3539..f47f015 100644
--- a/collects/tests/mzscheme/unitsig.ss
+++ b/collects/tests/racket/unitsig.rktl
@@ -1,7 +1,7 @@
 
-(load-relative "loadtest.ss")
+(load-relative "loadtest.rktl")
 
-;; Hide keywords from scheme/unit.ss:
+;; Hide keywords from scheme/unit.rkt:
 (define import #f)
 (define export #f)
 (define link #f)
@@ -178,7 +178,7 @@
    ()
    (import)
    
-   (include "uinc.ss")))
+   (include "uinc.rktl")))
 
 (test 9 'include (invoke-unit/sig i1@))
 
@@ -189,7 +189,7 @@
    (import)
    
    (+ 3 4)
-   (include "uinc3.ss")))
+   (include "uinc3.rktl")))
 
 (test 9 'include (invoke-unit/sig i1.5@))
 
@@ -198,9 +198,9 @@
    ()
    (import)
    
-   (include "uinc.ss")
-   (include "uinc2.ss")
-   (include "uinc.ss")
+   (include "uinc.rktl")
+   (include "uinc2.rktl")
+   (include "uinc.rktl")
    (+ x 2)))
 
 (test 10 'include (invoke-unit/sig i2@))
@@ -212,7 +212,7 @@
        (unit/sig ()
 	 (import)
 	 (define x 5)
-	 (include "binc.ss")
+	 (include "binc.rktl")
 	 y)))
 
 ; Simple:
@@ -334,7 +334,7 @@
 		      M@)])
       (export)))
     (test (string-append "(5 #(struct:a 5 6) #<struct-type:a> (proc: y)"
-			 " (proc: make-x) (proc: x?)"
+			 " (proc: x) (proc: x?)"
 			 " (proc: x-z) (proc: both) (proc: a?))"
 			 "(5 #t #(struct:a 5 6) #t #f #(struct:x 1 2 ...) #t #t #f #t)")
 	  get-output-string p)))