Index: branches/ImprovingStringConvertibleMatrix/HeuristicLab.Data/3.3/BoolMatrix.cs
===================================================================
--- branches/ImprovingStringConvertibleMatrix/HeuristicLab.Data/3.3/BoolMatrix.cs	(revision 9274)
+++ branches/ImprovingStringConvertibleMatrix/HeuristicLab.Data/3.3/BoolMatrix.cs	(revision 9286)
@@ -20,5 +20,7 @@
 #endregion
 
+using System;
 using System.Collections.Generic;
+using System.Linq;
 using System.Text;
 using HeuristicLab.Common;
@@ -29,5 +31,5 @@
   [Item("BoolMatrix", "Represents a matrix of boolean values.")]
   [StorableClass]
-  public class BoolMatrix : ValueTypeMatrix<bool>, IStringConvertibleMatrix {
+  public class BoolMatrix : ValueTypeMatrix<bool> {
     [StorableConstructor]
     protected BoolMatrix(bool deserializing) : base(deserializing) { }
@@ -47,5 +49,5 @@
     }
 
-    protected virtual bool Validate(string value, out string errorMessage) {
+    protected override bool Validate(string value, out string errorMessage) {
       bool val;
       bool valid = bool.TryParse(value, out val);
@@ -60,8 +62,8 @@
       return valid;
     }
-    protected virtual string GetValue(int rowIndex, int columIndex) {
+    protected override string GetValue(int rowIndex, int columIndex) {
       return this[rowIndex, columIndex].ToString();
     }
-    protected virtual bool SetValue(string value, int rowIndex, int columnIndex) {
+    protected override bool SetValue(string value, int rowIndex, int columnIndex) {
       bool val;
       if (bool.TryParse(value, out val)) {
@@ -72,24 +74,23 @@
       }
     }
-
-    #region IStringConvertibleMatrix Members
-    int IStringConvertibleMatrix.Rows {
-      get { return Rows; }
-      set { Rows = value; }
+    protected override bool SetValue(IEnumerable<RowColumnValue> rowColumnValues) {
+      if (ReadOnly) throw new NotSupportedException("Item cannot be set. StringMatrix is read-only.");
+      List<Tuple<Position, bool>> newValues = new List<Tuple<Position, bool>>();
+      bool parsed;
+      foreach (var curValue in rowColumnValues) {
+        if (bool.TryParse(curValue.Value, out parsed)) {
+          newValues.Add(new Tuple<Position, bool>(curValue.Position, parsed));
+        } else {
+          return false;
+        }
+      }
+      Position pos;
+      foreach (var curValue in newValues) {
+        pos = curValue.Item1;
+        matrix[pos.Row, pos.Column] = curValue.Item2;
+      }
+      OnItemsChanged(rowColumnValues.Select(x => x.Position));
+      return true;
     }
-    int IStringConvertibleMatrix.Columns {
-      get { return Columns; }
-      set { Columns = value; }
-    }
-    bool IStringConvertibleMatrix.Validate(string value, out string errorMessage) {
-      return Validate(value, out errorMessage);
-    }
-    string IStringConvertibleMatrix.GetValue(int rowIndex, int columIndex) {
-      return GetValue(rowIndex, columIndex);
-    }
-    bool IStringConvertibleMatrix.SetValue(string value, int rowIndex, int columnIndex) {
-      return SetValue(value, rowIndex, columnIndex);
-    }
-    #endregion
   }
 }
Index: branches/ImprovingStringConvertibleMatrix/HeuristicLab.Data/3.3/DoubleMatrix.cs
===================================================================
--- branches/ImprovingStringConvertibleMatrix/HeuristicLab.Data/3.3/DoubleMatrix.cs	(revision 9274)
+++ branches/ImprovingStringConvertibleMatrix/HeuristicLab.Data/3.3/DoubleMatrix.cs	(revision 9286)
@@ -20,5 +20,7 @@
 #endregion
 
+using System;
 using System.Collections.Generic;
+using System.Linq;
 using System.Text;
 using HeuristicLab.Common;
@@ -29,5 +31,5 @@
   [Item("DoubleMatrix", "Represents a matrix of double values.")]
   [StorableClass]
-  public class DoubleMatrix : ValueTypeMatrix<double>, IStringConvertibleMatrix {
+  public class DoubleMatrix : ValueTypeMatrix<double> {
     [StorableConstructor]
     protected DoubleMatrix(bool deserializing) : base(deserializing) { }
@@ -47,5 +49,5 @@
     }
 
-    protected virtual bool Validate(string value, out string errorMessage) {
+    protected override bool Validate(string value, out string errorMessage) {
       double val;
       bool valid = double.TryParse(value, out val);
@@ -60,8 +62,8 @@
       return valid;
     }
-    protected virtual string GetValue(int rowIndex, int columIndex) {
+    protected override string GetValue(int rowIndex, int columIndex) {
       return this[rowIndex, columIndex].ToString();
     }
-    protected virtual bool SetValue(string value, int rowIndex, int columnIndex) {
+    protected override bool SetValue(string value, int rowIndex, int columnIndex) {
       double val;
       if (double.TryParse(value, out val)) {
@@ -72,24 +74,23 @@
       }
     }
-
-    #region IStringConvertibleMatrix Members
-    int IStringConvertibleMatrix.Rows {
-      get { return Rows; }
-      set { Rows = value; }
+    protected override bool SetValue(IEnumerable<RowColumnValue> rowColumnValues) {
+      if (ReadOnly) throw new NotSupportedException("Item cannot be set. StringMatrix is read-only.");
+      List<Tuple<Position, double>> newValues = new List<Tuple<Position, double>>();
+      double parsed;
+      foreach (var curValue in rowColumnValues) {
+        if (double.TryParse(curValue.Value, out parsed)) {
+          newValues.Add(new Tuple<Position, double>(curValue.Position, parsed));
+        } else {
+          return false;
+        }
+      }
+      Position pos;
+      foreach (var curValue in newValues) {
+        pos = curValue.Item1;
+        matrix[pos.Row, pos.Column] = curValue.Item2;
+      }
+      OnItemsChanged(rowColumnValues.Select(x => x.Position));
+      return true;
     }
-    int IStringConvertibleMatrix.Columns {
-      get { return Columns; }
-      set { Columns = value; }
-    }
-    bool IStringConvertibleMatrix.Validate(string value, out string errorMessage) {
-      return Validate(value, out errorMessage);
-    }
-    string IStringConvertibleMatrix.GetValue(int rowIndex, int columIndex) {
-      return GetValue(rowIndex, columIndex);
-    }
-    bool IStringConvertibleMatrix.SetValue(string value, int rowIndex, int columnIndex) {
-      return SetValue(value, rowIndex, columnIndex);
-    }
-    #endregion
   }
 }
Index: branches/ImprovingStringConvertibleMatrix/HeuristicLab.Data/3.3/HeuristicLab.Data-3.3.csproj
===================================================================
--- branches/ImprovingStringConvertibleMatrix/HeuristicLab.Data/3.3/HeuristicLab.Data-3.3.csproj	(revision 9274)
+++ branches/ImprovingStringConvertibleMatrix/HeuristicLab.Data/3.3/HeuristicLab.Data-3.3.csproj	(revision 9286)
@@ -41,5 +41,5 @@
     <DebugType>full</DebugType>
     <Optimize>false</Optimize>
-    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
     <DefineConstants>DEBUG;TRACE</DefineConstants>
     <ErrorReport>prompt</ErrorReport>
@@ -52,5 +52,5 @@
     <DebugType>pdbonly</DebugType>
     <Optimize>true</Optimize>
-    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
     <DefineConstants>TRACE</DefineConstants>
     <ErrorReport>prompt</ErrorReport>
@@ -63,5 +63,5 @@
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
     <DebugSymbols>true</DebugSymbols>
-    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
     <DefineConstants>DEBUG;TRACE</DefineConstants>
     <DebugType>full</DebugType>
@@ -71,5 +71,5 @@
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
-    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
     <DefineConstants>TRACE</DefineConstants>
     <DocumentationFile>
@@ -83,5 +83,5 @@
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
     <DebugSymbols>true</DebugSymbols>
-    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
     <DefineConstants>DEBUG;TRACE</DefineConstants>
     <DebugType>full</DebugType>
@@ -91,5 +91,5 @@
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
-    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
     <DefineConstants>TRACE</DefineConstants>
     <DocumentationFile>
@@ -102,4 +102,19 @@
   </PropertyGroup>
   <ItemGroup>
+    <Reference Include="HeuristicLab.Common-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Common.Resources-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Persistence-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <Private>False</Private>
+    </Reference>
     <Reference Include="System" />
     <Reference Include="System.Core">
@@ -146,31 +161,4 @@
   </ItemGroup>
   <ItemGroup>
-    <ProjectReference Include="..\..\HeuristicLab.Common.Resources\3.3\HeuristicLab.Common.Resources-3.3.csproj">
-      <Project>{0E27A536-1C4A-4624-A65E-DC4F4F23E3E1}</Project>
-      <Name>HeuristicLab.Common.Resources-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.Common\3.3\HeuristicLab.Common-3.3.csproj">
-      <Project>{A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C}</Project>
-      <Name>HeuristicLab.Common-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.Core\3.3\HeuristicLab.Core-3.3.csproj">
-      <Project>{C36BD924-A541-4A00-AFA8-41701378DDC5}</Project>
-      <Name>HeuristicLab.Core-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.Persistence\3.3\HeuristicLab.Persistence-3.3.csproj">
-      <Project>{102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B}</Project>
-      <Name>HeuristicLab.Persistence-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\3.3\HeuristicLab.PluginInfrastructure-3.3.csproj">
-      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
-      <Name>HeuristicLab.PluginInfrastructure-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
-  </ItemGroup>
-  <ItemGroup>
     <None Include="HeuristicLab.snk" />
     <None Include="Properties\AssemblyInfo.cs.frame" />
@@ -212,5 +200,5 @@
   -->
   <PropertyGroup>
-   <PreBuildEvent Condition=" '$(OS)' == 'Windows_NT' ">set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+    <PreBuildEvent Condition=" '$(OS)' == 'Windows_NT' ">set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
 set ProjectDir=$(ProjectDir)
 set SolutionDir=$(SolutionDir)
@@ -219,5 +207,5 @@
 call PreBuildEvent.cmd
 </PreBuildEvent>
-<PreBuildEvent Condition=" '$(OS)' != 'Windows_NT' ">
+    <PreBuildEvent Condition=" '$(OS)' != 'Windows_NT' ">
 export ProjectDir=$(ProjectDir)
 export SolutionDir=$(SolutionDir)
Index: branches/ImprovingStringConvertibleMatrix/HeuristicLab.Data/3.3/IntMatrix.cs
===================================================================
--- branches/ImprovingStringConvertibleMatrix/HeuristicLab.Data/3.3/IntMatrix.cs	(revision 9274)
+++ branches/ImprovingStringConvertibleMatrix/HeuristicLab.Data/3.3/IntMatrix.cs	(revision 9286)
@@ -20,5 +20,7 @@
 #endregion
 
+using System;
 using System.Collections.Generic;
+using System.Linq;
 using System.Text;
 using HeuristicLab.Common;
@@ -29,5 +31,5 @@
   [Item("IntMatrix", "Represents a matrix of integer values.")]
   [StorableClass]
-  public class IntMatrix : ValueTypeMatrix<int>, IStringConvertibleMatrix {
+  public class IntMatrix : ValueTypeMatrix<int> {
     [StorableConstructor]
     protected IntMatrix(bool deserializing) : base(deserializing) { }
@@ -38,8 +40,8 @@
     public IntMatrix(int rows, int columns) : base(rows, columns) { }
     public IntMatrix(int rows, int columns, IEnumerable<string> columnNames) : base(rows, columns, columnNames) { }
-    public IntMatrix(int rows, int columns, IEnumerable<string> columnNames,IEnumerable<string> rowNames) : base(rows, columns, columnNames,rowNames) { }
+    public IntMatrix(int rows, int columns, IEnumerable<string> columnNames, IEnumerable<string> rowNames) : base(rows, columns, columnNames, rowNames) { }
     public IntMatrix(int[,] elements) : base(elements) { }
-    public IntMatrix(int[,] elements, IEnumerable<string> columnNames) : base(elements,columnNames) { }
-    public IntMatrix(int[,] elements, IEnumerable<string> columnNames, IEnumerable<string> rowNames) : base(elements,columnNames,rowNames) { }
+    public IntMatrix(int[,] elements, IEnumerable<string> columnNames) : base(elements, columnNames) { }
+    public IntMatrix(int[,] elements, IEnumerable<string> columnNames, IEnumerable<string> rowNames) : base(elements, columnNames, rowNames) { }
 
     public override IDeepCloneable Clone(Cloner cloner) {
@@ -47,5 +49,5 @@
     }
 
-    protected virtual bool Validate(string value, out string errorMessage) {
+    protected override bool Validate(string value, out string errorMessage) {
       int val;
       bool valid = int.TryParse(value, out val);
@@ -60,8 +62,8 @@
       return valid;
     }
-    protected virtual string GetValue(int rowIndex, int columIndex) {
+    protected override string GetValue(int rowIndex, int columIndex) {
       return this[rowIndex, columIndex].ToString();
     }
-    protected virtual bool SetValue(string value, int rowIndex, int columnIndex) {
+    protected override bool SetValue(string value, int rowIndex, int columnIndex) {
       int val;
       if (int.TryParse(value, out val)) {
@@ -72,24 +74,23 @@
       }
     }
-
-    #region IStringConvertibleMatrix Members
-    int IStringConvertibleMatrix.Rows {
-      get { return Rows; }
-      set { Rows = value; }
+    protected override bool SetValue(IEnumerable<RowColumnValue> rowColumnValues) {
+      if (ReadOnly) throw new NotSupportedException("Item cannot be set. StringMatrix is read-only.");
+      List<Tuple<Position, int>> newValues = new List<Tuple<Position, int>>();
+      int parsed;
+      foreach (var curValue in rowColumnValues) {
+        if (int.TryParse(curValue.Value, out parsed)) {
+          newValues.Add(new Tuple<Position, int>(curValue.Position, parsed));
+        } else {
+          return false;
+        }
+      }
+      Position pos;
+      foreach (var curValue in newValues) {
+        pos = curValue.Item1;
+        matrix[pos.Row, pos.Column] = curValue.Item2;
+      }
+      OnItemsChanged(rowColumnValues.Select(x => x.Position));
+      return true;
     }
-    int IStringConvertibleMatrix.Columns {
-      get { return Columns; }
-      set { Columns = value; }
-    }
-    bool IStringConvertibleMatrix.Validate(string value, out string errorMessage) {
-      return Validate(value, out errorMessage);
-    }
-    string IStringConvertibleMatrix.GetValue(int rowIndex, int columIndex) {
-      return GetValue(rowIndex, columIndex);
-    }
-    bool IStringConvertibleMatrix.SetValue(string value, int rowIndex, int columnIndex) {
-      return SetValue(value, rowIndex, columnIndex);
-    }
-    #endregion
   }
 }
Index: branches/ImprovingStringConvertibleMatrix/HeuristicLab.Data/3.3/Interfaces/IStringConvertibleMatrix.cs
===================================================================
--- branches/ImprovingStringConvertibleMatrix/HeuristicLab.Data/3.3/Interfaces/IStringConvertibleMatrix.cs	(revision 9274)
+++ branches/ImprovingStringConvertibleMatrix/HeuristicLab.Data/3.3/Interfaces/IStringConvertibleMatrix.cs	(revision 9286)
@@ -37,4 +37,6 @@
     string GetValue(int rowIndex, int columnIndex);
     bool SetValue(string value, int rowIndex, int columnIndex);
+    bool SetValue(RowColumnValue rowColumnValue);
+    bool SetValue(IEnumerable<RowColumnValue> rowColumnValues);
 
     event EventHandler ColumnsChanged;
@@ -43,7 +45,22 @@
     event EventHandler RowNamesChanged;
     event EventHandler SortableViewChanged;
-    event EventHandler<EventArgs<int, int>> ItemChanged;
+    event EventHandler<EventArgs<IEnumerable<Position>>> ItemsChanged;
     event EventHandler Reset;
+  }
+  public struct Position {
+    public readonly int Row, Column;
+    public Position(int row, int column) {
+      Row = row;
+      Column = column;
+    }
+  }
+  public struct RowColumnValue {
+    public readonly Position Position;
+    public readonly string Value;
 
+    public RowColumnValue(Position position, string value) {
+      Position = position;
+      Value = value;
+    }
   }
 }
Index: branches/ImprovingStringConvertibleMatrix/HeuristicLab.Data/3.3/StringMatrix.cs
===================================================================
--- branches/ImprovingStringConvertibleMatrix/HeuristicLab.Data/3.3/StringMatrix.cs	(revision 9274)
+++ branches/ImprovingStringConvertibleMatrix/HeuristicLab.Data/3.3/StringMatrix.cs	(revision 9286)
@@ -128,5 +128,5 @@
           if ((value != null) || (matrix[rowIndex, columnIndex] != string.Empty)) {
             matrix[rowIndex, columnIndex] = value != null ? value : string.Empty;
-            OnItemChanged(rowIndex, columnIndex);
+            OnItemsChanged(new List<Position>(1) { new Position(rowIndex, columnIndex) });
           }
         }
@@ -250,4 +250,15 @@
       }
     }
+    protected virtual bool SetValue(IEnumerable<RowColumnValue> rowColumnValues) {
+      if (ReadOnly) throw new NotSupportedException("Item cannot be set. StringMatrix is read-only.");
+      if (rowColumnValues.Any(x => x.Value == null)) { return false; }
+      Position pos;
+      foreach (var curValue in rowColumnValues) {
+        pos = curValue.Position;
+        matrix[pos.Row, pos.Column] = curValue.Value;
+      }
+      OnItemsChanged(rowColumnValues.Select(x => x.Position));
+      return true;
+    }
 
     #region events
@@ -282,8 +293,8 @@
         handler(this, EventArgs.Empty);
     }
-    public event EventHandler<EventArgs<int, int>> ItemChanged;
-    protected virtual void OnItemChanged(int rowIndex, int columnIndex) {
-      if (ItemChanged != null)
-        ItemChanged(this, new EventArgs<int, int>(rowIndex, columnIndex));
+    public event EventHandler<EventArgs<IEnumerable<Position>>> ItemsChanged;
+    protected virtual void OnItemsChanged(IEnumerable<Position> positions) {
+      if (ItemsChanged != null)
+        ItemsChanged(this, new EventArgs<IEnumerable<Position>>(positions));
       OnToStringChanged();
     }
@@ -314,4 +325,10 @@
       return SetValue(value, rowIndex, columnIndex);
     }
+    public bool SetValue(RowColumnValue rowColumnValue) {
+      return SetValue(rowColumnValue.Value, rowColumnValue.Position.Row, rowColumnValue.Position.Column);
+    }
+    bool IStringConvertibleMatrix.SetValue(IEnumerable<RowColumnValue> rowColumnValues) {
+      return SetValue(rowColumnValues);
+    }
     #endregion
   }
Index: branches/ImprovingStringConvertibleMatrix/HeuristicLab.Data/3.3/ValueTypeMatrix.cs
===================================================================
--- branches/ImprovingStringConvertibleMatrix/HeuristicLab.Data/3.3/ValueTypeMatrix.cs	(revision 9274)
+++ branches/ImprovingStringConvertibleMatrix/HeuristicLab.Data/3.3/ValueTypeMatrix.cs	(revision 9286)
@@ -33,5 +33,5 @@
   [Item("ValueTypeMatrix", "An abstract base class for representing matrices of value types.")]
   [StorableClass]
-  public abstract class ValueTypeMatrix<T> : Item, IEnumerable<T> where T : struct {
+  public abstract class ValueTypeMatrix<T> : Item, IEnumerable<T>, IStringConvertibleMatrix where T : struct {
     public static new Image StaticItemImage {
       get { return HeuristicLab.Common.Resources.VSImageLibrary.Class; }
@@ -127,5 +127,5 @@
         if (!value.Equals(matrix[rowIndex, columnIndex])) {
           matrix[rowIndex, columnIndex] = value;
-          OnItemChanged(rowIndex, columnIndex);
+          OnItemsChanged(new List<Position>(1) { new Position(rowIndex, columnIndex) });
         }
       }
@@ -247,8 +247,8 @@
         handler(this, EventArgs.Empty);
     }
-    public event EventHandler<EventArgs<int, int>> ItemChanged;
-    protected virtual void OnItemChanged(int rowIndex, int columnIndex) {
-      if (ItemChanged != null)
-        ItemChanged(this, new EventArgs<int, int>(rowIndex, columnIndex));
+    public event EventHandler<EventArgs<IEnumerable<Position>>> ItemsChanged;
+    protected virtual void OnItemsChanged(IEnumerable<Position> positions) {
+      if (ItemsChanged != null)
+        ItemsChanged(this, new EventArgs<IEnumerable<Position>>(positions));
       OnToStringChanged();
     }
@@ -260,4 +260,38 @@
     }
     #endregion
+
+    protected abstract bool Validate(string value, out string errorMessage);
+    protected abstract bool SetValue(string value, int rowIndex, int columnIndex);
+    protected abstract string GetValue(int rowIndex, int columIndex);
+    protected abstract bool SetValue(IEnumerable<RowColumnValue> rowColumnValues);
+
+    #region IStringConvertibleMatrix Members
+    int IStringConvertibleMatrix.Rows {
+      get { return Rows; }
+      set { Rows = value; }
+    }
+    int IStringConvertibleMatrix.Columns {
+      get { return Columns; }
+      set { Columns = value; }
+    }
+
+    bool IStringConvertibleMatrix.Validate(string value, out string errorMessage) {
+      return Validate(value, out errorMessage);
+    }
+    string IStringConvertibleMatrix.GetValue(int rowIndex, int columnIndex) {
+      return GetValue(rowIndex, columnIndex);
+    }
+    bool IStringConvertibleMatrix.SetValue(string value, int rowIndex, int columnIndex) {
+      return SetValue(value, rowIndex, columnIndex);
+    }
+
+    bool IStringConvertibleMatrix.SetValue(RowColumnValue rowColumnValue) {
+      return SetValue(rowColumnValue.Value, rowColumnValue.Position.Row, rowColumnValue.Position.Column);
+    }
+
+    bool IStringConvertibleMatrix.SetValue(IEnumerable<RowColumnValue> rowColumnValues) {
+      return SetValue(rowColumnValues);
+    }
+    #endregion
   }
 }
