diff --git a/lib/src/tree.dart b/lib/src/tree.dart
index 634fdcf..6c3dc91 100644
--- a/lib/src/tree.dart
+++ b/lib/src/tree.dart
@@ -514,7 +514,7 @@
   SupportsConjunction(this.conditions, SourceSpan span) : super(span);
 
   SupportsConjunction clone() {
-    var clonedConditions = <SupportsCondition>[];
+    var clonedConditions = <SupportsConditionInParens>[];
     for (var condition in conditions) {
       clonedConditions.add(condition.clone());
     }
@@ -530,7 +530,7 @@
   SupportsDisjunction(this.conditions, SourceSpan span) : super(span);
 
   SupportsDisjunction clone() {
-    var clonedConditions = <SupportsCondition>[];
+    var clonedConditions = <SupportsConditionInParens>[];
     for (var condition in conditions) {
       clonedConditions.add(condition.clone());
     }
@@ -709,7 +709,7 @@
    * Either @keyframe or keyframe prefixed with @-webkit-, @-moz-, @-ms-, @-o-.
    */
   final int _keyframeName;
-  final name;
+  final Identifier name;
   final List<KeyFrameBlock> _blocks;
 
   KeyFrameDirective(this._keyframeName, this.name, SourceSpan span)
@@ -736,11 +736,11 @@
   }
 
   KeyFrameDirective clone() {
-    var cloneBlocks = [];
+    var directive = KeyFrameDirective(_keyframeName, name.clone(), span);
     for (var block in _blocks) {
-      cloneBlocks.add(block.clone());
+      directive.add(block.clone());
     }
-    return new KeyFrameDirective(_keyframeName, cloneBlocks, span);
+    return directive;
   }
 
   visit(VisitorBase visitor) => visitor.visitKeyFrameDirective(this);
diff --git a/lib/src/validate.dart b/lib/src/validate.dart
index e716e66..a98c665 100644
--- a/lib/src/validate.dart
+++ b/lib/src/validate.dart
@@ -17,9 +17,9 @@
 List<String> ids = [];
 
 class Validate {
-  static int _classNameCheck(var selector, int matches) {
-    if (selector.isCombinatorDescendant() ||
-        (selector.isCombinatorNone() && matches == 0)) {
+  static int _classNameCheck(SimpleSelectorSequence selector, int matches) {
+    if (selector.isCombinatorDescendant ||
+        (selector.isCombinatorNone && matches == 0)) {
       if (matches < 0) {
         String tooMany = selector.simpleSelector.toString();
         throw new CssSelectorException(
@@ -35,11 +35,11 @@
     }
   }
 
-  static int _elementIdCheck(var selector, int matches) {
-    if (selector.isCombinatorNone() && matches == 0) {
+  static int _elementIdCheck(SimpleSelectorSequence selector, int matches) {
+    if (selector.isCombinatorNone && matches == 0) {
       // Perfect just one element id returns matches of -1.
       return -1;
-    } else if (selector.isCombinatorDescendant()) {
+    } else if (selector.isCombinatorDescendant) {
       String tooMany = selector.simpleSelector.toString();
       throw new CssSelectorException(
           'Use of Id selector must be singleton starting at $tooMany');
