Index: branches/CodeEditor/HeuristicLab.CodeEditor/3.4/CodeEditor.cs
===================================================================
--- branches/CodeEditor/HeuristicLab.CodeEditor/3.4/CodeEditor.cs	(revision 11765)
+++ branches/CodeEditor/HeuristicLab.CodeEditor/3.4/CodeEditor.cs	(revision 11785)
@@ -209,5 +209,5 @@
       var moveLinesUpCommand = new Input.RoutedCommand();
       moveLinesUpCommand.InputGestures.Add(new Input.KeyGesture(Input.Key.Up, Input.ModifierKeys.Alt));
-      var moveLinesUpCommandBinding = new Input.CommandBinding(moveLinesUpCommand, (sender, args) => MoveLines(MovementDirection.Up));
+      var moveLinesUpCommandBinding = new Input.CommandBinding(moveLinesUpCommand, (sender, args) => ExecuteMoveLinesCommand(MovementDirection.Up));
       TextEditor.CommandBindings.Add(moveLinesUpCommandBinding);
       #endregion
@@ -216,6 +216,13 @@
       var moveLinesDownCommand = new Input.RoutedCommand();
       moveLinesDownCommand.InputGestures.Add(new Input.KeyGesture(Input.Key.Down, Input.ModifierKeys.Alt));
-      var moveLinesDownCommandBinding = new Input.CommandBinding(moveLinesDownCommand, (sender, args) => MoveLines(MovementDirection.Down));
+      var moveLinesDownCommandBinding = new Input.CommandBinding(moveLinesDownCommand, (sender, args) => ExecuteMoveLinesCommand(MovementDirection.Down));
       TextEditor.CommandBindings.Add(moveLinesDownCommandBinding);
+      #endregion
+
+      #region GoToLineCommand
+      var goToLineCommand = new Input.RoutedCommand();
+      goToLineCommand.InputGestures.Add(new Input.KeyGesture(Input.Key.G, Input.ModifierKeys.Control));
+      var goToLineCommandBinding = new Input.CommandBinding(goToLineCommand, (sender, args) => ExecuteGoToLineCommand());
+      TextEditor.CommandBindings.Add(goToLineCommandBinding);
       #endregion
 
@@ -270,5 +277,5 @@
 
     private enum MovementDirection { Up, Down }
-    private void MoveLines(MovementDirection movementDirection) {
+    private void ExecuteMoveLinesCommand(MovementDirection movementDirection) {
       var textArea = TextEditor.TextArea;
       var selection = textArea.Selection;
@@ -366,4 +373,18 @@
     }
 
+    private void ExecuteGoToLineCommand() {
+      using (var dlg = new GoToLineDialog(TextEditor)) {
+        var result = dlg.ShowDialog(this);
+        if (result == Forms.DialogResult.OK) {
+          int lineNumber = dlg.Line;
+          var line = Doc.GetLineByNumber(lineNumber);
+          int offset = line.Offset;
+          if (TextUtilities.GetLeadingWhitespace(Doc, line).Length > 0)
+            offset = TextUtilities.GetNextCaretPosition(Doc, offset, LogicalDirection.Forward, CaretPositioningMode.WordStart);
+          TextEditor.CaretOffset = offset;
+        }
+      }
+    }
+
     #region Compiler Errors
     public void ShowCompileErrors(CompilerErrorCollection compilerErrors) {
Index: branches/CodeEditor/HeuristicLab.CodeEditor/3.4/GoToLineDialog.Designer.cs
===================================================================
--- branches/CodeEditor/HeuristicLab.CodeEditor/3.4/GoToLineDialog.Designer.cs	(revision 11785)
+++ branches/CodeEditor/HeuristicLab.CodeEditor/3.4/GoToLineDialog.Designer.cs	(revision 11785)
@@ -0,0 +1,113 @@
+﻿namespace HeuristicLab.CodeEditor {
+  partial class GoToLineDialog {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      this.cancelButton = new System.Windows.Forms.Button();
+      this.okButton = new System.Windows.Forms.Button();
+      this.lineNumberLabel = new System.Windows.Forms.Label();
+      this.lineNumberTextBox = new System.Windows.Forms.TextBox();
+      this.errorProvider = new System.Windows.Forms.ErrorProvider(this.components);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // cancelButton
+      // 
+      this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+      this.cancelButton.Location = new System.Drawing.Point(156, 51);
+      this.cancelButton.Name = "cancelButton";
+      this.cancelButton.Size = new System.Drawing.Size(75, 23);
+      this.cancelButton.TabIndex = 2;
+      this.cancelButton.Text = "&Cancel";
+      this.cancelButton.UseVisualStyleBackColor = true;
+      // 
+      // okButton
+      // 
+      this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK;
+      this.okButton.Enabled = false;
+      this.okButton.Location = new System.Drawing.Point(75, 51);
+      this.okButton.Name = "okButton";
+      this.okButton.Size = new System.Drawing.Size(75, 23);
+      this.okButton.TabIndex = 1;
+      this.okButton.Text = "&OK";
+      this.okButton.UseVisualStyleBackColor = true;
+      // 
+      // lineNumberLabel
+      // 
+      this.lineNumberLabel.AutoSize = true;
+      this.lineNumberLabel.Location = new System.Drawing.Point(12, 9);
+      this.lineNumberLabel.Name = "lineNumberLabel";
+      this.lineNumberLabel.Size = new System.Drawing.Size(94, 13);
+      this.lineNumberLabel.TabIndex = 3;
+      this.lineNumberLabel.Text = "Line Number (1-1):";
+      // 
+      // lineNumberTextBox
+      // 
+      this.lineNumberTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.lineNumberTextBox.Location = new System.Drawing.Point(15, 25);
+      this.lineNumberTextBox.Name = "lineNumberTextBox";
+      this.lineNumberTextBox.Size = new System.Drawing.Size(212, 20);
+      this.lineNumberTextBox.TabIndex = 0;
+      this.lineNumberTextBox.TextChanged += new System.EventHandler(this.lineNumberTextBox_TextChanged);
+      // 
+      // errorProvider
+      // 
+      this.errorProvider.BlinkStyle = System.Windows.Forms.ErrorBlinkStyle.NeverBlink;
+      this.errorProvider.ContainerControl = this;
+      // 
+      // GoToLineDialog
+      // 
+      this.AcceptButton = this.okButton;
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+      this.CancelButton = this.cancelButton;
+      this.ClientSize = new System.Drawing.Size(243, 86);
+      this.Controls.Add(this.lineNumberTextBox);
+      this.Controls.Add(this.lineNumberLabel);
+      this.Controls.Add(this.cancelButton);
+      this.Controls.Add(this.okButton);
+      this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
+      this.MaximizeBox = false;
+      this.MinimizeBox = false;
+      this.Name = "GoToLineDialog";
+      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+      this.Text = "Go To Line";
+      this.Load += new System.EventHandler(this.GoToLineDialog_Load);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button cancelButton;
+    private System.Windows.Forms.Button okButton;
+    private System.Windows.Forms.Label lineNumberLabel;
+    private System.Windows.Forms.TextBox lineNumberTextBox;
+    private System.Windows.Forms.ErrorProvider errorProvider;
+  }
+}
Index: branches/CodeEditor/HeuristicLab.CodeEditor/3.4/GoToLineDialog.cs
===================================================================
--- branches/CodeEditor/HeuristicLab.CodeEditor/3.4/GoToLineDialog.cs	(revision 11785)
+++ branches/CodeEditor/HeuristicLab.CodeEditor/3.4/GoToLineDialog.cs	(revision 11785)
@@ -0,0 +1,59 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Windows.Forms;
+using ICSharpCode.AvalonEdit;
+
+namespace HeuristicLab.CodeEditor {
+  internal partial class GoToLineDialog : Form {
+    private readonly TextEditor textEditor;
+    private readonly int lowerLimit, upperLimit;
+
+    public int Line { get; set; }
+
+    public GoToLineDialog(TextEditor textEditor) {
+      InitializeComponent();
+      this.textEditor = textEditor;
+      lowerLimit = 1;
+      upperLimit = textEditor.LineCount;
+      lineNumberLabel.Text = string.Format("Line Number ({0}-{1}):", lowerLimit, upperLimit);
+    }
+
+    private void GoToLineDialog_Load(object sender, EventArgs e) {
+      var caret = textEditor.TextArea.Caret;
+      lineNumberTextBox.Text = caret.Line.ToString();
+      lineNumberTextBox.SelectAll();
+    }
+
+    private void lineNumberTextBox_TextChanged(object sender, EventArgs e) {
+      int line;
+      if (!int.TryParse(lineNumberTextBox.Text, out line) || line < lowerLimit || line > upperLimit) {
+        errorProvider.SetError(lineNumberTextBox, string.Format("Value must be an integer in the range [{0},{1}].", lowerLimit, upperLimit));
+        okButton.Enabled = false;
+      } else {
+        errorProvider.SetError(lineNumberTextBox, null);
+        okButton.Enabled = true;
+      }
+      Line = line;
+    }
+  }
+}
Index: branches/CodeEditor/HeuristicLab.CodeEditor/3.4/HeuristicLab.CodeEditor-3.4.csproj
===================================================================
--- branches/CodeEditor/HeuristicLab.CodeEditor/3.4/HeuristicLab.CodeEditor-3.4.csproj	(revision 11765)
+++ branches/CodeEditor/HeuristicLab.CodeEditor/3.4/HeuristicLab.CodeEditor-3.4.csproj	(revision 11785)
@@ -125,4 +125,10 @@
     <Compile Include="CodeViewer.Designer.cs">
       <DependentUpon>CodeViewer.cs</DependentUpon>
+    </Compile>
+    <Compile Include="GoToLineDialog.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="GoToLineDialog.Designer.cs">
+      <DependentUpon>GoToLineDialog.cs</DependentUpon>
     </Compile>
     <Compile Include="LanguageFeatures\CodeFolding\CodeFoldingResult.cs" />
