diff --git a/llvm/lib/AsmParser/Parser.cpp b/llvm/lib/AsmParser/Parser.cpp
index 0005e11..36c9712 100644
--- a/llvm/lib/AsmParser/Parser.cpp
+++ b/llvm/lib/AsmParser/Parser.cpp
@@ -1,4 +1,4 @@
-//===- Parser.cpp - Main dispatch module for the Parser library -------------===
+//===- Parser.cpp - Main dispatch module for the Parser library -----------===//
 //
 //                     The LLVM Compiler Infrastructure
 //
@@ -9,39 +9,40 @@
 //
 // This library implements the functionality defined in llvm/assembly/parser.h
 //
-//===------------------------------------------------------------------------===
+//===----------------------------------------------------------------------===//
 
-#include "ParserInternals.h"
+#include "llvm/Assembly/Parser.h"
+#include "LLParser.h"
 #include "llvm/Module.h"
 #include "llvm/Support/MemoryBuffer.h"
+#include "llvm/Support/raw_ostream.h"
 #include <cstring>
 using namespace llvm;
 
-
-ParseError* TheParseError = 0; /// FIXME: Not threading friendly
-
-Module *llvm::ParseAssemblyFile(const std::string &Filename, ParseError* Err) {
+Module *llvm::ParseAssemblyFile(const std::string &Filename, ParseError &Err) {
+  Err.setFilename(Filename);
+  
   std::string ErrorStr;
   MemoryBuffer *F = MemoryBuffer::getFileOrSTDIN(Filename.c_str(), &ErrorStr);
   if (F == 0) {
-    if (Err)
-      Err->setError(Filename, "Could not open input file '" + Filename + "'");
+    Err.setError("Could not open input file '" + Filename + "'");
     return 0;
   }
   
-  TheParseError = Err;
-  Module *Result = RunVMAsmParser(F);
+  Module *Result = LLParser(F, Err).Run();
   delete F;
   return Result;
 }
 
+// FIXME: M is ignored??
 Module *llvm::ParseAssemblyString(const char *AsmString, Module *M, 
-                                  ParseError *Err) {
-  TheParseError = Err;
+                                  ParseError &Err) {
+  Err.setFilename("<string>");
+
   MemoryBuffer *F = MemoryBuffer::getMemBuffer(AsmString, 
                                                AsmString+strlen(AsmString),
                                                "<string>");
-  Module *Result = RunVMAsmParser(F);
+  Module *Result = LLParser(F, Err).Run();
   delete F;
   return Result;
 }
@@ -51,40 +52,28 @@
 //                              ParseError Class
 //===------------------------------------------------------------------------===
 
-
-void ParseError::setError(const std::string &filename,
-                          const std::string &message,
-                          int lineNo, int colNo) {
-  Filename = filename;
-  Message = message;
-  LineNo = lineNo;
-  colNo = colNo;
-}
-
-ParseError::ParseError(const ParseError &E)
-  : Filename(E.Filename), Message(E.Message) {
-  LineNo = E.LineNo;
-  ColumnNo = E.ColumnNo;
-}
-
-// Includes info from options
-const std::string ParseError::getMessage() const {
-  std::string Result;
-  char Buffer[10];
-
+void ParseError::PrintError(const char *ProgName, raw_ostream &S) {
+  errs() << ProgName << ": ";
   if (Filename == "-")
-    Result += "<stdin>";
+    errs() << "<stdin>";
   else
-    Result += Filename;
-
+    errs() << Filename;
+  
   if (LineNo != -1) {
-    sprintf(Buffer, "%d", LineNo);
-    Result += std::string(":") + Buffer;
-    if (ColumnNo != -1) {
-      sprintf(Buffer, "%d", ColumnNo);
-      Result += std::string(",") + Buffer;
-    }
+    errs() << ':' << LineNo;
+    if (ColumnNo != -1)
+      errs() << ':' << (ColumnNo+1);
   }
-
-  return Result + ": " + Message;
+  
+  errs() << ": " << Message << '\n';
+  
+  if (LineNo != -1 && ColumnNo != -1) {
+    errs() << LineContents << '\n';
+    
+    // Print out spaces/tabs before the caret.
+    for (unsigned i = 0; i != unsigned(ColumnNo); ++i)
+      errs() << (LineContents[i] == '\t' ? '\t' : ' ');
+    errs() << "^\n";
+  }
 }
+
