Index: /branches/2994-AutoDiffForIntervals/HeuristicLab.Clients.Access.Administration/3.3/Views/PasswordDisplayDialog.Designer.cs
===================================================================
--- /branches/2994-AutoDiffForIntervals/HeuristicLab.Clients.Access.Administration/3.3/Views/PasswordDisplayDialog.Designer.cs	(revision 17129)
+++ /branches/2994-AutoDiffForIntervals/HeuristicLab.Clients.Access.Administration/3.3/Views/PasswordDisplayDialog.Designer.cs	(revision 17130)
@@ -76,4 +76,5 @@
       this.passwordTextbox.Location = new System.Drawing.Point(102, 6);
       this.passwordTextbox.Name = "passwordTextbox";
+      this.passwordTextbox.ReadOnly = true;
       this.passwordTextbox.Size = new System.Drawing.Size(203, 20);
       this.passwordTextbox.TabIndex = 2;
Index: /branches/2994-AutoDiffForIntervals/HeuristicLab.Core.Views/3.3/CheckedItemCollectionView.cs
===================================================================
--- /branches/2994-AutoDiffForIntervals/HeuristicLab.Core.Views/3.3/CheckedItemCollectionView.cs	(revision 17129)
+++ /branches/2994-AutoDiffForIntervals/HeuristicLab.Core.Views/3.3/CheckedItemCollectionView.cs	(revision 17130)
@@ -84,5 +84,4 @@
       if (doubleClick) {
         e.NewValue = e.CurrentValue;
-        doubleClick = false;
       } else {
         bool check = e.NewValue == CheckState.Checked;
@@ -104,6 +103,5 @@
     }
     protected void itemsListView_MouseDown(object sender, MouseEventArgs e) {
-      if (e.Clicks > 1)
-        doubleClick = true;
+      doubleClick = e.Clicks > 1;
     }
     #endregion
Index: /branches/2994-AutoDiffForIntervals/HeuristicLab.Core.Views/3.3/CheckedItemListView.cs
===================================================================
--- /branches/2994-AutoDiffForIntervals/HeuristicLab.Core.Views/3.3/CheckedItemListView.cs	(revision 17129)
+++ /branches/2994-AutoDiffForIntervals/HeuristicLab.Core.Views/3.3/CheckedItemListView.cs	(revision 17130)
@@ -86,5 +86,4 @@
       if (doubleClick) {
         e.NewValue = e.CurrentValue;
-        doubleClick = false;
       } else {
         bool check = e.NewValue == CheckState.Checked;
@@ -107,6 +106,5 @@
 
     protected void itemsListView_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) {
-      if (e.Clicks > 1)
-        doubleClick = true;
+      doubleClick = e.Clicks > 1;
     }
 
Index: /branches/2994-AutoDiffForIntervals/HeuristicLab.Core.Views/3.3/ItemCollectionView.cs
===================================================================
--- /branches/2994-AutoDiffForIntervals/HeuristicLab.Core.Views/3.3/ItemCollectionView.cs	(revision 17129)
+++ /branches/2994-AutoDiffForIntervals/HeuristicLab.Core.Views/3.3/ItemCollectionView.cs	(revision 17130)
@@ -248,4 +248,10 @@
           Clipboard.SetText(builder.ToString());
         }
+      } else if (itemsListView.MultiSelect && e.KeyData == (Keys.A | Keys.Control)) {
+        try {
+          itemsListView.BeginUpdate();
+          foreach (ListViewItem item in itemsListView.Items)
+            item.Selected = true;
+        } finally { itemsListView.EndUpdate(); }
       }
     }
Index: /branches/2994-AutoDiffForIntervals/HeuristicLab.Core.Views/3.3/ItemListView.cs
===================================================================
--- /branches/2994-AutoDiffForIntervals/HeuristicLab.Core.Views/3.3/ItemListView.cs	(revision 17129)
+++ /branches/2994-AutoDiffForIntervals/HeuristicLab.Core.Views/3.3/ItemListView.cs	(revision 17130)
@@ -269,4 +269,10 @@
           Clipboard.SetText(builder.ToString());
         }
+      } else if (itemsListView.MultiSelect && e.KeyData == (Keys.A | Keys.Control)) {
+        try {
+          itemsListView.BeginUpdate();
+          foreach (ListViewItem item in itemsListView.Items)
+            item.Selected = true;
+        } finally { itemsListView.EndUpdate(); }
       }
     }
Index: /branches/2994-AutoDiffForIntervals/HeuristicLab.DataPreprocessing/3.4/PreprocessingContext.cs
===================================================================
--- /branches/2994-AutoDiffForIntervals/HeuristicLab.DataPreprocessing/3.4/PreprocessingContext.cs	(revision 17129)
+++ /branches/2994-AutoDiffForIntervals/HeuristicLab.DataPreprocessing/3.4/PreprocessingContext.cs	(revision 17130)
@@ -22,8 +22,8 @@
 using System;
 using System.Collections.Generic;
+using HEAL.Attic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Optimization;
-using HEAL.Attic;
 using HeuristicLab.Problems.DataAnalysis;
 
@@ -32,5 +32,4 @@
   [StorableType("52D31B2B-7D48-482B-B875-5FCE0F8397A8")]
   public class PreprocessingContext : NamedItem {
-    public string Filename { get; set; }
 
     [Storable]
Index: /branches/2994-AutoDiffForIntervals/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Converters/DerivativeCalculator.cs
===================================================================
--- /branches/2994-AutoDiffForIntervals/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Converters/DerivativeCalculator.cs	(revision 17129)
+++ /branches/2994-AutoDiffForIntervals/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Converters/DerivativeCalculator.cs	(revision 17130)
@@ -179,4 +179,10 @@
         var u = (ISymbolicExpressionTreeNode)branch.GetSubtree(0).Clone();
         return Div(fxp, Square(Cosine(u)));
+      }
+      if (branch.Symbol is HyperbolicTangent) {
+        // tanh(f(x))' = f(x)'sech²(f(x)) = f(x)'(1 - tanh²(f(x)))
+        var fxp = Derive(branch.GetSubtree(0), variableName);
+        var tanh = (ISymbolicExpressionTreeNode)branch.Clone();
+        return Product(fxp, Subtract(CreateConstant(1.0), Square(tanh)));
       }
       throw new NotSupportedException(string.Format("Symbol {0} is not supported.", branch.Symbol));
Index: /branches/2994-AutoDiffForIntervals/HeuristicLab.Tests/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4/DeriveTest.cs
===================================================================
--- /branches/2994-AutoDiffForIntervals/HeuristicLab.Tests/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4/DeriveTest.cs	(revision 17129)
+++ /branches/2994-AutoDiffForIntervals/HeuristicLab.Tests/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4/DeriveTest.cs	(revision 17130)
@@ -68,5 +68,7 @@
 
       Assert.AreEqual("('a' * 'b' * 'c')", Derive("a*b*c*d", "d"));
-      Assert.AreEqual("('a' / ('b' * 'c' * SQR('d') * (-1)))", Derive("a/b/c/d", "d")); 
+      Assert.AreEqual("('a' / ('b' * 'c' * SQR('d') * (-1)))", Derive("a/b/c/d", "d"));
+
+      Assert.AreEqual("('x' * ((SQR(TANH(SQR('x'))) * (-1)) + 1) * 2)", Derive("tanh(sqr(x))", "x")); // (2*'x'*(1 - SQR(TANH(SQR('x'))))
 
       {
