diff --git a/services/datalab-model/src/main/java/com/epam/datalab/dto/SharedWith.java b/services/datalab-model/src/main/java/com/epam/datalab/dto/SharedWith.java
index 21daa22..711043f 100644
--- a/services/datalab-model/src/main/java/com/epam/datalab/dto/SharedWith.java
+++ b/services/datalab-model/src/main/java/com/epam/datalab/dto/SharedWith.java
@@ -20,15 +20,13 @@
 package com.epam.datalab.dto;
 
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import lombok.AllArgsConstructor;
 import lombok.Data;
 
-import java.util.HashSet;
-import java.util.Set;
+import java.util.TreeSet;
 
 @Data
 @JsonIgnoreProperties(ignoreUnknown = true)
 public class SharedWith {
-    private Set<String> users=new HashSet<>();
-    private Set<String> groups=new HashSet<>();
+    private TreeSet<String> users = new TreeSet<>();
+    private TreeSet<String> groups = new TreeSet<>();
 }
diff --git a/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/ImageExploratoryResource.java b/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/ImageExploratoryResource.java
index 3b3c92a..c70885b 100644
--- a/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/ImageExploratoryResource.java
+++ b/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/ImageExploratoryResource.java
@@ -79,9 +79,8 @@
                               @QueryParam("project") String project,
                               @QueryParam("endpoint") String endpoint) {
         log.debug("Getting images for user {}, project {}", ui.getName(), project);
-        final List<ImageInfoRecord> images = imageExploratoryService.getNotFailedImages(ui, dockerImage,
-                project, endpoint);
-        return Response.ok(images).build();
+        return Response.ok(imageExploratoryService.getNotFailedImages(ui, dockerImage,
+                project, endpoint)).build();
     }
 
     @GET
diff --git a/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/ImageInfoDTO.java b/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/ImageInfoDTO.java
new file mode 100644
index 0000000..f45085b
--- /dev/null
+++ b/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/ImageInfoDTO.java
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+package com.epam.datalab.backendapi.resources.dto;
+
+import com.epam.datalab.cloud.CloudProvider;
+import com.epam.datalab.dto.SharedWith;
+import com.epam.datalab.dto.aws.computational.ClusterConfig;
+import com.epam.datalab.dto.exploratory.ImageSharingStatus;
+import com.epam.datalab.dto.exploratory.ImageStatus;
+import com.epam.datalab.model.library.Library;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+@Data
+@Builder
+@AllArgsConstructor
+public class ImageInfoDTO {
+    private String name;
+    private Date timestamp;
+    private String description;
+    private String project;
+    private String endpoint;
+    private String user;
+    private String application;
+    private String templateName;
+    private String instanceName;
+    private CloudProvider cloudProvider;
+    private String dockerImage;
+    private String fullName;
+    private ImageStatus status;
+    private ImageSharingStatus sharingStatus;
+    private ImageUserPermissions imageUserPermissions;
+    private SharedWith sharedWith;
+    private List<ClusterConfig> clusterConfig;
+    private String exploratoryURL;
+    private List<Library> libraries;
+    private Map<String, List<Library>> computationalLibraries;
+}
diff --git a/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/ImageInfoRecord.java b/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/ImageInfoRecord.java
index ca51fe7..a4472e1 100644
--- a/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/ImageInfoRecord.java
+++ b/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/ImageInfoRecord.java
@@ -22,7 +22,6 @@
 import com.epam.datalab.cloud.CloudProvider;
 import com.epam.datalab.dto.SharedWith;
 import com.epam.datalab.dto.aws.computational.ClusterConfig;
-import com.epam.datalab.dto.exploratory.ImageSharingStatus;
 import com.epam.datalab.dto.exploratory.ImageStatus;
 import com.epam.datalab.model.library.Library;
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@@ -48,8 +47,6 @@
     private final String dockerImage;
     private final String fullName;
     private final ImageStatus status;
-    private ImageSharingStatus sharingStatus;
-    private ImageUserPermissions imageUserPermissions;
     private final SharedWith sharedWith;
     private final List<ClusterConfig> clusterConfig;
     private final String exploratoryURL;
diff --git a/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/ProjectImagesInfo.java b/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/ProjectImagesInfo.java
index 8743214..46dfe66 100644
--- a/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/ProjectImagesInfo.java
+++ b/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/ProjectImagesInfo.java
@@ -33,5 +33,5 @@
     @JsonProperty
     private String project;
     @JsonProperty
-    private List<ImageInfoRecord> images;
+    private List<ImageInfoDTO> images;
 }
diff --git a/services/self-service/src/main/java/com/epam/datalab/backendapi/service/ImageExploratoryService.java b/services/self-service/src/main/java/com/epam/datalab/backendapi/service/ImageExploratoryService.java
index a81e8f1..c1149fb 100644
--- a/services/self-service/src/main/java/com/epam/datalab/backendapi/service/ImageExploratoryService.java
+++ b/services/self-service/src/main/java/com/epam/datalab/backendapi/service/ImageExploratoryService.java
@@ -36,7 +36,7 @@
 
     void finishImageCreate(Image image, String exploratoryName, String newNotebookIp);
 
-    List<ImageInfoRecord> getNotFailedImages(UserInfo user, String dockerImage, String project, String endpoint);
+    List<ImageInfoDTO> getNotFailedImages(UserInfo user, String dockerImage, String project, String endpoint);
 
     ImageInfoRecord getImage(String user, String name, String project, String endpoint);
 
diff --git a/services/self-service/src/main/java/com/epam/datalab/backendapi/service/impl/ImageExploratoryServiceImpl.java b/services/self-service/src/main/java/com/epam/datalab/backendapi/service/impl/ImageExploratoryServiceImpl.java
index 67d8658..b1acbc2 100644
--- a/services/self-service/src/main/java/com/epam/datalab/backendapi/service/impl/ImageExploratoryServiceImpl.java
+++ b/services/self-service/src/main/java/com/epam/datalab/backendapi/service/impl/ImageExploratoryServiceImpl.java
@@ -184,7 +184,7 @@
     }
 
     @Override
-    public List<ImageInfoRecord> getNotFailedImages(UserInfo user, String dockerImage, String project, String endpoint) {
+    public List<ImageInfoDTO> getNotFailedImages(UserInfo user, String dockerImage, String project, String endpoint) {
         List<ImageInfoRecord> images = new ArrayList<>();
         if (UserRoles.checkAccess(user, RoleType.PAGE, CREATE_NOTEBOOK_BASED_ON_OWN_IMAGES, user.getRoles())) {
             images.addAll(imageExploratoryDao.getImages(user.getName(), dockerImage, project, endpoint, ImageStatus.ACTIVE, ImageStatus.CREATING));
@@ -192,7 +192,8 @@
         if (UserRoles.checkAccess(user, RoleType.PAGE, CREATE_NOTEBOOK_BASED_ON_SHARED_IMAGES, user.getRoles())) {
             images.addAll(getSharedImages(user, dockerImage, project, endpoint));
         }
-        return images;
+        List<ImageInfoDTO> imageInfoDTOs = images.stream().map(img -> toImageInfoDTO(img, user)).collect(Collectors.toList());
+        return removeSharedWithIfNotOwner(user,imageInfoDTOs);
     }
 
     @Override
@@ -216,29 +217,30 @@
     public ImagesPageInfo getImagesOfUser(UserInfo user, ImageFilter imageFilter) {
         log.debug("Loading list of images for user {}", user.getName());
         List<ImageInfoRecord> images = imageExploratoryDao.getImagesOfUser(user.getName());
-        images.forEach(img -> img.setSharingStatus(getImageSharingStatus(user.getName(), img)));
-        images.addAll(getSharedImages(user));
-        ImageFilterFormData filterData = getDataForFilter(images);
+
+        List<ImageInfoDTO> imagesDTOs = images.stream().map(img -> toImageInfoDTO(img, user)).collect(Collectors.toList());
+        imagesDTOs.addAll(getSharedImages(user).stream().map(img -> toImageInfoDTO(img, user)).collect(Collectors.toList()));
+        ImageFilterFormData filterData = getDataForFilter(imagesDTOs);
 
         if (imageFilter == null) {
             if (userSettingsDAO.getImageFilter(user.getName()).isPresent()) {
                 imageFilter = userSettingsDAO.getImageFilter(user.getName()).get();
-                images = filterImages(images, imageFilter);
+                imagesDTOs = filterImages(imagesDTOs, imageFilter);
             } else {
                 imageFilter = new ImageFilter();
                 userSettingsDAO.setUserImageFilter(user.getName(), imageFilter);
             }
         } else {
-            images = filterImages(images, imageFilter);
+            imagesDTOs = filterImages(imagesDTOs, imageFilter);
             userSettingsDAO.setUserImageFilter(user.getName(), imageFilter);
         }
 
-        images.forEach(img -> img.setImageUserPermissions(getUserImagePermissions(user, img)));
-        final List<ImageInfoRecord> finalImages = images;
+        // do not show sharing if not owner
+        final List<ImageInfoDTO> finalImages = removeSharedWithIfNotOwner(user, imagesDTOs);
         List<ProjectImagesInfo> projectImagesInfoList = projectService.getUserProjects(user, Boolean.FALSE)
                 .stream()
                 .map(p -> {
-                    List<ImageInfoRecord> im = finalImages.stream().filter(img -> img.getProject().equals(p.getName())).collect(Collectors.toList());
+                    List<ImageInfoDTO> im = finalImages.stream().filter(img -> img.getProject().equals(p.getName())).collect(Collectors.toList());
                     return ProjectImagesInfo.builder()
                             .project(p.getName())
                             .images(im)
@@ -271,13 +273,10 @@
 
     @Override
     public List<ImageInfoRecord> getSharedImages(UserInfo userInfo) {
-        List<ImageInfoRecord> sharedImages = imageExploratoryDao.getAllImages().stream()
+        return imageExploratoryDao.getAllImages().stream()
                 .filter(img -> !img.getUser().equals(userInfo.getName()))
                 .filter(img -> hasAccess(userInfo.getName(), img.getSharedWith()))
                 .collect(Collectors.toList());
-        sharedImages.forEach(img -> img.setSharingStatus(getImageSharingStatus(userInfo.getName(), img)));
-        log.info("Shared with user {} images : {}", userInfo.getName(), sharedImages);
-        return sharedImages;
     }
 
     @Override
@@ -288,7 +287,7 @@
                 .filter(img -> img.getDockerImage().equals(dockerImage) && img.getProject().equals(project) && img.getEndpoint().equals(endpoint))
                 .filter(img -> hasAccess(userInfo.getName(), img.getSharedWith()))
                 .collect(Collectors.toList());
-        sharedImages.forEach(img -> img.setSharingStatus(getImageSharingStatus(userInfo.getName(), img)));
+        //sharedImages.forEach(img -> img.setSharingStatus(getImageSharingStatus(userInfo.getName(), img)));
         log.info("Found shared with user {} images {}", userInfo.getName(), sharedImages);
         return sharedImages;
     }
@@ -391,7 +390,16 @@
         return ImageSharingStatus.RECEIVED;
     }
 
-    private List<ImageInfoRecord> filterImages(List<ImageInfoRecord> images, ImageFilter filter) {
+    private List<ImageInfoDTO> removeSharedWithIfNotOwner(UserInfo user, List<ImageInfoDTO> imageInfoDTOS){
+        imageInfoDTOS.forEach(img -> {
+            if(!img.getUser().equals(user.getName())){
+                img.setSharedWith(new SharedWith());
+            }
+        });
+        return imageInfoDTOS;
+    }
+
+    private List<ImageInfoDTO> filterImages(List<ImageInfoDTO> images, ImageFilter filter) {
         return images.stream()
                 .filter(img -> img.getName().toLowerCase().contains(filter.getImageName().toLowerCase()))
                 .filter(img -> CollectionUtils.isEmpty(filter.getStatuses()) || filter.getStatuses().contains(img.getStatus()))
@@ -402,13 +410,38 @@
 
     }
 
-    private ImageFilterFormData getDataForFilter(List<ImageInfoRecord> images) {
+    private ImageFilterFormData getDataForFilter(List<ImageInfoDTO> images) {
         ImageFilterFormData filterData = new ImageFilterFormData();
-        filterData.setImageNames(images.stream().map(ImageInfoRecord::getName).collect(Collectors.toSet()));
-        filterData.setStatuses(images.stream().map(ImageInfoRecord::getStatus).collect(Collectors.toSet()));
-        filterData.setEndpoints(images.stream().map(ImageInfoRecord::getEndpoint).collect(Collectors.toSet()));
-        filterData.setTemplateNames(images.stream().map(ImageInfoRecord::getTemplateName).collect(Collectors.toSet()));
-        filterData.setSharingStatuses(images.stream().map(ImageInfoRecord::getSharingStatus).collect(Collectors.toSet()));
+        filterData.setImageNames(images.stream().map(ImageInfoDTO::getName).collect(Collectors.toSet()));
+        filterData.setStatuses(images.stream().map(ImageInfoDTO::getStatus).collect(Collectors.toSet()));
+        filterData.setEndpoints(images.stream().map(ImageInfoDTO::getEndpoint).collect(Collectors.toSet()));
+        filterData.setTemplateNames(images.stream().map(ImageInfoDTO::getTemplateName).collect(Collectors.toSet()));
+        filterData.setSharingStatuses(images.stream().map(ImageInfoDTO::getSharingStatus).collect(Collectors.toSet()));
         return filterData;
     }
+
+    private ImageInfoDTO toImageInfoDTO(ImageInfoRecord imageInfoRecord, UserInfo userInfo){
+        return ImageInfoDTO.builder()
+                .name(imageInfoRecord.getName())
+                .timestamp(imageInfoRecord.getTimestamp())
+                .description(imageInfoRecord.getDescription())
+                .project(imageInfoRecord.getProject())
+                .endpoint(imageInfoRecord.getEndpoint())
+                .user(imageInfoRecord.getUser())
+                .application(imageInfoRecord.getApplication())
+                .templateName(imageInfoRecord.getTemplateName())
+                .instanceName(imageInfoRecord.getInstanceName())
+                .cloudProvider(imageInfoRecord.getCloudProvider())
+                .dockerImage(imageInfoRecord.getDockerImage())
+                .fullName(imageInfoRecord.getFullName())
+                .status(imageInfoRecord.getStatus())
+                .sharingStatus(getImageSharingStatus(userInfo.getName(), imageInfoRecord))
+                .imageUserPermissions(getUserImagePermissions(userInfo, imageInfoRecord))
+                .sharedWith(imageInfoRecord.getSharedWith())
+                .clusterConfig(imageInfoRecord.getClusterConfig())
+                .exploratoryURL(imageInfoRecord.getExploratoryURL())
+                .libraries(imageInfoRecord.getLibraries())
+                .computationalLibraries(imageInfoRecord.getComputationalLibraries())
+        .build();
+    }
 }
