--- packet-per_old.c	2003-08-29 00:21:57.000000000 +0200
+++ packet-per.c	2003-08-28 23:49:05.000000000 +0200
@@ -240,8 +240,12 @@
 
 	/* semi-constrained whole number for number of elements */
 	/* each element encoded as 10.9 */
-	offset=dissect_per_length_determinant(tvb, offset, pinfo, tree, hf_per_sequence_of_length, &length);
+        proto_tree *etr = NULL;
 
+	if(display_internal_per_fields){
+	        etr=tree;
+	}
+	offset=dissect_per_length_determinant(tvb, offset, pinfo, etr, hf_per_sequence_of_length, &length);
 
 	offset=dissect_per_sequence_of_helper(tvb, offset, pinfo, tree, func, length);
 
@@ -272,7 +276,7 @@
 	guint char_pos;
 	int bits_per_char;
 	guint32 old_offset;
-
+
 DEBUG_ENTRY("dissect_per_restricted_character_string");
 	/* xx.x if the length is 0 bytes there will be no encoding */
 	if(max_len==0){
@@ -288,14 +292,20 @@
 	/* xx.x */
 	length=max_len;
 	if(min_len!=max_len){
-		offset=dissect_per_constrained_integer(tvb, offset, pinfo,
-			tree, hf_per_octet_string_length, min_len, max_len,
-			&length, NULL, FALSE);
-	}

+                proto_tree *etr = NULL;

+	        if(display_internal_per_fields){
+	                etr=tree;
+	        }
+		offset=dissect_per_constrained_integer(tvb, offset, pinfo,
+		        etr, hf_per_octet_string_length, min_len, max_len,
+		        &length, NULL, FALSE);
+	}

-	/* xx.x if length is fixed or constrained to be less than or equal to
+
+
+	/* xx.x if length is fixed or constrained to be less than or equal to
 	   two bytes, then it will not be byte aligned. */
 	byte_aligned=TRUE;
 	if((min_len==max_len)&&(max_len<=2)){
@@ -399,10 +409,17 @@
 	/* xx.x */
 	length=max_len;
 	if(min_len!=max_len){
-		offset=dissect_per_constrained_integer(tvb, offset, pinfo,
-			tree, hf_per_octet_string_length, min_len, max_len,
-			&length, NULL, FALSE);
-	}
+
+                proto_tree *etr = NULL;
+
+	        if(display_internal_per_fields){
+	                etr=tree;
+	        }
+		offset=dissect_per_constrained_integer(tvb, offset, pinfo,
+		        etr, hf_per_octet_string_length, min_len, max_len,
+		        &length, NULL, FALSE);
+
+	}


 	/* align to byte boundary */
@@ -593,15 +610,15 @@
 		hfi = proto_registrar_get_nth(hf_index);
 		sprintf(str,"%s: %c%c%c%c %c%c%c%c %s",
 			hfi->name,
-			mask&0x80?'0'+value:'.',
-			mask&0x40?'0'+value:'.',
-			mask&0x20?'0'+value:'.',
-			mask&0x10?'0'+value:'.',
-			mask&0x08?'0'+value:'.',
-			mask&0x04?'0'+value:'.',
-			mask&0x02?'0'+value:'.',
+			mask&0x80?'0'+value:'.',
+			mask&0x40?'0'+value:'.',
+			mask&0x20?'0'+value:'.',
+			mask&0x10?'0'+value:'.',
+			mask&0x08?'0'+value:'.',
+			mask&0x04?'0'+value:'.',
+			mask&0x02?'0'+value:'.',
 			mask&0x01?'0'+value:'.',
-			value?"Bit is set":"Bit is clear"
+			value?"True":"False"
 		);
 		it=proto_tree_add_boolean_format(tree, hf_index, tvb, offset>>3, 1, value, str);
 		if(item){
@@ -909,16 +926,21 @@
 	it=proto_tree_add_text(tree, tvb, offset>>3, 0, name);
 	tr=proto_item_add_subtree(it, ett_index);

-
+
 	/* first check if there should be an extension bit for this CHOICE.
-	   we do this by just checking the first choice arm
+	   we do this by just checking the first choice arm
 	 */
 	if(choice[0].extension==NO_EXTENSIONS){
 		extension_present=0;
 	} else {
+                proto_tree *etr=NULL;
+
+	       	if(display_internal_per_fields){
+			etr=tr;
+		}
 		extension_present=1;
 		/* will be placed called again below to place it in the tree */
-		offset=dissect_per_boolean(tvb, offset, pinfo, tr, hf_per_extension_bit, &extension_flag, NULL);
+		offset=dissect_per_boolean(tvb, offset, pinfo, etr, hf_per_extension_bit, &extension_flag, NULL);
 	}

 	/* count the number of entries in the extension_root */
@@ -1354,9 +1376,16 @@

 	/* 16.8 */
 	if(max_len>0){
-		offset=dissect_per_constrained_integer(tvb, offset, pinfo,
-			tree, hf_per_octet_string_length, min_len, max_len,
+
+                proto_tree *etr = NULL;
+
+	        if(display_internal_per_fields){
+	                etr=tree;
+	        }
+		offset=dissect_per_constrained_integer(tvb, offset, pinfo,
+			etr, hf_per_octet_string_length, min_len, max_len,
 			&length, NULL, FALSE);
+
 	} else {
 		offset=dissect_per_length_determinant(tvb, offset, pinfo, tree, hf_per_octet_string_length, &length);
 	}
