diff --git a/ui/src/App.vue b/ui/src/App.vue
index e36928987b7c31b592ee07aeb10e309af1d7abdf..40b83ac1c1678566042cca3ab3dd0c35a8d32164 100644
--- a/ui/src/App.vue
+++ b/ui/src/App.vue
@@ -2,7 +2,7 @@
   <v-app id="inspire">
 
     <v-app-bar app>
-      <img class="mr-3" :src="require('./assets/logo.png')" height="50"/>
+      <img class="mr-3" :src="require('./assets/logo.png')" height="50" alt="Wg Gen Web"/>
       <v-toolbar-title>Wg Gen Web</v-toolbar-title>
     </v-app-bar>
 
diff --git a/util/util.go b/util/util.go
index 403f82e4bb436173aec13b5bb6f39a9e8342ddbd..6fa8690dfb433205dc633d1c12ccc4e00f7340f6 100644
--- a/util/util.go
+++ b/util/util.go
@@ -52,42 +52,32 @@ func DirectoryExists(name string) bool {
 
 // GetAvailableIp search for an available in cidr against a list of reserved ips
 func GetAvailableIp(cidr string, reserved []string) (string, error) {
-	addresses, err := GetAllAddressesFromCidr(cidr)
+	ip, ipnet, err := net.ParseCIDR(cidr)
 	if err != nil {
 		return "", err
 	}
 
-	for _, addresse := range addresses {
+	// this two addresses are not usable
+	broadcastAddr := BroadcastAddr(ipnet).String()
+	networkAddr := ipnet.IP.String()
+
+	for ip := ip.Mask(ipnet.Mask); ipnet.Contains(ip); inc(ip) {
 		ok := true
+		address := ip.String()
 		for _, r := range reserved {
-			if addresse == r {
+			if address == r {
 				ok = false
 				break
 			}
 		}
-		if ok {
-			return addresse, nil
+		if ok && address != networkAddr && address != broadcastAddr {
+			return address, nil
 		}
 	}
 
 	return "", errors.New("no more available address from cidr")
 }
 
-// GetAllAddressesFromCidr get all ip addresses from cidr
-func GetAllAddressesFromCidr(cidr string) ([]string, error) {
-	ip, ipnet, err := net.ParseCIDR(cidr)
-	if err != nil {
-		return nil, err
-	}
-
-	var ips []string
-	for ip := ip.Mask(ipnet.Mask); ipnet.Contains(ip); inc(ip) {
-		ips = append(ips, ip.String())
-	}
-	// remove network address and broadcast address (and server ip .1)
-	return ips[2 : len(ips)-1], nil
-}
-
 // IsIPv6 check if given ip is IPv6
 func IsIPv6(address string) bool {
 	ip := net.ParseIP(address)
@@ -126,3 +116,18 @@ func inc(ip net.IP) {
 		}
 	}
 }
+
+// BroadcastAddr returns the last address in the given network, or the broadcast address.
+func BroadcastAddr(n *net.IPNet) net.IP {
+	// The golang net package doesn't make it easy to calculate the broadcast address. :(
+	var broadcast net.IP
+	if len(n.IP) == 4 {
+		broadcast = net.ParseIP("0.0.0.0").To4()
+	} else {
+		broadcast = net.ParseIP("::")
+	}
+	for i := 0; i < len(n.IP); i++ {
+		broadcast[i] = n.IP[i] | ^n.Mask[i]
+	}
+	return broadcast
+}