diff --git a/kernel/Behavior.st b/kernel/Behavior.st
index 43423c6..f5b6cf7 100644
--- a/kernel/Behavior.st
+++ b/kernel/Behavior.st
@@ -257,6 +257,14 @@ method dictionary, and iterating over the class hierarchy.'>
 	^self methodDictionary removeKey: selector ifAbsent: [self error: 'huh?!?']
     ]
 
+    formattedSourceStringAt: aSelector [
+	"Answer the method source code as a formatted string. Requires
+	 package Parser."
+
+	<category: 'source code'>
+	self notYetImplemented
+    ]
+
     compile: code [
 	"Compile method source.  If there are parsing errors, answer nil.
 	 Else, return a CompiledMethod result of compilation"
@@ -568,6 +576,20 @@ method dictionary, and iterating over the class hierarchy.'>
 		repeat
     ]
 
+    lookupAllSelectors: aSelector [
+	"Answer a Set of all the compiled method associated with selector.
+	 from the local method dictionary and all of the superclasses."
+
+	<category: 'accessing the method dictionary'>
+	| implementors |
+
+	implementors := Set new.
+	self withAllSuperclassesDo: [:c | | m |
+	    m := c compiledMethodAt: aSelector ifAbsent: [nil].
+	    m ifNotNil: [implementors add: m]].
+	^implementors
+    ]
+
     compiledMethodAt: selector ifAbsent: aBlock [
 	"Return the compiled method associated with selector, from the local
 	 method dictionary.  Evaluate aBlock if not found."
@@ -1547,11 +1569,40 @@ method dictionary, and iterating over the class hierarchy.'>
 		    nl]
     ]
 
+    printFullHierarchy [
+	"Print my full hierarchy (i.e. all my superclasses and subclasses)
+	 on the terminal."
+
+	<category: 'printing hierarchy'>
+	| printBlock |
+	printBlock := [:name :level |
+			  stdout
+			      next: level * self hierarchyIndent put: Character space;
+			      nextPutAll: name;
+			      nl].
+	self printSuperclasses: 0 using: printBlock;
+	     printSubclasses: (self allSuperclasses size) using: printBlock
+    ]
+
+    printSuperclasses: level using: aBlock [
+	"I print all my superclasses, each indented according to its position in
+	the hierarchy. I pass aBlock a class name and a level."
+
+	<category: 'private'>
+	| mySuperclass currentLevel |
+	currentLevel := level.
+	mySuperclass := self allSuperclasses reverse.
+	mySuperclass do:
+	   [:superclass |
+	   aBlock value: superclass name value: currentLevel.
+	   currentLevel := currentLevel + 1]
+    ]
+
     printSubclasses: level using: aBlock [
 	"I print my name, and then all my subclasses, each indented according
 	 to its position in the hierarchy. I pass aBlock a class name and a level"
 
-	<category: 'printing hierarchy'>
+	<category: 'private'>
 	| mySubclasses |
 	aBlock value: self name value: level.
 	mySubclasses := self subclasses 
diff --git a/kernel/Collection.st b/kernel/Collection.st
index 41dcaae..57bf64f 100644
--- a/kernel/Collection.st
+++ b/kernel/Collection.st
@@ -587,6 +587,14 @@ of objects.'>
 	aStream nextPut: $)
     ]
 
+    printLines [
+	"Print each element of the receiver to a line on standard output."
+
+	<category: 'printing'>
+	self do: [:each |
+	    stdout nextPutAll: each printString; nl]
+    ]
+
     storeOn: aStream [
 	"Store Smalltalk code compiling to the receiver on aStream"
 
diff --git a/packages/stinst/parser/Extensions.st b/packages/stinst/parser/Extensions.st
index 3ff4df0..39fa143 100644
--- a/packages/stinst/parser/Extensions.st
+++ b/packages/stinst/parser/Extensions.st
@@ -37,6 +37,24 @@ Behavior extend [
 	 RBMethodNode that compiles to my method named by selector."
         ^(self compiledMethodAt: selector) methodParseNode
     ]
+
+    formattedSourceStringAt: aSelector [
+	"Answer the method source code as a formatted string. Requires
+	 package Parser."
+
+	<category: 'source code'>
+	| method |
+	method := self lookupSelector: aSelector.
+	method isNil
+	   ifTrue: [^nil]
+	   ifFalse: [| header |
+		header := String streamContents: [:s |
+		   s nextPut: $";
+		     nextPutAll: method printString;
+		     nextPut: $";
+		     nextPut: Character nl].
+	^header, method methodFormattedSourceString]
+    ]
 ]
 
 
@@ -128,3 +146,22 @@ ClassDescription extend [
 	    fileOutCategory: category of: self to: aFileStream
     ]
 ]
+
+Symbol extend [
+    implementors [
+	"Answer a Set of all the compiled method associated with selector
+	 named by the receiver, which is supposed to be a valid message
+	 name."
+
+	<category: 'accessing the method dictionary'>
+	| implementors |
+
+	implementors := Set new.
+	Class withAllSubclassesDo: [:c | | m |
+	    m := c compiledMethodAt: self ifAbsent: [nil].
+	    m ifNotNil: [implementors add: m].
+	    m := c asClass compiledMethodAt: self ifAbsent: [nil].
+	    m ifNotNil: [implementors add: m]].
+	 ^implementors
+    ]
+]
