diff -rbu sqlbox-standalone/gw/sqlbox.c sqlbox-standalone-ajg-1.0/gw/sqlbox.c
--- sqlbox-standalone/gw/sqlbox.c	2007-10-05 13:54:02.000000000 -0300
+++ sqlbox-standalone-ajg-1.0/gw/sqlbox.c	2008-02-27 19:35:23.000000000 -0200
@@ -86,6 +86,7 @@
 static Octstr *box_allow_ip;
 static Octstr *box_deny_ip;
 static Octstr *global_sender;
+static long limit_per_cycle;
 
 #ifndef HAVE_MYSQL
 #ifndef HAVE_PGSQL
@@ -97,6 +98,7 @@
 Octstr *sqlbox_id;
 
 #define SLEEP_BETWEEN_SELECTS 1.0
+#define DEFAULT_LIMIT_PER_CYCLE 10
 
 typedef struct _boxc {
     Connection	*smsbox_connection;
@@ -525,6 +527,7 @@
 	Boxc *boxc;
 	int fd;
 	Msg *msg;
+	List *qlist;
 
 	boxc = gw_malloc(sizeof(Boxc));
 	boxc->bearerbox_connection = connect_to_bearerbox_real(bearerbox_host, bearerbox_port, bearerbox_port_ssl, NULL /* bb_our_host */);
@@ -542,19 +545,24 @@
 
 	identify_to_bearerbox(boxc);
 
+	qlist = gwlist_create();
+	gwlist_add_producer(qlist);
+
 	while (sqlbox_status == SQL_RUNNING) {
-		if ((msg = gw_sql_fetch_msg()) != NULL) {
+		if ( gw_sql_fetch_msg(qlist, limit_per_cycle) > 0 ) {
+			while((gwlist_len(qlist)>0) && ((msg = gwlist_consume(qlist)) != NULL )) {
 			if (global_sender != NULL && (msg->sms.sender == NULL || octstr_len(msg->sms.sender) == 0)) {
 				msg->sms.sender = octstr_duplicate(global_sender);
 			}
 			send_msg(boxc->bearerbox_connection, boxc, msg);
 			gw_sql_save_msg(msg, octstr_imm("MT"));
 		}
-		else {
+		} else {
 			gwthread_sleep(SLEEP_BETWEEN_SELECTS);
 		}
 	}
 
+	gwlist_remove_producer(qlist);
 	boxc_destroy(boxc);
 }
 
@@ -684,6 +692,11 @@
 
 	if (cfg_get_integer(&sqlbox_port, grp, octstr_imm("smsbox-port")) == -1)
 		sqlbox_port = 13005;
+
+	/* setup limit per cycle */
+	if (cfg_get_integer(&limit_per_cycle, grp, octstr_imm("limit-per-cycle")) == -1)
+		limit_per_cycle = DEFAULT_LIMIT_PER_CYCLE;
+
 	/* setup logfile stuff */
 	logfile = cfg_get(grp, octstr_imm("log-file"));
 
diff -rbu sqlbox-standalone/gw/sqlbox-cfg.def sqlbox-standalone-ajg-1.0/gw/sqlbox-cfg.def
--- sqlbox-standalone/gw/sqlbox-cfg.def	2006-07-07 01:03:32.000000000 -0300
+++ sqlbox-standalone-ajg-1.0/gw/sqlbox-cfg.def	2008-02-26 22:20:26.000000000 -0200
@@ -25,5 +25,6 @@
     OCTSTR(ssl-server-key-file)
     OCTSTR(ssl-trusted-ca-file)
     OCTSTR(bearerbox-port)
+    OCTSTR(limit-per-cycle)
 )
 
diff -rbu sqlbox-standalone/gw/sqlbox_mysql.c sqlbox-standalone-ajg-1.0/gw/sqlbox_mysql.c
--- sqlbox-standalone/gw/sqlbox_mysql.c	2006-11-06 14:47:57.000000000 -0200
+++ sqlbox-standalone-ajg-1.0/gw/sqlbox_mysql.c	2008-02-26 23:20:48.000000000 -0200
@@ -102,21 +102,22 @@
 
 #define octstr_null_create(x) ((x != NULL) ? octstr_create(x) : octstr_create(""))
 #define atol_null(x) ((x != NULL) ? atol(x) : -1)
-Msg *mysql_fetch_msg()
+int mysql_fetch_msg(List *qlist, long limit)
 {
 	Msg *msg = NULL;
 	Octstr *sql, *delet, *id;
 	MYSQL_RES *res;
 	MYSQL_ROW row;
-
-	sql = octstr_format("SELECT sql_id, momt, sender, receiver, udhdata, msgdata, time, smsc_id, service, account, id, sms_type, mclass, mwi, coding, compress, validity, deferred, dlr_mask, dlr_url, pid, alt_dcs, rpi, charset, boxc_id, binfo FROM %S LIMIT 0,1", sqlbox_insert_table);
+	int ret;
+	sql = octstr_format("SELECT sql_id, momt, sender, receiver, udhdata, msgdata, time, smsc_id, service, account, id, sms_type, mclass, mwi, coding, compress, validity, deferred, dlr_mask, dlr_url, pid, alt_dcs, rpi, charset, boxc_id, binfo FROM %S LIMIT 0,%d", sqlbox_insert_table, limit);
 	res = mysql_select(sql);
 	if (res == NULL) {
 		debug("sqlbox", 0, "SQL statement failed: %s", octstr_get_cstr(sql));
 	}
 	else {
-		if (mysql_num_rows(res) >= 1) {
-			row = mysql_fetch_row(res);
+		ret = mysql_num_rows(res);
+		if (ret >= 1) {
+			while (row = mysql_fetch_row(res)) {
 			id			= octstr_null_create(row[0]);
 			/* save fields in this row as msg struct */
 			msg = msg_create(sms);
@@ -149,6 +150,7 @@
 			else {
 				msg->sms.boxc_id= octstr_null_create(row[24]);
 			}
+				gwlist_produce(qlist, msg);
 			/* delete current row */
 			delet = octstr_format("DELETE FROM %S WHERE sql_id = %S", sqlbox_insert_table, id);
         		//debug("sqlbox", 0, "sql_fetch_msg: %s", octstr_get_cstr(delet));
@@ -156,11 +158,11 @@
 			octstr_destroy(id);
 			octstr_destroy(delet);
 		}
+		}
 		mysql_free_result(res);
 	}
-	octstr_destroy(sql);
         //debug("sqlbox", 0, "sql_fetch_msg: %s", octstr_get_cstr(sql));
-	return msg;
+	return ret;
 }
 
 static Octstr *get_numeric_value_or_return_null(long int num)
diff -rbu sqlbox-standalone/gw/sqlbox_mysql.h sqlbox-standalone-ajg-1.0/gw/sqlbox_mysql.h
--- sqlbox-standalone/gw/sqlbox_mysql.h	2006-06-28 19:06:07.000000000 -0300
+++ sqlbox-standalone-ajg-1.0/gw/sqlbox_mysql.h	2008-02-26 22:20:12.000000000 -0200
@@ -3,7 +3,7 @@
 #include "gw/msg.h"
 #include "sqlbox_sql.h"
 void sql_save_msg(Msg *msg, Octstr *momt /*, Octstr smsbox_id */);
-Msg *mysql_fetch_msg();
+int mysql_fetch_msg(List *list, long limit);
 void sql_shutdown();
 struct server_type *sql_init_mysql(Cfg *cfg);
 #ifndef sqlbox_mysql_c
diff -rbu sqlbox-standalone/gw/sqlbox_sql.h sqlbox-standalone-ajg-1.0/gw/sqlbox_sql.h
--- sqlbox-standalone/gw/sqlbox_sql.h	2006-06-28 19:06:07.000000000 -0300
+++ sqlbox-standalone-ajg-1.0/gw/sqlbox_sql.h	2008-02-27 19:34:49.000000000 -0200
@@ -10,7 +10,7 @@
 	Octstr *type;
 	void (*sql_enter) (Cfg *cfg);
 	void (*sql_leave) ();
-	Msg *(*sql_fetch_msg) ();
+	int  (*sql_fetch_msg) (List *, long);
 	void (*sql_save_msg) (Msg *, Octstr *);
 };
 
@@ -27,3 +27,4 @@
 #define gw_sql_leave sql_type->sql_leave
 
 #endif
+
