diff --git a/CHANGELOG.md b/CHANGELOG.md
index beac1ec..b8c2a6d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.12.0+1
+
+* Allow the lastest version of `logging` package.
+
 ## 0.12.0
 
 * Top-level methods in `parser.dart` now take `PreprocessorOptions` instead of
diff --git a/lib/parser.dart b/lib/parser.dart
index 9d27e97..1ca391c 100644
--- a/lib/parser.dart
+++ b/lib/parser.dart
@@ -300,10 +300,6 @@
     }
   }
 
-  void _eatSemicolon() {
-    _eat(TokenKind.SEMICOLON);
-  }
-
   void _errorExpected(String expected) {
     var tok = _next();
     var message;
diff --git a/lib/src/polyfill.dart b/lib/src/polyfill.dart
index bdd8330..9b682ce 100644
--- a/lib/src/polyfill.dart
+++ b/lib/src/polyfill.dart
@@ -52,7 +52,7 @@
 
     // Resolve all definitions to a non-VarUsage (terminal expression).
     mainStyleSheetVarDefs.forEach((key, value) {
-      for (Expression expr in (value.expression as Expressions).expressions) {
+      for (var _ in (value.expression as Expressions).expressions) {
         mainStyleSheetVarDefs[key] =
             _findTerminalVarDefinition(_allVarDefinitions, value);
       }
diff --git a/lib/src/tokenizer_base.dart b/lib/src/tokenizer_base.dart
index 7999a8f..8c52fb0 100644
--- a/lib/src/tokenizer_base.dart
+++ b/lib/src/tokenizer_base.dart
@@ -55,9 +55,6 @@
   int _index = 0;
   int _startIndex = 0;
 
-  static const String _CDATA_START = '<![CDATA[';
-  static const String _CDATA_END = ']]>';
-
   TokenizerBase(this._file, this._text, this._skipWhitespace,
       [this._index = 0]);
 
@@ -104,14 +101,6 @@
     }
   }
 
-  String _tokenText() {
-    if (_index < _text.length) {
-      return _text.substring(_startIndex, _index);
-    } else {
-      return _text.substring(_startIndex, _text.length);
-    }
-  }
-
   Token _finishToken(int kind) {
     return new Token(kind, _file.span(_startIndex, _index));
   }
@@ -306,14 +295,6 @@
     }
   }
 
-  Token _finishOpenBrace() {
-    return _finishToken(TokenKind.LBRACE);
-  }
-
-  Token _finishCloseBrace() {
-    return _finishToken(TokenKind.RBRACE);
-  }
-
   Token finishString(int quote) {
     if (_maybeEatChar(quote)) {
       if (_maybeEatChar(quote)) {
diff --git a/lib/src/tokenkind.dart b/lib/src/tokenkind.dart
index 8e976bf..617f062 100644
--- a/lib/src/tokenkind.dart
+++ b/lib/src/tokenkind.dart
@@ -467,40 +467,6 @@
   //              see http://www.w3schools.com/cssref/pr_list-style-type.asp
   //              for list of possible values.
 
-  // List of valid CSS functions:
-  static const List<Map<String, Object>> _FUNCTIONS = const [
-    const {'name': 'counter', 'info': const {'params': 2, 'expr': false}},
-    const {'name': 'attr', 'info': const {'params': 1, 'expr': false}},
-    const {'name': 'calc', 'info': const {'params': 1, 'expr': true}},
-    const {'name': 'min', 'info': const {'params': 2, 'expr': true}},
-    const {'name': 'max', 'info': const {'params': 2, 'expr': true}},
-
-    // 2D functions:
-    const {'name': 'translateX', 'info': const {'params': 1, 'expr': false}},
-    const {'name': 'translateY', 'info': const {'params': 1, 'expr': false}},
-    const {'name': 'translate', 'info': const {'params': 2, 'expr': false}},
-    const {'name': 'rotate', 'info': const {'params': 1, 'expr': false}},
-    const {'name': 'scaleX', 'info': const {'params': 1, 'expr': false}},
-    const {'name': 'scaleY', 'info': const {'params': 1, 'expr': false}},
-    const {'name': 'scale', 'info': const {'params': 2, 'expr': false}},
-    const {'name': 'skewX', 'info': const {'params': 1, 'expr': false}},
-    const {'name': 'skewY', 'info': const {'params': 1, 'expr': false}},
-    const {'name': 'skew', 'info': const {'params': 2, 'expr': false}},
-    const {'name': 'matrix', 'info': const {'params': 6, 'expr': false}},
-
-    // 3D functions:
-    const {'name': 'matrix3d', 'info': const {'params': 16, 'expr': false}},
-    const {'name': 'translate3d', 'info': const {'params': 3, 'expr': false}},
-    const {'name': 'translateZ', 'info': const {'params': 1, 'expr': false}},
-    const {'name': 'scale3d', 'info': const {'params': 3, 'expr': false}},
-    const {'name': 'scaleZ', 'info': const {'params': 1, 'expr': false}},
-    const {'name': 'rotate3d', 'info': const {'params': 3, 'expr': false}},
-    const {'name': 'rotateX', 'info': const {'params': 1, 'expr': false}},
-    const {'name': 'rotateY', 'info': const {'params': 1, 'expr': false}},
-    const {'name': 'rotateZ', 'info': const {'params': 1, 'expr': false}},
-    const {'name': 'perspective', 'info': const {'params': 1, 'expr': false}},
-  ];
-
   /**
    * Check if name is a pre-defined CSS name.  Used by error handler to report
    * if name is unknown or used improperly.
diff --git a/pubspec.yaml b/pubspec.yaml
index 7d3c6dd..01051d3 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: csslib
-version: 0.12.1-dev
+version: 0.12.0+1
 author: Polymer.dart Team <web-ui-dev@dartlang.org>
 description: A library for parsing CSS.
 homepage: https://github.com/dart-lang/csslib
diff --git a/test/nested_test.dart b/test/nested_test.dart
index 797ac5f..1848ef1 100644
--- a/test/nested_test.dart
+++ b/test/nested_test.dart
@@ -341,8 +341,6 @@
 }
 
 void mediaNesting() {
-  var errors = [];
-
   final input = r'''
 @media screen and (-webkit-min-device-pixel-ratio:0) {
   #toggle-all {
@@ -372,7 +370,6 @@
 }
 
 void simpleThis() {
-  final errors = [];
   final input = '''#header {
   h1 {
     font-size: 26px;
@@ -406,8 +403,6 @@
 }
 
 void complexThis() {
-  var errors = [];
-
   final input1 = r'''
 .light {
   .leftCol {
@@ -484,8 +479,6 @@
 }
 
 variationsThis() {
-  var errors = [];
-
   final input1 = r'''
 .textLink {
   a {
@@ -597,7 +590,6 @@
 }
 
 thisCombinator() {
-  var errors = [];
   var input = r'''
 .btn {
   color: red;
diff --git a/test/var_test.dart b/test/var_test.dart
index 3972023..d47fd78 100644
--- a/test/var_test.dart
+++ b/test/var_test.dart
@@ -63,7 +63,6 @@
 }
 
 void expressionsVar() {
-  final errors = [];
   final input = ''':root {
   var-color-background: red;
   var-color-foreground: blue;
@@ -222,7 +221,6 @@
 }
 
 void defaultVar() {
-  final errors = [];
   final input = '''
 :root {
   var-color-background: red;
