diff --git a/userspace/libwr/include/libwr/util.h b/userspace/libwr/include/libwr/util.h
index c56018f594d6ca383c4015db2babfc600f289f57..1c8068c15fe3a6fe72f51819e7f39cbfb0b785e9 100644
--- a/userspace/libwr/include/libwr/util.h
+++ b/userspace/libwr/include/libwr/util.h
@@ -8,7 +8,10 @@
 #include <unistd.h>
 #include <sys/mman.h>
 
-#define atoidef(str,def) (str)?atoi(str):def
+#define atoidef(argc, argv, param_i, def) (argc > (param_i) ? \
+					    atoi(argv[(param_i)]) : (def))
+#define strtoldef(argc, argv, param_i, def) (argc > (param_i) ? \
+				    strtol(argv[(param_i)], NULL, 0) : (def))
 
 void shw_udelay_init(void);
 void shw_udelay(uint32_t microseconds);
diff --git a/userspace/tools/rtu_stat.c b/userspace/tools/rtu_stat.c
index 5c5cb02687f98513198d4e0e86ce0e3c8ec348a9..92bb44a124f460e3e6b5f1324ea57b3c2524e933 100644
--- a/userspace/tools/rtu_stat.c
+++ b/userspace/tools/rtu_stat.c
@@ -312,11 +312,11 @@ int main(int argc, char **argv)
 	if(argc>1)
 	{
 		if (strcmp(argv[1], "remove") == 0) {
-			i=atoidef(argv[2],-1);
+			i = atoidef(argc, argv, 2, -1);
 			/* interface number 1..18*/
 			if ((0 < i && i <= 18)
 			   && (rtudexp_clear_entries(i - 1,
-						     atoidef(argv[3], 0)
+						     atoidef(argc, argv, 3, 0)
 						    ) == 0)) {
 				/* ok */
 				isok = 1;
@@ -330,7 +330,7 @@ int main(int argc, char **argv)
 			if ((argc > 3)
 			   && (rtudexp_add_entry(argv[2],
 						 atoi(argv[3]) - 1,
-						 atoidef(argv[4], 0)
+						 atoidef(argc, argv, 4, 0)
 						) == 0)) {
 				/* ok */
 				isok = 1;
@@ -344,10 +344,10 @@ int main(int argc, char **argv)
 			   && (rtudexp_vlan_entry(atoi(argv[2]),
 						  atoi(argv[3]) - 1,
 						  argv[4],
-						  atoidef(argv[5], 0),
-						  atoidef(argv[6], 0),
-						  atoidef(argv[7], 0),
-						  atoidef(argv[8], 0)
+						  atoidef(argc, argv, 5, 0),
+						  atoidef(argc, argv, 6, 0),
+						  atoidef(argc, argv, 7, 0),
+						  atoidef(argc, argv, 8, 0)
 						 ) == 0)) {
 				/* ok */
 				isok = 1;