diff --git a/src/IceTranslator.cpp b/src/IceTranslator.cpp
index c47769d..c78bbcb 100644
--- a/src/IceTranslator.cpp
+++ b/src/IceTranslator.cpp
@@ -21,9 +21,9 @@
 
 using namespace Ice;
 
-Translator::Translator(GlobalContext *Ctx, const ClFlags &Flags)
-    : Ctx(Ctx), Flags(Flags),
-      DataLowering(TargetDataLowering::createLowering(Ctx)), ErrorStatus() {}
+Translator::Translator(GlobalContext *Ctx)
+    : Ctx(Ctx), NextSequenceNumber(GlobalContext::getFirstSequenceNumber()),
+      ErrorStatus() {}
 
 Translator::~Translator() {}
 
@@ -54,15 +54,12 @@
 }
 
 void Translator::translateFcn(std::unique_ptr<Cfg> Func) {
-  Ctx->cfgQueueBlockingPush(std::move(Func));
-  if (Ctx->getFlags().getNumTranslationThreads() == 0) {
-    Ctx->translateFunctions();
-  }
+  Ctx->optQueueBlockingPush(std::move(Func));
 }
 
 void Translator::emitConstants() {
   if (!getErrorStatus())
-    DataLowering->lowerConstants(Ctx);
+    TargetDataLowering::createLowering(Ctx)->lowerConstants();
 }
 
 void Translator::transferErrorCode() const {
@@ -70,33 +67,9 @@
     Ctx->getErrorStatus()->assign(getErrorStatus().value());
 }
 
-void
-Translator::lowerGlobals(const VariableDeclarationList &VariableDeclarations) {
-  TimerMarker T(TimerStack::TT_emitGlobalInitializers, Ctx);
-  bool DisableTranslation = Ctx->getFlags().getDisableTranslation();
-  const bool DumpGlobalVariables = ALLOW_DUMP && Ctx->getVerbose() &&
-                                   Ctx->getFlags().getVerboseFocusOn().empty();
-  if (Ctx->getFlags().getUseELFWriter()) {
-    // Dump all globals if requested, but don't interleave w/ emission.
-    if (DumpGlobalVariables) {
-      OstreamLocker L(Ctx);
-      Ostream &Stream = Ctx->getStrDump();
-      for (const Ice::VariableDeclaration *Global : VariableDeclarations) {
-        Global->dump(getContext(), Stream);
-      }
-    }
-    DataLowering->lowerGlobalsELF(VariableDeclarations);
-  } else {
-    const IceString &TranslateOnly = Ctx->getFlags().getTranslateOnly();
-    OstreamLocker L(Ctx);
-    Ostream &Stream = Ctx->getStrDump();
-    for (const Ice::VariableDeclaration *Global : VariableDeclarations) {
-      // Interleave dump output w/ emit output.
-      if (DumpGlobalVariables)
-        Global->dump(getContext(), Stream);
-      if (!DisableTranslation &&
-          GlobalContext::matchSymbolName(Global->getName(), TranslateOnly))
-        DataLowering->lowerGlobal(*Global);
-    }
-  }
+void Translator::lowerGlobals(
+    std::unique_ptr<VariableDeclarationList> VariableDeclarations) {
+  EmitterWorkItem *Item = new EmitterWorkItem(getNextSequenceNumber(),
+                                              VariableDeclarations.release());
+  Ctx->emitQueueBlockingPush(Item);
 }
