diff --git a/app/controllers/v1/search_controller.rb b/app/controllers/v1/search_controller.rb
index 824fdef67fd2ee6dead8756e06e72f7cddf01d1b..0a281125d99f2c47d052261d5f788ce19c2643d0 100644
--- a/app/controllers/v1/search_controller.rb
+++ b/app/controllers/v1/search_controller.rb
@@ -44,7 +44,7 @@ class V1::SearchController < ApplicationController
   # GET v1/search/tag
   # GET v1/search/tag.json
   def tag
-    results = TagSearchService.search(Tag.find(tag_search_params[:id]))
+    results = TagSearchService.search(Tag.find(tag_search_params[:id]), 2)
     render json: paginate(results)
   end
 
diff --git a/app/services/tag_search_service.rb b/app/services/tag_search_service.rb
index 26c803d0d7b82df345f420b03c3c142847d1220f..0a1dafd173ea03942ff2c35f7fe139a5501d12d8 100644
--- a/app/services/tag_search_service.rb
+++ b/app/services/tag_search_service.rb
@@ -83,7 +83,8 @@ module TagSearchService
     #   lo.tags.each {|t| print t.name+" | "}
     #   # puts ""
     # end
-    return merged_los
+
+    return merged_los.map { |lc| lc[0] }
   end
 
   def merge(search_los, relevant_los)
@@ -113,27 +114,27 @@ module TagSearchService
     min = relevant_los.last[1]
     # puts "Max=#{max} Min=#{min}" if DEBUG
 
-    relevant_los.each do |rlo|
-      rlo[1] = max_boost*(rlo[1]*(1+PADM)-min)/(max-min)
-      # puts "#{rlo[1]}" if DEBUG
+    relevant_los.each do |rlc|
+      rlc[1] = max_boost*(rlc[1]*(1+PADM)-min)/(max-min)
+      # puts "#{rlc[1]}" if DEBUG
     end if max != 0
 
     # puts "Changing search array format" if DEBUG
     search_los.each do |slo|
-      relevant_los.each_with_index do |rlo, index|
-        if slo.id == rlo[0]
-          slo.search_hit['_score'] = slo.search_hit['_score'] + rlo[1]
+      relevant_los.each_with_index do |rlc, index|
+        if slo.id == rlc[0].id
+          slo.search_hit['_score'] = slo.search_hit['_score'] + rlc[1]
           relevant_los.delete_at(index)
         end
       end
-      merged_los << [slo.id, slo.search_hit['_score']]
+      merged_los << [slo, slo.search_hit['_score']]
       # puts "#{merged_los[merged_los.length - 1][0]}: #{merged_los[merged_los.length - 1][1]}" if DEBUG
     end
 
     merged_los.push(*relevant_los)
     # puts "Sorting LOs...\n" if DEBUG
     # highest ranks first
-    merged_los = merged_los.sort_by { |lo| lo[1]*-1 }
+    merged_los = merged_los.sort_by { |lc| lc[1]*-1 }
     return merged_los
   end
 
@@ -156,7 +157,7 @@ module TagSearchService
       # puts tag.name+" | "+ct[:id].to_s+" | "+ct[:rank].to_s+" | "+tags[ct[:id]][:rank].to_s if DEBUG
       tag.taggings.where(taggable_type: "LearningObject").each do |tagging|
         lo = tagging.taggable
-        if los_ranked[lo.id].nil?
+        if los_ranked[lo].nil?
           # Uncomment the next line if you want to sort by local tag frequency
           # los_ranked[lo.id] = relevance_frequency_rank(lo, close_tags)
 
@@ -164,7 +165,7 @@ module TagSearchService
           # los_ranked[lo.id] = relevance_frequency_rank_global(lo, close_tags, freq_cluster)
 
           # Uncomment the next line if you want to sort by tag cluster rank
-          los_ranked[lo.id] = relevance_raw_rank(lo, close_tags)
+          los_ranked[lo] = relevance_raw_rank(lo, close_tags)
           # puts "Found lo of id=#{lo.id} with rank=#{los_ranked[lo.id]}" if DEBUG
         end
       end
@@ -172,7 +173,7 @@ module TagSearchService
 
     # puts "Sorting LOs...\n" if DEBUG
     # highest ranks first
-    los_ranked = los_ranked.sort_by { |id, rank| rank*-1 }
+    los_ranked = los_ranked.sort_by { |lo, rank| rank*-1 }
     return los_ranked.first(limit) if limit > 0
     return los_ranked
   end