diff --git a/src/log_severity.h b/src/log_severity.h
index 26a5a19..5ecfe8d 100644
--- a/src/log_severity.h
+++ b/src/log_severity.h
@@ -1,10 +1,24 @@
-// Copyright 2011 Google Inc. All Rights Reserved.
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 
 #ifndef BASE_LOG_SEVERITY_H_
 #define BASE_LOG_SEVERITY_H_
 
 typedef int LogSeverity;
 
-const int INFO = 0, WARNING = 1, ERROR = 2, FATAL = 3, NUM_SEVERITIES = 4;
+const int VERBOSE = 0, DEBUG = 1, INFO = 2, WARNING = 3, ERROR = 4, FATAL = 5;
 
 #endif  // BASE_LOG_SEVERITY_H_
diff --git a/src/logging.h b/src/logging.h
index e358db6..b6306b2 100644
--- a/src/logging.h
+++ b/src/logging.h
@@ -29,36 +29,6 @@
     ::art::LogMessage(__FILE__, __LINE__, FATAL, -1).stream() \
         << "Check failed: " #x << " "
 
-namespace art {
-
-template <typename LHS, typename RHS>
-struct EagerEvaluator {
-  EagerEvaluator(LHS lhs, RHS rhs) : lhs(lhs), rhs(rhs) { }
-  LHS lhs;
-  RHS rhs;
-};
-
-
-class LogMessage {
- public:
-  LogMessage(const char* file, int line, LogSeverity severity, int error);
-  ~LogMessage();
-  std::ostream& stream();
-
- private:
-  void LogLine(const char*);
-
-  std::stringstream buffer_;
-  const char* file_;
-  int line_number_;
-  LogSeverity severity_;
-  int errno_;
-
-  DISALLOW_COPY_AND_ASSIGN(LogMessage);
-};
-
-}  // namespace art
-
 #define CHECK_OP(LHS, RHS, OP) \
   for (::art::EagerEvaluator<typeof(LHS), typeof(RHS)> _values(LHS, RHS); !(_values.lhs OP _values.rhs); ) \
     ::art::LogMessage(__FILE__, __LINE__, FATAL, -1).stream() \
@@ -150,4 +120,37 @@
 
 #define UNIMPLEMENTED(level) LOG(level) << __PRETTY_FUNCTION__ << " unimplemented "
 
+//
+// Implementation details beyond this point.
+//
+
+namespace art {
+
+template <typename LHS, typename RHS>
+struct EagerEvaluator {
+  EagerEvaluator(LHS lhs, RHS rhs) : lhs(lhs), rhs(rhs) { }
+  LHS lhs;
+  RHS rhs;
+};
+
+class LogMessage {
+ public:
+  LogMessage(const char* file, int line, LogSeverity severity, int error);
+  ~LogMessage();
+  std::ostream& stream();
+
+ private:
+  void LogLine(const char*);
+
+  std::stringstream buffer_;
+  const char* file_;
+  int line_number_;
+  LogSeverity severity_;
+  int errno_;
+
+  DISALLOW_COPY_AND_ASSIGN(LogMessage);
+};
+
+}  // namespace art
+
 #endif  // ART_SRC_LOGGING_H_
diff --git a/src/logging_android.cc b/src/logging_android.cc
index 4e7a5fa..6d949da 100644
--- a/src/logging_android.cc
+++ b/src/logging_android.cc
@@ -24,12 +24,12 @@
 namespace art {
 
 static const int kLogSeverityToAndroidLogPriority[] = {
-  ANDROID_LOG_INFO, ANDROID_LOG_WARN, ANDROID_LOG_ERROR, ANDROID_LOG_FATAL
+  ANDROID_LOG_VERBOSE, ANDROID_LOG_DEBUG, ANDROID_LOG_INFO,
+  ANDROID_LOG_WARN, ANDROID_LOG_ERROR, ANDROID_LOG_FATAL
 };
 
 LogMessage::LogMessage(const char* file, int line, LogSeverity severity, int error)
-: file_(file), line_number_(line), severity_(severity), errno_(error)
-{
+    : file_(file), line_number_(line), severity_(severity), errno_(error) {
   const char* last_slash = strrchr(file, '/');
   file_ = (last_slash == NULL) ? file : last_slash + 1;
 }
diff --git a/src/logging_linux.cc b/src/logging_linux.cc
index d62649b..42bc50b 100644
--- a/src/logging_linux.cc
+++ b/src/logging_linux.cc
@@ -28,14 +28,14 @@
 namespace art {
 
 LogMessage::LogMessage(const char* file, int line, LogSeverity severity, int error)
-: line_number_(line), severity_(severity), errno_(error)
-{
+    : line_number_(line), severity_(severity), errno_(error) {
   const char* last_slash = strrchr(file, '/');
   file_ = (last_slash == NULL) ? file : last_slash + 1;
 }
 
 void LogMessage::LogLine(const char* line) {
-  std::cerr << "IWEF"[severity_] << ' ' << StringPrintf("%5d %5d", getpid(), ::art::GetTid()) << ' '
+  std::cerr << "VDIWEF"[severity_] << ' '
+            << StringPrintf("%5d %5d", getpid(), ::art::GetTid()) << ' '
             << file_ << ':' << line_number_ << "] " << line << std::endl;
 }
 
