diff --git a/client/client.pri b/client/client.pri
new file mode 100644
index 0000000000000000000000000000000000000000..77b43200c0cc3c300f277157e920523028d4a304
--- /dev/null
+++ b/client/client.pri
@@ -0,0 +1,15 @@
+HEADERS += $$PWD/dap_client.h \
+    $$PWD/dap_client_internal.h \
+    $$PWD/dap_client_remote.h \
+    $$PWD/sxmlc/sxmlc.h \
+    $$PWD/sxmlc/sxmlsearch.h
+
+
+SOURCES += $$PWD/dap_client.c \
+    $$PWD/dap_client_internal.c \
+    $$PWD/dap_client_remote.c \
+    $$PWD/sxmlc/sxmlc.c \
+    $$PWD/sxmlc/sxmlsearch.c
+
+
+INCLUDEPATH += $$PWD
diff --git a/core/core.pri b/core/core.pri
new file mode 100644
index 0000000000000000000000000000000000000000..3a669eca3b77de891bced2f716643f3ca24df55b
--- /dev/null
+++ b/core/core.pri
@@ -0,0 +1,11 @@
+HEADERS += $$PWD/dap_common.h \
+    $$PWD/dap_config.h \
+    $$PWD/dap_math_ops.h \
+    $$PWD/uthash.h \
+    $$PWD/utlist.h \
+    $$PWD/dap_math_ops.h
+
+SOURCES += $$PWD/dap_common.c \
+    $$PWD/dap_config.c 
+
+INCLUDEPATH += $$PWD
diff --git a/crypto/crypto.pri b/crypto/crypto.pri
new file mode 100644
index 0000000000000000000000000000000000000000..1b1b486997f6a01a4182419efe9db36019ec3150
--- /dev/null
+++ b/crypto/crypto.pri
@@ -0,0 +1,49 @@
+HEADERS += $$PWD/dap_enc.h \
+    $$PWD/dap_enc_base64.h \
+    $$PWD/dap_enc_aes.h \
+    $$PWD/dap_enc_newhope.h \
+    $$PWD/dap_enc_msrln16.h \
+    $$PWD/dap_enc_key.h \
+    $$PWD/dap_enc_sidh16.h \
+    $$PWD/liboqs/kex_sidh_cln16/kex_sidh_cln16.h \
+    $$PWD/liboqs/kex_sidh_cln16/SIDH.h \
+    $$PWD/liboqs/kex_sidh_cln16/SIDH_internal.h \
+    $$PWD/liboqs/kex_rlwe_msrln16/kex_rlwe_msrln16.h \
+    $$PWD/liboqs/kex_rlwe_msrln16/LatticeCrypto_priv.h \
+    $$PWD/liboqs/kex_rlwe_msrln16/LatticeCrypto.h \
+    $$PWD/liboqs/crypto/sha3/sha3.h \
+    $$PWD/liboqs/crypto/rand/rand.h \
+    $$PWD/liboqs/crypto/rand_urandom_aesctr/rand_urandom_aesctr.h \
+    $$PWD/liboqs/crypto/rand_urandom_chacha20/rand_urandom_chacha20.h \
+    $$PWD/liboqs/crypto/aes/aes_local.h \
+    $$PWD/liboqs/crypto/aes/aes.h
+
+SOURCES += $$PWD/dap_enc.c \
+    $$PWD/dap_enc_base64.c \
+    $$PWD/dap_enc_aes.c \
+    $$PWD/dap_enc_newhope.c \
+    $$PWD/dap_enc_msrln16.c \
+    $$PWD/dap_enc_key.c \
+    $$PWD/dap_enc_sidh16.c \
+    $$PWD/liboqs/kex_sidh_cln16/kex_sidh_cln16.c \
+    $$PWD/liboqs/kex_sidh_cln16/SIDH.c \
+    $$PWD/liboqs/kex_sidh_cln16/SIDH_setup.c \
+    $$PWD/liboqs/kex_sidh_cln16/sidh_kex.c \
+    $$PWD/liboqs/kex_sidh_cln16/ec_isogeny.c \
+    $$PWD/liboqs/kex_sidh_cln16/fpx.c \
+    $$PWD/liboqs/kex_sidh_cln16/generic/fp_generic.c \
+    $$PWD/liboqs/kex_rlwe_msrln16/generic/ntt.c \
+    $$PWD/liboqs/kex_rlwe_msrln16/kex_rlwe_msrln16.c \
+    $$PWD/liboqs/kex_rlwe_msrln16/LatticeCrypto_kex.c \
+    $$PWD/liboqs/kex_rlwe_msrln16/ntt_constants.c \
+    $$PWD/liboqs/crypto/sha3/sha3.c \
+    $$PWD/liboqs/crypto/rand/rand.c \
+    $$PWD/liboqs/crypto/rand_urandom_aesctr/rand_urandom_aesctr.c \
+    $$PWD/liboqs/crypto/rand_urandom_chacha20/rand_urandom_chacha20.c \
+    $$PWD/liboqs/crypto/aes/aes_c.c \
+    $$PWD/liboqs/crypto/aes/aes_ni.c \
+    $$PWD/liboqs/crypto/aes/aes.c 
+
+
+
+INCLUDEPATH += $$PWD
diff --git a/crypto/liboqs/common/common.h b/crypto/liboqs/common/common.h
index 010d9324d7033aaadc5c5e1da7a3ea11ea6a1bcf..0eeeb95785289acd468c16811690cfa48b7c2332 100644
--- a/crypto/liboqs/common/common.h
+++ b/crypto/liboqs/common/common.h
@@ -2,6 +2,7 @@
 #define __OQS_COMMON_H
 
 #include <stdlib.h>
+#include <stdio.h>
 
 #define OQS_SUCCESS 1
 #define OQS_ERROR 0
diff --git a/crypto/liboqs/crypto/rand/rand.h b/crypto/liboqs/crypto/rand/rand.h
index 710e449273cee3b5ea0880fc0b8033e16bdade83..bf5af4e84df956786d80e22a6dffa577de04ee89 100644
--- a/crypto/liboqs/crypto/rand/rand.h
+++ b/crypto/liboqs/crypto/rand/rand.h
@@ -9,6 +9,10 @@
 #include <stddef.h>
 #include <stdint.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 enum OQS_RAND_alg_name {
 	OQS_RAND_alg_default,
 	OQS_RAND_alg_urandom_chacha20,
@@ -95,4 +99,9 @@ double OQS_RAND_zscore_deviation_from_uniform(const unsigned long occurrences[25
 void OQS_RAND_report_statistics(const unsigned long occurrences[256], const char *indent);
 
 int OQS_RAND_get_system_entropy(uint8_t *buf, size_t n);
+
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/crypto/liboqs/kex_rlwe_msrln16/kex_rlwe_msrln16.h b/crypto/liboqs/kex_rlwe_msrln16/kex_rlwe_msrln16.h
index 77613a42e99356f61fda64706ba680ebda16c53d..08cd3ff4a877dac586f3a3f6b04cd796dfa40c5c 100644
--- a/crypto/liboqs/kex_rlwe_msrln16/kex_rlwe_msrln16.h
+++ b/crypto/liboqs/kex_rlwe_msrln16/kex_rlwe_msrln16.h
@@ -16,6 +16,10 @@
 /*#include <oqs/kex.h>
 #include <oqs/rand.h>*/
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 OQS_KEX *OQS_KEX_rlwe_msrln16_new(OQS_RAND *rand);
 
 int OQS_KEX_rlwe_msrln16_alice_0(OQS_KEX *k, void **alice_priv, uint8_t **alice_msg, size_t *alice_msg_len);
@@ -25,4 +29,8 @@ int OQS_KEX_rlwe_msrln16_alice_1(OQS_KEX *k, const void *alice_priv, const uint8
 void OQS_KEX_rlwe_msrln16_alice_priv_free(OQS_KEX *k, void *alice_priv);
 void OQS_KEX_rlwe_msrln16_free(OQS_KEX *k);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif
diff --git a/crypto/liboqs/kex_sidh_cln16/kex_sidh_cln16.c b/crypto/liboqs/kex_sidh_cln16/kex_sidh_cln16.c
index 5151901a9778abf8a81a23cc53e40ccd5648a4e1..178f9830bce38ee9e187ca1191efea93ea10346d 100644
--- a/crypto/liboqs/kex_sidh_cln16/kex_sidh_cln16.c
+++ b/crypto/liboqs/kex_sidh_cln16/kex_sidh_cln16.c
@@ -241,66 +241,7 @@ cleanup:
 	return ret;
 }
 
-int OQS_KEX_sidh_cln16_alice_1(OQS_KEX *k, const void *alice_priv, const uint8_t *bob_msg, const size_t bob_msg_len, uint8_t **key, size_t *key_len) {
 
-	int ret;
-	// decompression values
-	unsigned char *R = NULL, *A = NULL;
-
-	if (!k || !alice_priv || !bob_msg || !key || !key_len) {
-		return 0;
-	}
-
-	*key = NULL;
-
-	int compressed = isCompressed(k->named_parameters);
-
-	*key = malloc(SIDH_SHAREDKEY_LEN);
-	if (*key == NULL) {
-		goto err;
-	}
-	*key_len = SIDH_SHAREDKEY_LEN;
-
-	if (compressed) {
-		if (bob_msg_len != SIDH_COMPRESSED_PUBKEY_LEN) {
-			goto err;
-		}
-		A = malloc(SIDH_COMPRESSED_A_LEN);
-		if (A == NULL) {
-			goto err;
-		}
-		R = malloc(SIDH_COMPRESSED_R_LEN);
-		if (R == NULL) {
-			goto err;
-		}
-		// compute Alice's shared secret
-		oqs_sidh_cln16_PublicKeyBDecompression_A((unsigned char *) alice_priv, (unsigned char *) bob_msg, R, A, k->ctx);
-		if (oqs_sidh_cln16_EphemeralSecretAgreement_Compression_A((unsigned char *) alice_priv, R, A, (unsigned char *) *key, k->ctx) != SIDH_CRYPTO_SUCCESS) {
-			goto err;
-		}
-	} else {
-		if (bob_msg_len != SIDH_PUBKEY_LEN) {
-			goto err;
-		}
-		if (oqs_sidh_cln16_EphemeralSecretAgreement_A((unsigned char *) alice_priv, (unsigned char *) bob_msg, (unsigned char *) *key, k->ctx) != SIDH_CRYPTO_SUCCESS) {
-			goto err;
-		}
-	}
-
-	ret = 1;
-	goto cleanup;
-
-err:
-	ret = 0;
-	free(*key);
-	*key = NULL;
-
-cleanup:
-	free(A);
-	free(R);
-
-	return ret;
-}
 
 void OQS_KEX_sidh_cln16_alice_priv_free(UNUSED OQS_KEX *k, void *alice_priv) {
 	if (alice_priv) {
diff --git a/http/http.pri b/http/http.pri
new file mode 100644
index 0000000000000000000000000000000000000000..4c888649076a49440c884c27cfdf130528b5e3b4
--- /dev/null
+++ b/http/http.pri
@@ -0,0 +1,15 @@
+HEADERS += $$PWD/dap_http_client.h \
+    $$PWD/dap_http_client_simple.h \
+    $$PWD/dap_http_header.h
+
+
+SOURCES += $$PWD/dap_http_client.c \
+    $$PWD/dap_http_client_simple.c \
+    $$PWD/dap_http_header.c
+
+
+linux-* {
+    LIBS += -lcurl
+}
+
+INCLUDEPATH += $$PWD
diff --git a/libdap.pri b/libdap.pri
new file mode 100644
index 0000000000000000000000000000000000000000..eac25ba7bd7c6c6393a3fd478f78f822668c8515
--- /dev/null
+++ b/libdap.pri
@@ -0,0 +1,7 @@
+include (client/client.pri)
+include (core/core.pri)
+include (crypto/crypto.pri)
+include (http/http.pri)
+
+
+INCLUDEPATH += $$PWD