diff --git a/extensions/CMakeLists.txt b/extensions/CMakeLists.txt
index 96a8334..67963ef 100644
--- a/extensions/CMakeLists.txt
+++ b/extensions/CMakeLists.txt
@@ -118,6 +118,7 @@
 FD_EXTENSION_SUBDIR(dict_SLh "dict_SLh extension library" ON)
 FD_EXTENSION_SUBDIR(dict_Sd "dict_Sd extension library" ON)
 FD_EXTENSION_SUBDIR(dict_Sh "dict_Sh extension library" ON)
+FD_EXTENSION_SUBDIR(dict_St "dict_St extension library" ON)
 FD_EXTENSION_SUBDIR(dict_T4 "dict_T4 extension library" ON)
 FD_EXTENSION_SUBDIR(dict_T6aT6bT7 "dict_T6aT6bT7 extension library" ON)
 FD_EXTENSION_SUBDIR(dict_Tsp "dict_Tsp extension library" ON)
diff --git a/extensions/dict_Gx/dict_Gx.c b/extensions/dict_Gx/dict_Gx.c
index c0f5990..ed623b1 100644
--- a/extensions/dict_Gx/dict_Gx.c
+++ b/extensions/dict_Gx/dict_Gx.c
@@ -26,7 +26,7 @@
 #include <freeDiameter/extension.h>
 
 #define PROTO_VER "e30"
-#define GEN_DATE  1506697205.07
+#define GEN_DATE  1530130752.96
 
 const char *gx_proto_ver = PROTO_VER;
 const double gx_gen_date = GEN_DATE;
@@ -423,11 +423,11 @@
 	return dict_gx_load_rules(conffile);
 }
 
-const char* dict_gx_proto_ver(char * conffile) {
+const char* dict_proto_ver(char * conffile) {
 	return gx_proto_ver;
 }
 
-const double dict_gx_gen_ts(char * conffile) {
+const double dict_gen_ts(char * conffile) {
 	return gx_gen_date;
 }
 
diff --git a/extensions/dict_NAS/CMakeLists.txt b/extensions/dict_NAS/CMakeLists.txt
index ace49ff..01fd68e 100644
--- a/extensions/dict_NAS/CMakeLists.txt
+++ b/extensions/dict_NAS/CMakeLists.txt
@@ -10,7 +10,7 @@
 
 INSTALL(TARGETS dict_NAS
 	LIBRARY DESTINATION ${INSTALL_EXTENSIONS_SUFFIX}
-COMPONENT freeDiameter-dictionary-dict_NAS)
+COMPONENT freeDiameter-dictionary-NAS)
 
 
 
diff --git a/extensions/dict_NAS/dict_NAS.c b/extensions/dict_NAS/dict_NAS.c
index eeaa8c0..0e3f614 100644
--- a/extensions/dict_NAS/dict_NAS.c
+++ b/extensions/dict_NAS/dict_NAS.c
@@ -26,7 +26,7 @@
 #include <freeDiameter/extension.h>
 
 #define PROTO_VER "unspecified"
-#define GEN_DATE  1506697121.58
+#define GEN_DATE  1530130718.96
 
 const char *nas_proto_ver = PROTO_VER;
 const double nas_gen_date = GEN_DATE;
@@ -100,28 +100,14 @@
 static int dict_nas_load_defs(char * conffile)
 {
    TRACE_ENTRY("%p", conffile);
-	struct dict_object * app_id0;
 	struct dict_object * app_id1;
 
 	/* Application Section */
 	{
 	  {
-			struct dict_application_data data = { 0, "NAS-app0" };
-			CHECK_dict_new( DICT_APPLICATION, &data, NULL, &app_id0)
-	  }
-	  {
 			struct dict_application_data data = { 1, "NAS" };
 			CHECK_dict_new( DICT_APPLICATION, &data, NULL, &app_id1)
 	  }
-	  /* Result codes */
-	  {
-			struct dict_object *type;
-			CHECK_dict_search(DICT_TYPE, TYPE_BY_NAME, "Enumerated(Result-Code)",&type);
-			struct dict_enumval_data        t_1 = { "Bangkok", { .u32=10260 }};
-
-			CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL);
-
-	  }
 	}
 
 
@@ -541,11 +527,11 @@
 	return dict_nas_load_rules(conffile);
 }
 
-const char* dict_nas_proto_ver(char * conffile) {
+const char* dict_proto_ver(char * conffile) {
 	return nas_proto_ver;
 }
 
-const double dict_nas_gen_ts(char * conffile) {
+const double dict_gen_ts(char * conffile) {
 	return nas_gen_date;
 }
 
diff --git a/extensions/dict_Rx/dict_Rx.c b/extensions/dict_Rx/dict_Rx.c
index 19ad57d..d6ab20b 100644
--- a/extensions/dict_Rx/dict_Rx.c
+++ b/extensions/dict_Rx/dict_Rx.c
@@ -26,7 +26,7 @@
 #include <freeDiameter/extension.h>
 
 #define PROTO_VER "e30"
-#define GEN_DATE  1506697208.6
+#define GEN_DATE  1530130754.42
 
 const char *rx_proto_ver = PROTO_VER;
 const double rx_gen_date = GEN_DATE;
@@ -100,7 +100,6 @@
 static int dict_rx_load_defs(char * conffile)
 {
    TRACE_ENTRY("%p", conffile);
-	struct dict_object * app_id16777224;
 	struct dict_object * app_id16777229;
 
 	/* Application Section */
@@ -108,13 +107,7 @@
 	  {
 			struct dict_object * vendor;
 			CHECK_dict_search(DICT_VENDOR, VENDOR_BY_NAME, "3GPP", &vendor)
-			struct dict_application_data data = { 16777224, "Rx" };
-			CHECK_dict_new( DICT_APPLICATION, &data, vendor, &app_id16777224)
-	  }
-	  {
-			struct dict_object * vendor;
-			CHECK_dict_search(DICT_VENDOR, VENDOR_BY_NAME, "3GPP", &vendor)
-			struct dict_application_data data = { 16777229, "Rx-app16777229" };
+			struct dict_application_data data = { 16777229, "Rx" };
 			CHECK_dict_new( DICT_APPLICATION, &data, vendor, &app_id16777229)
 	  }
 	  /* Result codes */
@@ -457,11 +450,11 @@
 	return dict_rx_load_rules(conffile);
 }
 
-const char* dict_rx_proto_ver(char * conffile) {
+const char* dict_proto_ver(char * conffile) {
 	return rx_proto_ver;
 }
 
-const double dict_rx_gen_ts(char * conffile) {
+const double dict_gen_ts(char * conffile) {
 	return rx_gen_date;
 }
 
diff --git a/extensions/dict_St/CMakeLists.txt b/extensions/dict_St/CMakeLists.txt
new file mode 100644
index 0000000..55b743a
--- /dev/null
+++ b/extensions/dict_St/CMakeLists.txt
@@ -0,0 +1,16 @@
+# The dict_St extension
+PROJECT("dict_St library generated by FdGen " C)
+
+# Compile as a module
+FD_ADD_EXTENSION(dict_St dict_St.c)
+
+
+####
+## INSTALL section ##
+
+INSTALL(TARGETS dict_St
+	LIBRARY DESTINATION ${INSTALL_EXTENSIONS_SUFFIX}
+COMPONENT freeDiameter-dictionary-ST)
+
+
+
diff --git a/extensions/dict_St/St.did b/extensions/dict_St/St.did
new file mode 100644
index 0000000..2cb334c
--- /dev/null
+++ b/extensions/dict_St/St.did
@@ -0,0 +1,38 @@
+dict_rfc6942_avps
+dict_ts29468_avps
+dict_ts29154_avps
+dict_ts29214_avps
+dict_ts29215_avps
+dict_ts29217_avps
+dict_3gpp2_avps
+dict_ts29343_avps
+dict_ts29338_avps
+dict_ts29128_avps
+dict_ts29344_avps
+dict_ts29345_avps
+dict_ts32299_avps
+dict_rfc6734_avps
+dict_rfc5778_avps
+dict_rfc5580_avps
+dict_rfc4072_avps
+dict_ts29273_avps
+dict_ts29173_avps
+dict_ts29337_avps
+dict_etsi283034_avps
+dict_rfc4590_avps
+dict_ts29229_avps
+dict_draftload_avps
+dict_ts29329_avps
+dict_ts29368_avps
+dict_ts29336_avps
+dict_ts29061_avps
+dict_rfc5447_avps
+dict_ts29272_avps
+dict_rfc7683_avps
+dict_ts29212_avps
+dict_rfc5777_avps
+dict_rfc4006bis_avps
+dict_rfc4004_avps
+dict_rfc7155_avps
+dict_rfc7944_avps
+dict_St
diff --git a/extensions/dict_St/dict_St.c b/extensions/dict_St/dict_St.c
new file mode 100644
index 0000000..9f1cd37
--- /dev/null
+++ b/extensions/dict_St/dict_St.c
@@ -0,0 +1,372 @@
+/*
+* Copyright (c) 2017 Sprint
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*    http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+/****************
+ Generated By: fdtool enhancements to diafuzzer
+ License: same as freeDiameter
+****************/
+
+
+/* 
+ * Dictionary definitions of objects specified in St (e30).
+ */
+#include <freeDiameter/extension.h>
+
+#define PROTO_VER "e30"
+#define GEN_DATE  1530130764.72
+
+const char *st_proto_ver = PROTO_VER;
+const double st_gen_date = GEN_DATE;
+
+/* The content of this file follows the same structure as dict_base_proto.c */
+
+#define CHECK_dict_new( _type, _data, _parent, _ref )                                     \
+{                                                                                         \
+    int _ret = fd_dict_new( fd_g_config->cnf_dict, (_type), (_data), (_parent), (_ref) ); \
+    if ( _ret != 0 && _ret != EEXIST )                                                    \
+       return _ret;                                                                       \
+}
+
+#define CHECK_dict_search( _type, _criteria, _what, _result )		\
+    CHECK_FCT(  fd_dict_search( fd_g_config->cnf_dict, (_type), (_criteria), (_what), (_result), ENOENT) );
+
+struct local_rules_definition {
+    struct dict_avp_request avp_vendor_plus_name;
+    enum rule_position	position;
+    int 			min;
+    int			max;
+};
+
+#define RULE_ORDER( _position ) ((((_position) == RULE_FIXED_HEAD) || ((_position) == RULE_FIXED_TAIL)) ? 1 : 0 )
+
+/* Attention! This version of the macro uses AVP_BY_NAME_AND_VENDOR, in contrast to most other copies! */
+#define PARSE_loc_rules( _rulearray, _parent) {                                                         \
+        int __ar;                                                                                       \
+        for (__ar=0; __ar < sizeof(_rulearray) / sizeof((_rulearray)[0]); __ar++) {                     \
+                struct dict_rule_data __data = { NULL,                                                  \
+                        (_rulearray)[__ar].position,                                                    \
+                        0,                                                                              \
+                        (_rulearray)[__ar].min,                                                         \
+                        (_rulearray)[__ar].max};                                                        \
+                __data.rule_order = RULE_ORDER(__data.rule_position);                                   \
+                CHECK_FCT(  fd_dict_search(                                                             \
+                        fd_g_config->cnf_dict,                                                          \
+                        DICT_AVP,                                                                       \
+                        AVP_BY_NAME_AND_VENDOR,                                                         \
+                        &(_rulearray)[__ar].avp_vendor_plus_name,                                       \
+                        &__data.rule_avp, 0 ) );                                                        \
+                if ( !__data.rule_avp ) {                                                               \
+                        TRACE_DEBUG(INFO, "AVP Not found: '%s'", (_rulearray)[__ar].avp_vendor_plus_name.avp_name);             \
+                        return ENOENT;                                                                  \
+                }                                                                                       \
+                {                                                                                       \
+                         int _ret = fd_dict_new( fd_g_config->cnf_dict, DICT_RULE, &(__data), (_parent), NULL ); \
+                         if ( _ret != 0 && _ret != EEXIST )      {                                      \
+                                TRACE_DEBUG(INFO, "Error on rule with AVP '%s'",                        \
+                                            (_rulearray)[__ar].avp_vendor_plus_name.avp_name);          \
+                                return EINVAL;                                                          \
+                         }                                                                              \
+                }                                                                                       \
+        }                                                                                               \
+}
+
+#define CHECK_vendor_new( _data ) { \
+        struct dict_object * vendor_found; \
+        if (fd_dict_search(fd_g_config->cnf_dict,DICT_VENDOR,VENDOR_BY_ID,&_data.vendor_id,&vendor_found,ENOENT) == ENOENT) { \
+                CHECK_FCT(fd_dict_new(fd_g_config->cnf_dict, DICT_VENDOR, &_data, NULL, NULL)); \
+        } \
+}
+
+#define enumval_def_u32( _val_, _str_ )		\
+    { _str_, 		{ .u32 = _val_ }}
+
+#define enumval_def_os( _len_, _val_, _str_ )				\
+    { _str_, 		{ .os = { .data = (unsigned char *)_val_, .len = _len_ }}}
+
+
+static int dict_st_load_defs(char * conffile)
+{
+   TRACE_ENTRY("%p", conffile);
+	struct dict_object * app_id16777349;
+
+	/* Application Section */
+	{
+	  {
+			struct dict_object * vendor;
+			CHECK_dict_search(DICT_VENDOR, VENDOR_BY_NAME, "3GPP", &vendor)
+			struct dict_application_data data = { 16777349, "St" };
+			CHECK_dict_new( DICT_APPLICATION, &data, vendor, &app_id16777349)
+	  }
+	}
+
+
+   /* AVP section */
+   {
+		struct dict_object * Address_type;
+		struct dict_object * UTF8String_type;
+		struct dict_object * DiameterIdentity_type;
+		struct dict_object * DiameterURI_type;
+		struct dict_object * Time_type;
+		struct dict_object * IPFilterRule_type;
+
+		CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "Address", &Address_type);
+		CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "UTF8String", &UTF8String_type);
+		CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "DiameterIdentity", &DiameterIdentity_type);
+		CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "DiameterURI", &DiameterURI_type);
+		CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "Time", &Time_type);
+		CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "IPFilterRule", &IPFilterRule_type);
+
+	
+   }
+
+   /* Commands section */
+   {
+		/* TS-Request */
+		{
+			struct dict_object* cmd;
+			struct dict_cmd_data data = {
+				8388637,	/* Code */
+				"TS-Request",	/* Name */
+				CMD_FLAG_REQUEST | CMD_FLAG_ERROR,	/* Fixed flags */
+				CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE,	/* Fixed flag values */
+			};
+
+			CHECK_dict_new( DICT_COMMAND, &data , app_id16777349, &cmd)
+		}
+		/* TS-Answer */
+		{
+			struct dict_object* cmd;
+			struct dict_cmd_data data = {
+				8388637,	/* Code */
+				"TS-Answer",	/* Name */
+				CMD_FLAG_REQUEST,	/* Fixed flags */
+				CMD_FLAG_PROXIABLE,	/* Fixed flag values */
+			};
+
+			CHECK_dict_new( DICT_COMMAND, &data , app_id16777349, &cmd)
+		}
+		/* TN-Request */
+		{
+			struct dict_object* cmd;
+			struct dict_cmd_data data = {
+				8388731,	/* Code */
+				"TN-Request",	/* Name */
+				CMD_FLAG_REQUEST | CMD_FLAG_ERROR,	/* Fixed flags */
+				CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE,	/* Fixed flag values */
+			};
+
+			CHECK_dict_new( DICT_COMMAND, &data , app_id16777349, &cmd)
+		}
+		/* TN-Answer */
+		{
+			struct dict_object* cmd;
+			struct dict_cmd_data data = {
+				8388731,	/* Code */
+				"TN-Answer",	/* Name */
+				CMD_FLAG_REQUEST,	/* Fixed flags */
+				CMD_FLAG_PROXIABLE,	/* Fixed flag values */
+			};
+
+			CHECK_dict_new( DICT_COMMAND, &data , app_id16777349, &cmd)
+		}
+
+   }
+
+   return 0;
+}
+
+static int dict_st_load_rules(char * conffile)
+{
+   /* Grouped AVP section */
+   {
+
+   }	
+
+   /* Commands section */
+   {
+	  /* TS-Request */
+	  {
+		struct dict_object* cmd;
+		CHECK_dict_search( DICT_COMMAND, CMD_BY_NAME, "TS-Request", &cmd)
+		struct local_rules_definition rules[] =
+		{
+			{ { .avp_vendor = 0, .avp_name = "Session-Id"}, RULE_FIXED_HEAD, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "DRMP"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Vendor-Specific-Application-Id"}, RULE_REQUIRED, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Origin-Host"}, RULE_REQUIRED, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Origin-Realm"}, RULE_REQUIRED, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Destination-Realm"}, RULE_REQUIRED, -1, -1 },
+			{ { .avp_vendor = 10415, .avp_name = "Request-Type"}, RULE_REQUIRED, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Destination-Host"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Origin-State-Id"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "OC-Supported-Features"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 10415, .avp_name = "Event-Report-Indication"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Framed-IP-Address"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Framed-IPv6-Prefix"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Called-Station-Id"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 10415, .avp_name = "ADC-Rule-Install"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 10415, .avp_name = "ADC-Rule-Remove"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 10415, .avp_name = "Supported-Features"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Proxy-Info"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Route-Record"}, RULE_OPTIONAL, -1, -1 }
+		};
+		PARSE_loc_rules(rules, cmd);
+	  }
+	  /* TS-Answer */
+	  {
+		struct dict_object* cmd;
+		CHECK_dict_search( DICT_COMMAND, CMD_BY_NAME, "TS-Answer", &cmd)
+		struct local_rules_definition rules[] =
+		{
+			{ { .avp_vendor = 0, .avp_name = "Session-Id"}, RULE_FIXED_HEAD, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "DRMP"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Vendor-Specific-Application-Id"}, RULE_REQUIRED, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Origin-Host"}, RULE_REQUIRED, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Origin-Realm"}, RULE_REQUIRED, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Result-Code"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Experimental-Result"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Origin-State-Id"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "OC-Supported-Features"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "OC-OLR"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 10415, .avp_name = "ADC-Rule-Report"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 10415, .avp_name = "Supported-Features"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Error-Message"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Error-Reporting-Host"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Failed-AVP"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Proxy-Info"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Route-Record"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Load"}, RULE_OPTIONAL, -1, -1 }
+		};
+		PARSE_loc_rules(rules, cmd);
+	  }
+	  /* Session-Termination-Request */
+	  {
+		struct dict_object* cmd;
+		CHECK_dict_search( DICT_COMMAND, CMD_BY_NAME, "Session-Termination-Request", &cmd)
+		struct local_rules_definition rules[] =
+		{
+			{ { .avp_vendor = 0, .avp_name = "Session-Id"}, RULE_FIXED_HEAD, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "DRMP"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Origin-Host"}, RULE_REQUIRED, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Origin-Realm"}, RULE_REQUIRED, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Destination-Realm"}, RULE_REQUIRED, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Auth-Application-Id"}, RULE_REQUIRED, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Termination-Cause"}, RULE_REQUIRED, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Destination-Host"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "OC-Supported-Features"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Class"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Origin-State-Id"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Proxy-Info"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Route-Record"}, RULE_OPTIONAL, -1, -1 }
+		};
+		PARSE_loc_rules(rules, cmd);
+	  }
+	  /* Session-Termination-Answer */
+	  {
+		struct dict_object* cmd;
+		CHECK_dict_search( DICT_COMMAND, CMD_BY_NAME, "Session-Termination-Answer", &cmd)
+		struct local_rules_definition rules[] =
+		{
+			{ { .avp_vendor = 0, .avp_name = "Session-Id"}, RULE_FIXED_HEAD, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "DRMP"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Origin-Host"}, RULE_REQUIRED, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Origin-Realm"}, RULE_REQUIRED, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Result-Code"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Error-Message"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Error-Reporting-Host"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "OC-Supported-Features"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "OC-OLR"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Failed-AVP"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Origin-State-Id"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Class"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Redirect-Host"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Redirect-Host-Usage"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Redirect-Max-Cache-Time"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Proxy-Info"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Load"}, RULE_OPTIONAL, -1, -1 }
+		};
+		PARSE_loc_rules(rules, cmd);
+	  }
+	  /* TN-Request */
+	  {
+		struct dict_object* cmd;
+		CHECK_dict_search( DICT_COMMAND, CMD_BY_NAME, "TN-Request", &cmd)
+		struct local_rules_definition rules[] =
+		{
+			{ { .avp_vendor = 0, .avp_name = "Session-Id"}, RULE_FIXED_HEAD, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "DRMP"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Vendor-Specific-Application-Id"}, RULE_REQUIRED, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Origin-Host"}, RULE_REQUIRED, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Origin-Realm"}, RULE_REQUIRED, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Destination-Realm"}, RULE_REQUIRED, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Destination-Host"}, RULE_REQUIRED, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Origin-State-Id"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 10415, .avp_name = "ADC-Rule-Report"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "OC-Supported-Features"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Proxy-Info"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Route-Record"}, RULE_OPTIONAL, -1, -1 }
+		};
+		PARSE_loc_rules(rules, cmd);
+	  }
+	  /* TN-Answer */
+	  {
+		struct dict_object* cmd;
+		CHECK_dict_search( DICT_COMMAND, CMD_BY_NAME, "TN-Answer", &cmd)
+		struct local_rules_definition rules[] =
+		{
+			{ { .avp_vendor = 0, .avp_name = "Session-Id"}, RULE_FIXED_HEAD, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "DRMP"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Vendor-Specific-Application-Id"}, RULE_REQUIRED, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Origin-Host"}, RULE_REQUIRED, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Origin-Realm"}, RULE_REQUIRED, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Result-Code"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Experimental-Result"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "OC-Supported-Features"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "OC-OLR"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Origin-State-Id"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Error-Message"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Error-Reporting-Host"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Failed-AVP"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Proxy-Info"}, RULE_OPTIONAL, -1, -1 },
+			{ { .avp_vendor = 0, .avp_name = "Route-Record"}, RULE_OPTIONAL, -1, -1 }
+		};
+		PARSE_loc_rules(rules, cmd);
+	  }
+
+   }
+
+   LOG_D( "Extension 'Dictionary definitions for St (e30)' initialized");
+   return 0;
+}
+
+int dict_entry(char * conffile)
+{
+	dict_st_load_defs(conffile);
+	return dict_st_load_rules(conffile);
+}
+
+const char* dict_proto_ver(char * conffile) {
+	return st_proto_ver;
+}
+
+const double dict_gen_ts(char * conffile) {
+	return st_gen_date;
+}
+
+EXTENSION_ENTRY2("dict_st", dict_st_load_defs, dict_st_load_rules, "dict_ts32299_avps", "dict_ts29212_avps", "dict_ts29273_avps", "dict_ts29214_avps", "dict_ts29272_avps", "dict_ts29229_avps", "dict_ts29061_avps", "dict_rfc4006bis_avps", "dict_draftload_avps", "dict_rfc7683_avps", "dict_rfc7155_avps", "dict_etsi283034_avps", "dict_3gpp2_avps", "dict_rfc7944_avps");
+
+
+
