diff --git a/doc/sphinx/source/dm.ds_web_service.api.rst b/doc/sphinx/source/dm.ds_web_service.api.rst
index 00894151f61c41fcdf0a493433e97d844b500773..e42cde42e7303ca4349249891362684d430d6d9d 100644
--- a/doc/sphinx/source/dm.ds_web_service.api.rst
+++ b/doc/sphinx/source/dm.ds_web_service.api.rst
@@ -7,6 +7,6 @@ ExperimentDsApi
 
 .. autoclass:: dm.ds_web_service.api.experimentDsApi.ExperimentDsApi()
     :show-inheritance: 
-    :members:  __init__, getExperimentTypes, getExperiments, getExperimentsByStation
+    :members:  __init__, getExperimentTypes, getExperiments, getExperimentsByStation, getExperimentByName, getExperimentById, addExperiment
 
 
diff --git a/src/python/dm/ds_web_service/api/experimentDsApi.py b/src/python/dm/ds_web_service/api/experimentDsApi.py
index b0e97e893bd35e9220d413f967a836525343958a..0271700fd66f00d3cfc6a3aab2e67f9379093748 100755
--- a/src/python/dm/ds_web_service/api/experimentDsApi.py
+++ b/src/python/dm/ds_web_service/api/experimentDsApi.py
@@ -88,11 +88,13 @@ class ExperimentDsApi(DsRestApi):
 
         :returns: list of Experiment objects
 
+        :raises InvalidRequest: if station name is empty or None
+
         :raises AuthorizationError: in case user is not authorized to manage the given DM station
 
         :raises DmException: in case of any other errors
 
-        >>> experimentList = api.getExperiments()
+        >>> experimentList = api.getExperimentsByStation()
         >>> for experiment in experimentList:
         >>>     print experiment['id'], experiment['name']
         '''
@@ -103,16 +105,52 @@ class ExperimentDsApi(DsRestApi):
         responseData = self.sendSessionRequest(url=url, method='GET')
         return self.toDmObjectList(responseData, Experiment)
 
-    @DsRestApi.execute
+    @DsRestApi.execute2
     def getExperimentByName(self, name):
+        '''
+        Get experiment.
+
+        :param name: experiment name
+        :type name: str
+
+        :returns: Experiment object
+
+        :raises InvalidRequest: if experiment name is empty or None
+
+        :raises AuthorizationError: in case user is not authorized to manage the DM station to which this experiment belongs
+
+        :raises DmException: in case of any other errors
+
+        >>> experiment = api.getExperimentByName('test01')
+        >>> print experiment['id']
+        '''
+
         url = '%s/experimentsByName/%s' % (self.getContextRoot(), name)
         if name is None or not len(name):
             raise InvalidRequest('Experiment name must be provided.')
         responseDict = self.sendSessionRequest(url=url, method='GET')
         return Experiment(responseDict)
 
-    @DsRestApi.execute
+    @DsRestApi.execute2
     def getExperimentById(self, id):
+        '''
+        Get experiment.
+
+        :param id: experiment id
+        :type id: int
+
+        :returns: Experiment object
+
+        :raises InvalidRequest: if experiment id is None
+
+        :raises AuthorizationError: in case user is not authorized to manage the DM station to which this experiment belongs
+
+        :raises DmException: in case of any other errors
+
+        >>> experiment = api.getExperimentById(123)
+        >>> print experiment['name']
+        '''
+
         url = '%s/experimentsById/%s' % (self.getContextRoot(), id)
         if id is None:
             raise InvalidRequest('Experiment id must be provided.')
@@ -146,8 +184,43 @@ class ExperimentDsApi(DsRestApi):
         responseDict = self.sendSessionRequest(url=url, method='PUT')
         return Experiment(responseDict)
 
-    @DsRestApi.execute
+    @DsRestApi.execute2
     def addExperiment(self, name, stationName, typeName, description, startDate, endDate):
+        '''
+        Add experiment.
+
+        :param name: experiment name 
+        :type name: str
+
+        :param stationName: DM station name 
+        :type stationName: str
+
+        :param typeName: experiment type
+        :type typeName: str
+
+        :param description: experiment description
+        :type description: str
+
+        :param startDate: experiment start date
+        :type startDate: str
+
+        :param endDate: experiment end date
+        :type endDate: str
+
+        :returns: Experiment object
+
+        :raises InvalidRequest: if one of the required arguments (experiment name, station name and experiment type) is empty or None
+
+        :raises AuthorizationError: in case user is not authorized to manage the DM station to which this experiment belongs
+
+        :raises ObjectAlreadyExists: if experiment with a given name already exists
+
+        :raises DmException: in case of any other errors
+
+        >>> experiment = api.addExperiment(name='test01', stationName='TEST', typeName='TEST')
+        >>> print experiment['id']
+        '''
+
         url = '%s/experiments' % (self.getContextRoot())
         if not name:
             raise InvalidRequest('Experiment name must be provided.')