diff --git a/lib/AsmParser/LLParser.cpp b/lib/AsmParser/LLParser.cpp
index 5582bfa..e44e650 100644
--- a/lib/AsmParser/LLParser.cpp
+++ b/lib/AsmParser/LLParser.cpp
@@ -51,19 +51,12 @@
 }
 
 /// Run: module ::= toplevelentity*
-Module *LLParser::Run() {
-  M = new Module(Lex.getFilename());
-
+bool LLParser::Run() {
   // Prime the lexer.
   Lex.Lex();
 
-  if (ParseTopLevelEntities() ||
-      ValidateEndOfModule()) {
-    delete M;
-    return 0;
-  }
-  
-  return M;
+  return ParseTopLevelEntities() ||
+         ValidateEndOfModule();
 }
 
 /// ValidateEndOfModule - Do final validity and sanity checks at the end of the
diff --git a/lib/AsmParser/LLParser.h b/lib/AsmParser/LLParser.h
index 73c1203..e064c68 100644
--- a/lib/AsmParser/LLParser.h
+++ b/lib/AsmParser/LLParser.h
@@ -69,8 +69,8 @@
     std::map<unsigned, std::pair<GlobalValue*, LocTy> > ForwardRefValIDs;
     std::vector<GlobalValue*> NumberedVals;
   public:
-    LLParser(MemoryBuffer *F, ParseError &Err) : Lex(F, Err), M(0) {}
-    Module *Run();
+    LLParser(MemoryBuffer *F, ParseError &Err, Module *m) : Lex(F, Err), M(m) {}
+    bool Run();
 
   private:
 
diff --git a/lib/AsmParser/Parser.cpp b/lib/AsmParser/Parser.cpp
index ce0d268..08c2391 100644
--- a/lib/AsmParser/Parser.cpp
+++ b/lib/AsmParser/Parser.cpp
@@ -14,6 +14,7 @@
 #include "llvm/Assembly/Parser.h"
 #include "LLParser.h"
 #include "llvm/Module.h"
+#include "llvm/ADT/OwningPtr.h"
 #include "llvm/Support/MemoryBuffer.h"
 #include "llvm/Support/raw_ostream.h"
 #include <cstring>
@@ -23,28 +24,36 @@
   Err.setFilename(Filename);
 
   std::string ErrorStr;
-  MemoryBuffer *F = MemoryBuffer::getFileOrSTDIN(Filename.c_str(), &ErrorStr);
+  OwningPtr<MemoryBuffer>
+    F(MemoryBuffer::getFileOrSTDIN(Filename.c_str(), &ErrorStr));
   if (F == 0) {
     Err.setError("Could not open input file '" + Filename + "'");
     return 0;
   }
 
-  Module *Result = LLParser(F, Err).Run();
-  delete F;
-  return Result;
+  OwningPtr<Module> M(new Module(Filename));
+  if (LLParser(F.get(), Err, M.get()).Run())
+    return 0;
+  return M.take();
 }
 
-// FIXME: M is ignored??
 Module *llvm::ParseAssemblyString(const char *AsmString, Module *M,
                                   ParseError &Err) {
   Err.setFilename("<string>");
 
-  MemoryBuffer *F = MemoryBuffer::getMemBuffer(AsmString,
-                                               AsmString+strlen(AsmString),
-                                               "<string>");
-  Module *Result = LLParser(F, Err).Run();
-  delete F;
-  return Result;
+  OwningPtr<MemoryBuffer>
+    F(MemoryBuffer::getMemBuffer(AsmString, AsmString+strlen(AsmString),
+                                 "<string>"));
+  
+  // If we are parsing into an existing module, do it.
+  if (M)
+    return LLParser(F.get(), Err, M).Run() ? 0 : M;
+
+  // Otherwise create a new module.
+  OwningPtr<Module> M2(new Module("<string>"));
+  if (LLParser(F.get(), Err, M2.get()).Run())
+    return 0;
+  return M2.take();
 }
 
 
