diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/capability/ICapabilityApi.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/capability/ICapabilityApi.aidl
index 3ad43c6..e313487 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/capability/ICapabilityApi.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/capability/ICapabilityApi.aidl
@@ -23,8 +23,10 @@
 package com.suntek.mway.rcs.client.aidl.capability;
 
 import com.suntek.mway.rcs.client.aidl.plugin.callback.ICapabiltyListener;
+import com.suntek.mway.rcs.client.aidl.capability.RCSCapabilities;
 
 interface ICapabilityApi
 {
     void findCapabilityByNumber(String number, ICapabiltyListener listener);
+    RCSCapabilities getMyCapabilities();
 }
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/constant/BroadcastConstants.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/constant/BroadcastConstants.java
index f87b752..781589c 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/constant/BroadcastConstants.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/constant/BroadcastConstants.java
@@ -65,7 +65,7 @@
 
     /**  Notify Native UI that message has been transfered to SMS. */
     public static final String UI_MESSAGE_TRANSFER_SMS = "com.suntek.mway.rcs.ACTION_UI_MESSAGE_TRANSFER_SMS";
-    
+
     /**  Notify Native UI that download paid emoction result. */
     public static final String UI_MESSAGE_PAID_EMO_DOWNLOAD_RESULT = "com.suntek.mway.rcs.ACTION_UI_MESSAGE_PAID_EMO_DOWNLOAD_RESULTS";
 
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/mcloud/IMcloudFileApi.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/mcloud/IMcloudFileApi.aidl
index 69dcfba..2d2aa07 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/mcloud/IMcloudFileApi.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/mcloud/IMcloudFileApi.aidl
@@ -22,12 +22,14 @@
  */
 package com.suntek.mway.rcs.client.aidl.mcloud;
 
+import com.suntek.mway.rcs.client.aidl.plugin.callback.IMcloudOperationCtrl;
+
 interface IMcloudFileApi {
-    void putFile(String localPath, String remotePath, int transOper);
+    IMcloudOperationCtrl putFile(String localPath, String remotePath, int transOper);
     void shareFile(String fullPathInID, String shareDesc);
     void shareFileAndSend(String fullPathInID, String shareDesc, String contact, long threadId, String smsContentTemp);
     void getShareFileList(int beginIndex, int endIndex);
-    void downloadFileFromUrl(String remoteUrl, String fileName, int transOper);
+    IMcloudOperationCtrl downloadFileFromUrl(String remoteUrl, String fileName, int transOper);
 
     void shareFileAndSendGroup(String fullPathInID, String shareDesc, long threadId, String conversationId, String groupId);
     void shareFileAndSendOne2Many(String fullPathInID, String shareDesc, in List<String> contacts, long threadId, String smsContentTemp);
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IPublicAccountCallbackAPI.aidl b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IPublicAccountCallbackAPI.aidl
index 029bb99..22f0f67 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IPublicAccountCallbackAPI.aidl
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/callback/IPublicAccountCallbackAPI.aidl
@@ -24,6 +24,7 @@
 
 import com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct.MsgContent;
 import com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct.MenuInfo;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct.MenuInfoMode;
 import com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct.PublicAccounts;
 import com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct.PublicAccountsDetail;
 import com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct.PublicAccounts;
@@ -72,9 +73,9 @@
     /**
      * response the query public account menu info
      * @param result if query success
-     * @param menus the menu's entity list
+     * @param menus the menu's entity
      */
-    void respGetPublicMenuInfo( boolean result, in List<MenuInfo> menus );
+    void respGetPublicMenuInfo( boolean result, in MenuInfoMode menuInfoMode );
     
     /**
      * response the query user follow public account list
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/emoticon/EmoticonConstant.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/emoticon/EmoticonConstant.java
index 9ac2b8d..e32932a 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/emoticon/EmoticonConstant.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/emoticon/EmoticonConstant.java
@@ -35,4 +35,14 @@
 
     /** The Constant EMO_PACKAGE_FILE. */
     public static final int EMO_PACKAGE_FILE = 3;
+
+    /** The Constant EMO_DOWNLOAD_SUCCESS. */
+    public static final int EMO_DOWNLOAD_SUCCESS = 1;
+
+    /** The Constant EMO_DOWNLOAD_FAILURE. */
+    public static final int EMO_DOWNLOAD_FAILURE = 0;
+
+    /** The Constant EMO_DOWNLOAD_LOADING. */
+    public static final int EMO_DOWNLOAD_LOADING = 2;
+
 }
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/TransNode.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/TransNode.java
index c363eab..2434f5f 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/TransNode.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/mcloudfile/TransNode.java
@@ -337,9 +337,7 @@
 
         RESUME,
 
-        GET_INFO,
-
-        PAUSE;
+        GET_INFO;
 
         public static TransOper valueOf( int ordinal )
         {
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccountConstant.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccountConstant.java
index 5e408d3..79949d0 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccountConstant.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccountConstant.java
@@ -28,6 +28,9 @@
  */
 public class PublicAccountConstant {
 
+    /** account pre number. */
+    public static final int ACCOUNT_PRE_NUMBER = 8;
+
     /** order type: 0 is desc order by the follow time. */
     public static final int ACCOUNTLIST_ORDER_TYPE_FOLLOWTIME_DESC = 0;
 
diff --git a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccountsDetail.java b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccountsDetail.java
index cd484b0..74608f7 100644
--- a/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccountsDetail.java
+++ b/rcs_service_aidl/src/com/suntek/mway/rcs/client/aidl/plugin/entity/pubacct/PublicAccountsDetail.java
@@ -25,7 +25,6 @@
 import android.os.Parcel;
 import android.os.Parcelable;
 
-// TODO: Auto-generated Javadoc
 /**
  * <p>
  * Title: The public account detail entity
@@ -105,6 +104,9 @@
     /** The sip uri. */
 //    private String    sipUri;
 
+    /** The number. */
+    private String    number;
+
     /**
      * Instantiates a new public accounts detail.
      */
@@ -166,6 +168,7 @@
         dest.writeString( qrCode );
         dest.writeString( logoUrl );
 //        dest.writeString( sipUri );
+        dest.writeString( number );
     }
 
     /**
@@ -198,6 +201,7 @@
         qrCode = source.readString();
         logoUrl = source.readString();
 //        sipUri = source.readString();
+        number = source.readString();
     }
 
     /** The parcel creator. */
@@ -626,6 +630,7 @@
         StringBuffer sbuffer = new StringBuffer();
         sbuffer.append("paUuid=").append(this.paUuid)
                .append(",name=").append(this.name)
+               .append(",number=").append(this.number)
                .append(",logoUrl=").append(this.logoUrl)
                .append(",recommendLevel=").append(this.recommendLevel)
 //               .append(",sipUri=").append(this.sipUri)
@@ -648,4 +653,12 @@
 
         return sbuffer.toString();
     }
+
+    public String getNumber() {
+        return number;
+    }
+
+    public void setNumber(String number) {
+        this.number = number;
+    }
 }
diff --git a/rcs_service_api/src/com/suntek/mway/rcs/client/api/mcloud/McloudFileApi.java b/rcs_service_api/src/com/suntek/mway/rcs/client/api/mcloud/McloudFileApi.java
index 39038ea..e109c02 100644
--- a/rcs_service_api/src/com/suntek/mway/rcs/client/api/mcloud/McloudFileApi.java
+++ b/rcs_service_api/src/com/suntek/mway/rcs/client/api/mcloud/McloudFileApi.java
@@ -23,6 +23,7 @@
 package com.suntek.mway.rcs.client.api.mcloud;
 
 import com.suntek.mway.rcs.client.aidl.mcloud.IMcloudFileApi;
+import com.suntek.mway.rcs.client.aidl.plugin.callback.IMcloudOperationCtrl;
 import com.suntek.mway.rcs.client.aidl.plugin.entity.mcloudfile.FileNode;
 import com.suntek.mway.rcs.client.aidl.plugin.entity.mcloudfile.TransNode;
 import com.suntek.mway.rcs.client.api.ClientApi;
@@ -73,14 +74,15 @@
         super.initServiceConnect(mConnection);
     }
 
-    public void downloadFileFromUrl(String remoteUrl, String fileName, TransNode.TransOper transOper) throws ServiceDisconnectedException {
+    public IMcloudOperationCtrl downloadFileFromUrl(String remoteUrl, String fileName, TransNode.TransOper transOper) throws ServiceDisconnectedException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper.i(String.format(Locale.getDefault(),
                 "enter method:downloadFileFromUrl. [remoteUrl,fileName,transOper]=%s,%d", remoteUrl, fileName, transOper.ordinal()));
         try {
-            myApi.downloadFileFromUrl(remoteUrl, fileName, transOper.ordinal());
+            return myApi.downloadFileFromUrl(remoteUrl, fileName, transOper.ordinal());
         } catch (Exception ex) {
             LogHelper.e(ex.getMessage(), ex);
+            return null;
         }
     }
 
@@ -96,16 +98,17 @@
         }
     }
 
-    public void putFile(String localPath, String remotePath, TransNode.TransOper transOper) throws ServiceDisconnectedException, FileSuffixException {
+    public IMcloudOperationCtrl putFile(String localPath, String remotePath, TransNode.TransOper transOper) throws ServiceDisconnectedException, FileSuffixException {
         VerificationUtil.ApiIsNull(myApi);
         LogHelper.i(String.format(Locale.getDefault(),
                 "enter method:putFile. [localPath,remotePath,transOper]=%s,%s,%d",
                 localPath, remotePath, transOper.ordinal()));
         VerificationUtil.isCloudFile(localPath);
         try {
-            myApi.putFile(localPath, remotePath, transOper.ordinal());
+            return myApi.putFile(localPath, remotePath, transOper.ordinal());
         } catch (Exception ex) {
             LogHelper.e(ex.getMessage(), ex);
+            return null;
         }
     }
 
diff --git a/rcs_service_api/src/com/suntek/mway/rcs/client/api/publicaccount/callback/PublicAccountCallback.java b/rcs_service_api/src/com/suntek/mway/rcs/client/api/publicaccount/callback/PublicAccountCallback.java
index ffcfa1f..9239fbc 100644
--- a/rcs_service_api/src/com/suntek/mway/rcs/client/api/publicaccount/callback/PublicAccountCallback.java
+++ b/rcs_service_api/src/com/suntek/mway/rcs/client/api/publicaccount/callback/PublicAccountCallback.java
@@ -22,16 +22,16 @@
  */
 package com.suntek.mway.rcs.client.api.publicaccount.callback;
 
-import java.util.List;
-
-import android.os.RemoteException;
-
 import com.suntek.mway.rcs.client.aidl.plugin.callback.IPublicAccountCallbackAPI;
-import com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct.MenuInfo;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct.MenuInfoMode;
 import com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct.MsgContent;
 import com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct.PublicAccounts;
 import com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct.PublicAccountsDetail;
 
+import android.os.RemoteException;
+
+import java.util.List;
+
 public abstract class PublicAccountCallback extends IPublicAccountCallbackAPI.Stub{
 
 
@@ -106,7 +106,7 @@
     }
 
     @Override
-    public void respGetPublicMenuInfo(boolean result, List<MenuInfo> menuList)
+    public void respGetPublicMenuInfo(boolean result, MenuInfoMode menuInfoMode)
             throws RemoteException {
         // TODO Auto-generated method stub
 
diff --git a/rcs_service_api/src/com/suntek/mway/rcs/client/api/publicaccount/callback/PublicAccountCallbackImpl.java b/rcs_service_api/src/com/suntek/mway/rcs/client/api/publicaccount/callback/PublicAccountCallbackImpl.java
index f3cad9f..a9d0652 100644
--- a/rcs_service_api/src/com/suntek/mway/rcs/client/api/publicaccount/callback/PublicAccountCallbackImpl.java
+++ b/rcs_service_api/src/com/suntek/mway/rcs/client/api/publicaccount/callback/PublicAccountCallbackImpl.java
@@ -22,15 +22,15 @@
  */
 package com.suntek.mway.rcs.client.api.publicaccount.callback;
 
-import java.util.List;
-
-import android.os.RemoteException;
-
-import com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct.MenuInfo;
+import com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct.MenuInfoMode;
 import com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct.MsgContent;
 import com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct.PublicAccounts;
 import com.suntek.mway.rcs.client.aidl.plugin.entity.pubacct.PublicAccountsDetail;
 
+import android.os.RemoteException;
+
+import java.util.List;
+
 public class PublicAccountCallbackImpl extends PublicAccountCallback {
 
     public PublicAccountCallbackImpl() {
@@ -105,7 +105,7 @@
     }
 
     @Override
-    public void respGetPublicMenuInfo(boolean arg0, List<MenuInfo> arg1)
+    public void respGetPublicMenuInfo(boolean arg0, MenuInfoMode menuInfoMode)
             throws RemoteException {
         // TODO Auto-generated method stub
 
