diff --git a/vio/viosslfactories.c b/vio/viosslfactories.c
index 52b624d..a8ba6da 100644
--- a/vio/viosslfactories.c
+++ b/vio/viosslfactories.c
@@ -57,12 +57,28 @@ DH *get_dh2048()
     0x02,
   };
   DH *dh;
+  BIGNUM *dhp_bn, *dhg_bn;
 
   if ((dh=DH_new()) == NULL) return(NULL);
-  dh->p=BN_bin2bn(dh2048_p,sizeof(dh2048_p),NULL);
-  dh->g=BN_bin2bn(dh2048_g,sizeof(dh2048_g),NULL);
-  if ((dh->p == NULL) || (dh->g == NULL))
-  { DH_free(dh); return(NULL); }
+
+  dhp_bn = BN_bin2bn(dh2048_p, sizeof (dh2048_p), NULL);
+  dhg_bn = BN_bin2bn(dh2048_g, sizeof (dh2048_g), NULL);
+
+  if (dhp_bn == NULL || dhg_bn == NULL
+#if OPENSSL_VERSION_NUMBER >= 10101000L
+          || !DH_set0_pqg(dh, dhp_bn, NULL, dhg_bn)
+#endif
+     ) {
+      DH_free(dh);
+      BN_free(dhp_bn);
+      BN_free(dhg_bn);
+      return NULL;
+  }
+
+#if OPENSSL_VERSION_NUMBER < 10101000L
+  dh->p=dhp_bn;
+  dh->g=dhg_bn
+#endif
   return(dh);
 }
 
