diff --git a/src/com/android/exchange/EasAccountService.java b/src/com/android/exchange/EasAccountService.java
index 320f04d..717ea7e 100644
--- a/src/com/android/exchange/EasAccountService.java
+++ b/src/com/android/exchange/EasAccountService.java
@@ -40,7 +40,6 @@
 import com.android.emailcommon.provider.MailboxUtilities;
 import com.android.emailcommon.provider.Policy;
 import com.android.emailcommon.provider.ProviderUnavailableException;
-import com.android.emailcommon.service.EmailServiceStatus;
 import com.android.emailcommon.service.PolicyServiceProxy;
 import com.android.exchange.CommandStatusException.CommandStatus;
 import com.android.exchange.adapter.AccountSyncAdapter;
@@ -843,20 +842,4 @@
         }
         return pp.getPingStatus();
     }
-
-    /**
-     * Translate exit status code to service status code (used in callbacks)
-     * @param exitStatus the service's exit status
-     * @return the corresponding service status
-     */
-    private static int exitStatusToServiceStatus(int exitStatus) {
-        switch(exitStatus) {
-            case EasSyncService.EXIT_SECURITY_FAILURE:
-                return EmailServiceStatus.SECURITY_FAILURE;
-            case EasSyncService.EXIT_LOGIN_FAILURE:
-                return EmailServiceStatus.LOGIN_FAILED;
-            default:
-                return EmailServiceStatus.SUCCESS;
-        }
-    }
 }
diff --git a/src/com/android/exchange/MeetingResponseRequest.java b/src/com/android/exchange/MeetingResponseRequest.java
index c7fa328..69195fb 100644
--- a/src/com/android/exchange/MeetingResponseRequest.java
+++ b/src/com/android/exchange/MeetingResponseRequest.java
@@ -31,11 +31,13 @@
 
     // MeetingResponseRequests are unique by their message id (i.e. there's only one response to
     // a given message)
+    @Override
     public boolean equals(Object o) {
         if (!(o instanceof MeetingResponseRequest)) return false;
         return ((MeetingResponseRequest)o).mMessageId == mMessageId;
     }
 
+    @Override
     public int hashCode() {
         return (int)mMessageId;
     }
diff --git a/src/com/android/exchange/MessageMoveRequest.java b/src/com/android/exchange/MessageMoveRequest.java
index 37b759a..f1834bd 100644
--- a/src/com/android/exchange/MessageMoveRequest.java
+++ b/src/com/android/exchange/MessageMoveRequest.java
@@ -31,11 +31,13 @@
 
     // MessageMoveRequests are unique by their message id (i.e. it's meaningless to have two
     // separate message moves queued at the same time)
+    @Override
     public boolean equals(Object o) {
         if (!(o instanceof MessageMoveRequest)) return false;
         return ((MessageMoveRequest)o).mMessageId == mMessageId;
     }
 
+    @Override
     public int hashCode() {
         return (int)mMessageId;
     }
diff --git a/src/com/android/exchange/adapter/AbstractSyncAdapter.java b/src/com/android/exchange/adapter/AbstractSyncAdapter.java
index a3b705e..c8ffe75 100644
--- a/src/com/android/exchange/adapter/AbstractSyncAdapter.java
+++ b/src/com/android/exchange/adapter/AbstractSyncAdapter.java
@@ -188,6 +188,7 @@
             mOffset = 0;
         }
 
+        @Override
         public String toString() {
             StringBuilder sb = new StringBuilder("Op: ");
             ContentProviderOperation op = operationToContentProviderOperation(this, 0);
diff --git a/src/com/android/exchange/adapter/Serializer.java b/src/com/android/exchange/adapter/Serializer.java
index 2372459..626d387 100644
--- a/src/com/android/exchange/adapter/Serializer.java
+++ b/src/com/android/exchange/adapter/Serializer.java
@@ -182,7 +182,7 @@
         // Now write out the opaque data in batches
         byte[] buffer = new byte[BUFFER_SIZE];
         while (length > 0) {
-            int bytesRead = is.read(buffer, 0, (int)Math.min(BUFFER_SIZE, length));
+            int bytesRead = is.read(buffer, 0, Math.min(BUFFER_SIZE, length));
             if (bytesRead == -1) {
                 break;
             }
