diff --git a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
index 9f332e201b..41880d19ec 100644
--- a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
+++ b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
@@ -507,6 +507,7 @@
+
diff --git a/src/Main/Base/Project/Src/TextEditor/Commands/CodeGenerators/OverridePropertiesCodeGenerator.cs b/src/Main/Base/Project/Src/TextEditor/Commands/CodeGenerators/OverridePropertiesCodeGenerator.cs
new file mode 100644
index 0000000000..4a8ddccc14
--- /dev/null
+++ b/src/Main/Base/Project/Src/TextEditor/Commands/CodeGenerators/OverridePropertiesCodeGenerator.cs
@@ -0,0 +1,192 @@
+//
+// 2002-2005 AlphaSierraPapa
+// GNU General Public License
+//
+// $Revision: 607 $
+//
+
+using System;
+using System.Collections;
+using ICSharpCode.TextEditor;
+
+using ICSharpCode.SharpDevelop.Dom;
+using ICSharpCode.Core;
+
+namespace ICSharpCode.SharpDevelop.DefaultEditor.Commands
+{
+ public class OverridePropertiesCodeGenerator : OldCodeGeneratorBase
+ {
+ public override string CategoryName {
+ get {
+ return "Override properties";
+ }
+ }
+
+ public override string Hint {
+ get {
+ return "Choose properties to override";
+ }
+ }
+
+ public override int ImageIndex {
+ get {
+
+ return ClassBrowserIconService.PropertyIndex;
+ }
+ }
+
+ public OverridePropertiesCodeGenerator(IClass currentClass) : base(currentClass)
+ {
+ foreach (IClass c in currentClass.ClassInheritanceTree) {
+ if (c.FullyQualifiedName != currentClass.FullyQualifiedName) {
+ foreach (IProperty property in c.Properties) {
+ if (!property.IsPrivate && (property.IsAbstract || property.IsVirtual || property.IsOverride)) {
+ Content.Add(new PropertyWrapper(property));
+ }
+ }
+ }
+ }
+ Content.Sort();
+ }
+
+ protected override void StartGeneration(IList items, string fileExtension)
+ {
+ for (int i = 0; i < items.Count; ++i) {
+ PropertyWrapper pw = (PropertyWrapper)items[i];
+
+ string parameters = String.Empty;
+ string paramList = String.Empty;
+ string returnType = (fileExtension == ".vb" ? vba : csa).Convert(pw.Property.ReturnType);
+
+ for (int j = 0; j < pw.Property.Parameters.Count; ++j) {
+ paramList += pw.Property.Parameters[j].Name;
+ parameters += (fileExtension == ".vb" ? vba : csa).Convert(pw.Property.Parameters[j]);
+ if (j + 1 < pw.Property.Parameters.Count) {
+ parameters += ", ";
+ paramList += ", ";
+ }
+ }
+
+
+ if (fileExtension == ".vb"){
+ editActionHandler.InsertString(vba.Convert(pw.Property.Modifiers) + "Overrides ");++numOps;
+ editActionHandler.InsertString("Property ");++numOps;
+ editActionHandler.InsertString(pw.Property.Name + "()");++numOps;
+ } else {
+ editActionHandler.InsertString(csa.Convert(pw.Property.Modifiers) + "override " + returnType + " " + pw.Property.Name);++numOps;
+ if (StartCodeBlockInSameLine) {
+ editActionHandler.InsertString(" {");
+ } else {
+ Return();
+ editActionHandler.InsertString("{");
+ }
+ ++numOps;
+ }
+
+
+ Return();
+
+ if(fileExtension == ".vb") {
+ editActionHandler.InsertString("Get");++numOps;
+ } else {
+ editActionHandler.InsertString("get");++numOps;
+ if (StartCodeBlockInSameLine) {
+ editActionHandler.InsertString(" {");
+ } else {
+ Return();
+ editActionHandler.InsertString("{");
+ }
+ ++numOps;
+ }
+
+ Return();
+
+ if(fileExtension == ".vb") {
+ editActionHandler.InsertString("Return MyBase." + pw.Property.Name); ++numOps;
+ } else {
+ editActionHandler.InsertString("return base." + pw.Property.Name); ++numOps;
+ }
+
+ Return();
+
+ if(fileExtension == ".vb") {
+ editActionHandler.InsertString("End Get"); ++numOps;
+ } else {
+ editActionHandler.InsertChar('}'); ++numOps;
+ }
+
+ Return();
+
+ if(fileExtension == ".vb") {
+ editActionHandler.InsertString("Set");++numOps;
+ } else {
+ editActionHandler.InsertString("set");++numOps;
+ if (StartCodeBlockInSameLine) {
+ editActionHandler.InsertString(" {");
+ } else {
+ Return();
+ editActionHandler.InsertString("{");
+ }
+ ++numOps;
+ }
+
+ Return();
+
+ if(fileExtension == ".vb") {
+ editActionHandler.InsertString("MyBase." + pw.Property.Name + " = value"); ++numOps;
+ } else {
+ editActionHandler.InsertString("base." + pw.Property.Name + " = value"); ++numOps;
+ }
+
+ Return();
+
+ if(fileExtension == ".vb") {
+ editActionHandler.InsertString("End Set"); ++numOps;
+ } else {
+ editActionHandler.InsertChar('}'); ++numOps;
+ }
+
+ Return();
+
+ if(fileExtension == ".vb") {
+ editActionHandler.InsertString("End Property"); ++numOps;
+ } else {
+ editActionHandler.InsertChar('}'); ++numOps;
+ }
+
+ Return();
+ Return();
+ IndentLine();
+ }
+ }
+
+ class PropertyWrapper : IComparable
+ {
+ IProperty property;
+
+ public IProperty Property {
+ get {
+ return property;
+ }
+ }
+
+ public int CompareTo(object other)
+ {
+ return property.Name.CompareTo(((PropertyWrapper)other).property.Name);
+ }
+
+
+ public PropertyWrapper(IProperty property)
+ {
+ this.property = property;
+ }
+
+ public override string ToString()
+ {
+ IAmbience ambience = AmbienceService.CurrentAmbience;
+ ambience.ConversionFlags = ConversionFlags.ShowParameterNames;
+ return ambience.Convert(property);
+ }
+ }
+ }
+}
diff --git a/src/Main/Base/Project/Src/TextEditor/Commands/GenerateCodeCommand.cs b/src/Main/Base/Project/Src/TextEditor/Commands/GenerateCodeCommand.cs
index d3261982ef..903ba6fd5e 100644
--- a/src/Main/Base/Project/Src/TextEditor/Commands/GenerateCodeCommand.cs
+++ b/src/Main/Base/Project/Src/TextEditor/Commands/GenerateCodeCommand.cs
@@ -64,6 +64,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Commands
new GetterAndSetterCodeGenerator(currentClass),
new OnXXXMethodsCodeGenerator(currentClass),
new OverrideMethodsCodeGenerator(currentClass),
+ new OverridePropertiesCodeGenerator(currentClass),
new InterfaceImplementorCodeGenerator(currentClass),
new AbstractClassImplementorCodeGenerator(currentClass),
new ToStringCodeGenerator(currentClass),