diff --git a/master/bt5/slapos_slap_tool/TestTemplateItem/testSlapOSSlapTool.py b/master/bt5/slapos_slap_tool/TestTemplateItem/testSlapOSSlapTool.py
index 8da277858a55835c4662509136aaef766404da57..0101619e4aba299c2faccceebf9c1c1615f2b5d7 100644
--- a/master/bt5/slapos_slap_tool/TestTemplateItem/testSlapOSSlapTool.py
+++ b/master/bt5/slapos_slap_tool/TestTemplateItem/testSlapOSSlapTool.py
@@ -2167,6 +2167,84 @@ class TestSlapOSSlapToolPersonAccess(TestSlapOSSlapToolMixin):
       if os.path.exists(self.instance_request_simulator):
         os.unlink(self.instance_request_simulator)
 
+  def test_request_allocated_instance(self):
+    self.tic()
+    self.person.edit(
+      default_email_coordinate_text="%s@example.org" % self.person.getReference(),
+      career_role='member',
+    )
+    self._makeComplexComputer(person=self.person)
+    self.start_requested_software_instance.updateLocalRolesOnSecurityGroups()
+    self.tic()
+    self.login(self.person_reference)
+    response = self.portal_slap.requestComputerPartition(
+      software_release=self.start_requested_software_instance.getUrlString(),
+      software_type=self.start_requested_software_instance.getSourceReference(),
+      partition_reference=self.start_requested_software_instance.getTitle(),
+      partition_parameter_xml='<marshal><dictionary id="i2"/></marshal>',
+      filter_xml='<marshal><dictionary id="i2"/></marshal>',
+      state='<marshal><string>started</string></marshal>',
+      shared_xml='<marshal><bool>0</bool></marshal>',
+      )
+    self.assertEqual(type(response), str)
+    # check returned XML
+    xml_fp = StringIO.StringIO()
+
+    xml.dom.ext.PrettyPrint(xml.dom.ext.reader.Sax.FromXml(response),
+        stream=xml_fp)
+    xml_fp.seek(0)
+    got_xml = xml_fp.read()
+    expected_xml = """\
+<?xml version='1.0' encoding='UTF-8'?>
+<marshal>
+  <object id='i2' module='slapos.slap.slap' class='SoftwareInstance'>
+    <tuple/>
+    <dictionary id='i3'>
+      <string>_connection_dict</string>
+      <dictionary id='i4'/>
+      <string>_instance_guid</string>
+      <string>%(instance_guid)s</string>
+      <string>_parameter_dict</string>
+      <dictionary id='i5'/>
+      <string>_requested_state</string>
+      <string>%(state)s</string>
+      <string>ip_list</string>
+      <list id='i6'>
+        <tuple>
+          <string/>
+          <string>%(ip)s</string>
+        </tuple>
+      </list>
+      <string>slap_computer_id</string>
+      <string>%(computer_id)s</string>
+      <string>slap_computer_partition_id</string>
+      <string>%(partition_id)s</string>
+      <string>slap_software_release_url</string>
+      <string>%(url_string)s</string>
+      <string>slap_software_type</string>
+      <string>%(type)s</string>
+      <string>slave_instance_list</string>
+      <list id='i7'/>
+      <string>timestamp</string>
+      <string>%(timestamp)s</string>
+    </dictionary>
+  </object>
+</marshal>
+""" % dict(
+    instance_guid=self.start_requested_software_instance.getReference(),
+    state="started",
+    url_string=self.start_requested_software_instance.getUrlString(),
+    type=self.start_requested_software_instance.getSourceReference(),
+    timestamp=int(self.start_requested_software_instance.getModificationDate()),
+    computer_id=self.computer_id,
+    partition_id=self.start_requested_software_instance.getAggregateId(),
+    ip=self.start_requested_software_instance.getAggregateValue()\
+               .getDefaultNetworkAddressIpAddress(),
+  )
+    self.assertEqual(expected_xml, got_xml,
+      '\n'.join([q for q in difflib.unified_diff(expected_xml.split('\n'),
+                                                 got_xml.split('\n'))]))
+
   def assertSupplySimulator(self, args, kwargs):
     stored = eval(open(self.computer_supply_simulator).read())
     # do the same translation magic as in workflow
diff --git a/master/bt5/slapos_slap_tool/bt/revision b/master/bt5/slapos_slap_tool/bt/revision
index cabf43b5ddf813cbe89697372a21373f14921884..410b14d2ce6f958c13adcb30807e8673074c49d9 100644
--- a/master/bt5/slapos_slap_tool/bt/revision
+++ b/master/bt5/slapos_slap_tool/bt/revision
@@ -1 +1 @@
-24
\ No newline at end of file
+25
\ No newline at end of file
diff --git a/master/product/Vifib/Tool/SlapTool.py b/master/product/Vifib/Tool/SlapTool.py
index 47db793738618127d9c7230dcf75e37954d22db0..dede901b6598ff068e9fc83225e912ffc4a7b1c8 100644
--- a/master/product/Vifib/Tool/SlapTool.py
+++ b/master/product/Vifib/Tool/SlapTool.py
@@ -654,7 +654,6 @@ class SlapTool(BaseTool):
            computer_partition_document.getRelativeUrl())
 
     if software_instance is not None:
-      slap_partition._instance_guid = software_instance.getReference()
       # trick client side, that data has been synchronised already for given
       # document
       slap_partition._synced = True
@@ -677,6 +676,7 @@ class SlapTool(BaseTool):
         parameter_dict.pop('xml'))
       slap_partition._connection_dict = self._instanceXmlToDict(
         parameter_dict.pop('connection_xml'))
+      slap_partition._instance_guid = parameter_dict.pop('instance_guid')
       for slave_instance_dict in parameter_dict.get("slave_instance_list", []):
         if slave_instance_dict.has_key("connection_xml"):
           slave_instance_dict.update(self._instanceXmlToDict(
@@ -788,7 +788,6 @@ class SlapTool(BaseTool):
            computer_partition_document.getRelativeUrl())
 
     if software_instance is not None:
-      slap_partition._instance_guid = software_instance.getReference()
       state = software_instance.getSlapState()
       if state == "stop_requested":
         slap_partition._requested_state = 'stopped'
@@ -808,6 +807,7 @@ class SlapTool(BaseTool):
         parameter_dict.pop('xml'))
       slap_partition._connection_dict = self._instanceXmlToDict(
         parameter_dict.pop('connection_xml'))
+      slap_partition._instance_guid = parameter_dict.pop('instance_guid')
       for slave_instance_dict in parameter_dict.get("slave_instance_list", []):
         if slave_instance_dict.has_key("connection_xml"):
           slave_instance_dict.update(self._instanceXmlToDict(
@@ -1176,10 +1176,13 @@ class SlapTool(BaseTool):
           parameter_dict.pop('xml'))
         connection_xml = self._instanceXmlToDict(
           parameter_dict.pop('connection_xml'))
+        instance_guid = parameter_dict.pop('instance_guid')
 
         software_instance = SoftwareInstance(**parameter_dict)
         software_instance._parameter_dict = xml
         software_instance._connection_dict = connection_xml
+        software_instance._requested_state = state
+        software_instance._instance_guid = instance_guid
         return xml_marshaller.xml_marshaller.dumps(software_instance)
 
   ####################################################
@@ -1320,6 +1323,7 @@ class SlapTool(BaseTool):
           if (newtimestamp > timestamp):                                            
             timestamp = newtimestamp
     return {
+      'instance_guid': software_instance.getReference(),
       'xml': software_instance.getTextContent(),
       'connection_xml': software_instance.getConnectionXml(),
       'slap_computer_id': computer_partition.getParentValue().getReference(),