diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dataaccess/IImagingUploadDAO.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dataaccess/IImagingUploadDAO.java
index 474c79408c15804a090402cc08772039dcb4b613..a015c286b1fcca3539d56ce6db49815e1ca3f132 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dataaccess/IImagingUploadDAO.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dataaccess/IImagingUploadDAO.java
@@ -23,6 +23,7 @@ import net.lemnik.eodsql.TransactionQuery;
 import net.lemnik.eodsql.Update;
 
 import ch.systemsx.cisd.bds.hcs.Location;
+import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.ByteArrayMapper;
 
 /**
  * @author Tomasz Pylak
@@ -86,6 +87,12 @@ public interface IImagingUploadDAO extends TransactionQuery
     @Select("select * from SPOTS where cont_id = ?{1}")
     public List<ImgSpotDTO> listSpots(long contId);
 
+    @Select("SELECT * from FEATURE_DEFS where DS_ID = ?{1}")
+    public List<ImgFeatureDefDTO> listFeatureDefsByDataSetId(long dataSetId);
+
+    @Select(value = "SELECT * from FEATURE_VALUES where FD_ID = ?{1.id}", resultSetBinding = FeatureVectorDataObjectBinding.class)
+    public List<ImgFeatureValuesDTO> getFeatureValues(ImgFeatureDefDTO featureDef);
+
     // inserts
 
     @Select("insert into EXPERIMENTS (PERM_ID) values (?{1}) returning ID")
@@ -120,6 +127,15 @@ public interface IImagingUploadDAO extends TransactionQuery
             + "(?{1.column}, ?{1.row}, ?{1.containerId}, ?{1.permId}) returning ID")
     public long addSpot(ImgSpotDTO spot);
 
+    @Select("INSERT into FEATURE_DEFS (NAME, DESCRIPTION, DS_ID) values "
+            + "(?{1.name}, ?{1.description}, ?{1.dataSetId}) RETURNING ID")
+    public long addFeatureDef(ImgFeatureDefDTO featureDef);
+
+    @Select(value = "INSERT into FEATURE_VALUES (VALUES, Z_in_M, T_in_SEC, FD_ID) values "
+            + "(?{1.values}, ?{1.z}, ?{1.t}, ?{1.featureDefId}) RETURNING ID", parameterBindings =
+        { ByteArrayMapper.class })
+    public long addFeatureValues(ImgFeatureValuesDTO featureValues);
+
     // updates
 
     @Update("update CHANNELS "
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dataaccess/ImgFeatureDefDTO.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dataaccess/ImgFeatureDefDTO.java
index 95fb98511bd490e676c36df56a1eaaad17665f1a..166b39c1847af86bdde8e32f829ac1ec9f836338 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dataaccess/ImgFeatureDefDTO.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dataaccess/ImgFeatureDefDTO.java
@@ -22,7 +22,8 @@ import net.lemnik.eodsql.ResultColumn;
 import ch.systemsx.cisd.common.utilities.AbstractHashable;
 
 /**
- * Corresponds to a row in the FEATURE_DEFS table.
+ * Corresponds to a row in the FEATURE_DEFS table. Name and description should be filled out, but if
+ * the object has not yet been persisted, id and dataSetId may be invalid.
  * 
  * @author Chandrasekhar Ramakrishnan
  */
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dataaccess/ImgFeatureValuesDTO.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dataaccess/ImgFeatureValuesDTO.java
index c22af244532548302a0ff934ba146f0f4a6e2001..471c6007f8034da84d9d0e588c599cc844ddd5a1 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dataaccess/ImgFeatureValuesDTO.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dataaccess/ImgFeatureValuesDTO.java
@@ -94,7 +94,7 @@ public class ImgFeatureValuesDTO extends AbstractHashable
         return featureDefId;
     }
 
-    public void setFeatureDefId(Integer featureDefId)
+    public void setFeatureDefId(long featureDefId)
     {
         this.featureDefId = featureDefId;
     }