diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c
index 20082eb..ae5e295 100644
--- a/camel/providers/imapx/camel-imapx-server.c
+++ b/camel/providers/imapx/camel-imapx-server.c
@@ -4943,11 +4943,6 @@ imapx_server_dispose (GObject *object)
 	}
 	QUEUE_UNLOCK (server);
 
-	if (server->parser_thread) {
-		g_thread_join (server->parser_thread);
-		server->parser_thread = NULL;
-	}
-
 	if (server->cinfo && imapx_idle_supported (server))
 		imapx_exit_idle (server);
 
@@ -5096,7 +5091,7 @@ camel_imapx_server_connect (CamelIMAPXServer *is,
 	if (!success)
 		return FALSE;
 
-	is->parser_thread = g_thread_create ((GThreadFunc) imapx_parser_thread, is, TRUE, NULL);
+	g_thread_create ((GThreadFunc) imapx_parser_thread, is, FALSE, NULL);
 	return TRUE;
 }
 
@@ -5182,6 +5177,8 @@ imapx_server_get_message (CamelIMAPXServer *is,
 
 	if (success)
 		stream = job->u.get_message.stream;
+	else
+		g_object_unref (job->u.get_message.stream);
 
 	g_free (job);
 
diff --git a/camel/providers/imapx/camel-imapx-server.h b/camel/providers/imapx/camel-imapx-server.h
index 6b46b18..ff612ea 100644
--- a/camel/providers/imapx/camel-imapx-server.h
+++ b/camel/providers/imapx/camel-imapx-server.h
@@ -105,7 +105,6 @@ struct _CamelIMAPXServer {
 	   processed after the command completes. */
 	GSList *expunged;
 
-	GThread *parser_thread;
 	/* Protects the output stream between parser thread (which can disconnect from server) and other threads that issue
 	   commands. Input stream does not require a lock since only parser_thread can operate on it */
 	GStaticRecMutex ostream_lock;
