diff --git a/flag.inc b/flag.inc
index 59a3ebb..1df00a8 100644
--- a/flag.inc
+++ b/flag.inc
@@ -431,7 +431,7 @@ class flag_flag {
 
     if (!isset($action)) {
       $uid = $account->uid;
-      $sid = flag_get_sid($uid);
+      $sid = flag_get_sid($uid, FALSE);
       $action = $this->is_flagged($content_id, $uid, $sid) ? 'unflag' : 'flag';
     }
 
@@ -628,7 +628,7 @@ class flag_flag {
    */
   function get_flagging_record($content_id, $uid = NULL, $sid = NULL) {
     $uid = $this->global ? 0 : (!isset($uid) ? $GLOBALS['user']->uid : $uid);
-    $sid = $this->global ? 0 : (!isset($sid) ? flag_get_sid($uid) : $sid);
+    $sid = $this->global ? 0 : (!isset($sid) ? flag_get_sid($uid, FALSE) : NULL);
 
     // flag_get_user_flags() does caching.
     $user_flags = flag_get_user_flags($this->content_type, $content_id, $uid, $sid);
@@ -783,7 +783,7 @@ class flag_flag {
    */
   function get_user_count($uid, $sid = NULL) {
     if (!isset($sid)) {
-      $sid = flag_get_sid($uid);
+      $sid = flag_get_sid($uid, FALSE);
     }
     return db_select('flag_content', 'fc')->fields('fc', array('fcid'))
       ->condition('fid', $this->fid)->condition('uid', $uid)->condition('sid', $sid)
diff --git a/flag.module b/flag.module
index d16a334..e289416 100644
--- a/flag.module
+++ b/flag.module
@@ -184,7 +184,7 @@ function flag_init() {
   }
   if (module_exists('session_api')) {
     // Set the anonymous user SID immediately, in case the user logs in.
-    flag_set_sid();
+    //flag_set_sid();
   }
 }
 
@@ -581,7 +581,7 @@ function flag_node_translation_change($node) {
  */
 function flag_user_login(&$edit, &$account) {
   // Migrate anonymous flags to this user's account.
-  if (module_exists('session_api') && ($sid = flag_get_sid(0))) {
+  if (module_exists('session_api') && ($sid = flag_get_sid(0, FALSE))) {
     // The @ symbol suppresses errors if the user flags a piece of content
     // they have already flagged as a logged-in user.
     @db_update('flag_content')
@@ -596,7 +596,7 @@ function flag_user_login(&$edit, &$account) {
     // Delete any remaining flags this user had as an anonymous user.
     db_delete('flag_content')
       ->condition('uid', 0)
-      ->condition('sid', flag_get_sid(0))
+      ->condition('sid', flag_get_sid(0, FALSE))
       ->execute();
 
     // Clean up anonymous cookies.
@@ -1726,8 +1726,9 @@ function flag_get_user_flags($content_type, $content_id = NULL, $uid = NULL, $si
   }
 
   $uid = !isset($uid) ? $GLOBALS['user']->uid : $uid;
-  $sid = !isset($sid) ? flag_get_sid($uid) : $sid;
-
+  $sid = !isset($sid) ? flag_get_sid($uid, FALSE) : $sid;
+// set no data for anon user with no data
+if ($sid != NULL && $sid >= 0) {
   if (isset($content_id)) {
     if (!isset($flagged_content[$uid][$sid][$content_type][$content_id])) {
       $flag_names = _flag_get_flag_names();
@@ -1767,10 +1768,21 @@ function flag_get_user_flags($content_type, $content_id = NULL, $uid = NULL, $si
         $flagged_content[$uid][$sid][$content_type]['all'][$flag_names[$flag_content->fid]][$flag_content->content_id] = $flag_content;
       }
     }
+
+    return $flagged_content[$uid][$sid][$content_type]['all'];
+  }
+}
+else {
+  // no session is established, return empty data
+  if (isset($content_id)) {
+    return $flagged_content[$uid][$sid][$content_type][$content_id];
+  }
+  else {
     return $flagged_content[$uid][$sid][$content_type]['all'];
   }
 
 }
+}
 
 /**
  * Return a list of users who have flagged a piece of content.
@@ -1886,7 +1898,7 @@ function flag_check_token($token, $content_id) {
  * This function is only called in flag_init(), to set the current user's
  * SID in case the user logs in during this request.
  */
-function flag_set_sid($uid = NULL) {
+function flag_set_sid($uid = NULL, $create = TRUE) {
   static $sids = array();
 
   if (!isset($uid)) {
@@ -1895,7 +1907,7 @@ function flag_set_sid($uid = NULL) {
 
   if (!isset($sids[$uid])) {
     if (module_exists('session_api') && session_api_available() && $uid == 0) {
-      $sids[$uid] = session_api_get_sid();
+      $sids[$uid] = session_api_get_sid($create);
     }
     else {
       $sids[$uid] = 0;
@@ -1908,6 +1920,6 @@ function flag_set_sid($uid = NULL) {
 /**
  * Get the Session ID for a user. Utilizes the Session API module.
  */
-function flag_get_sid($uid = NULL) {
-  return flag_set_sid($uid);
+function flag_get_sid($uid = NULL, $create = TRUE) {
+  return flag_set_sid($uid, $create);
 }
diff --git a/includes/flag.views.inc b/includes/flag.views.inc
index 2ab7a60..3e47316 100644
--- a/includes/flag.views.inc
+++ b/includes/flag.views.inc
@@ -213,7 +213,7 @@ function flag_views_data_alter(&$data) {
  */
 function flag_views_query_substitutions() {
   return array(
-    '***FLAG_CURRENT_USER_SID***' => flag_get_sid(),
+    '***FLAG_CURRENT_USER_SID***' => flag_get_sid(NULL, FALSE),
   );
 }
 /**
