diff --git a/buildSrc/init.gradle b/buildSrc/init.gradle
index f09c777..a81a2a9 100644
--- a/buildSrc/init.gradle
+++ b/buildSrc/init.gradle
@@ -127,7 +127,7 @@
 def configureBuildOnServer() {
     def buildOnServerTask = rootProject.tasks.create("buildOnServer")
     rootProject.tasks.whenTaskAdded { task ->
-        if ("createArchive".equals(task.name)) {
+        if ("createArchive".equals(task.name) || "distDocs".equals(task.name)) {
             buildOnServerTask.dependsOn task
         }
     }
diff --git a/media-compat/Android.mk b/media-compat/Android.mk
index 02ed90d..4a4cd02 100644
--- a/media-compat/Android.mk
+++ b/media-compat/Android.mk
@@ -28,7 +28,6 @@
 LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
 LOCAL_AIDL_INCLUDES := $(LOCAL_PATH)/java
 LOCAL_SRC_FILES := \
-    $(call all-java-files-under,kitkat) \
     $(call all-java-files-under,api21) \
     $(call all-java-files-under,api22) \
     $(call all-java-files-under,api23) \
diff --git a/media-compat/build.gradle b/media-compat/build.gradle
index 2ea2483..c504996 100644
--- a/media-compat/build.gradle
+++ b/media-compat/build.gradle
@@ -18,8 +18,6 @@
 
     sourceSets {
         main.java.srcDirs = [
-                'jellybean-mr2',
-                'kitkat',
                 'api21',
                 'api22',
                 'api23',
diff --git a/media-compat/java/android/support/v4/media/RatingCompat.java b/media-compat/java/android/support/v4/media/RatingCompat.java
index b538cac..e70243f 100644
--- a/media-compat/java/android/support/v4/media/RatingCompat.java
+++ b/media-compat/java/android/support/v4/media/RatingCompat.java
@@ -18,6 +18,7 @@
 
 import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
 
+import android.media.Rating;
 import android.os.Build;
 import android.os.Parcel;
 import android.os.Parcelable;
@@ -326,25 +327,25 @@
      */
     public static RatingCompat fromRating(Object ratingObj) {
         if (ratingObj != null && Build.VERSION.SDK_INT >= 19) {
-            final int ratingStyle = RatingCompatKitkat.getRatingStyle(ratingObj);
+            final int ratingStyle = ((Rating) ratingObj).getRatingStyle();
             final RatingCompat rating;
-            if (RatingCompatKitkat.isRated(ratingObj)) {
+            if (((Rating) ratingObj).isRated()) {
                 switch (ratingStyle) {
                     case RATING_HEART:
-                        rating = newHeartRating(RatingCompatKitkat.hasHeart(ratingObj));
+                        rating = newHeartRating(((Rating) ratingObj).hasHeart());
                         break;
                     case RATING_THUMB_UP_DOWN:
-                        rating = newThumbRating(RatingCompatKitkat.isThumbUp(ratingObj));
+                        rating = newThumbRating(((Rating) ratingObj).isThumbUp());
                         break;
                     case RATING_3_STARS:
                     case RATING_4_STARS:
                     case RATING_5_STARS:
                         rating = newStarRating(ratingStyle,
-                                RatingCompatKitkat.getStarRating(ratingObj));
+                                ((Rating) ratingObj).getStarRating());
                         break;
                     case RATING_PERCENTAGE:
                         rating = newPercentageRating(
-                                RatingCompatKitkat.getPercentRating(ratingObj));
+                                ((Rating) ratingObj).getPercentRating());
                         break;
                     default:
                         return null;
@@ -372,25 +373,25 @@
             if (isRated()) {
                 switch (mRatingStyle) {
                     case RATING_HEART:
-                        mRatingObj = RatingCompatKitkat.newHeartRating(hasHeart());
+                        mRatingObj = Rating.newHeartRating(hasHeart());
                         break;
                     case RATING_THUMB_UP_DOWN:
-                        mRatingObj = RatingCompatKitkat.newThumbRating(isThumbUp());
+                        mRatingObj = Rating.newThumbRating(isThumbUp());
                         break;
                     case RATING_3_STARS:
                     case RATING_4_STARS:
                     case RATING_5_STARS:
-                        mRatingObj = RatingCompatKitkat.newStarRating(mRatingStyle,
+                        mRatingObj = Rating.newStarRating(mRatingStyle,
                                 getStarRating());
                         break;
                     case RATING_PERCENTAGE:
-                        mRatingObj = RatingCompatKitkat.newPercentageRating(getPercentRating());
+                        mRatingObj = Rating.newPercentageRating(getPercentRating());
                         break;
                     default:
                         return null;
                 }
             } else {
-                mRatingObj = RatingCompatKitkat.newUnratedRating(mRatingStyle);
+                mRatingObj = Rating.newUnratedRating(mRatingStyle);
             }
         }
         return mRatingObj;
diff --git a/media-compat/kitkat/android/support/v4/media/RatingCompatKitkat.java b/media-compat/kitkat/android/support/v4/media/RatingCompatKitkat.java
deleted file mode 100644
index 1d3fa50..0000000
--- a/media-compat/kitkat/android/support/v4/media/RatingCompatKitkat.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (C) 2014 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.
- */
-
-package android.support.v4.media;
-
-import android.media.Rating;
-import android.support.annotation.RequiresApi;
-
-@RequiresApi(19)
-class RatingCompatKitkat {
-    public static Object newUnratedRating(int ratingStyle) {
-        return Rating.newUnratedRating(ratingStyle);
-    }
-
-    public static Object newHeartRating(boolean hasHeart) {
-        return Rating.newHeartRating(hasHeart);
-    }
-
-    public static Object newThumbRating(boolean thumbIsUp) {
-        return Rating.newThumbRating(thumbIsUp);
-    }
-
-    public static Object newStarRating(int starRatingStyle, float starRating) {
-        return Rating.newStarRating(starRatingStyle, starRating);
-    }
-
-    public static Object newPercentageRating(float percent) {
-        return Rating.newPercentageRating(percent);
-    }
-
-    public static boolean isRated(Object ratingObj) {
-        return ((Rating)ratingObj).isRated();
-    }
-
-    public static int getRatingStyle(Object ratingObj) {
-        return ((Rating)ratingObj).getRatingStyle();
-    }
-
-    public static boolean hasHeart(Object ratingObj) {
-        return ((Rating)ratingObj).hasHeart();
-    }
-
-    public static boolean isThumbUp(Object ratingObj) {
-        return ((Rating)ratingObj).isThumbUp();
-    }
-
-    public static float getStarRating(Object ratingObj) {
-        return ((Rating)ratingObj).getStarRating();
-    }
-
-    public static float getPercentRating(Object ratingObj) {
-        return ((Rating)ratingObj).getPercentRating();
-    }
-}
