diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/AttachmentDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/AttachmentDAO.java
index a4edcba21a63cf6331dc313acaed443d3bc75301..9336ec1f59e6e47379b08013aa860627e1f26724 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/AttachmentDAO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/AttachmentDAO.java
@@ -16,21 +16,25 @@
 
 package ch.systemsx.cisd.openbis.generic.server.dataaccess.db;
 
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
 import org.hibernate.Session;
-import org.hibernate.SessionFactory;
 import org.springframework.dao.DataAccessException;
 import org.springframework.orm.hibernate4.HibernateTemplate;
 
 import ch.systemsx.cisd.common.logging.LogCategory;
 import ch.systemsx.cisd.common.logging.LogFactory;
+import ch.systemsx.cisd.openbis.generic.server.dataaccess.DynamicPropertyEvaluationOperation;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IAttachmentDAO;
+import ch.systemsx.cisd.openbis.generic.server.dataaccess.PersistencyResources;
+import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.search.IndexUpdateOperation;
 import ch.systemsx.cisd.openbis.generic.shared.dto.AttachmentHolderPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.AttachmentPE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.IEntityInformationWithPropertiesHolder;
 
 /**
  * Implementation of {@link IAttachmentDAO} for data bases.
@@ -45,12 +49,15 @@ final class AttachmentDAO extends AbstractGenericEntityDAO<AttachmentPE> impleme
 
     private final static String TABLE_NAME = ATTACHMENT_CLASS.getSimpleName();
 
+    private final PersistencyResources persistencyResources;
+
     private static final Logger operationLog = LogFactory.getLogger(LogCategory.OPERATION,
             AttachmentDAO.class);
 
-    AttachmentDAO(final SessionFactory sessionFactory)
+    AttachmentDAO(final PersistencyResources persistencyResources)
     {
-        super(sessionFactory, ATTACHMENT_CLASS);
+        super(persistencyResources.getSessionFactory(), ATTACHMENT_CLASS);
+        this.persistencyResources = persistencyResources;
     }
 
     private final static String createFindLastVersionQuery(AttachmentHolderPE owner)
@@ -81,6 +88,9 @@ final class AttachmentDAO extends AbstractGenericEntityDAO<AttachmentPE> impleme
     {
         AttachmentHolderPE result = internalCreateAttachment(attachment, ownerParam);
         getHibernateTemplate().flush();
+        
+        scheduleDynamicPropertiesEvaluation(ownerParam);
+
         return result;
     }
 
@@ -236,6 +246,8 @@ final class AttachmentDAO extends AbstractGenericEntityDAO<AttachmentPE> impleme
 
         hibernateTemplate.flush();
 
+        scheduleRemoveFromFullTextIndex(owner);
+
         if (operationLog.isInfoEnabled())
         {
             operationLog.debug(String.format(
@@ -246,4 +258,25 @@ final class AttachmentDAO extends AbstractGenericEntityDAO<AttachmentPE> impleme
         return deletedRows;
     }
 
+    private void scheduleDynamicPropertiesEvaluation(final AttachmentHolderPE owner)
+    {
+        // updates the index if the attachment owner is a Sample or an Experiment
+        if (IEntityInformationWithPropertiesHolder.class.isAssignableFrom(owner.getClass()))
+        {
+            IEntityInformationWithPropertiesHolder entity = (IEntityInformationWithPropertiesHolder) owner;
+            persistencyResources.getDynamicPropertyEvaluationScheduler()
+                    .scheduleUpdate(DynamicPropertyEvaluationOperation.evaluate(entity.getClass(), Arrays.asList(entity.getId())));
+        }
+    }
+
+    protected void scheduleRemoveFromFullTextIndex(final AttachmentHolderPE owner)
+    {
+        // removes the index if the attachment owner is a Sample or an Experiment
+        if (IEntityInformationWithPropertiesHolder.class.isAssignableFrom(owner.getClass()))
+        {
+            IEntityInformationWithPropertiesHolder entity = (IEntityInformationWithPropertiesHolder) owner;
+            persistencyResources.getIndexUpdateScheduler()
+                    .scheduleUpdate(IndexUpdateOperation.remove(entity.getClass(), Arrays.asList(entity.getId())));
+        }
+    }
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DAOFactory.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DAOFactory.java
index 30262abe023100d2b5a989ccc6ee34eeea19a86b..54c9b591c8a2e63a7c1beb9f6fdd6c12b0640c3a 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DAOFactory.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DAOFactory.java
@@ -150,7 +150,7 @@ public final class DAOFactory extends AuthorizationDAOFactory implements IDAOFac
         propertyTypeDAO = new PropertyTypeDAO(sessionFactory);
         vocabularyDAO = new VocabularyDAO(sessionFactory);
         vocabularyTermDAO = new VocabularyTermDAO(sessionFactory);
-        attachmentDAO = new AttachmentDAO(sessionFactory);
+        attachmentDAO = new AttachmentDAO(getPersistencyResources());
         dataSetTypeDAO = new DataSetTypeDAO(sessionFactory);
         fileFormatTypeDAO = new FileFormatTypeDAO(sessionFactory);
         locatorTypeDAO = new LocatorTypeDAO(sessionFactory);