diff --git a/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/ApiController.groovy b/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/ApiController.groovy
index 70e6a21468d3ef9fcdbe825173da6c7fe2ebf917..f9b2c7bc47f9c982368d317d033eb64decdac275 100755
--- a/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/ApiController.groovy
+++ b/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/ApiController.groovy
@@ -1711,11 +1711,10 @@ class ApiController {
             internalRecordIds = paramsProcessorUtil.decodeIds(params.recordID)
         }
 
-        Map<String, Object> filters = new LinkedHashMap<String, Object>()
+        Map<String, Map<String, Object>> filters = new LinkedHashMap<String, Map<String, Object>>()
         if (!StringUtils.isEmpty(params.filter)) {
             filters = paramsProcessorUtil.decodeFilters(params.filter)
         }
-        log.debug(new groovy.json.JsonBuilder( filters ).toPrettyString())
 
         // Everything is good so far.
         if ( internalRecordIds.size() == 0 ) {
diff --git a/bigbluebutton-web/src/java/org/bigbluebutton/api/MeetingService.java b/bigbluebutton-web/src/java/org/bigbluebutton/api/MeetingService.java
index c8a1407bb40e22dc1276b554c33b43c0613ba462..db87f3595179fbe6fae3b732561585bceda336cd 100755
--- a/bigbluebutton-web/src/java/org/bigbluebutton/api/MeetingService.java
+++ b/bigbluebutton-web/src/java/org/bigbluebutton/api/MeetingService.java
@@ -339,7 +339,7 @@ public class MeetingService implements MessageListener {
 		return null;
 	} 
 	
-	public HashMap<String,Recording> getRecordings(ArrayList<String> idList, Map<String, Object> filters) {
+	public HashMap<String,Recording> getRecordings(ArrayList<String> idList, Map<String, Map<String, Object>> filters) {
 		//TODO: this method shouldn't be used 
 		HashMap<String,Recording> recs= reorderRecordings(recordingService.getRecordings(idList, filters));
 		return recs;
diff --git a/bigbluebutton-web/src/java/org/bigbluebutton/api/ParamsProcessorUtil.java b/bigbluebutton-web/src/java/org/bigbluebutton/api/ParamsProcessorUtil.java
index 152263c455f7e5b69bfed8064ae2f4e05d46ded5..18191dcc0c1946494c6e44bcada83849cf5dd6e0 100755
--- a/bigbluebutton-web/src/java/org/bigbluebutton/api/ParamsProcessorUtil.java
+++ b/bigbluebutton-web/src/java/org/bigbluebutton/api/ParamsProcessorUtil.java
@@ -740,8 +740,8 @@ public class ParamsProcessorUtil {
 		return resp;
 	}
 
-	public Map<String, Object> decodeFilters(String encodedFilters) {
-        Map<String, Object> filters = new LinkedHashMap<String, Object>();
+	public Map<String, Map<String, Object>> decodeFilters(String encodedFilters) {
+        Map<String, Map<String, Object>> filters = new LinkedHashMap<String, Map<String, Object>>();
 
         try {
             String[] sFilters = encodedFilters.split(URLDECODER_SEPARATOR);
diff --git a/bigbluebutton-web/src/java/org/bigbluebutton/api/RecordingService.java b/bigbluebutton-web/src/java/org/bigbluebutton/api/RecordingService.java
index a632215f98d27055f6c71b280eebb9461d3088d6..cd1f257a406dff6186cda1de72cd08d4b2dc5c3d 100755
--- a/bigbluebutton-web/src/java/org/bigbluebutton/api/RecordingService.java
+++ b/bigbluebutton-web/src/java/org/bigbluebutton/api/RecordingService.java
@@ -57,7 +57,7 @@ public class RecordingService {
         }
     }
 
-    private boolean shouldIncludeDir( Map<String, Object> filters, String type ) {
+    private boolean shouldIncludeDir( Map<String, Map<String, Object>> filters, String type ) {
         boolean r = false;
 
         if( filters.containsKey("state") ) {
@@ -83,7 +83,18 @@ public class RecordingService {
         return r;
     }
 
-    public ArrayList<Recording> getRecordings(ArrayList<String> meetingIds, Map<String, Object> filters) {
+    private String[] recordingIdsFromFilters( Map<String, Map<String, Object>> filters ) {
+        String[] recordingIds = {};
+
+        if( filters.containsKey("id") ) {
+            Map<String, Object> filter = (Map<String, Object>)filters.get("id");
+            recordingIds = (String[])filter.get("values");
+        }
+
+        return recordingIds;
+    }
+
+    public ArrayList<Recording> getRecordings(ArrayList<String> meetingIds, Map<String, Map<String, Object>> filters) {
         ArrayList<Recording> recs = new ArrayList<Recording>();
 
         if(meetingIds.isEmpty()){
@@ -99,21 +110,21 @@ public class RecordingService {
 
         for(String meetingId : meetingIds){
             if ( shouldIncludeDir(filters, Recording.STATE_PUBLISHED) ) {
-                ArrayList<Recording> published = getRecordingsForPath(meetingId, publishedDir);
+                ArrayList<Recording> published = getRecordingsForPath(meetingId, recordingIdsFromFilters(filters), publishedDir);
                 if (!published.isEmpty()) {
                     recs.addAll(published);
                 }
             }
 
             if ( shouldIncludeDir(filters, Recording.STATE_UNPUBLISHED) ) {
-                ArrayList<Recording> unpublished = getRecordingsForPath(meetingId, unpublishedDir);
+                ArrayList<Recording> unpublished = getRecordingsForPath(meetingId, recordingIdsFromFilters(filters), unpublishedDir);
                 if (!unpublished.isEmpty()) {
                     recs.addAll(unpublished);
                 }
             }
 
             if ( shouldIncludeDir(filters, Recording.STATE_DELETED) ) {
-                ArrayList<Recording> deleted = getRecordingsForPath(meetingId, deletedDir);
+                ArrayList<Recording> deleted = getRecordingsForPath(meetingId, recordingIdsFromFilters(filters), deletedDir);
                 if (!deleted.isEmpty()) {
                     recs.addAll(deleted);
                 }
@@ -171,7 +182,7 @@ public class RecordingService {
         return ids;
     }
 
-    private ArrayList<Recording> getRecordingsForPath(String meetingId, String path) {
+    private ArrayList<Recording> getRecordingsForPath(String meetingId, String[] recordingId, String path) {
         ArrayList<Recording> recs = new ArrayList<Recording>();
 
         String[] format = getPlaybackFormats(path);
@@ -180,7 +191,9 @@ public class RecordingService {
             for (int f = 0; f < recordings.length; f++) {
                 if (recordings[f].getName().startsWith(meetingId)) {
                     Recording r = getRecordingInfo(path, recordings[f].getName(), format[i]);
-                    if (r != null) recs.add(r);
+                    if (r != null && ( recordingId.length == 0 || Arrays.asList(recordingId).contains("any") || Arrays.asList(recordingId).contains(r.getId())) ) {
+                        recs.add(r);
+                    }
                 }
             }
         }