diff --git a/python/views/activity_diagram.py b/python/views/activity_diagram.py
index 7bded9996d36e919368e9bd832b88d85ac158153..4d2c07112363c6cda97fd49d570728ef20658435 100644
--- a/python/views/activity_diagram.py
+++ b/python/views/activity_diagram.py
@@ -6,8 +6,8 @@ from PyQt5.QtWidgets import QGraphicsItem
 from next_graphics_index import next_graphics_index
 
 # see also typical settings_manager values
-TITLE_Y = 15
-TITLE_SPACING = 25
+TITLE_Y = 5
+TITLE_Y_SPACING = 30
 ACTIVITY_W = 127
 ACTIVITY_H = 17
 DECISION_W = 14
@@ -18,10 +18,15 @@ END_D2 = 3
 H_SPACING = 165
 V_SPACING = 55
 
+def _text_width(text):
+    fm = QFontMetrics(QFont()) # use default font since we do not set it
+    width = fm.horizontalAdvance(text)
+    return width
+
 def _xy(json_node):
     # node center point
-    x = json_node[2] * H_SPACING
-    y = json_node[3] * V_SPACING + TITLE_SPACING
+    x = json_node[2] * H_SPACING + ACTIVITY_W/2
+    y = json_node[3] * V_SPACING + TITLE_Y_SPACING
     return x, y
 
 def _xy_in(json_node):
@@ -109,6 +114,9 @@ class ActivityDiagram(QGraphicsItem):
         self.nodes = data[1]
         edges = data[2]
 
+        # title width
+        self.title_width = _text_width(self.title)
+
         # indexed nodes for edges
         indexed_nodes = dict()
 
@@ -126,11 +134,14 @@ class ActivityDiagram(QGraphicsItem):
                            indexed_nodes[json_edge[1]],
                            self.painter_path)
 
-        # rectangle for mouse sense
+        # rectangle, adjusted for title
         self.bounding_path = QPainterPath()
-        bounding_rect = self.painter_path.boundingRect()
-        bounding_rect.setTop(0)
-        self.bounding_path.addRect(bounding_rect)
+        self.bounding_rect = self.painter_path.boundingRect()
+        self.bounding_rect.adjust(0, -TITLE_Y_SPACING, 0, 0)
+        w = _text_width(self.title)
+        if w > self.bounding_rect.width():
+            self.bounding_rect.adjust(0, 0, w - self.bounding_rect.width(), 0)
+        self.bounding_path.addRect(self.bounding_rect)
 
     def json_data(self):
         self._json_data["x"] = self.x()
@@ -152,9 +163,10 @@ class ActivityDiagram(QGraphicsItem):
 
         w = ACTIVITY_W
         h = ACTIVITY_H
+        title_w = self.bounding_rect.width()
 
         # title
-        painter.drawText(QRectF(0, TITLE_Y, w, h), Qt.AlignCenter,
+        painter.drawText(QRectF(0, TITLE_Y, title_w, h), Qt.AlignCenter,
                          self.title)
 
         # painter_path of nodes and edges