Index: ModuleOps.cs
===================================================================
--- ModuleOps.cs	(revision 93)
+++ ModuleOps.cs	(working copy)
@@ -163,11 +163,17 @@
         #region private, protected, public
 
         [RubyMethod("private", RubyMethodAttributes.PrivateInstance)]
-        public static RubyModule/*!*/ SetPrivateVisibility(CodeContext/*!*/ context, RubyModule/*!*/ self, [NotNull]params SymbolId[]/*!*/ methodNames) {
-            SetVisibility(context, methodNames, RubyMethodVisibility.Private);
+        public static RubyModule/*!*/ SetPrivateVisibility(CodeContext/*!*/ context, RubyModule/*!*/ self, [NotNull]params object[]/*!*/ methodNames)
+        {
+            SymbolId[] methodIds = new SymbolId[methodNames.Length];
+            for (int i = 0; i < methodNames.Length; i++)
+                methodIds[i] = Protocols.CastToSymbol(context, methodNames[i]);
+
+            SetVisibility(context, methodIds, RubyMethodVisibility.Private);
             return self;
         }
 
+
         [RubyMethod("protected", RubyMethodAttributes.PrivateInstance)]
         public static RubyModule/*!*/ SetProtectedVisibility(CodeContext/*!*/ context, RubyModule/*!*/ self, [NotNull]params SymbolId[]/*!*/ methodNames) {
             SetVisibility(context, methodNames, RubyMethodVisibility.Protected);
@@ -198,8 +204,14 @@
         #endregion
 
         //  module_function
-        
+
         [RubyMethod("define_method", RubyMethodAttributes.PrivateInstance)]
+        public static Proc/*!*/ DefineMethod(CodeContext/*!*/ context, RubyModule/*!*/ self, BlockParam/*!*/ block, MutableString/*!*/ methodName)
+        {
+            return DefineMethod(context, self, block, methodName.ToSymbol());
+        }
+
+        [RubyMethod("define_method", RubyMethodAttributes.PrivateInstance)]
         public static Proc/*!*/ DefineMethod(CodeContext/*!*/ context, RubyModule/*!*/ self, BlockParam/*!*/ block, SymbolId methodName) {
             // TODO: [NotNull] attribute should work for BlockParams but doesn't
             
@@ -391,6 +403,7 @@
 
         #region class_eval
 
+        [RubyMethod("module_eval")]
         [RubyMethod("class_eval")]
         public static object Evaluate(CodeContext/*!*/ context, RubyModule/*!*/ module, MutableString code) {
             // Create a new context for running the code string - not sure if this is necessary.
@@ -404,19 +417,21 @@
             SourceUnit sourceUnit = context2.LanguageContext.CreateSnippet(code, SourceCodeKind.File);
             ScriptCode scriptCode = sourceUnit.Compile(context2.LanguageContext.GetCompilerOptions(context2.Scope), ErrorSink.Default);
             // Run the code in the new context.
-            // TODO: (This overload is currently private but we need to be able to pass in the new context).
-            // return scriptCode.Run(context2, false);
-            throw RubyExceptions.CreateNotImplementedError("We need ScriptCode.Run(CodeContext, bool) to be public");
+            return scriptCode.Run(context2, false);
         }
 
+        [RubyMethod("module_eval")]
         [RubyMethod("class_eval")]
-        public static object Evaluate(object self, string code, string fileName) {
-            return null;
+        public static object Evaluate(CodeContext/*!*/ context, RubyModule/*!*/ module, MutableString code, MutableString fileName)
+        {
+            return Evaluate(context, module, code);
         }
 
+        [RubyMethod("module_eval")]
         [RubyMethod("class_eval")]
-        public static object Evaluate(object self, string code, string fileName, int lineNumber) {
-            return null;
+        public static object Evaluate(CodeContext/*!*/ context, RubyModule/*!*/ module, MutableString code, MutableString fileName, int lineNumber)
+        {
+            return Evaluate(context, module, code);
         }
 
         static DynamicSite<BlockParam, object>/*!*/ _ClassEvalSite = RuntimeHelpers.CreateSimpleCallSite<BlockParam, object>();
