diff --git a/Dockerfile b/Dockerfile
index f338d1b5277807f2d688cae0ac28995298f451aa..350a5f006977a167848d9e1a700d97dd381f73be 100755
--- a/Dockerfile
+++ b/Dockerfile
@@ -8,10 +8,11 @@ ENV LC_ALL=C.UTF-8
 ENV LANG=C.UTF-8
 
 RUN apt update && apt upgrade -y
-RUN apt install -y supervisor nginx libgtk-3-dev wget
+RUN apt install -y supervisor nginx libgtk-3-dev
 
 RUN conda install -y conda python=3.8
-RUN conda install -c conda-forge -y graph-tool=2.46
+#RUN conda install -c conda-forge -y graph-tool=2.46
+RUN conda install -c conda-forge -y graph-tool=2.55
 
 RUN pip install gunicorn
 
diff --git a/drugstone/celery.py b/drugstone/celery.py
index 05cf2c76731e6ae05e0617366aeff9fb65cde15d..93dcd265c2ea1697243fdd129a503a9606c5040d 100644
--- a/drugstone/celery.py
+++ b/drugstone/celery.py
@@ -2,7 +2,6 @@ import os
 
 from celery import Celery
 
-
 os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'drugstone.settings')
 
 app = Celery('drugstone')
diff --git a/drugstone/management/commands/import_from_nedrex.py b/drugstone/management/commands/import_from_nedrex.py
index 472bca8b1854f4e16d7d71d54e4088fbe7c1fdf3..a30752380e3408a819dd17c44c123c20e8a017db 100644
--- a/drugstone/management/commands/import_from_nedrex.py
+++ b/drugstone/management/commands/import_from_nedrex.py
@@ -1,3 +1,4 @@
+import json
 from collections import defaultdict
 
 import nedrex
@@ -245,7 +246,8 @@ class NedrexImporter:
             try:
                 drug = self.cache.get_drug_by_drugbank(to_id(edge['sourceDomainId']))
                 protein = self.cache.get_protein_by_uniprot(to_id(edge['targetDomainId']))
-                e = models.ProteinDrugInteraction(pdi_dataset=dataset, drug=drug, protein=protein)
+                actions = json.dumps(edge['actions'])
+                e = models.ProteinDrugInteraction(pdi_dataset=dataset, drug=drug, protein=protein, actions=actions)
                 if not update or e.__hash__() not in existing:
                     bulk.add(e)
                     for source in edge['dataSources']:
diff --git a/drugstone/models.py b/drugstone/models.py
index 3c664322705ea5ab5c211f6ce6beabaebf9e4185..fdbc10f9d30447deda697732b24cdd2fd4492f65 100755
--- a/drugstone/models.py
+++ b/drugstone/models.py
@@ -272,6 +272,7 @@ class ProteinDrugInteraction(models.Model):
         PDIDataset, null=True, on_delete=models.CASCADE, related_name='pdi_dataset_relation')
     protein = models.ForeignKey('Protein', on_delete=models.CASCADE)
     drug = models.ForeignKey('Drug', on_delete=models.CASCADE)
+    actions = models.CharField(max_length=255, default='[]')
 
     class Meta:
         unique_together = ('pdi_dataset', 'protein', 'drug')
@@ -280,13 +281,13 @@ class ProteinDrugInteraction(models.Model):
         return f'{self.pdi_dataset}-{self.protein}-{self.drug}'
 
     def __eq__(self, other):
-        return self.pdi_dataset_id == other.pdi_dataset_id and self.protein_id == other.protein_id and self.drug_id == other.drug_id
+        return self.pdi_dataset_id == other.pdi_dataset_id and self.protein_id == other.protein_id and self.drug_id == other.drug_id and self.actions == other.actions
 
     def __ne__(self, other):
         return not self.__eq__(other)
 
     def __hash__(self):
-        return hash((self.pdi_dataset_id, self.protein_id, self.drug_id))
+        return hash((self.pdi_dataset_id, self.protein_id, self.drug_id, self.actions))
 
 
 class Task(models.Model):
diff --git a/drugstone/serializers.py b/drugstone/serializers.py
index 3805f42ca025ff7e5b7fa071aeee24dfadb5ad78..9398c8129d43f74f22c4ae9fa4f6ea085016870d 100755
--- a/drugstone/serializers.py
+++ b/drugstone/serializers.py
@@ -157,6 +157,7 @@ class ProteinDrugInteractionSerializer(serializers.ModelSerializer):
     dataset = serializers.SerializerMethodField()
     protein = serializers.SerializerMethodField()
     drug = serializers.SerializerMethodField()
+    actions = serializers.SerializerMethodField()
 
     def get_dataset(self, obj):
         return obj.pdi_dataset.name
@@ -167,9 +168,14 @@ class ProteinDrugInteractionSerializer(serializers.ModelSerializer):
     def get_drug(self, obj):
         return f'dr{obj.drug.id}'
 
+    def get_actions(self, obj):
+        if obj.actions:
+            return json.loads(obj.actions)
+        return []
+
     class Meta:
         model = ProteinDrugInteraction
-        fields = ['dataset', 'protein', 'drug']
+        fields = ['dataset', 'protein', 'drug', 'actions']
 
 
 class ProteinDisorderAssociationSerializer(serializers.ModelSerializer):
diff --git a/drugstone/views.py b/drugstone/views.py
index 89081abd4ba44e55fc269652a7b7c07ea77a7cce..16e515f8e0bb3430c76cb46d961d6db7a8d36417 100755
--- a/drugstone/views.py
+++ b/drugstone/views.py
@@ -423,6 +423,27 @@ def result_view(request) -> Response:
 
     nodes_mapped, id_key = query_proteins_by_identifier(edge_endpoint_ids, identifier)
 
+    pdi_config = result.get("parameters").get('pdi_dataset')
+
+    if pdi_config:
+        pdi_dataset = get_pdi_ds(pdi_config.get('name', DEFAULTS['pdi']), pdi_config.get('licenced', False))
+        for edge in result['network']['edges']:
+            if (edge['from'][:2] == 'dr'):
+                drug = edge['from']
+                edge['from'] = edge['to']
+                edge['to'] = drug
+            if (edge['to'][:2] == 'dr'):
+                drug_id = int(edge['to'][2:])
+                pdi_object = ProteinDrugInteraction.objects.filter(
+                    protein_id__in={int(p[1:]) for p in node_attributes['details'][edge['from']]['drugstone_id']},
+                    drug_id=drug_id, pdi_dataset_id=pdi_dataset.id)
+                actions = set()
+                for pdi in pdi_object:
+                    if pdi.actions:
+                        for action in json.loads(pdi.actions):
+                            actions.add(action)
+                edge['actions'] = list(actions)
+
     if 'autofill_edges' in parameters['config'] and parameters['config']['autofill_edges']:
         prots = list(filter(lambda n: n['drugstone_type'] == 'protein',
                             filter(lambda n: 'drugstone_type' in n and node_name_attribute in n,
@@ -704,11 +725,13 @@ def save_selection(request) -> Response:
     config = request.data.get("config")
     network = request.data.get("network")
 
-    Network.objects.create(id=token_str, config=json.dumps(config), nodes=json.dumps(network["nodes"]), edges=json.dumps(network["edges"]))
+    Network.objects.create(id=token_str, config=json.dumps(config), nodes=json.dumps(network["nodes"]),
+                           edges=json.dumps(network["edges"]))
     return Response({
         'token': token_str,
     })
 
+
 @api_view(['GET'])
 def get_view(request) -> Response:
     token = request.query_params.get('token')
@@ -726,7 +749,7 @@ def get_view(request) -> Response:
 @api_view(['POST'])
 def get_view_infos(request) -> Response:
     tokens = request.data.get('tokens')
-    networks = Network.objects.filter(id__in = tokens)
+    networks = Network.objects.filter(id__in=tokens)
     return Response([{
         'token': n.id,
         'created_at': n.created_at,
diff --git a/requirements.txt b/requirements.txt
index 9763ecdf34faffe2530bb5df3b025b3f63d4bf58..fd90bc86ff8cab605ab20eb1e12c1fe272e42b87 100755
--- a/requirements.txt
+++ b/requirements.txt
@@ -5,7 +5,7 @@ chardet==3.0.4
 click==8.1.3
 cryptography==39.0.1
 decorator==4.4.2
-Django==3.2.18
+Django==3.2.19
 django-cors-headers==3.4.0
 django-redis==4.11.0
 django-rq-dashboard==0.3.3
@@ -19,7 +19,7 @@ mccabe==0.6.1
 networkx==3.1
 numpy==1.23.5
 pandas==1.3.5
-pillow==9.3.0
+pillow==9.4.0
 psycopg2-binary==2.8.6
 pycodestyle==2.5.0
 pyflakes==2.1.1
@@ -30,5 +30,5 @@ requests==2.28.1
 rq==1.11.1
 six==1.15.0
 sqlalchemy==1.3.23
-sqlparse==0.4.2
+sqlparse==0.4.4
 urllib3==1.26.12