diff --git a/middleware/backend_lookup.go b/middleware/backend_lookup.go
index 3d67ef375..7621851c9 100644
--- a/middleware/backend_lookup.go
+++ b/middleware/backend_lookup.go
@@ -380,16 +380,22 @@ func NS(b ServiceBackend, zone string, state request.Request, opt Options) (reco
 func SOA(b ServiceBackend, zone string, state request.Request, opt Options) ([]dns.RR, []msg.Service, error) {
 	header := dns.RR_Header{Name: zone, Rrtype: dns.TypeSOA, Ttl: 300, Class: dns.ClassINET}
 
+	Mbox := hostmaster + "."
+	Ns := "ns.dns."
+	if zone[0] != '.' {
+		Mbox += zone
+		Ns += zone
+	}
+
 	soa := &dns.SOA{Hdr: header,
-		Mbox:    hostmaster + "." + zone,
-		Ns:      "ns.dns." + zone,
+		Mbox:    Mbox,
+		Ns:      Ns,
 		Serial:  uint32(time.Now().Unix()),
 		Refresh: 7200,
 		Retry:   1800,
 		Expire:  86400,
 		Minttl:  minTTL,
 	}
-	// TODO(miek): fake some msg.Service here when returning?
 	return []dns.RR{soa}, nil, nil
 }