diff -rupN nfdump-1.6.6/bin/nffile.h nfdump-1.6.6-alt//bin/nffile.h
--- nfdump-1.6.6/bin/nffile.h	2012-01-08 19:00:59.000000000 -0200
+++ nfdump-1.6.6-alt//bin/nffile.h	2012-03-27 11:43:49.000000000 -0300
@@ -1252,7 +1252,7 @@ typedef struct master_record_s {
 #	define MaskMPLSexpEven  	0x000000000000000eLL
 #	define ShiftMPLSexpEven 	1
 #else
-#	define MaskMPLSlabelOdd 	0x000000000000fff0LL
+#	define MaskMPLSlabelOdd 	0x0000000000fffff0LL
 #	define ShiftMPLSlabelOdd 	4
 #	define MaskMPLSexpOdd  		0x000000000000000eLL
 #	define ShiftMPLSexpOdd 		1
diff -rupN nfdump-1.6.6/bin/nfstat.c nfdump-1.6.6-alt//bin/nfstat.c
--- nfdump-1.6.6/bin/nfstat.c	2012-02-05 06:29:11.000000000 -0200
+++ nfdump-1.6.6-alt//bin/nfstat.c	2012-03-27 11:50:52.000000000 -0300
@@ -78,7 +78,7 @@ struct flow_element_s {
 	uint32_t	shift;		// number of bits to shift right to get final value
 };
 
-enum { IS_NUMBER = 1, IS_IPADDR, IS_MACADDR, IS_MPLS_LBL };
+enum { IS_NUMBER = 1, IS_IPADDR, IS_MACADDR, IS_MPLS_LBL_ODD, IS_MPLS_LBL_EVEN };
 
 struct StatParameter_s {
 	char					*statname;		// name of -s option
@@ -232,43 +232,43 @@ struct StatParameter_s {
 
 	{ "mpls1",	 " MPLS lab 1", 
 		{ {0, OffsetMPLS12, MaskMPLSlabelOdd, 0}, 	{0,0,0,0} },
-			1, IS_MPLS_LBL },
+			1, IS_MPLS_LBL_ODD },
 
 	{ "mpls2",	 " MPLS lab 2", 
 		{ {0, OffsetMPLS12, MaskMPLSlabelEven, 0}, 	{0,0,0,0} },
-			1, IS_MPLS_LBL },
+			1, IS_MPLS_LBL_EVEN },
 
 	{ "mpls3",	 " MPLS lab 3", 
 		{ {0, OffsetMPLS34, MaskMPLSlabelOdd, 0}, 	{0,0,0,0} },
-			1, IS_MPLS_LBL },
+			1, IS_MPLS_LBL_ODD },
 
 	{ "mpls4",	 " MPLS lab 4", 
 		{ {0, OffsetMPLS34, MaskMPLSlabelEven, 0}, 	{0,0,0,0} },
-			1, IS_MPLS_LBL },
+			1, IS_MPLS_LBL_EVEN },
 
 	{ "mpls5",	 " MPLS lab 5", 
 		{ {0, OffsetMPLS56, MaskMPLSlabelOdd, 0}, 	{0,0,0,0} },
-			1, IS_MPLS_LBL },
+			1, IS_MPLS_LBL_ODD },
 
 	{ "mpls6",	 " MPLS lab 6", 
 		{ {0, OffsetMPLS56, MaskMPLSlabelEven, 0}, 	{0,0,0,0} },
-			1, IS_MPLS_LBL },
+			1, IS_MPLS_LBL_EVEN },
 
 	{ "mpls7",	 " MPLS lab 7", 
 		{ {0, OffsetMPLS78, MaskMPLSlabelOdd, 0}, 	{0,0,0,0} },
-			1, IS_MPLS_LBL },
+			1, IS_MPLS_LBL_ODD },
 
 	{ "mpls8",	 " MPLS lab 8", 
 		{ {0, OffsetMPLS78, MaskMPLSlabelEven, 0}, 	{0,0,0,0} },
-			1, IS_MPLS_LBL },
+			1, IS_MPLS_LBL_EVEN },
 
 	{ "mpls9",	 " MPLS lab 9", 
 		{ {0, OffsetMPLS910, MaskMPLSlabelOdd, 0}, 	{0,0,0,0} },
-			1, IS_MPLS_LBL },
+			1, IS_MPLS_LBL_ODD },
 
 	{ "mpls10",	 "MPLS lab 10", 
 		{ {0, OffsetMPLS910, MaskMPLSlabelEven, 0}, {0,0,0,0} },
-			1, IS_MPLS_LBL },
+			1, IS_MPLS_LBL_EVEN },
 
 	{ NULL, 	 NULL, 			
 		{ {0,0,0,0},	{0,0,0,0} },
@@ -911,10 +911,18 @@ struct tm	*tbuff;
 			}
 			snprintf(valstr, 40, "%.2x:%.2x:%.2x:%.2x:%.2x:%.2x", mac[5], mac[4], mac[3], mac[2], mac[1], mac[0]);
 			} break;
-		case IS_MPLS_LBL: {
+		case IS_MPLS_LBL_ODD: {
 			snprintf(valstr, 40, "%llu", (unsigned long long)StatData->stat_key[1]);
 			snprintf(valstr, 40,"%8llu-%1llu-%1llu", 
-				(unsigned long long)StatData->stat_key[1] >> 4 , 
+				(unsigned long long)StatData->stat_key[1] >> ShiftMPLSlabelOdd , 
+				((unsigned long long)StatData->stat_key[1] & 0xF ) >> 1, 
+				(unsigned long long)StatData->stat_key[1] & 1);
+			} break;
+		case IS_MPLS_LBL_EVEN: {
+			unsigned long long coco = (unsigned long long)StatData->stat_key[1] >> 32;
+			snprintf(valstr, 40, "%llu", (unsigned long long)StatData->stat_key[1]);
+			snprintf(valstr, 40,"%8llu-%1llu-%1llu", 
+				(unsigned long long)StatData->stat_key[1] >> ShiftMPLSlabelEven , 
 				((unsigned long long)StatData->stat_key[1] & 0xF ) >> 1, 
 				(unsigned long long)StatData->stat_key[1] & 1);
 			} break;
@@ -1069,13 +1077,20 @@ struct tm	*tbuff;
 			}
 			snprintf(valstr, 40, "%.2x:%.2x:%.2x:%.2x:%.2x:%.2x", mac[5], mac[4], mac[3], mac[2], mac[1], mac[0]);
 			} break;
-		case IS_MPLS_LBL: {
-			snprintf(valstr, 40, "%llu", (unsigned long long)StatData->stat_key[1]);
-			snprintf(valstr, 40,"%8llu-%1llu-%1llu", 
-				(unsigned long long)StatData->stat_key[1] >> 4 , 
-				((unsigned long long)StatData->stat_key[1] & 0xF ) >> 1, 
-				(unsigned long long)StatData->stat_key[1] & 1);
-			} break;
+                case IS_MPLS_LBL_ODD: {
+                        snprintf(valstr, 40, "%llu", (unsigned long long)StatData->stat_key[1]);
+                        snprintf(valstr, 40,"%8llu-%1llu-%1llu",
+                                (unsigned long long)StatData->stat_key[1] >> ShiftMPLSlabelOdd ,
+                                ((unsigned long long)StatData->stat_key[1] & 0xF ) >> 1,
+                                (unsigned long long)StatData->stat_key[1] & 1);
+                        } break;
+                case IS_MPLS_LBL_EVEN: {
+                	snprintf(valstr, 40, "%llu", (unsigned long long)StatData->stat_key[1]);
+                	snprintf(valstr, 40,"%8llu-%1llu-%1llu", 
+                		(unsigned long long)StatData->stat_key[1] >> ShiftMPLSlabelEven , 
+                		((unsigned long long)StatData->stat_key[1] & 0xF ) >> 1, 
+                		(unsigned long long)StatData->stat_key[1] & 1);
+                	} break;
 	}
 
 	valstr[39] = 0;
