diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/ConsolePrinter.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/ConsolePrinter.java
index c2c626c..38f6929 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/ConsolePrinter.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/ConsolePrinter.java
@@ -10,10 +10,16 @@
 
 import static com.google.common.io.Closeables.closeQuietly;
 import static com.google.eclipse.protobuf.ui.util.Workbenches.activeWorkbenchPage;
+import static org.eclipse.core.runtime.Status.OK_STATUS;
 
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.widgets.Display;
 import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.console.*;
+import org.eclipse.ui.progress.UIJob;
 
 /**
  * @author alruiz@google.com (Alex Ruiz)
@@ -21,7 +27,8 @@
 class ConsolePrinter {
   private static final String CONSOLE_NAME = "protoc";
 
-  private MessageConsoleStream out;
+  private MessageConsoleStream signalStream;
+  private MessageConsoleStream outputStream;
 
   static ConsolePrinter createAndDisplayConsole() throws PartInitException {
     MessageConsole console = findConsole();
@@ -47,14 +54,37 @@
   }
 
   private ConsolePrinter(MessageConsole console) {
-    out = console.newMessageStream();
+    signalStream = console.newMessageStream();
+    outputStream = console.newMessageStream();
+    UIJob job = new UIJob("Set colors in protoc console") {
+      @Override public IStatus runInUIThread(IProgressMonitor monitor) {
+        Display display = getDisplay();
+        signalStream.setColor(new Color(display, 0, 0, 255));
+        outputStream.setColor(new Color(display, 255, 0, 0));
+        return OK_STATUS;
+      }
+    };
+    job.schedule();
   }
 
-  void println(String message) {
-    out.println(message);
+  void printSignal(String s) {
+    signalStream.println(s);
+  }
+
+  void printOutput(String s) {
+    outputStream.println(s);
   }
 
   void close() {
-    closeQuietly(out);
+    close(signalStream);
+    close(outputStream);
+  }
+
+  private static void close(MessageConsoleStream stream) {
+    Color color = stream.getColor();
+    if (color != null) {
+      color.dispose();
+    }
+    closeQuietly(stream);
   }
 }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/ProtobufBuildParticipant.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/ProtobufBuildParticipant.java
index 96de194..57156f6 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/ProtobufBuildParticipant.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/ProtobufBuildParticipant.java
@@ -143,7 +143,7 @@
     ConsolePrinter console = null;
     try {
       console = createAndDisplayConsole();
-      console.println("[command] " + command);
+      console.printSignal(command);
       Process process = Runtime.getRuntime().exec(command);
       processStream(process.getErrorStream(), source, console);
       process.destroy();
@@ -166,7 +166,7 @@
       ProtocMarkerFactory markerFactory = new ProtocMarkerFactory(source);
       while ((line = bufferedReader.readLine()) != null) {
         outputParser.parseAndAddMarkerIfNecessary(line, markerFactory);
-        console.println("[protoc]  " + line);
+        console.printOutput(line);
       }
     } finally {
       closeQuietly(reader);
