Index: branches/VRP/HeuristicLab.Problems.VehicleRouting.Views/3.4/CVRPPDTWView.cs
===================================================================
--- branches/VRP/HeuristicLab.Problems.VehicleRouting.Views/3.4/CVRPPDTWView.cs	(revision 6714)
+++ branches/VRP/HeuristicLab.Problems.VehicleRouting.Views/3.4/CVRPPDTWView.cs	(revision 6715)
@@ -23,4 +23,13 @@
     }
 
+    private bool drawFlow = false;
+
+    protected override void pictureBox_MouseClick(object sender, System.Windows.Forms.MouseEventArgs e) {
+      if (e.Button == System.Windows.Forms.MouseButtons.Right) {
+        drawFlow = !drawFlow;
+        GenerateImage();
+      }      
+    }
+
     protected override void DrawVisualization(Bitmap bitmap) {
       DoubleMatrix coordinates = Content.Coordinates;
@@ -39,4 +48,8 @@
                     new Pen(Color.FromArgb(146,203,217)), new Pen(Color.FromArgb(101,19,75)), new Pen(Color.FromArgb(198,20,237)), new Pen(Color.FromArgb(185,185,185)),
                     new Pen(Color.FromArgb(179,32,32)), new Pen(Color.FromArgb(18,119,115)), new Pen(Color.FromArgb(104,158,239)), new Pen(Color.Black)};
+
+      Pen flowPen = new Pen(Brushes.Red, 3);
+      flowPen.EndCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor;
+      flowPen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot;
 
       if ((coordinates != null) && (coordinates.Rows > 0) && (coordinates.Columns == 2)) {
@@ -88,5 +101,5 @@
                     customerBrush = Brushes.Orange;
                     customerPen = Pens.Orange;
-                    
+
                   } else if (t > dueTime[location]) {
                     customerBrush = Brushes.Red;
@@ -108,10 +121,18 @@
               }
 
-              graphics.DrawPolygon(pens[((currentTour >= pens.Length) ? (pens.Length - 1) : (currentTour))], tourPoints);
+              if (!drawFlow)
+                graphics.DrawPolygon(pens[((currentTour >= pens.Length) ? (pens.Length - 1) : (currentTour))], tourPoints);
 
               for (int i = 0; i < tour.Stops.Count; i++) {
-                if(validPickupDelivery[i])
+                if (validPickupDelivery[i]) {
                   graphics.FillRectangle(customerBrushes[i], tourPoints[i + 1].X - 3, tourPoints[i + 1].Y - 3, 6, 6);
-                else
+
+                  if (demand[tour.Stops[i]] < 0 && drawFlow) {
+                    int location = pickupDeliveryLocation[tour.Stops[i]];
+                    int source = tour.Stops.IndexOf(location);
+
+                    graphics.DrawLine(flowPen, tourPoints[source + 1], tourPoints[i + 1]);
+                  }
+                } else
                   graphics.DrawRectangle(customerPens[i], tourPoints[i + 1].X - 3, tourPoints[i + 1].Y - 3, 6, 6);
               }
@@ -122,16 +143,18 @@
             }
           } else {
-            Point locationPoint;
-            //just draw customers
-            for (int i = 1; i < coordinates.Rows; i++) {
-              locationPoint = new Point(border + ((int)((coordinates[i, 0] - xMin) * xStep)),
-                              bitmap.Height - (border + ((int)((coordinates[i, 1] - yMin) * yStep))));
+            {
+              Point locationPoint;
+              //just draw customers
+              for (int i = 1; i < coordinates.Rows; i++) {
+                locationPoint = new Point(border + ((int)((coordinates[i, 0] - xMin) * xStep)),
+                                bitmap.Height - (border + ((int)((coordinates[i, 1] - yMin) * yStep))));
 
-              graphics.FillRectangle(Brushes.Black, locationPoint.X - 3, locationPoint.Y - 3, 6, 6);
+                graphics.FillRectangle(Brushes.Black, locationPoint.X - 3, locationPoint.Y - 3, 6, 6);
+              }
+
+              locationPoint = new Point(border + ((int)((coordinates[0, 0] - xMin) * xStep)),
+                                bitmap.Height - (border + ((int)((coordinates[0, 1] - yMin) * yStep))));
+              graphics.FillEllipse(Brushes.Blue, locationPoint.X - 5, locationPoint.Y - 5, 10, 10);
             }
-
-            locationPoint = new Point(border + ((int)((coordinates[0, 0] - xMin) * xStep)),
-                              bitmap.Height - (border + ((int)((coordinates[0, 1] - yMin) * yStep))));
-            graphics.FillEllipse(Brushes.Blue, locationPoint.X - 5, locationPoint.Y - 5, 10, 10);
           }
         }
@@ -140,4 +163,6 @@
       for (int i = 0; i < pens.Length; i++)
         pens[i].Dispose();
+
+      flowPen.Dispose();
     }
   }
Index: branches/VRP/HeuristicLab.Problems.VehicleRouting.Views/3.4/VRPProblemInstanceView.Designer.cs
===================================================================
--- branches/VRP/HeuristicLab.Problems.VehicleRouting.Views/3.4/VRPProblemInstanceView.Designer.cs	(revision 6714)
+++ branches/VRP/HeuristicLab.Problems.VehicleRouting.Views/3.4/VRPProblemInstanceView.Designer.cs	(revision 6715)
@@ -39,4 +39,5 @@
       this.pictureBox.TabStop = false;
       this.pictureBox.SizeChanged += new System.EventHandler(this.pictureBox_SizeChanged);
+      this.pictureBox.MouseClick += new System.Windows.Forms.MouseEventHandler(pictureBox_MouseClick);
       // 
       // VRPProblemInstanceView
@@ -50,5 +51,4 @@
 
     }
-
     #endregion
 
Index: branches/VRP/HeuristicLab.Problems.VehicleRouting.Views/3.4/VRPProblemInstanceView.cs
===================================================================
--- branches/VRP/HeuristicLab.Problems.VehicleRouting.Views/3.4/VRPProblemInstanceView.cs	(revision 6714)
+++ branches/VRP/HeuristicLab.Problems.VehicleRouting.Views/3.4/VRPProblemInstanceView.cs	(revision 6715)
@@ -69,7 +69,10 @@
     }
 
+    protected virtual void pictureBox_MouseClick(object sender, System.Windows.Forms.MouseEventArgs e) {
+    }
+
     protected abstract void DrawVisualization(Bitmap bitmap);
 
-    private void GenerateImage() {
+    protected void GenerateImage() {
       if ((pictureBox.Width > 0) && (pictureBox.Height > 0)) {
         if (Content == null) {
