diff --git a/contrib/babelfishpg_tsql/src/hooks.c b/contrib/babelfishpg_tsql/src/hooks.c
index 956eaa4af6..4a9c0aa298 100644
--- a/contrib/babelfishpg_tsql/src/hooks.c
+++ b/contrib/babelfishpg_tsql/src/hooks.c
@@ -431,6 +431,9 @@ InstallExtendedHooks(void)
 
 	pre_exec_tsql_cast_value_hook = exec_tsql_cast_value_hook;
 	exec_tsql_cast_value_hook = pltsql_exec_tsql_cast_value;
+
+	bbf_InitializeParallelDSM_hook = babelfixedparallelstate_insert;
+	bbf_ParallelWorkerMain_hook = babelfixedparallelstate_restore;
 }
 
 void
@@ -491,6 +494,9 @@ UninstallExtendedHooks(void)
 	transform_pivot_clause_hook = pre_transform_pivot_clause_hook;
 	optimize_explicit_cast_hook = prev_optimize_explicit_cast_hook;
 	called_from_tsql_insert_exec_hook = pre_called_from_tsql_insert_exec_hook;
+
+	bbf_InitializeParallelDSM_hook = NULL;
+	bbf_ParallelWorkerMain_hook = NULL;
 }
 
 /*****************************************
diff --git a/contrib/babelfishpg_tsql/src/session.c b/contrib/babelfishpg_tsql/src/session.c
index 6da90cd8cb..3e91b8e5a8 100644
--- a/contrib/babelfishpg_tsql/src/session.c
+++ b/contrib/babelfishpg_tsql/src/session.c
@@ -17,6 +17,7 @@
 #include "session.h"
 #include "pltsql.h"
 #include "guc.h"
+#include "storage/shm_toc.h"
 
 /* Core Session Properties */
 
@@ -52,6 +53,30 @@ get_cur_db_name(void)
 	return pstrdup(current_db_name);
 }
 
+void 
+set_cur_db_name_for_parallel_worker(const char* logical_db_name)
+{
+	int len;
+
+	if (logical_db_name == NULL)
+		ereport(ERROR,
+				(errcode(ERRCODE_UNDEFINED_DATABASE),
+				 errmsg("database \"\" does not exist")));
+
+	len = strlen(logical_db_name);
+
+	Assert(len <= MAX_BBF_NAMEDATALEND);
+
+	if(!DbidIsValid(get_db_id(logical_db_name)))
+		ereport(ERROR,
+				(errcode(ERRCODE_UNDEFINED_DATABASE),
+				 errmsg("database \"%s\" does not exist", logical_db_name)));
+	
+	strncpy(current_db_name, logical_db_name, MAX_BBF_NAMEDATALEND);
+	current_db_name[len] = '\0';
+}
+
+
 void
 set_cur_db(int16 id, const char *name)
 {
@@ -377,3 +402,59 @@ initialize_context_table()
 
 	session_context_table = hash_create("Session Context", 128, &hash_options, HASH_ELEM | HASH_STRINGS);
 }
+
+/* 
+* This function is responsible for estimating the size of the entry and the number of keys 
+* and insert into the DSM for parallel workers
+* The first argument is ParallelContext which contains the info related to TOC
+* The second argument indicates whether we want to estimate the space or
+* we want to insert the data into DSM
+*/
+void
+babelfixedparallelstate_insert(ParallelContext *pcxt, bool estimate)
+{
+	BabelfishFixedParallelState *bfps;
+	int len;
+	char* current_db_name;
+	if (estimate)
+	{
+		/* Allow space to store the babelfish fixed-size parallel state. */
+		shm_toc_estimate_chunk(&pcxt->estimator, sizeof(BabelfishFixedParallelState));
+		shm_toc_estimate_keys(&pcxt->estimator, 1);
+	}
+	else
+	{
+		/* Initialize babelfish fixed-size state in shared memory. */
+		bfps = (BabelfishFixedParallelState *) shm_toc_allocate(pcxt->toc, sizeof(BabelfishFixedParallelState));
+		current_db_name = get_cur_db_name();
+
+		if (current_db_name == NULL)
+			ereport(ERROR,
+					(errcode(ERRCODE_UNDEFINED_DATABASE),
+					errmsg("database \"\" does not exist")));
+
+		if(!DbidIsValid(get_db_id(current_db_name)))
+			ereport(ERROR,
+					(errcode(ERRCODE_UNDEFINED_DATABASE),
+					errmsg("database \"%s\" does not exist", current_db_name)));
+
+		len = strlen(current_db_name);
+		strncpy(bfps->logical_db_name, current_db_name, MAX_BBF_NAMEDATALEND);
+		bfps->logical_db_name[len] = '\0';
+		shm_toc_insert(pcxt->toc, BABELFISH_PARALLEL_KEY_FIXED, bfps);
+		pfree(current_db_name);
+	}
+}
+
+/* This function is responsible for restoring the babelfixedparallelstate*/
+void
+babelfixedparallelstate_restore(shm_toc *toc)
+{
+	BabelfishFixedParallelState *bfps;	
+
+	/* Get the babelfish fixed parallel state from DSM */
+	bfps = shm_toc_lookup(toc, BABELFISH_PARALLEL_KEY_FIXED, false);
+
+	/* Set the logcial db name for parallel workers */
+	set_cur_db_name_for_parallel_worker(bfps->logical_db_name);
+}
\ No newline at end of file
diff --git a/contrib/babelfishpg_tsql/src/session.h b/contrib/babelfishpg_tsql/src/session.h
index 32de3f8427..c5d17cb161 100644
--- a/contrib/babelfishpg_tsql/src/session.h
+++ b/contrib/babelfishpg_tsql/src/session.h
@@ -1,6 +1,8 @@
 #ifndef SESSION_H
 #define SESSION_H
 #include "postgres.h"
+#include "multidb.h"
+#include "access/parallel.h"
 
 extern int16 get_cur_db_id(void);
 extern void set_cur_db(int16 id, const char *name);
@@ -11,5 +13,15 @@ extern void check_session_db_access(const char *dn_name);
 extern void set_cur_user_db_and_path(const char *db_name);
 extern void restore_session_properties(void);
 extern void reset_session_properties(void);
+extern void set_cur_db_name_for_parallel_worker(const char* logical_db_name);
+
+/* Hooks for parallel workers for babelfish fixed state */
+extern void babelfixedparallelstate_insert(ParallelContext *pcxt, bool estimate);
+extern void babelfixedparallelstate_restore(shm_toc *toc);
+
+/* Babelfish Fixed-size parallel state */
+typedef struct BabelfishFixedParallelState {
+    char logical_db_name[MAX_BBF_NAMEDATALEND + 1]; 
+} BabelfishFixedParallelState;
 
 #endif
diff --git a/test/JDBC/parallel_query_jdbc_schedule b/test/JDBC/parallel_query_jdbc_schedule
index 2ec1d53e80..f586efde93 100644
--- a/test/JDBC/parallel_query_jdbc_schedule
+++ b/test/JDBC/parallel_query_jdbc_schedule
@@ -6,39 +6,14 @@
 # 5. To add a test, add test name (without extension, ,  and . For example if test file name is TestBigInt.txt write TestBigInt) on a new line
 # These tests are crashing/failing with parallel query mode is on. 
 
-
 # Hangs with unknown cause
 ignore#!#sp_who-vu-prepare
 ignore#!#sp_who-vu-verify
 ignore#!#sp_who-vu-cleanup
 
-# Group 1: BABEL-4481
-ignore#!#Test-sp_addrolemember-vu-prepare
-ignore#!#Test-sp_addrolemember-vu-verify
-ignore#!#Test-sp_addrolemember-vu-cleanup
-ignore#!#Test-sp_droprolemember-vu-prepare
-ignore#!#Test-sp_droprolemember-vu-verify
-ignore#!#Test-sp_droprolemember-vu-cleanup
-
 ignore#!#table-variable-vu-verify
 
-# Other or mixed issues - JIRA-BABEL-4538
-# database "" does not exists. (calls is_member() functions)
-ignore#!#BABEL-1621
-# database "" does not exists. (calls schema_id())
-ignore#!#BABEL-741-vu-verify
-ignore#!#BABEL-2416
-ignore#!#BABEL-2833
-# database "" does not exists. (calls IS_ROLEMEMBER())
-ignore#!#BABEL-ROLE-MEMBER-vu-verify
-ignore#!#BABEL-ROLE-MEMBER
-
-# JIRA - BABEL-4421
-ignore#!#Test-sp_addrolemember-dep-vu-verify
-ignore#!#Test-sp_droprolemember-dep-vu-verify
-ignore#!#babel_table_type
-
-# These test should not get ran in parallel query
+# These test should not get run in parallel query
 ignore#!#BABEL-1363
 
 # Taking too much time to complete. (TIME-OUT FAILURES)