diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/v1/DataSet.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/v1/DataSet.java
index a1a6b390e45597bc6146e845a04e9729c4492070..f3a6d1c28932333164259913f1b0b89b31917511 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/v1/DataSet.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/v1/DataSet.java
@@ -24,7 +24,6 @@ import java.util.HashMap;
 import java.util.List;
 
 import ch.systemsx.cisd.common.exceptions.InvalidSessionException;
-import ch.systemsx.cisd.openbis.dss.client.api.v1.impl.OpenbisServiceFacade;
 import ch.systemsx.cisd.openbis.dss.generic.shared.api.v1.FileInfoDssDTO;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSet.Connections;
 
@@ -36,7 +35,9 @@ import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSet.Connections;
  */
 public class DataSet
 {
-    private final OpenbisServiceFacade facade;
+    private final IOpenbisServiceFacade facade;
+
+    private final IDssComponent dssComponent;
 
     private ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSet metadata;
 
@@ -49,11 +50,12 @@ public class DataSet
      * @param metadata The metadata. May be null if not available at construction time.
      * @param dataSetDss The data. May be null if not available at construction time.
      */
-    public DataSet(OpenbisServiceFacade facade,
+    public DataSet(IOpenbisServiceFacade facade, IDssComponent dssComponent,
             ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSet metadata,
             IDataSetDss dataSetDss)
     {
         this.facade = facade;
+        this.dssComponent = dssComponent;
         this.metadata = metadata;
         this.dataSetDss = dataSetDss;
 
@@ -228,7 +230,7 @@ public class DataSet
         // lazily initialize the ivar.
         if (null == dataSetDss)
         {
-            dataSetDss = facade.getDataSetDss(getMetadata().getCode());
+            dataSetDss = dssComponent.getDataSet(getMetadata().getCode());
         }
         return dataSetDss;
     }
@@ -238,10 +240,13 @@ public class DataSet
      */
     private ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSet getMetadata()
     {
-        // lazily initialize the ivar.
         if (null == metadata)
         {
-            metadata = facade.tryRawDataSet(dataSetDss.getCode());
+            DataSet dataSetWithMetaData = facade.getDataSet(dataSetDss.getCode());
+            if (dataSetWithMetaData != null)
+            {
+                metadata = dataSetWithMetaData.getMetadata();
+            }
         }
         return metadata;
     }
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/v1/impl/OpenbisServiceFacade.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/v1/impl/OpenbisServiceFacade.java
index bb433c30f7a1e580c08dcaa7b9decc5095ce5e7a..f511142c403492616c18a5e6e25e47d281d7180c 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/v1/impl/OpenbisServiceFacade.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/v1/impl/OpenbisServiceFacade.java
@@ -258,23 +258,6 @@ public class OpenbisServiceFacade implements IOpenbisServiceFacade
         return convertDataSets(service.searchForDataSets(sessionToken, searchCriteria));
     }
 
-    /**
-     * Internal method used by the {@link DataSet} object to initialize an ivar if necessary.
-     */
-    public ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSet tryRawDataSet(
-            String dataSetCode) throws EnvironmentFailureException
-    {
-        SearchCriteria searchCriteria = new SearchCriteria();
-        searchCriteria.setOperator(SearchOperator.MATCH_ANY_CLAUSES);
-        searchCriteria.addMatchClause(MatchClause.createAttributeMatch(MatchClauseAttribute.CODE,
-                dataSetCode));
-        List<ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSet> matches =
-                service.searchForDataSets(sessionToken, searchCriteria);
-
-        // Codes are guaranteed to be unique, so there is either 1 or 0 matches
-        return (matches.size() > 0) ? matches.get(0) : null;
-    }
-
     public List<DataSet> listDataSetsForExperiments(final List<String> experimentIdentifiers)
             throws EnvironmentFailureException
     {
@@ -335,7 +318,7 @@ public class OpenbisServiceFacade implements IOpenbisServiceFacade
             throws EnvironmentFailureException
     {
         IDataSetDss dataSetDss = dssComponent.putDataSet(newDataset, dataSetFile);
-        return new DataSet(this, null, dataSetDss);
+        return new DataSet(this, dssComponent, null, dataSetDss);
     }
 
     public List<ValidationError> validateDataSet(NewDataSetDTO newDataset, File dataSetFile)
@@ -449,7 +432,7 @@ public class OpenbisServiceFacade implements IOpenbisServiceFacade
         ArrayList<DataSet> convertedDataSets = new ArrayList<DataSet>(internalDataSets.size());
         for (ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSet dataSet : internalDataSets)
         {
-            DataSet converted = new DataSet(this, dataSet, null);
+            DataSet converted = new DataSet(this, dssComponent, dataSet, null);
             convertedDataSets.add(converted);
         }