diff --git a/app/src/main/java/com/libremobileos/faceunlock/ScanActivity.java b/app/src/main/java/com/libremobileos/faceunlock/ScanActivity.java
index 6d23635..08661dd 100644
--- a/app/src/main/java/com/libremobileos/faceunlock/ScanActivity.java
+++ b/app/src/main/java/com/libremobileos/faceunlock/ScanActivity.java
@@ -46,8 +46,6 @@
 import java.util.List;
 import android.hardware.face.FaceManager;
 
-import android.hardware.biometrics.face.V1_0.FaceError;
-
 public class ScanActivity extends CameraActivity {
 
 	// AI-based detector
@@ -214,39 +212,27 @@
 		if (faces.size() == 10) {
 			String encodedFaces = FaceDataEncoder.encode(faces.stream().map(FaceScanner.Face::getExtra).toArray(float[][]::new));
 			if (mToken != null) {
-				String storeDir = this.getFilesDir().getPath();
 				try {
-					storeDir = faceUnlockManager.getStorePath();
+					faceUnlockManager.finishEnroll(encodedFaces, mToken);
+					final Intent intent = new Intent();
+					ComponentName componentName = ComponentName.unflattenFromString("com.android.settings/com.android.settings.biometrics.face.FaceEnrollFinish");
+					intent.setComponent(componentName);
+					intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT
+							| Intent.FLAG_ACTIVITY_CLEAR_TOP
+							| Intent.FLAG_ACTIVITY_SINGLE_TOP);
+					intent.putExtra(EXTRA_KEY_CHALLENGE_TOKEN, mToken);
+					intent.putExtra(EXTRA_KEY_SENSOR_ID, mSensorId);
+					intent.putExtra(EXTRA_KEY_CHALLENGE, mChallenge);
+					intent.putExtra(EXTRA_FROM_SETTINGS_SUMMARY, mFromSettingsSummary);
+					if (mUserId != 0) {
+						intent.putExtra(EXTRA_USER_ID, mUserId);
+					}
+					startActivity(intent);
+
+					finish();
 				} catch (RemoteException e) {
 					e.printStackTrace();
 				}
-				RemoteFaceServiceClient.connect(storeDir, faced -> {
-					try {
-						if (!faced.enroll(encodedFaces, mToken)) {
-							faceUnlockManager.error(FaceError.UNABLE_TO_PROCESS);
-						} else {
-							faceUnlockManager.enrollResult(0);
-						}
-						final Intent intent = new Intent();
-						ComponentName componentName = ComponentName.unflattenFromString("com.android.settings/com.android.settings.biometrics.face.FaceEnrollFinish");
-						intent.setComponent(componentName);
-						intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT
-								| Intent.FLAG_ACTIVITY_CLEAR_TOP
-								| Intent.FLAG_ACTIVITY_SINGLE_TOP);
-						intent.putExtra(EXTRA_KEY_CHALLENGE_TOKEN, mToken);
-						intent.putExtra(EXTRA_KEY_SENSOR_ID, mSensorId);
-						intent.putExtra(EXTRA_KEY_CHALLENGE, mChallenge);
-						intent.putExtra(EXTRA_FROM_SETTINGS_SUMMARY, mFromSettingsSummary);
-						if (mUserId != 0) {
-							intent.putExtra(EXTRA_USER_ID, mUserId);
-						}
-						startActivity(intent);
-
-						finish();
-					} catch (RemoteException e) {
-						e.printStackTrace();
-					}
-				});
 			}
 		} else {
 			if (mToken != null) {
diff --git a/app/system_libs/LMOFaceClient.jar b/app/system_libs/LMOFaceClient.jar
index 14c04f0..700314b 100644
--- a/app/system_libs/LMOFaceClient.jar
+++ b/app/system_libs/LMOFaceClient.jar
Binary files differ
diff --git a/framework/client/com/libremobileos/faceunlock/client/FaceUnlockManager.java b/framework/client/com/libremobileos/faceunlock/client/FaceUnlockManager.java
index 5230467..dc95a74 100644
--- a/framework/client/com/libremobileos/faceunlock/client/FaceUnlockManager.java
+++ b/framework/client/com/libremobileos/faceunlock/client/FaceUnlockManager.java
@@ -64,13 +64,13 @@
 	}
 
 	/**
-	 * Get face data dir storage path
+	 * Save Enrolled face and HAT
 	 */
-	public String getStorePath() {
+	public void finishEnroll(String encodedFaces, byte[] token) {
 		try {
-			return mFaceUnlockManager.getStorePath();
+			mFaceUnlockManager.finishEnroll(encodedFaces, token);
 		} catch (RemoteException e) {
-			throw new RuntimeException("Failed when getStorePath(): " + e);
+			throw new RuntimeException("Failed when finishEnroll(): " + e);
 		}
 	}
-}
\ No newline at end of file
+}
diff --git a/framework/client/com/libremobileos/faceunlock/client/IFaceUnlockManager.aidl b/framework/client/com/libremobileos/faceunlock/client/IFaceUnlockManager.aidl
index 51d3a74..39909b1 100644
--- a/framework/client/com/libremobileos/faceunlock/client/IFaceUnlockManager.aidl
+++ b/framework/client/com/libremobileos/faceunlock/client/IFaceUnlockManager.aidl
@@ -19,5 +19,5 @@
 interface IFaceUnlockManager {
     void enrollResult(int remaining);
     void error(int error);
-    String getStorePath();
-}
\ No newline at end of file
+    void finishEnroll(String encodedFaces, in byte[] token);
+}
diff --git a/framework/server/com/libremobileos/faceunlock/server/FaceUnlockServer.java b/framework/server/com/libremobileos/faceunlock/server/FaceUnlockServer.java
index 590c6dd..8c96a0f 100644
--- a/framework/server/com/libremobileos/faceunlock/server/FaceUnlockServer.java
+++ b/framework/server/com/libremobileos/faceunlock/server/FaceUnlockServer.java
@@ -23,6 +23,7 @@
 import android.graphics.Bitmap;
 import android.graphics.Matrix;
 import android.hardware.biometrics.face.V1_0.FaceAcquiredInfo;
+import android.hardware.biometrics.face.V1_0.FaceError;
 import android.hardware.biometrics.face.V1_0.Feature;
 import android.hardware.biometrics.face.V1_0.Status;
 import android.os.Handler;
@@ -390,12 +391,22 @@
 		}
 
 		@Override
-		public String getStorePath() {
-			return mStorePath;
+		public void finishEnroll(String encodedFaces, byte[] token) {
+			RemoteFaceServiceClient.connect(mStorePath, faced -> {
+				try {
+					if (!faced.enroll(encodedFaces, token)) {
+						mCallback.onError(kDeviceId, mUserId, FaceError.UNABLE_TO_PROCESS, 0);
+					} else {
+						mCallback.onEnrollResult(kDeviceId, kFaceId, mUserId, 0);
+					}
+				} catch (RemoteException e) {
+					e.printStackTrace();
+				}
+			});
 		}
 	};
 
 	public static interface BinderPublishCallback {
 		public void publishBinderService(String name, IBinder binder);
 	}
-}
\ No newline at end of file
+}
