diff --git a/photark-face-recognition/pom.xml b/photark-face-recognition/pom.xml
index 3ce7a75..b1fd596 100644
--- a/photark-face-recognition/pom.xml
+++ b/photark-face-recognition/pom.xml
@@ -123,6 +123,12 @@
             <version>1.5.3</version>
         </dependency>
 
+        <dependency>
+            <groupId>com.restfb</groupId>
+            <artifactId>restfb</artifactId>
+            <version>1.6.4</version>
+        </dependency>
+
 	</dependencies>
 
 	<build>
diff --git a/photark-face-recognition/src/main/java/org/apache/photark/face/services/FaceRecognitionService.java b/photark-face-recognition/src/main/java/org/apache/photark/face/services/FaceRecognitionService.java
index a41264c..0d76bac 100644
--- a/photark-face-recognition/src/main/java/org/apache/photark/face/services/FaceRecognitionService.java
+++ b/photark-face-recognition/src/main/java/org/apache/photark/face/services/FaceRecognitionService.java
@@ -53,7 +53,7 @@
      * @throws FaceClientException
      * @throws FaceServerException
      */
-    public TrainResponse train(String uids) throws FaceClientException, FaceServerException;
+    public void train(String uids) throws FaceClientException, FaceServerException;
 
     /** Adds a manual tag for a Photo.But manual tags are not used to train the system. They are used for the purpose
      * of adding face tags for the Photos which were not detected by your program.
@@ -135,7 +135,7 @@
      * @throws FaceClientException
      * @throws FaceServerException
      */
-    public List<PhotarkPhoto> recognizeFromUrls(String urls, String uids) throws FaceClientException, FaceServerException ;
+    public PhotarkPhoto recognizeFromUrl(String urls, String uids) throws FaceClientException, FaceServerException ;
 
     /**  Gives tags of the detected faces of the given photo with multiple details of the Photo
      *
diff --git a/photark-face-recognition/src/main/java/org/apache/photark/face/services/FaceRecognitionServiceImpl.java b/photark-face-recognition/src/main/java/org/apache/photark/face/services/FaceRecognitionServiceImpl.java
index 9b60e5a..e82e04c 100644
--- a/photark-face-recognition/src/main/java/org/apache/photark/face/services/FaceRecognitionServiceImpl.java
+++ b/photark-face-recognition/src/main/java/org/apache/photark/face/services/FaceRecognitionServiceImpl.java
@@ -61,8 +61,8 @@
     /**
      * @see {@link FaceRecognitionService#train(String)}
      */
-    public TrainResponse train(String uids) throws FaceClientException, FaceServerException {
-        return defaultFaceClient.train(uids);
+    public void train(String uids) throws FaceClientException, FaceServerException {
+       defaultFaceClient.train(uids);
     }
 
     /**
@@ -102,14 +102,12 @@
     }
 
     /**
-     * @see {@link FaceRecognitionService#recognizeFromUrls(String,String)}
+     * @see {@link FaceRecognitionService#recognizeFromUrl(String,String)}
      */
-    public List<PhotarkPhoto> recognizeFromUrls(String urls, String uids) throws FaceClientException, FaceServerException {
-        List<PhotarkPhoto> photarkPhotoList = null;
-        for(Photo p : defaultFaceClient.recognize(urls, uids)) {
-        photarkPhotoList.add(BeanGeneratorUtil.createPhotarkPhoto(p));
-        }
-        return photarkPhotoList ;
+    public PhotarkPhoto recognizeFromUrl(String url, String uid) throws FaceClientException, FaceServerException {
+        Photo p = defaultFaceClient.recognize(url, uid).get(0);
+        return BeanGeneratorUtil.createPhotarkPhoto(p);
+
     }
 
     /**
diff --git a/photark-face-recognition/src/main/java/org/apache/photark/face/services/applications/facebook/FacebookFriendFinder.java b/photark-face-recognition/src/main/java/org/apache/photark/face/services/applications/facebook/FacebookFriendFinder.java
index 41dbc17..f6f9496 100644
--- a/photark-face-recognition/src/main/java/org/apache/photark/face/services/applications/facebook/FacebookFriendFinder.java
+++ b/photark-face-recognition/src/main/java/org/apache/photark/face/services/applications/facebook/FacebookFriendFinder.java
@@ -24,10 +24,12 @@
 @Remotable
 public interface FacebookFriendFinder {
 
-    public Entry<String, String>[] getAllMyFBFriendsFromPictureLocal(String pathToFile);
+    public Entry<String, String>[] getAllMyFBFriendsFromPictureLocal(String pathToFile,String photarkUid);
 
-    public Entry<String, String>[] getAllMyFBFriendsFromPictureUrl(String fileUrl);
+    public Entry<String, String>[] getAllMyFBFriendsFromPictureUrl(String fileUrl,String photarkUid);
 
     public void setFacebookAuth(String facebookId, String fbAccessToken);
 
+    public void storeFacebookAccessToken(String photarkUid, String accessToken);
+
 }
diff --git a/photark-face-recognition/src/main/java/org/apache/photark/face/services/applications/facebook/FacebookFriendFinderImpl.java b/photark-face-recognition/src/main/java/org/apache/photark/face/services/applications/facebook/FacebookFriendFinderImpl.java
index 7803109..36f7c62 100644
--- a/photark-face-recognition/src/main/java/org/apache/photark/face/services/applications/facebook/FacebookFriendFinderImpl.java
+++ b/photark-face-recognition/src/main/java/org/apache/photark/face/services/applications/facebook/FacebookFriendFinderImpl.java
@@ -18,12 +18,20 @@
  */
 package org.apache.photark.face.services.applications.facebook;
 
+import com.github.mhendred.face4j.DefaultFaceClient;
 import com.github.mhendred.face4j.exception.FaceClientException;
 import com.github.mhendred.face4j.exception.FaceServerException;
+import com.restfb.DefaultFacebookClient;
+import com.restfb.FacebookClient;
+import com.restfb.types.User;
 import org.apache.photark.face.services.FaceRecognitionService;
 import org.apache.photark.face.services.beans.PhotArkFace;
 import org.apache.photark.face.services.beans.PhotarkPhoto;
+import org.apache.photark.security.authorization.services.AccessManager;
+import org.apache.photark.security.authorization.services.SecurityServiceImpl;
+import org.apache.photark.security.utils.Constants;
 import org.apache.tuscany.sca.data.collection.Entry;
+import org.oasisopen.sca.annotation.Init;
 import org.oasisopen.sca.annotation.Reference;
 import org.oasisopen.sca.annotation.Scope;
 
@@ -37,38 +45,55 @@
     private FaceRecognitionService faceRecognitionService;
     private final String adamFBUserId = "";
     private final String adamAccessToken = "";
+    private AccessManager accessManager;
 
-
+       @Init
+    public void init() {
+           System.out.println("############## INIT..............############");
+    }
+    
     @Reference(name = "faceRecognitionService")
     protected void setFaceRecognitionService(FaceRecognitionService faceRecognitionService) {
         this.faceRecognitionService = faceRecognitionService;
     }
 
-    public Entry<String, String>[] getAllMyFBFriendsFromPictureLocal(String pathToFile) {
 
-        return processFBFriends(pathToFile, true);
+    @Reference(name = "accessmanager")
+    protected void setAccessService(AccessManager accessManager) {
+        this.accessManager = accessManager;
     }
 
-    public Entry<String, String>[] getAllMyFBFriendsFromPictureUrl(String fileUrl) {
+    public Entry<String, String>[] getAllMyFBFriendsFromPictureLocal(String pathToFile,String photarkUid) {
 
-        return processFBFriends(fileUrl, false);
+        return processFBFriends(pathToFile, true, photarkUid);
+    }
+
+    public Entry<String, String>[] getAllMyFBFriendsFromPictureUrl(String fileUrl, String photarkUid) {
+
+        return processFBFriends(fileUrl, false, photarkUid);
+    }
+
+    public void storeFacebookAccessToken(String photarkUid, String accessToken) {
+        faceRecognitionService.setFacebookOauth2(getMyFacebookUserId(accessToken), accessToken);
+        accessManager.setFacebookAccessTokenToUser(photarkUid,Constants.REGISTERED_USER_LIST,accessToken);
     }
 
     public void setFacebookAuth(String facebookId, String fbAccessToken) {
         faceRecognitionService.setFacebookOauth2(facebookId, fbAccessToken);
     }
 
-    private Entry<String, String>[] processFBFriends(String fileLocation, boolean isLocal) {
+
+    private Entry<String, String>[] processFBFriends(String fileLocation, boolean isLocal, String photarkUid) {
 
         PhotarkPhoto photo = null;
         List<Entry<String, String>> detectedFriends = new ArrayList<Entry<String, String>>();
-
+        String accessToken = accessManager.getUserFacebookAccessToken(photarkUid,Constants.REGISTERED_USER_LIST);
         try {
-            faceRecognitionService.setFacebookOauth2(adamFBUserId, adamAccessToken);
+            faceRecognitionService.setFacebookOauth2(getMyFacebookUserId(accessToken),accessToken);
             if (isLocal) {
                 photo = faceRecognitionService.recognizeFromFile(new File(fileLocation), "friends@facebook.com");
             } else {
-                photo = faceRecognitionService.recognizeFromUrls(fileLocation, "friends@facebook.com").get(0);
+                photo = faceRecognitionService.recognizeFromUrl(fileLocation, "friends@facebook.com");
             }
 
             for (PhotArkFace face : photo.getPhotArkFaces()) {
@@ -95,4 +120,10 @@
 
     }
 
+    private String getMyFacebookUserId(String accessToken) {
+       FacebookClient facebookClient = new DefaultFacebookClient(accessToken);
+       User user = facebookClient.fetchObject("me", User.class);
+     return user.getId();
+    }
+
 }
diff --git a/photark-face-recognition/src/test/java/org/apache/photark/face/facebook/test/GenericFaceRecognitionTestCase.java b/photark-face-recognition/src/test/java/org/apache/photark/face/facebook/test/GenericFaceRecognitionTestCase.java
index 4b57239..4edb31e 100644
--- a/photark-face-recognition/src/test/java/org/apache/photark/face/facebook/test/GenericFaceRecognitionTestCase.java
+++ b/photark-face-recognition/src/test/java/org/apache/photark/face/facebook/test/GenericFaceRecognitionTestCase.java
@@ -41,8 +41,8 @@
 public class GenericFaceRecognitionTestCase {
 
     private DefaultFaceClient defaultFaceClient;
-    private String apiKey = "5ae7a7ddcba07b5d4731930bfe06f4c7";
-    private String apiSecret = "6877f93df2c2bcef2a1ddb6ba26a0d6c";
+    private String apiKey = "";
+    private String apiSecret = "";
     private static Node node;
 
 
@@ -89,8 +89,8 @@
         defaultFaceClient.train("jenifer@photark.com");
         PhotarkPhoto p =
             defaultFaceClient
-                .recognizeFromUrls("https://lh3.googleusercontent.com/-4I_Yn56XwAw/Thi6LIZSutI/AAAAAAAAABo/jOjx2cGgHao/s128/110306_latinjlo_400X400.jpg",
-                                   "jenifer@photark.com").get(0);
+                .recognizeFromUrl("https://lh3.googleusercontent.com/-4I_Yn56XwAw/Thi6LIZSutI/AAAAAAAAABo/jOjx2cGgHao/s128/110306_latinjlo_400X400.jpg",
+                                   "jenifer@photark.com");
 
         for (PhotArkFace f : p.getPhotArkFaces()) {
             if (f.getGuess() == null) {
diff --git a/photark-jcr/src/main/java/org/apache/photark/jcr/security/authorization/JCRAccessManager.java b/photark-jcr/src/main/java/org/apache/photark/jcr/security/authorization/JCRAccessManager.java
index 2ba2888..42b58dd 100644
--- a/photark-jcr/src/main/java/org/apache/photark/jcr/security/authorization/JCRAccessManager.java
+++ b/photark-jcr/src/main/java/org/apache/photark/jcr/security/authorization/JCRAccessManager.java
@@ -1170,6 +1170,65 @@
 
     }
 
+    public void setFacebookAccessTokenToUser(String userId, String listName, String accesstoken) {
+
+           Session session;
+        try {
+
+            if(isUserStoredInList(userId,listName)) {
+
+                session = repositoryManager.getSession();
+
+                Node listNodeUsers = (Node)session.getItem("/" + USER_STORE + "/" + USER_LISTS + "/" + listName);
+                Node userNode = listNodeUsers.getNode(JCREncoder.toJCRFormat(userId));
+
+                if(!userNode.hasProperty("photark.facebook.accesstoken")) {
+                   userNode.setProperty("photark.facebook.accesstoken",accesstoken);
+                }
+                session.save();
+
+            }
+        } catch (LoginException e) {
+
+            e.printStackTrace();
+        } catch (RepositoryException e) {
+
+            e.printStackTrace();
+        }
+
+    }
+
+    public String getUserFacebookAccessToken(String userId, String listName) {
+
+        Session session;
+        String accessToken = "";
+     try {
+
+         if(isUserStoredInList(userId,listName)) {
+
+             session = repositoryManager.getSession();
+
+             Node listNodeUsers = (Node)session.getItem("/" + USER_STORE + "/" + USER_LISTS + "/" + listName);
+             Node userNode = listNodeUsers.getNode(JCREncoder.toJCRFormat(userId));
+
+             if(userNode.hasProperty("photark.facebook.accesstoken")) {
+              accessToken = userNode.getProperty("photark.facebook.accesstoken").getValue().getString();
+             }
+             session.save();
+
+         }
+     } catch (LoginException e) {
+
+         e.printStackTrace();
+     } catch (RepositoryException e) {
+
+         e.printStackTrace();
+     }
+
+
+        return accessToken;
+    }
+
     // save access list and token in the access token map
 
     public synchronized void putAccessListAndToken(AccessList accessList, String token) {
diff --git a/photark-security/src/main/java/org/apache/photark/security/authorization/services/AccessManager.java b/photark-security/src/main/java/org/apache/photark/security/authorization/services/AccessManager.java
index 6083dcc..2dc905a 100644
--- a/photark-security/src/main/java/org/apache/photark/security/authorization/services/AccessManager.java
+++ b/photark-security/src/main/java/org/apache/photark/security/authorization/services/AccessManager.java
@@ -157,4 +157,22 @@
      * @return The userID of the user
      */
     String getUserIdFromSecurityToken(String token);
+
+    /**
+     *
+     * @param userId  user id of the currrent user
+     * @param accesstoken  facebook access token
+     * @param listName - list name to retrieve the user
+     * @return
+     */
+    void setFacebookAccessTokenToUser(String userId, String listName, String accesstoken);
+
+    /**
+     *
+     * @param userId  user id of the currrent user
+     * @param listName list name to retrieve the user
+     * @return
+     */
+    String getUserFacebookAccessToken(String userId, String listName);
+
 }
diff --git a/photark-ui-admin/src/main/webapp/admin/face.html b/photark-ui-admin/src/main/webapp/admin/face.html
index d9a5358..c63f067 100644
--- a/photark-ui-admin/src/main/webapp/admin/face.html
+++ b/photark-ui-admin/src/main/webapp/admin/face.html
@@ -24,7 +24,7 @@
 
     <title>Apache PhotArk - Face Recognition</title>
 
-    <script type="text/javascript" src="js/constants.js"></script>
+    <script type="text/javascript" src="../js/constants.js"></script>
     <script type="text/javascript" src="../dojo/dojo.js"
             djConfig="isDebug:false, parseOnLoad: true, debugAtAllCosts:false"></script>
     <script type="text/javascript" src="js/face.js"></script>
diff --git a/photark-ui-admin/src/main/webapp/admin/js/admin.js b/photark-ui-admin/src/main/webapp/admin/js/admin.js
index 50f9165..04b441b 100644
--- a/photark-ui-admin/src/main/webapp/admin/js/admin.js
+++ b/photark-ui-admin/src/main/webapp/admin/js/admin.js
@@ -287,7 +287,7 @@
 }
 
 
-function populateUserInfo() {
+function populateUserInfo() {  
     dojo.xhrPost({
         url:"../security", //photark.constants.SecurityEndpoint,
         content:{request:"getUser"},
diff --git a/photark-ui-admin/src/main/webapp/admin/js/face.js b/photark-ui-admin/src/main/webapp/admin/js/face.js
index 003678a..bd44b0c 100644
--- a/photark-ui-admin/src/main/webapp/admin/js/face.js
+++ b/photark-ui-admin/src/main/webapp/admin/js/face.js
@@ -80,9 +80,8 @@
     var url = window.location.href;
     if (url != "http://localhost:8080/photark/admin/face.html") {
         var accesstoken = url.split("&")[0].split("=")[1];
-
-        alert(accesstoken);
-     
+        store_facebook_access_token(accesstoken) ;
+        
     }
 }
 
@@ -95,27 +94,44 @@
     window.location = url;
 }
 
-function trainUser() {
+function trainUser(user_name) {
     if (selectFaceApp.value == "General-Face-Recognition") {
         //TODO call train method in generic face app
 
     } else if (selectFaceApp.value == "FaceBook-Friend-Finder") {
-        faceService.train("1271543184@facebook.com").addCallback(facebook_ff_callback);
+        faceService.train(user_name).addCallback(facebook_ff_callback);
     }
 
 }
 
+function store_facebook_access_token(accessToken) {
+        dojo.xhrPost({
+        url:"../security", //photark.constants.SecurityEndpoint,
+        content:{request:"getUser"},
+        handleAs: "json",
+        load: function(response, ioArgs) {
+        facebookService.storeFacebookAccessToken(response.user.userId,accessToken).addCallback(facebook_ff_void_callback);
+        },
+        error: function(response, ioArgs) {
+
+        }
+    });
+}
+
 function face_callback(items, exception) {
     if (exception) {
         alert("Error");
     }
+
+    alert(items);
 }
 
-function facebook_ff_callback(items, exception) {
+function facebook_ff_void_callback(items, exception) {
     if (exception) {
         alert("Error");
+    }  else {
+//      alert("CAME");
     }
-    alert("AA");
 }
 
 
diff --git a/photark-ui/src/main/webapp/js/gallery.js b/photark-ui/src/main/webapp/js/gallery.js
index fe939b7..59e9b5e 100644
--- a/photark-ui/src/main/webapp/js/gallery.js
+++ b/photark-ui/src/main/webapp/js/gallery.js
@@ -276,10 +276,19 @@
 }
 
 function showFacebookFriends(){
- facebook_ff.getAllMyFBFriendsFromPictureLocal("/home/subash/IdeaProjects/pics/friends_2.jpg").addCallback(facebook_ff_callback);
+ var file_path =  document.getElementById("albumImage").src;
+    dojo.xhrPost({
+        url:"security", //photark.constants.SecurityEndpoint,
+        content:{request:"getUser"},
+        handleAs: "json",
+        load: function(response, ioArgs) {
+          facebook_ff.getAllMyFBFriendsFromPictureUrl(file_path,response.user.userId).addCallback(facebook_ff_callback);
+        },
+        error: function(response, ioArgs) {
 
-//facebook_ff.getAllMyFBFriendsFromPictureUrl("https://lh4.googleusercontent.com/-rb_m-GQcL00/Ti8sqThvrDI/AAAAAAAAAMY/kUBurbFKJ0A/s640/friends_2.jpg").addCallback(facebook_ff_callback);
-//facebook_ff.getTest("/home/subash/IdeaProjects/pics/friends_2.jpg").addCallback(facebook_ff_callback);
+        }
+    });
+
 }
 
 function face_callback(items, exception) {
diff --git a/photark-webapp/src/main/webapp/WEB-INF/web.composite b/photark-webapp/src/main/webapp/WEB-INF/web.composite
index 15b1557..c72d226 100644
--- a/photark-webapp/src/main/webapp/WEB-INF/web.composite
+++ b/photark-webapp/src/main/webapp/WEB-INF/web.composite
@@ -187,6 +187,8 @@
    			<tuscany:binding.jsonrpc uri="/FacebookFriendFinder"/>
    		</service>
         <reference name="faceRecognitionService" target="FaceRecognitionService"/>
+        <reference name="accessmanager" target="AccessManager"/>
+
 	</component>
     
 	
