diff --git a/simics-workspace/modules/RDC/RDC.dml b/simics-workspace/modules/RDC/RDC.dml
index 69d0676..ea378e6 100644
--- a/simics-workspace/modules/RDC/RDC.dml
+++ b/simics-workspace/modules/RDC/RDC.dml
@@ -233,7 +233,7 @@ extern int socket_send(char *sendbuf, int size);
 extern void init_429_middleware();
 extern void send_to_429(void *channel_nr, void *data);
 extern void recv_from_429(void *channels);
-
+extern void void close_429_card();

 /*load cfg udp api*/
 extern SEND_UDP_STRUCT_t * getSendUdpCfg();
@@ -953,8 +953,6 @@ method load_afdx_config()
 	}

 	$LoadCfg.load_cfg_table.load_cfg_done();
-
-
 }

@@ -965,12 +963,15 @@ method load_afdx_config()
 // initial configuration is set and when the configuration is loaded from a
 // checkpoint.
 method post_init() {
-    log "info" : "hehe";
 	hwa_load_conf_file();
 	call $load_afdx_config();
 	call $InitTime();
-    // socket_init();
 	init_429_middleware();
     call $socket_loop_recv();

 }
+
+method destroy() {
+    log "info" : "Stop and Close 429 card.";
+    close_429_card();
+}
diff --git a/simics-workspace/modules/RDC/op_429_card.c b/simics-workspace/modules/RDC/op_429_card.c
index 36483a9..0611ea0 100644
--- a/simics-workspace/modules/RDC/op_429_card.c
+++ b/simics-workspace/modules/RDC/op_429_card.c
@@ -1,6 +1,8 @@
 #include <op_429_card.h>

-channel_conf_t g_channel_conf[MAX_CHANNELS] = {
+static A429Handle board;
+
+static channel_conf_t g_channel_conf[MAX_CHANNELS] = {
     {1, 17},
     {2, 18},
     {3, 19},
@@ -19,7 +21,7 @@ channel_conf_t g_channel_conf[MAX_CHANNELS] = {
     {16, 32}
 };

-channel_state_t inited_channel[MAX_CHANNELS] = {
+static channel_state_t inited_channel[MAX_CHANNELS] = {
     {0, {0}, {0}, 0, {0}, &construct_channel_state_t, NULL},
     {0, {0}, {0}, 0, {0}, &construct_channel_state_t, NULL},
     {0, {0}, {0}, 0, {0}, &construct_channel_state_t, NULL},
@@ -142,7 +144,7 @@ static void init_channel_state(const A429Handle *board, const channel_conf_t* co

 void init_429_middleware(void) {
     uint64_t aSerialNumber = 0; /* How to get? */
-    A429Handle board = init_board(aSerialNumber);
+    board = init_board(aSerialNumber);
     init_channel_state(&board, g_channel_conf, MAX_CHANNELS);
 }

@@ -191,3 +193,19 @@ static recv_from_429_card(void *channels) {
         memmove(channels + i * sizeof(Rx_Data), &inited_channel[i].rx, sizeof(Rx_Data));
     }
 }
+
+void close_429_card(void) {
+    A429Return rc = A429_SUCCESS;
+
+    rc = a429BoardStopBoard(board);
+    if (A429_SUCCESS != rc) {
+        fprintf(stderr, "Stop 429 card failed, %s\n", a429UtilsErrorString(rc));
+        exit(1);
+    }
+
+    rc = a429BoardClose(&board);
+    if (A429_SUCCESS != rc) {
+        fprintf(stderr, "Close 429 card failed, %s\n", a429UtilsErrorString(rc));
+        exit(1);
+    }
+}
diff --git a/simics-workspace/modules/RDC/op_429_card.h b/simics-workspace/modules/RDC/op_429_card.h
index 4280f84..13605b6 100644
--- a/simics-workspace/modules/RDC/op_429_card.h
+++ b/simics-workspace/modules/RDC/op_429_card.h
@@ -56,5 +56,6 @@ static send_to_429_card(const channel_state_t* const channel_state);
 void send_to_429(void *channel_nr, void *word);
 void recv_from_429();
 static recv_from_429_card();
+void close_429_card();

 #endif
diff --git a/simics-workspace/modules/RDC/rdc_load_conf.c b/simics-workspace/modules/RDC/rdc_load_conf.c
index 63a7f87..32038c7 100644
--- a/simics-workspace/modules/RDC/rdc_load_conf.c
+++ b/simics-workspace/modules/RDC/rdc_load_conf.c
@@ -200,6 +200,7 @@ int ReadSoftCfg(FILE *fp)
 					continue;
 				}
                 nA429ChannelNum = pSendUdpCfg[i].nA429RecvChannel;
+                nA429ChannelNum -= 1;
 				A429ToUdpArry.nA429ToUdp[nA429ChannelNum][j].nUsed += 1;
 				if (A429ToUdpArry.nA429ToUdp[nA429ChannelNum][j].nUsed==1)
 				{
@@ -567,4 +568,4 @@ method AfdxTo429()

 }
-#endif
\ No newline at end of file
+#endif
diff --git a/simics-workspace/modules/RDC/RDC.dml b/simics-workspace/modules/RDC/RDC.dml
index ea378e6..e4b078f 100644
--- a/simics-workspace/modules/RDC/RDC.dml
+++ b/simics-workspace/modules/RDC/RDC.dml
@@ -233,7 +233,7 @@ extern int socket_send(char *sendbuf, int size);
 extern void init_429_middleware();
 extern void send_to_429(void *channel_nr, void *data);
 extern void recv_from_429(void *channels);
-extern void void close_429_card();
+extern void close_429_card();

 /*load cfg udp api*/
 extern SEND_UDP_STRUCT_t * getSendUdpCfg();