Index: src/clj/clojure/genclass.clj
===================================================================
--- src/clj/clojure/genclass.clj	(revision 1147)
+++ src/clj/clojure/genclass.clj	(working copy)
@@ -92,7 +92,7 @@
 (defn- generate-class [options-map]
   (let [default-options {:prefix "-" :load-impl-ns true :impl-ns (ns-name *ns*)}
         {:keys [name extends implements constructors methods main factory state init exposes 
-                prefix load-impl-ns impl-ns]} 
+                super-methods prefix load-impl-ns impl-ns]} 
           (merge default-options options-map)
         name (str name)
         super (if extends (the-class extends) Object)
@@ -132,6 +132,7 @@
         overloads (into {} (filter (fn [[m s]] (rest s)) sigs-by-name))
         var-fields (concat (when init [init-name]) 
                            (when main [main-name])
+                           (when super-methods (map str (keys super-methods)))
                            (distinct (concat (keys sigs-by-name)
                                              (mapcat (fn [[m s]] (map #(overload-name m %) s)) overloads)
                                              (mapcat (comp (partial map str) vals val) exposes))))
@@ -355,7 +356,23 @@
        (doseq [[mname pclasses rclass :as msig] methods]
          (emit-forwarding-method (str mname) pclasses rclass (:static ^msig)
                                  emit-unsupported)))
-
+                                        ;expose specified overridden superclass methods
+    (doseq [[super-mname [mname pclasses rclass]] (seq super-methods)]
+      (let [pclasses (map the-class pclasses)
+            rclass (the-class rclass)
+            ptypes (to-types pclasses)
+            rtype (totype rclass)
+            expose-m (new Method (str super-mname) rtype ptypes)
+            target-m (new Method (str mname) rtype ptypes)
+            gen (new GeneratorAdapter (. Opcodes ACC_PUBLIC) expose-m nil nil cv)]
+        (. gen (loadThis))
+        (. gen (loadArgs))
+        (. gen (visitMethodInsn (. Opcodes INVOKESPECIAL) 
+                                (. super-type (getInternalName))
+                                (. target-m (getName))
+                                (. target-m (getDescriptor))))
+        (. gen (returnValue))
+        (. gen (endMethod))))
                                         ;main
     (when main
       (let [m (. Method getMethod "void main (String[])")
@@ -500,6 +517,12 @@
   generate public getter/setter methods exposing the protected field(s)
   for use in the implementation.
 
+  :super-methods {local-name [name [param-types] return-type], ...}
+
+  It is sometimes necessary to call the superclass' implementation of an
+  overridden method.  Those methods may be exposed and referred in 
+  the new method implementation by a unique local name.
+
   :prefix string
 
   Default: \"-\" Methods called e.g. Foo will be looked up in vars called
