diff --git a/browse.c b/browse.c
index ef942d8..f8c547f 100644
--- a/browse.c
+++ b/browse.c
@@ -1,4 +1,6 @@
 #include "browse.h"
+#include <stdio.h>
+#include <stdlib.h>
 
 int main() {
   char *query = "example";
@@ -8,7 +10,7 @@ int main() {
     printf("Result: %s\n", result);
     free(result); // Free the allocated memory for the result
   } else {
-    printf("Failed to fetch news.\n");
+    fprintf(stderr, "Error: Failed to fetch news.\n");
   }
 
   return 0;
diff --git a/browse.h b/browse.h
index 7273de1..ec67358 100644
--- a/browse.h
+++ b/browse.h
@@ -13,7 +13,7 @@ char *web_search_news(char *q) {
   news[0] = 0;
   char *q_encoded = url_encode(q);
   sprintf(news,
-          "https://search.molodetz.nl/search?q=%s&format=json&categories=news",
+          "https://search.molodetz.nl/search?q=%s&format=json&categories=news&preferences=eJx1WMuy4zYO_Zp4o4ormaRqahZepZL5gexVFAlLiEhCzYdt3a8PoIdFWt2Ldl8fkCCIxwForRL0FBDirQcPQdmLVb7PqoebyokulrSycPP2Il81uclCgtvlrh6oybcBItkHhNsFHW9qp0Cv-faXshEuDtJA5vb_P_--RHWHCCro4fbLJQ3g4BZRdF1YQbYptqzLw7NNqtt2G8JDOyn-eqXQX9ZtbUyz3UzU4BOEVlnsveO_t_3KPJTXYNrt3BX9liHMLfo2YWIFK4j-jh4Ta9WBrN3QdZ8YplcvzazKgk63v0OGy0BphDneDNwV3-CSg23vFJxKCX1_mwKkNF8MRtVZtgJ8j57d_L9e9W0bSaOyjQOD6qf__MG366CJ7OCxbRdHxhptHmiA2nb571OmskGWuRxRi8hOfFJj0edXMyk9ijpWm0TmvYqN3Asf0LZ3tOtJ09g4DIFCibGfG_6UU0K52CuOvFGbSo8vis0TR9yADi3Kv8LaDlOX9QhpX5IM9v2hcvHDVWt9NVBs0xN78Q4BOI7bTg5QjAyyCzUKztgMU7M6rXCegJxQDMknAwbgi9Pk7SYDMamEvIA4IQMjEOiJ5vhu2GT519NZfSFbzS3MLmS1BQf-BCWHHGet3nZq4uX8KdY4-gcnccyx6tdXYcLdBBJzdydyDps0qOS4usplAThR6J6eKkBjMHAGSy6v_rwH9CMqXW6Y58IJPeDXwPVQIFw5qtvjQQY6CP32lWXAgSS3fycyAZQptxP1fNXJqlmyKx4XKCWOHgilU7muIEjNCO2UkRhUF5R8bEcOnPEQVsevALzeycNK4lWKZfmOznSHYej6HArF6FVxPnr-EynH72N7VnHEAlPJXOj5B-NAxzFcHEGFuRG-jVhc31IXE1zDbjfTp9KT8nudTbtT_azUsY3MHKGsGprAb4ccpwrICoFqKMBEhQkrW2Dc65TLb2XBcwEcoirHp9xxDT-2_QGMwXSiu0ApMVETx5SgSA0mS51jvE4zN4793loZM0tKubw5drEMfx7IwglfbZKsbOTjjTrlE-omat6lQskeicaZEnGMRvH17ook9-TlKr_vlqp0EcaLE-glTQ91JhvwxyouYoDx7L4Nr3y35PyEltKxP-Ru7sHtOTEBhJS7MtyLU3n1yJufT-gK0az0fD46ZMcdqVhmuRdEDn2JPemFI3mOZRNnT34WTtmN4nwbQ237Cp3OWuETQ8ZHL5lXLHwwlS0da7vonJ2zc1U1R2VEykHDkN9pOvbXnva8u4CvWy4PMC_lTRAm3aYcYVzJ3bVJFs1LBU6TsgeHFz7K-Ko4llo6VqyVmw4GEGUbbRfLeCT4_H721oJWbl2Qk_u6qSuVSSHzkBRL1tcD3Efi8eXtQW0pmzsnPygsd3NHfRrJnRLk7lmt4eEG4QORtjyXGPsfuczYhWWjNH3DI5LMV7gQd7GehKmbIe_NRBSymdvgVawUnxqVKpce3bREefaCubIU0uyICdEXCXy3qMeS63k5ljTeCz3tbYKb2mHj2qTKA7a2dYrmhlfx3LBTRDf8O_Q0bOcth49stoplzwDn5mYnwZWKaq5dV-QI4Ucy7gDpRzLRzK44i79-freYty1bY6M7b_Nc4LH0hkghBeWj5SZc-o9D0z-q0DrFI6ch_wOz3-JBxYF5-jsrzN49HL6WxD9C6-hrqArAPZkP6-N5JIJ9npDqUjw1Sf5FSBXZ7zLuepxRasvwWh4TD2CJZ7p9sJuM8PexaOKXhHS7TYrymoFY1tAkhFJky_L9ulzouNeEMt10qojIRMxNkUvCyAi0J_-7c5d3Ptr5npuFbLldY7hfo1_z_HhCHEbmzomVxcXmaafVb08mhlLnAtS1sUKnMlrhU8UExZNX0zF5xXKqD9gPqTGqIoX1Zm6OWGde5G6rdl8czYkyc3qdNPxU0CMxyd4tPfdWEcfcZZ_y3pUyz345vhMnChNO8igujySLhufvsFbV96aNY3H2kYfhOJTPGjVQdbcFqB05U_6YEd7I-_Gj0DItSsIWyx7oqkfmE7v5k4Y7ojF-gtXxAnzLVLt6mZaWtn1C9xmqgsWyaoCVpdLkllGv1vCg-cPLggp1cTleTwlVCk9pVQo_3tWlaInbEb4n2XtQjl_eQ92jUKcv8pVtjkcpxw-w5k2GphT_-ttv_30dmiN8eeWq_cvkWCJePSTpypyoG_OTgvE4FgMcn62reuRul-QBKYo-yPSprB34CP_hQ8c9vTolpXDFYvbldvCorr4A54Cs8HnKWeDP9lnpS7_vPyIcP7RMNvPYF2-k2vUnpGfgsl86aUzsy7XeKLQ8IunxPSzu28QzPJW08nNO4EA91uFJWZ05VhSWsuQ3Dbc4FqVtHrb3Fv2d5BSp11XZhZ8WzP-3fwFOiVFV",
           q_encoded);
   free(q_encoded);
   char *ret = curl_get(news);
@@ -35,7 +35,7 @@ char *web_search(char *q) {
   char *news = (char *)malloc(4096);
   news[0] = 0;
   char *q_encoded = url_encode(q);
-  sprintf(news, "https://search.molodetz.nl/search?q=%s&format=json",
+  sprintf(news, "https://search.molodetz.nl/search?q=%s&format=json&preferences=eJx1WMuy4zYO_Zp4o4ormaRqahZepZL5gexVFAlLiEhCzYdt3a8PoIdFWt2Ldl8fkCCIxwForRL0FBDirQcPQdmLVb7PqoebyokulrSycPP2Il81uclCgtvlrh6oybcBItkHhNsFHW9qp0Cv-faXshEuDtJA5vb_P_--RHWHCCro4fbLJQ3g4BZRdF1YQbYptqzLw7NNqtt2G8JDOyn-eqXQX9ZtbUyz3UzU4BOEVlnsveO_t_3KPJTXYNrt3BX9liHMLfo2YWIFK4j-jh4Ta9WBrN3QdZ8YplcvzazKgk63v0OGy0BphDneDNwV3-CSg23vFJxKCX1_mwKkNF8MRtVZtgJ8j57d_L9e9W0bSaOyjQOD6qf__MG366CJ7OCxbRdHxhptHmiA2nb571OmskGWuRxRi8hOfFJj0edXMyk9ijpWm0TmvYqN3Asf0LZ3tOtJ09g4DIFCibGfG_6UU0K52CuOvFGbSo8vis0TR9yADi3Kv8LaDlOX9QhpX5IM9v2hcvHDVWt9NVBs0xN78Q4BOI7bTg5QjAyyCzUKztgMU7M6rXCegJxQDMknAwbgi9Pk7SYDMamEvIA4IQMjEOiJ5vhu2GT519NZfSFbzS3MLmS1BQf-BCWHHGet3nZq4uX8KdY4-gcnccyx6tdXYcLdBBJzdydyDps0qOS4usplAThR6J6eKkBjMHAGSy6v_rwH9CMqXW6Y58IJPeDXwPVQIFw5qtvjQQY6CP32lWXAgSS3fycyAZQptxP1fNXJqlmyKx4XKCWOHgilU7muIEjNCO2UkRhUF5R8bEcOnPEQVsevALzeycNK4lWKZfmOznSHYej6HArF6FVxPnr-EynH72N7VnHEAlPJXOj5B-NAxzFcHEGFuRG-jVhc31IXE1zDbjfTp9KT8nudTbtT_azUsY3MHKGsGprAb4ccpwrICoFqKMBEhQkrW2Dc65TLb2XBcwEcoirHp9xxDT-2_QGMwXSiu0ApMVETx5SgSA0mS51jvE4zN4793loZM0tKubw5drEMfx7IwglfbZKsbOTjjTrlE-omat6lQskeicaZEnGMRvH17ook9-TlKr_vlqp0EcaLE-glTQ91JhvwxyouYoDx7L4Nr3y35PyEltKxP-Ru7sHtOTEBhJS7MtyLU3n1yJufT-gK0az0fD46ZMcdqVhmuRdEDn2JPemFI3mOZRNnT34WTtmN4nwbQ237Cp3OWuETQ8ZHL5lXLHwwlS0da7vonJ2zc1U1R2VEykHDkN9pOvbXnva8u4CvWy4PMC_lTRAm3aYcYVzJ3bVJFs1LBU6TsgeHFz7K-Ko4llo6VqyVmw4GEGUbbRfLeCT4_H721oJWbl2Qk_u6qSuVSSHzkBRL1tcD3Efi8eXtQW0pmzsnPygsd3NHfRrJnRLk7lmt4eEG4QORtjyXGPsfuczYhWWjNH3DI5LMV7gQd7GehKmbIe_NRBSymdvgVawUnxqVKpce3bREefaCubIU0uyICdEXCXy3qMeS63k5ljTeCz3tbYKb2mHj2qTKA7a2dYrmhlfx3LBTRDf8O_Q0bOcth49stoplzwDn5mYnwZWKaq5dV-QI4Ucy7gDpRzLRzK44i79-freYty1bY6M7b_Nc4LH0hkghBeWj5SZc-o9D0z-q0DrFI6ch_wOz3-JBxYF5-jsrzN49HL6WxD9C6-hrqArAPZkP6-N5JIJ9npDqUjw1Sf5FSBXZ7zLuepxRasvwWh4TD2CJZ7p9sJuM8PexaOKXhHS7TYrymoFY1tAkhFJky_L9ulzouNeEMt10qojIRMxNkUvCyAi0J_-7c5d3Ptr5npuFbLldY7hfo1_z_HhCHEbmzomVxcXmaafVb08mhlLnAtS1sUKnMlrhU8UExZNX0zF5xXKqD9gPqTGqIoX1Zm6OWGde5G6rdl8czYkyc3qdNPxU0CMxyd4tPfdWEcfcZZ_y3pUyz345vhMnChNO8igujySLhufvsFbV96aNY3H2kYfhOJTPGjVQdbcFqB05U_6YEd7I-_Gj0DItSsIWyx7oqkfmE7v5k4Y7ojF-gtXxAnzLVLt6mZaWtn1C9xmqgsWyaoCVpdLkllGv1vCg-cPLggp1cTleTwlVCk9pVQo_3tWlaInbEb4n2XtQjl_eQ92jUKcv8pVtjkcpxw-w5k2GphT_-ttv_30dmiN8eeWq_cvkWCJePSTpypyoG_OTgvE4FgMcn62reuRul-QBKYo-yPSprB34CP_hQ8c9vTolpXDFYvbldvCorr4A54Cs8HnKWeDP9lnpS7_vPyIcP7RMNvPYF2-k2vUnpGfgsl86aUzsy7XeKLQ8IunxPSzu28QzPJW08nNO4EA91uFJWZ05VhSWsuQ3Dbc4FqVtHrb3Fv2d5BSp11XZhZ8WzP-3fwFOiVFV",
           q_encoded);
   free(q_encoded);
   char *ret = curl_get(news);
diff --git a/db_utils.c b/db_utils.c
index 877d527..8a51658 100644
--- a/db_utils.c
+++ b/db_utils.c
@@ -1,5 +1,7 @@
 #include "db_utils.h"
 #include <stdio.h>
+#include <stdlib.h>
+#include <sqlite3.h>
 
 void db_initialize() {
   sqlite3 *db;
@@ -7,6 +9,7 @@ void db_initialize() {
   int rc = sqlite3_open("database.db", &db);
 
   if (rc != SQLITE_OK) {
+    fprintf(stderr, "Error: Cannot open database: %s\n", sqlite3_errmsg(db));
     return;
   }
 
@@ -15,6 +18,7 @@ void db_initialize() {
   rc = sqlite3_exec(db, sql, 0, 0, &err_msg);
 
   if (rc != SQLITE_OK) {
+    fprintf(stderr, "SQL error: %s\n", err_msg);
     sqlite3_free(err_msg);
   }
 
diff --git a/main.c b/main.c
index e4a6b49..95375ad 100644
--- a/main.c
+++ b/main.c
@@ -12,7 +12,6 @@
 #include "openai.h"
 #include "utils.h"
 #include "db_utils.h"
-
 #include "tools.h"
 
 volatile sig_atomic_t sigint_count = 0;
@@ -38,6 +37,13 @@ char *get_prompt_from_stdin(char *prompt) {
 char *get_prompt_from_args(int argc, char **argv) {
     char *prompt = malloc(10 * 1024 * 1024 + 1);
     char *system = malloc(1024 * 1024);
+    if (!prompt || !system) {
+        fprintf(stderr, "Error: Memory allocation failed.\n");
+        free(prompt);
+        free(system);
+        return NULL;
+    }
+
     bool get_from_std_in = false;
 
     for (int i = 1; i < argc; i++) {
@@ -62,7 +68,7 @@ char *get_prompt_from_args(int argc, char **argv) {
         } else if (strcmp(argv[i], "--nh") == 0) {
             SYNTAX_HIGHLIGHT_ENABLED = false;
             fprintf(stderr, "Syntax highlighting disabled.\n");
-        } else if (!get_from_std_in) {
+        } else {
             strcat(system, argv[i]);
             strcat(system, (i < argc - 1) ? " " : ".");
         }
@@ -70,7 +76,6 @@ char *get_prompt_from_args(int argc, char **argv) {
 
     if (get_from_std_in) {
         if (*system) openai_system(system);
-        free(system);
         prompt = get_prompt_from_stdin(prompt);
     } else {
         free(prompt);
@@ -101,7 +106,6 @@ bool try_prompt(int argc, char *argv[]) {
     return false;
 }
 
-
 char **get_parameters(const char *content, const char *delimiter) {
     char *start = NULL;
     char **parameters = NULL;
@@ -141,7 +145,6 @@ void repl() {
         line = line_read("> ");
         if (!line || !*line) continue;
 
-
         if (!strncmp(line, "!dump", 5)) {
             printf("%s\n", message_json());
             continue;
@@ -187,7 +190,6 @@ void repl() {
     }
 }
 
-
 char *strreplace(const char *content, const char *what, const char *with) {
     char *pos = strstr(content, what);
     if (!pos) return strdup(content);
@@ -219,7 +221,7 @@ void init() {
              schema);
     free(schema);
 
-    fprintf(stderr, "Loading... ⏳");
+    fprintf(stderr, "Loading... 4e6");
     openai_system(payload);
     if (!openai_include(".rcontext.txt")) {
         openai_include("~/.rcontext.txt");
@@ -251,4 +253,4 @@ int main(int argc, char *argv[]) {
 
     repl();
     return 0;
-}
+}
\ No newline at end of file
diff --git a/rpylib.c b/rpylib.c
index 92755c8..b75609c 100644
--- a/rpylib.c
+++ b/rpylib.c
@@ -46,42 +46,59 @@ static PyObject *rpylib_reset(PyObject *self, PyObject *args) {
 static PyObject *rpylib_chat(PyObject *self, PyObject *args) {
   const char *role, *message;
 
-  printf("That goes alright! 1\n");
   if (!PyArg_ParseTuple(args, "ss", &role, &message)) {
     return NULL;
   }
-  printf("That goes alright! 2\n");
+
   char *result = openai_chat(role, message);
+  if (!result) {
+    PyErr_SetString(PyExc_RuntimeError, "Failed to get response from OpenAI.");
+    return NULL;
+  }
+
   PyObject *py_result = PyUnicode_FromString(result);
   free(result);
   return py_result;
 }
+
 static PyObject *rpylib_prompt(PyObject *self, PyObject *args) {
   const char *role = "user";
   const char *message;
   if (!PyArg_ParseTuple(args, "s", &message)) {
     return NULL;
   }
+
   char *result = openai_chat(role, message);
+  if (!result) {
+    PyErr_SetString(PyExc_RuntimeError, "Failed to get response from OpenAI.");
+    return NULL;
+  }
+
   PyObject *py_result = PyUnicode_FromString(result);
   free(result);
   return py_result;
 }
+
 static PyObject *rpylib_system(PyObject *self, PyObject *args) {
   const char *role = "system";
   const char *message;
   if (!PyArg_ParseTuple(args, "s", &message)) {
     return NULL;
   }
+
   char *result = openai_chat(role, message);
+  if (!result) {
+    PyErr_SetString(PyExc_RuntimeError, "Failed to get response from OpenAI.");
+    return NULL;
+  }
+
   PyObject *py_result = PyUnicode_FromString(result);
   free(result);
   return py_result;
 }
+
 static PyMethodDef MyModuleMethods[] = {
     {"chat", rpylib_chat, METH_VARARGS, "Chat with OpenAI."},
-    //{"prompt", rpylib_prompt, METH_VARARGS, "Prompt to OpenAI."},
-    //{"system", rpylib_system, METH_VARARGS, "Add system message."},
     {"reset", rpylib_reset, METH_NOARGS, "Reset message history."},
     {NULL, NULL, 0, NULL}};
 
@@ -90,11 +107,6 @@ static struct PyModuleDef rpylib = {
     "R - the power of R in Python, made by retoor.", -1, MyModuleMethods};
 
 PyMODINIT_FUNC PyInit_rpylib(void) {
-
   auth_init();
-
-  printf("Init\n");
-  void *res = PyModule_Create(&rpylib);
-  printf("GLOB\n");
-  return res;
-}
+  return PyModule_Create(&rpylib);
+}
\ No newline at end of file
diff --git a/rpylib.so b/rpylib.so
index 6db39fd..4213a40 100755
Binary files a/rpylib.so and b/rpylib.so differ