diff --git a/main.go b/main.go
index ae97728b6480e6292ba708b21a32826ab8ef4edf..15f4208ec8ed3069f18c08f84e80cc040fe5995c 100644
--- a/main.go
+++ b/main.go
@@ -39,14 +39,30 @@ func (s *solver) Present(ch *whapi.ChallengeRequest) error {
 
 	txt := fmt.Sprintf(`%s IN TXT "%s"`, ch.ResolvedFQDN, ch.Key)
 
-	record, err := client.CreateRecord(txt)
+	search := ch.ResolvedFQDN + " *"
+	records, err := client.ListRecords(nil, &search)
+	if err != nil {
+		klog.Error(err)
+		return err
+	}
+
+	var record rwthdns.Record
+
+	if len(records) == 0 {
+		record, err = client.CreateRecord(txt)
+	} else if len(records) == 1 {
+		record, err = client.UpdateRecord(records[0].Id, txt)
+	} else {
+		err = fmt.Errorf("More than one search result for %s", ch.ResolvedFQDN)
+	}
 
-	klog.V(2).Infof("record %+v", record)
 	if err != nil {
 		klog.Error(err)
 		return err
 	}
 
+	klog.V(2).Infof("record %+v", record)
+
 	zone, err := client.DeployZone(record.ZoneId)
 	klog.V(2).Infof("deployed zone %+v", zone)
 	if err != nil {