diff --git a/evaluate_expression.go b/evaluate_expression.go
index <HASH>..<HASH> 100644
--- a/evaluate_expression.go
+++ b/evaluate_expression.go
@@ -103,8 +103,7 @@ func (self *_runtime) evaluateUnaryOperation(node *_unaryOperationNode) Value {
 	case "void":
 		return UndefinedValue()
 	case "delete":
-		target.reference().Delete()
-		return UndefinedValue() // FIXME This is wrong/incomplete
+		return toValue(target.reference().Delete())
 	case "typeof":
 		switch targetValue._valueType {
 		case valueUndefined:
diff --git a/type_reference.go b/type_reference.go
index <HASH>..<HASH> 100644
--- a/type_reference.go
+++ b/type_reference.go
@@ -6,7 +6,7 @@ type _reference interface {
 	PutValue(Value) bool
 	Name() string
 	Strict() bool
-	Delete()
+	Delete() bool
 }
 
 // Reference
@@ -70,11 +70,12 @@ func (self *_propertyReference) PutValue(value Value) bool {
 	return true
 }
 
-func (self *_propertyReference) Delete() {
+func (self *_propertyReference) Delete() bool {
 	if self.Base == nil {
-		return
+		// ?
+		return false
 	}
-	self.Base.delete(self.name, self.Strict())
+	return self.Base.delete(self.name, self.Strict())
 }
 
 // ArgumentReference
Pass back result of "delete ..." (true or false)