diff --git a/pkg/api/registry.go b/pkg/api/registry.go
index 6ceeabed9aeb257e9c8675c8370b8345e6d57519..cb49b800b6b7ca5889cce3e4c0709bb16658f507 100644
--- a/pkg/api/registry.go
+++ b/pkg/api/registry.go
@@ -25,8 +25,9 @@ type locationMap map[string]*m.Location
 type transportType string
 
 var (
-	transportOpenVPN transportType = "openvpn"
-	transportOBFS4   transportType = "obfs4"
+	transportOpenVPN  transportType = "openvpn"
+	transportOBFS4    transportType = "obfs4"
+	transportOBFS4Hop transportType = "obfs4-hop"
 
 	tmpEIPFilePath = "/tmp/leap-eip-legacy.json"
 )
@@ -128,7 +129,7 @@ func newRegistry(cfg *Config) (*registry, error) {
 								Bucket:         g.Bucket,
 								Port:           p,
 								Transport:      proto,
-								Type:           string(transportOpenVPN),
+								Type:           transport.Type,
 								LastSeenMillis: time.Now().UnixMilli(),
 							}
 							_, exists := gateways[loc]
@@ -150,7 +151,7 @@ func newRegistry(cfg *Config) (*registry, error) {
 							loc := m.CanonicalizeLocation(g.Location)
 							bridge := &m.Bridge{
 								Healthy:        true,
-								Type:           string(transportOBFS4),
+								Type:           transport.Type,
 								Host:           g.Host,
 								Location:       loc,
 								Bucket:         g.Bucket,
@@ -174,6 +175,33 @@ func newRegistry(cfg *Config) (*registry, error) {
 							}
 						}
 					}
+				case string(transportOBFS4Hop):
+					for _, proto := range transport.Protocols {
+						loc := m.CanonicalizeLocation(g.Location)
+						bridge := &m.Bridge{
+							Healthy:        true,
+							Type:           transport.Type,
+							Host:           g.Host,
+							Location:       loc,
+							Bucket:         g.Bucket,
+							IPAddr:         g.IPAddr,
+							Transport:      proto,
+							Options:        transport.Options,
+							LastSeenMillis: time.Now().UnixMilli(),
+						}
+						_, exists := bridges[loc]
+						if !exists {
+							// key not already in the location map
+							bridges[loc] = []*m.Bridge{bridge}
+						} else {
+							bridges[loc] = append(bridges[loc], bridge)
+						}
+						if _, exists := locations[loc]; exists {
+							locations[loc].HasBridges = true
+						} else {
+							log.Fatal().Msgf("Could not find matching loation %s in locations list", loc)
+						}
+					}
 
 				default:
 					fmt.Printf("unknown transport type %v", transport.Type)