diff --git a/osm_pla/server/server.py b/osm_pla/server/server.py
index 674e9b6..a1b7b64 100644
--- a/osm_pla/server/server.py
+++ b/osm_pla/server/server.py
@@ -18,6 +18,7 @@
 
 import asyncio
 import logging
+import itertools
 from pathlib import Path
 
 import yaml
@@ -152,6 +153,21 @@
             data = yaml.safe_load_all(pil_fd)
             return next(data)
 
+    def _create_vnf_id_maps(self, nsd):
+        """
+        map identifier for 'member-vnf-index' in nsd to syntax that is safe for mzn
+
+         return tuples with mappings {<adjusted id>: <original id>} and {<original id>: <adjusted id>}
+        """
+        next_idx = itertools.count()
+        member_vnf_index2mzn = {e['member-vnf-index']: 'VNF' + str(next(next_idx)) for e in
+                                nsd['constituent-vnfd']}
+
+        # reverse the name map dictionary, used when the placement result is remapped
+        mzn_name2member_vnf_index = {v: k for k, v in member_vnf_index2mzn.items()}
+
+        return member_vnf_index2mzn, mzn_name2member_vnf_index
+
     async def get_placement(self, nslcmop_id):
         """
         - Collects and prepares placement information.
@@ -166,7 +182,14 @@
         try:
             nslcmop = self._get_nslcmop(nslcmop_id)
             nsd = self._get_nsd(nslcmop['operationParams']['nsdId'])
-            self.log.info("nsd: {}".format(nsd))
+            member_vnf_index2mzn, mzn2member_vnf_index = self._create_vnf_id_maps(nsd)
+            # adjust vnf identifiers
+            for e in nsd['constituent-vnfd']:
+                e['member-vnf-index'] = member_vnf_index2mzn[e['member-vnf-index']]
+            for vld in nsd['vld']:
+                for cp_ref in vld['vnfd-connection-point-ref']:
+                    cp_ref['member-vnf-index-ref'] = member_vnf_index2mzn[cp_ref['member-vnf-index-ref']]
+            self.log.info("adjusted nsd: {}".format(nsd))
             projects = self._get_projects()
             self.log.info("projects: {}".format(projects))
             nslcmop_project = nslcmop['_admin']['projects_read'][0]
@@ -176,8 +199,11 @@
             vims_information = {_['name']: _['_id'] for _ in vim_accounts_data}
             price_list = self._get_vnf_price_list(Server.vnf_price_list_file, projects[nslcmop_project])
             pil_info = self._get_pil_info(Server.pil_price_list_file)
-            pinning = nslcmop['operationParams'].get('vnf')
-            self.log.info("pinning: {}".format(pinning))
+            pinnings = nslcmop['operationParams'].get('vnf')
+            # remap member-vnf-index values according to id map
+            for pinning in pinnings:
+                pinning['member-vnf-index'] = member_vnf_index2mzn[pinning['member-vnf-index']]
+            self.log.info("pinnings: {}".format(pinnings))
             order_constraints = nslcmop['operationParams'].get('placement-constraints')
             self.log.info("order constraints: {}".format(order_constraints))
 
@@ -185,7 +211,7 @@
                                           price_list,
                                           nsd,
                                           pil_info,
-                                          pinning, order_constraints).create_ns_placement_data()
+                                          pinnings, order_constraints).create_ns_placement_data()
 
             vnf_placement = MznPlacementConductor(self.log).do_placement_computation(nspd)
 
@@ -194,6 +220,9 @@
             self.log.exception("PLA fault. Exception: {}".format(e))
             vnf_placement = []
         finally:
+            # remap names in vnf_placement
+            for e in vnf_placement:
+                e['member-vnf-index'] = mzn2member_vnf_index[e['member-vnf-index']]
             await self.msgBus.aiowrite("pla", "placement",
                                        {'placement': {'vnf': vnf_placement, 'nslcmopId': nslcmop_id}})
 
