diff --git a/dalmdl/corefdb/corefdb.go b/dalmdl/corefdb/corefdb.go
index cbd01d318a5ddd03bd678f99af154de170757af5..eca4468b96942f9e023d88f2b5524a747e59c169 100644
--- a/dalmdl/corefdb/corefdb.go
+++ b/dalmdl/corefdb/corefdb.go
@@ -186,6 +186,12 @@ func (f *FDB) GetFDBIndex(indexID string) (*index.Index, bool) {
 	return index, ok
 }
 
+// GetFDBBucketStore - returns bucket
+func (f *FDB) GetFDBBucketStore(bucketID string) (bucket.Store, bool) {
+	store, ok := f.buckets[bucketID]
+	return store, ok
+}
+
 func SaveDataInFDB(dbName string, indexID string, data *gjson.Result) error {
 	fdb, err := GetFDBInstance(dbName)
 	if err != nil {
@@ -286,6 +292,38 @@ func SaveDataInFDB(dbName string, indexID string, data *gjson.Result) error {
 	return nil
 }
 
+func GetFilePaths(dbName, indexID string, queries []string) ([]string, error) {
+	filePaths := make([]string, 0)
+	fdb, err := GetFDBInstance(dbName)
+	if err != nil {
+		loggermdl.LogError("fdb instance not found: ", dbName)
+		return filePaths, errormdl.Wrap("fdb instance not found " + dbName)
+	}
+	//  get index Id from index map
+	index, ok := fdb.GetFDBIndex(indexID)
+	if !ok {
+		loggermdl.LogError("INDEX not found: " + indexID)
+		return filePaths, errormdl.Wrap("INDEX not found: " + indexID)
+	}
+
+	indexKeyValueMap, err := index.GetEntriesByQueries(queries)
+	if err != nil {
+		loggermdl.LogError(err)
+		return filePaths, err
+	}
+	if len(indexKeyValueMap) == 0 {
+		return filePaths, nil
+	}
+	for filePath := range indexKeyValueMap {
+		filePath, err = filepath.Abs(filepath.Join(fdb.DBPath, filePath))
+		if err != nil {
+			loggermdl.LogError(err)
+			return filePaths, err
+		}
+		filePaths = append(filePaths, filePath)
+	}
+	return filePaths, nil
+}
 func ReadDataFromFDB(dbName, indexID string, data *gjson.Result, queries []string, infileIndexQueries []string) (*gjson.Result, error) {
 	fdb, err := GetFDBInstance(dbName)
 	if err != nil {
diff --git a/dalmdl/corefdb/filetype/pack.go b/dalmdl/corefdb/filetype/pack.go
index 36efd81ef7dc24e4073465332356d49c93922363..119e0041f824372f167827bdf9d4b514657fbf0b 100644
--- a/dalmdl/corefdb/filetype/pack.go
+++ b/dalmdl/corefdb/filetype/pack.go
@@ -578,6 +578,49 @@ func (p *PackFile) ReadMedia(recordID string) ([]byte, *gjson.Result, error) {
 	return dataByte, &metaDataObj, nil
 }
 
+func (p *PackFile) ReadMediaByQuery(inFileIndexQueries []string) (map[string][]byte, map[string]gjson.Result, error) {
+	f := p.Fp
+	indexData, err := getInFileIndexData(f)
+	if err != nil {
+		loggermdl.LogError("index data not found: ", f.Name(), err)
+		return nil, nil, err
+	}
+	indexRows := indexData
+	// indexRows := indexData.Get(`#[fileType==` + requestedFileType + `]#`)
+	for i := 0; i < len(inFileIndexQueries); i++ {
+		indexRows = indexRows.Get(inFileIndexQueries[i] + "#")
+	}
+	if indexRows.String() == "" {
+		loggermdl.LogError("data not found")
+		return nil, nil, errormdl.Wrap("data not found")
+	}
+	dataMap := make(map[string][]byte, 0)
+	metaDataMap := make(map[string]gjson.Result, 0)
+	for _, indexRow := range indexRows.Array() {
+		startOffSet := indexRow.Get("startOffset").Int()
+		dataSize := indexRow.Get("dataSize").Int()
+		if startOffSet == 0 || dataSize == 0 {
+			return nil, nil, errormdl.Wrap("data not found")
+		}
+		dataByte, err := getFileDataFromPack(f, startOffSet, dataSize, nil, nil)
+		if err != nil {
+			loggermdl.LogError(err)
+			return nil, nil, err
+		}
+		recordID := indexRow.Get("recordID").String()
+		if recordID == "" {
+			return nil, nil, errormdl.Wrap("record id not found")
+		}
+		data, _ := sjson.Set("", "requiredData", indexRow.Get("requiredData").String())
+		// data, _ = sjson.Set(data, "infileIndex", indexData.String())
+		metaDataObj := gjson.Parse(data)
+		dataMap[recordID] = dataByte
+		metaDataMap[recordID] = metaDataObj
+	}
+
+	return dataMap, metaDataMap, nil
+}
+
 func (p *PackFile) RemoveMedia(recordID string) error {
 	queries := []string{`#[recordID=` + recordID + `]`}
 	_, err := p.Remove(queries)