Index: branches/VRP/HeuristicLab.Problems.VehicleRouting.Views/3.3/VehicleRoutingProblemView.Designer.cs
===================================================================
--- branches/VRP/HeuristicLab.Problems.VehicleRouting.Views/3.3/VehicleRoutingProblemView.Designer.cs	(revision 4312)
+++ branches/VRP/HeuristicLab.Problems.VehicleRouting.Views/3.3/VehicleRoutingProblemView.Designer.cs	(revision 4315)
@@ -31,4 +31,5 @@
       this.vrpSolutionView = new HeuristicLab.Problems.VehicleRouting.Views.VRPSolutionView();
       this.importButton2 = new System.Windows.Forms.Button();
+      this.importButton3 = new System.Windows.Forms.Button();
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
       this.tabControl1.SuspendLayout();
@@ -61,8 +62,8 @@
       this.tabControl1.Controls.Add(this.tabPage1);
       this.tabControl1.Controls.Add(this.tabPage2);
-      this.tabControl1.Location = new System.Drawing.Point(0, 109);
+      this.tabControl1.Location = new System.Drawing.Point(0, 139);
       this.tabControl1.Name = "tabControl1";
       this.tabControl1.SelectedIndex = 0;
-      this.tabControl1.Size = new System.Drawing.Size(490, 313);
+      this.tabControl1.Size = new System.Drawing.Size(490, 283);
       this.tabControl1.TabIndex = 6;
       // 
@@ -73,5 +74,5 @@
       this.tabPage1.Name = "tabPage1";
       this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
-      this.tabPage1.Size = new System.Drawing.Size(482, 287);
+      this.tabPage1.Size = new System.Drawing.Size(482, 257);
       this.tabPage1.TabIndex = 0;
       this.tabPage1.Text = "Parameters";
@@ -86,5 +87,5 @@
       this.parameterCollectionView.Name = "parameterCollectionView";
       this.parameterCollectionView.ReadOnly = false;
-      this.parameterCollectionView.Size = new System.Drawing.Size(476, 281);
+      this.parameterCollectionView.Size = new System.Drawing.Size(476, 251);
       this.parameterCollectionView.TabIndex = 1;
       // 
@@ -123,7 +124,20 @@
       this.importButton2.Click += new System.EventHandler(this.importButton2_Click);
       // 
+      // importButton3
+      // 
+      this.importButton3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.importButton3.Location = new System.Drawing.Point(0, 110);
+      this.importButton3.Name = "importButton3";
+      this.importButton3.Size = new System.Drawing.Size(490, 23);
+      this.importButton3.TabIndex = 8;
+      this.importButton3.Text = "Import from ORLib";
+      this.importButton3.UseVisualStyleBackColor = true;
+      this.importButton3.Click += new System.EventHandler(this.importButton3_Click);
+      // 
       // VehicleRoutingProblemView
       // 
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.Controls.Add(this.importButton3);
       this.Controls.Add(this.importButton2);
       this.Controls.Add(this.importButton);
@@ -138,4 +152,5 @@
       this.Controls.SetChildIndex(this.descriptionTextBox, 0);
       this.Controls.SetChildIndex(this.importButton2, 0);
+      this.Controls.SetChildIndex(this.importButton3, 0);
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
       this.tabControl1.ResumeLayout(false);
@@ -156,4 +171,5 @@
     private VRPSolutionView vrpSolutionView;
     private System.Windows.Forms.Button importButton2;
+    private System.Windows.Forms.Button importButton3;
   }
 }
Index: branches/VRP/HeuristicLab.Problems.VehicleRouting.Views/3.3/VehicleRoutingProblemView.cs
===================================================================
--- branches/VRP/HeuristicLab.Problems.VehicleRouting.Views/3.3/VehicleRoutingProblemView.cs	(revision 4312)
+++ branches/VRP/HeuristicLab.Problems.VehicleRouting.Views/3.3/VehicleRoutingProblemView.cs	(revision 4315)
@@ -69,5 +69,5 @@
     private void importButton_Click(object sender, EventArgs e) {
       OpenFileDialog dialog = new OpenFileDialog();
-      dialog.DefaultExt = "txt";
+      dialog.Filter = "Solomon files (*.txt)|*.txt";
 
       if (dialog.ShowDialog() == DialogResult.OK) {
@@ -78,5 +78,5 @@
     private void importButton2_Click(object sender, EventArgs e) {
       OpenFileDialog dialog = new OpenFileDialog();
-      dialog.DefaultExt = "vrp";
+      dialog.DefaultExt = "TSPLib files (*.vrp)|*.vrp";
 
       if (dialog.ShowDialog() == DialogResult.OK) {
@@ -85,7 +85,16 @@
     }
 
+    private void importButton3_Click(object sender, EventArgs e) {
+      OpenFileDialog dialog = new OpenFileDialog();
+      dialog.DefaultExt = "ORLib files (*.txt)|*.txt";
+
+      if (dialog.ShowDialog() == DialogResult.OK) {
+        Content.ImportFromORLib(dialog.FileName);
+      }
+    }  
+
     private void CoordinatesParameter_ValueChanged(object sender, EventArgs e) {
       vrpSolutionView.Content.Coordinates = Content.Coordinates;
-    }    
+    }  
   }
 }
Index: branches/VRP/HeuristicLab.Problems.VehicleRouting/3.3/HeuristicLab.Problems.VehicleRouting-3.3.csproj
===================================================================
--- branches/VRP/HeuristicLab.Problems.VehicleRouting/3.3/HeuristicLab.Problems.VehicleRouting-3.3.csproj	(revision 4312)
+++ branches/VRP/HeuristicLab.Problems.VehicleRouting/3.3/HeuristicLab.Problems.VehicleRouting-3.3.csproj	(revision 4315)
@@ -179,4 +179,5 @@
     <Compile Include="Encodings\Zhu\ZhuEncoding.cs" />
     <Compile Include="Interfaces\IVRPMoveMaker.cs" />
+    <Compile Include="ORLIBParser.cs" />
     <Compile Include="TSPLIBParser.cs" />
     <Compile Include="VRPUtilities.cs" />
Index: branches/VRP/HeuristicLab.Problems.VehicleRouting/3.3/ORLIBParser.cs
===================================================================
--- branches/VRP/HeuristicLab.Problems.VehicleRouting/3.3/ORLIBParser.cs	(revision 4315)
+++ branches/VRP/HeuristicLab.Problems.VehicleRouting/3.3/ORLIBParser.cs	(revision 4315)
@@ -0,0 +1,118 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.IO;
+
+namespace HeuristicLab.Problems.VehicleRouting {
+  class ORLIBParser {
+    private StreamReader source;
+    
+    private string name;
+    public string Name {
+      get {
+        return name;
+      }
+    }
+
+    private double[,] vertices;
+    public double[,] Vertices {
+      get { 
+        return vertices; 
+      }
+    }
+
+    private double capacity;
+    public double Capacity {
+      get {
+        return capacity;
+      }
+    }
+
+    private double maxRouteTime;
+    public double MaxRouteTime {
+      get {
+        return maxRouteTime;
+      }
+    }
+
+    private double serviceTime;
+    public double ServiceTime {
+      get {
+        return serviceTime;
+      }
+    }
+
+    private double[] demands;
+    public double[] Demands {
+      get {
+        return demands;
+      }
+    }
+
+    public ORLIBParser(String path) {
+      source = null;
+      
+      name = path;
+      vertices = null;
+      capacity = -1;
+      maxRouteTime = -1;
+      serviceTime = -1;
+      demands = null;
+    }
+
+    public void Parse() {
+      using (source = new StreamReader(name)) {
+        //Read header
+        string line = source.ReadLine();
+        string[] tokens = line.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
+
+        int customers = int.Parse(tokens[0]);
+        demands = new double[customers + 1];
+        demands[0] = 0;
+        vertices = new double[customers + 1, 2];
+
+        capacity = int.Parse(tokens[1]);
+        maxRouteTime = int.Parse(tokens[2]);
+        serviceTime = int.Parse(tokens[3]);
+
+        //Read depot
+        line = source.ReadLine();
+        tokens = line.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
+        vertices[0, 0] = double.Parse(tokens[0]);
+        vertices[0, 1] = double.Parse(tokens[1]);
+
+        for (int i = 0; i < customers; i++) {
+          line = source.ReadLine();
+          tokens = line.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
+          vertices[i + 1, 0] = double.Parse(tokens[0]);
+          vertices[i + 1, 1] = double.Parse(tokens[1]);
+          demands[i + 1] = double.Parse(tokens[2]);
+        }
+      }
+
+      source = null;
+    }
+  }
+}
Index: branches/VRP/HeuristicLab.Problems.VehicleRouting/3.3/VehicleRoutingProblem.cs
===================================================================
--- branches/VRP/HeuristicLab.Problems.VehicleRouting/3.3/VehicleRoutingProblem.cs	(revision 4312)
+++ branches/VRP/HeuristicLab.Problems.VehicleRouting/3.3/VehicleRoutingProblem.cs	(revision 4315)
@@ -483,4 +483,32 @@
     }
 
+    public void ImportFromORLib(string orFileName) {
+      ORLIBParser parser = new ORLIBParser(orFileName);
+      parser.Parse();
+
+      this.Name = parser.Name;
+      int problemSize = parser.Demands.Length;
+
+      Coordinates = new DoubleMatrix(parser.Vertices);
+      Vehicles.Value = problemSize - 1;
+      Capacity.Value = parser.Capacity;
+      Demand = new DoubleArray(parser.Demands);
+      ReadyTime = new DoubleArray(problemSize);
+      DueTime = new DoubleArray(problemSize);
+      ServiceTime = new DoubleArray(problemSize);
+
+      ReadyTime[0] = 0;
+      DueTime[0] = parser.MaxRouteTime;
+      ServiceTime[0] = 0;
+
+      for (int i = 1; i < problemSize; i++) {
+        ReadyTime[i] = 0;
+        DueTime[i] = int.MaxValue;
+        ServiceTime[i] = parser.ServiceTime;
+      }
+
+      OnReset();
+    }
+
     private void InitializeRandomVRPInstance() {
       System.Random rand = new System.Random();
