   (let [adds (modify-ops ModificationType/ADD (modifications :add))
         deletes (modify-ops ModificationType/DELETE (modifications :delete))
         replacements (modify-ops ModificationType/REPLACE
-                                 (modifications :replace))]
-    (ModifyRequest. dn (into-array (concat adds deletes replacements)))))
-
+                                 (modifications :replace))
+        all (concat adds deletes replacements)]
+    (doto (ModifyRequest. dn (into-array all))
+      (add-request-controls modifications))))
 
 (defn- next-entry
   "Attempts to get the next entry from an LDAPEntrySource object"

            LDAPEntrySource
            EntrySourceException
            SearchScope])
  (:import [com.unboundid.util.ssl
            SSLUtil
            TrustAllTrustManager

         :attribute-e [value1 value2]}
      :replace
        {:attibute-d value
         :attribute-e [value1 value2]}
      :pre-read
        #{:attribute-a :attribute-b}
      :post-read
        #{:attribute-c :attribute-d}}

Where :add adds an attribute value, :delete deletes an attribute value and :replace replaces the set of values for the attribute with the ones specified. The entries :pre-read and :post-read specify attributes that have be read and returned either before or after the modifications have taken place. 
"
  [connection dn modifications]
  (let [modify-obj (get-modify-request dn modifications)]
