diff --git a/vala/valadestructor.vala b/vala/valadestructor.vala
index 7ee3843..9bfd9e8 100644
--- a/vala/valadestructor.vala
+++ b/vala/valadestructor.vala
@@ -46,8 +46,8 @@ public class Vala.Destructor : Subroutine {
 	 * @param source_reference reference to source code
 	 * @return                 newly created destructor
 	 */
-	public Destructor (SourceReference? source_reference = null) {
-		base (null, source_reference);
+	public Destructor (string? name, SourceReference? source_reference = null) {
+		base (name, source_reference);
 	}
 
 	public override void accept (CodeVisitor visitor) {
@@ -70,6 +70,14 @@ public class Vala.Destructor : Subroutine {
 		owner = context.analyzer.current_symbol.scope;
 		context.analyzer.current_symbol = this;
 
+		if (name != null && parent_symbol != null) {
+			if (name != parent_symbol.name) {
+				error = true;
+				Report.error (source_reference, "The name `%s' does not exist in class `%s' as a destructor".printf (name, parent_symbol.name));
+				return false;
+			}
+		}
+
 		if (body != null) {
 			body.check (context);
 		}
diff --git a/vala/valagenieparser.vala b/vala/valagenieparser.vala
index 4f9c016..f99aa24 100644
--- a/vala/valagenieparser.vala
+++ b/vala/valagenieparser.vala
@@ -3214,7 +3214,7 @@ public class Vala.Genie.Parser : CodeVisitor {
 	Destructor parse_destructor_declaration (List<Attribute>? attrs) throws ParseError {
 		var begin = get_location ();
 		expect (TokenType.FINAL);
-		var d = new Destructor (get_src (begin));
+		var d = new Destructor (null, get_src (begin));
 		accept_block ();
 		d.body = parse_block ();
 		return d;
diff --git a/vala/valaparser.vala b/vala/valaparser.vala
index 76ea0b9..3456a3c 100644
--- a/vala/valaparser.vala
+++ b/vala/valaparser.vala
@@ -2969,13 +2969,13 @@ public class Vala.Parser : CodeVisitor {
 		var begin = get_location ();
 		var flags = parse_member_declaration_modifiers ();
 		expect (TokenType.TILDE);
-		parse_identifier ();
+		string id = parse_identifier ();
 		expect (TokenType.OPEN_PARENS);
 		expect (TokenType.CLOSE_PARENS);
 		if (ModifierFlags.NEW in flags) {
 			throw new ParseError.SYNTAX (get_error ("`new' modifier not allowed on destructor"));
 		}
-		var d = new Destructor (get_src (begin));
+		var d = new Destructor (id, get_src (begin));
 		if (ModifierFlags.STATIC in flags) {
 			d.binding = MemberBinding.STATIC;
 		} else if (ModifierFlags.CLASS in flags) {
