diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index 9ce4f96..67c8d92 100755
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -877,14 +877,17 @@
                         if (ar.exception != null) {
                             loge("EVENT_GET_CALL_FORWARDING_DONE: Exception: " + ar.exception);
                         }
-                        int errorCode = CallForwardingInfo.ERROR_UNKNOWN;
+                        int errorCode = TelephonyManager
+                                .CallForwardingInfoCallback.RESULT_ERROR_UNKNOWN;
                         if (ar.exception instanceof CommandException) {
                             CommandException.Error error =
                                     ((CommandException) (ar.exception)).getCommandError();
                             if (error == CommandException.Error.FDN_CHECK_FAILURE) {
-                                errorCode = CallForwardingInfo.ERROR_FDN_CHECK_FAILURE;
+                                errorCode = TelephonyManager
+                                        .CallForwardingInfoCallback.RESULT_ERROR_FDN_CHECK_FAILURE;
                             } else if (error == CommandException.Error.REQUEST_NOT_SUPPORTED) {
-                                errorCode = CallForwardingInfo.ERROR_NOT_SUPPORTED;
+                                errorCode = TelephonyManager
+                                        .CallForwardingInfoCallback.RESULT_ERROR_NOT_SUPPORTED;
                             }
                         }
                         callback.onError(errorCode);
@@ -917,19 +920,22 @@
                                     request.argument).second;
                     if (ar.exception != null) {
                         loge("setCallForwarding exception: " + ar.exception);
-                        int errorCode = CallForwardingInfo.ERROR_UNKNOWN;
+                        int errorCode = TelephonyManager.CallForwardingInfoCallback
+                                .RESULT_ERROR_UNKNOWN;
                         if (ar.exception instanceof CommandException) {
                             CommandException.Error error =
                                     ((CommandException) (ar.exception)).getCommandError();
                             if (error == CommandException.Error.FDN_CHECK_FAILURE) {
-                                errorCode = CallForwardingInfo.ERROR_FDN_CHECK_FAILURE;
+                                errorCode = TelephonyManager.CallForwardingInfoCallback
+                                        .RESULT_ERROR_FDN_CHECK_FAILURE;
                             } else if (error == CommandException.Error.REQUEST_NOT_SUPPORTED) {
-                                errorCode = CallForwardingInfo.ERROR_NOT_SUPPORTED;
+                                errorCode = TelephonyManager.CallForwardingInfoCallback
+                                        .RESULT_ERROR_NOT_SUPPORTED;
                             }
                         }
                         callback.accept(errorCode);
                     } else {
-                        callback.accept(CallForwardingInfo.SUCCESS);
+                        callback.accept(TelephonyManager.CallForwardingInfoCallback.RESULT_SUCCESS);
                     }
                     break;
                 }
@@ -5398,7 +5404,8 @@
             Phone phone = getPhone(subId);
             if (phone == null) {
                 try {
-                    callback.onError(CallForwardingInfo.ERROR_UNKNOWN);
+                    callback.onError(
+                            TelephonyManager.CallForwardingInfoCallback.RESULT_ERROR_UNKNOWN);
                 } catch (RemoteException e) {
                     // ignore
                 }
@@ -5449,7 +5456,8 @@
             Phone phone = getPhone(subId);
             if (phone == null) {
                 try {
-                    callback.accept(CallForwardingInfo.ERROR_UNKNOWN);
+                    callback.accept(
+                            TelephonyManager.CallForwardingInfoCallback.RESULT_ERROR_UNKNOWN);
                 } catch (RemoteException e) {
                     // ignore
                 }
