diff --git a/src/lsh_proxy.c b/src/lsh_proxy.c
index 3d6377a6dafeeb2888a810dc124cfc5cff673cdc..d513a5e7b1ce4d99543f4f691c6bbe220b9c92fe 100644
--- a/src/lsh_proxy.c
+++ b/src/lsh_proxy.c
@@ -690,10 +690,10 @@ int main(int argc, char **argv)
 
   ALIST_SET(algorithms_server, 
 	    ATOM_DIFFIE_HELLMAN_GROUP1_SHA1,
-	    make_dh_server(make_dh1(&r->super)));
+	    &make_dh_server(make_dh1(&r->super))->super);
   ALIST_SET(algorithms_client, 
 	    ATOM_DIFFIE_HELLMAN_GROUP1_SHA1,
-	    make_dh_client(make_dh1(&r->super)));
+	    &make_dh_client(make_dh1(&r->super))->super);
   
   make_kexinit
     = make_simple_kexinit(&r->super,
diff --git a/src/lshd.c b/src/lshd.c
index b33c462e1c37f8090e0469c3484e90cbe8addd7f..14574d66c3d676d5e9a724e92eff1a74fe302519 100644
--- a/src/lshd.c
+++ b/src/lshd.c
@@ -397,7 +397,8 @@ main_argp_parser(int key, char *arg, struct argp_state *state)
 		LIST(self->kex_algorithms)[i++] = ATOM_DIFFIE_HELLMAN_GROUP1_SHA1;
 		ALIST_SET(self->super.algorithms,
 			  ATOM_DIFFIE_HELLMAN_GROUP1_SHA1,
-			  make_dh_server(make_dh1(&self->random->super)));
+			  &make_dh_server(make_dh1(&self->random->super))
+			  ->super);
 	      }
 #if WITH_SRP	    
 	    if (self->with_srp_keyexchange)
@@ -406,7 +407,8 @@ main_argp_parser(int key, char *arg, struct argp_state *state)
 		LIST(self->kex_algorithms)[i++] = ATOM_SRP_RING1_SHA1_LOCAL;
 		ALIST_SET(self->super.algorithms,
 			  ATOM_SRP_RING1_SHA1_LOCAL,
-			  make_srp_server(make_srp1(&self->random->super), db));
+			  &make_srp_server(make_srp1(&self->random->super), db)
+			  ->super);
 	      }
 #endif /* WITH_SRP */
 	  }
@@ -438,7 +440,8 @@ main_argp_parser(int key, char *arg, struct argp_state *state)
 	      {
 		LIST(self->userauth_methods)[i++] = ATOM_PASSWORD;
 		ALIST_SET(self->userauth_algorithms,
-			  ATOM_PASSWORD, make_userauth_password(db));
+			  ATOM_PASSWORD,
+			  &make_userauth_password(db)->super);
 	      }
 	    if (self->with_publickey)
 	      {
@@ -446,14 +449,14 @@ main_argp_parser(int key, char *arg, struct argp_state *state)
 		LIST(self->userauth_methods)[i++] = ATOM_PUBLICKEY;
 		ALIST_SET(self->userauth_algorithms,
 			  ATOM_PUBLICKEY,
-			  make_userauth_publickey
+			  &make_userauth_publickey
 			  (db,
 			   make_alist(1,
 				      ATOM_SSH_DSS,
 				      make_authorization_db(ssh_format("authorized_keys_sha1"),
 							    &sha1_algorithm),
-				      
-				      -1)));
+				      -1))
+			  ->super);
 	      }
 	  }
 	else
@@ -693,7 +696,7 @@ int main(int argc, char **argv)
 #if WITH_PTY_SUPPORT
     if (options->with_pty)
       ALIST_SET(supported_channel_requests,
-		ATOM_PTY_REQ, &pty_request_handler);
+		ATOM_PTY_REQ, &pty_request_handler.super);
 #endif /* WITH_PTY_SUPPORT */
 
     session_setup = make_install_fix_channel_open_handler