* introduce a new '--restart' parameter to reboot BTS
* unconditionally create TRX1 objects
* wait for '3 Normal' before issuing disconnect
* MBCCU0/MBCCU1 state were accidentially switched

diff --git a/src/bs11_config.c b/src/bs11_config.c
index b9ab72d..47f5578 100644
--- a/src/bs11_config.c
+++ b/src/bs11_config.c
@@ -70,30 +70,13 @@
 
 int handle_serial_msg(struct msgb *rx_msg);
 
-static int create_trx1_objects(struct gsm_bts *bts)
+/* create all objects for an initial configuration */
+static int create_objects(struct gsm_bts *bts)
 {
 	u_int8_t bbsig1_attr[sizeof(obj_bbsig0_attr)+12];
 	u_int8_t *cur = bbsig1_attr;
 	
-	abis_nm_bs11_set_trx1_pw(bts, trx1_password);
-
-	cur = tlv_put(cur, NM_ATT_BS11_PASSWORD, 10,
-		      (u_int8_t *)trx1_password);
-	memcpy(cur, obj_bbsig0_attr, sizeof(obj_bbsig0_attr));
-	abis_nm_bs11_create_object(bts, BS11_OBJ_BBSIG, 1,
-				   sizeof(bbsig1_attr), bbsig1_attr);
-
-	abis_nm_bs11_create_object(bts, BS11_OBJ_PA, 1,
-				   sizeof(obj_pa0_attr), obj_pa0_attr);
-
-	abis_nm_bs11_set_trx_power(&bts->trx[1], BS11_TRX_POWER_GSM_30mW);
-
-	return 0;
-}
-
-/* create all objects for an initial configuration */
-static int create_objects(struct gsm_bts *bts)
-{
+	fprintf(stdout, "Crating Objects for minimal config\n");
 	abis_nm_bs11_create_object(bts, BS11_OBJ_LI, 0, sizeof(obj_li_attr),
 				   obj_li_attr);
 	abis_nm_bs11_create_object(bts, BS11_OBJ_GPSU, 0, 0, NULL);
@@ -113,6 +96,26 @@
 
 	abis_nm_bs11_set_trx_power(&bts->trx[0], BS11_TRX_POWER_GSM_30mW);
 	
+	sleep(1);
+
+	fprintf(stdout, "Crating Objects for TRX1\n");
+
+	abis_nm_bs11_set_trx1_pw(bts, trx1_password);
+
+	sleep(1);
+
+	cur = tlv_put(cur, NM_ATT_BS11_PASSWORD, 10,
+		      (u_int8_t *)trx1_password);
+	memcpy(cur, obj_bbsig0_attr, sizeof(obj_bbsig0_attr));
+	abis_nm_bs11_create_object(bts, BS11_OBJ_BBSIG, 1,
+				   sizeof(bbsig1_attr), bbsig1_attr);
+
+	abis_nm_bs11_create_object(bts, BS11_OBJ_PA, 1,
+				   sizeof(obj_pa0_attr), obj_pa0_attr);
+
+	abis_nm_bs11_set_trx_power(&bts->trx[1], BS11_TRX_POWER_GSM_30mW);
+
+
 	return 0;
 }
 
@@ -120,9 +123,9 @@
 static char *fname_safety = "BTSBMC76.SWI";
 static char *fname_software = "HS011106.SWL";
 static int delay_ms = 0;
-static int have_trx1 = 0;
 static int win_size = 8;
 static int param_disconnect = 0;
+static int param_restart = 0;
 static int param_forced = 0;
 static struct gsm_bts *g_bts;
 
@@ -160,10 +163,14 @@
 		exit(5);
 		break;
 	case NM_MT_LOAD_END_ACK:
-		/* FIXME: activate in case we want to */
-		if (data)
+		if (data) {
+			/* we did a SWL load and must activate it */
 			abis_nm_software_activate(g_bts, fname_safety,
 						  swload_cbfn, g_bts);
+		} else {
+			/* we did a safety load and have to wait */
+			sleep(10);
+		}
 		break;
 	case NM_MT_LOAD_END_NACK:
 		fprintf(stderr, "ERROR: Software Load End NACK\n");
@@ -225,7 +232,7 @@
 
 	printf("Abis-link: %-9s MBCCU0: %-11s MBCCU1: %-11s PHASE: %u ",
 		linkstate_name(st->abis_link & 0xf),
-		mbccu_load_name(st->mbccu >> 4), mbccu_load_name(st->mbccu & 0xf),
+		mbccu_load_name(st->mbccu & 0xf), mbccu_load_name(st->mbccu >> 4),
 		phase & 0xf);
 
 	switch (phase) {
@@ -305,9 +312,14 @@
 		}
 		break;
 	case BS11_STATE_NORMAL:
-		if (have_trx1)
-			create_trx1_objects(g_bts);
-		//return 1;
+		if (param_disconnect) {
+			param_disconnect = 0;
+			abis_nm_bs11_bsc_disconnect(g_bts, 0);
+			if (param_restart) {
+				param_restart = 0;
+				abis_nm_bs11_restart(g_bts);
+			}
+		}
 	default:
 		sleep(5);
 		break;
@@ -390,7 +402,6 @@
 	printf("Supported arguments:\n");
 	printf("\t-h --help\t\t\tPrint this help text\n");
 	printf("\t-p --port </dev/ttyXXX>\t\tSpecify serial port\n");
-	printf("\t-t --with-trx1\t\t\tAssume the BS-11 has 2 TRX\n");
 	printf("\t-s --software <file>\t\tSpecify Software file\n");
 	printf("\t-S --safety <file>\t\tSpecify Safety Load file\n");
 	printf("\t-d --delay <file>\t\tSpecify delay\n");
@@ -408,16 +419,16 @@
 		static struct option long_options[] = {
 			{ "help", 0, 0, 'h' },
 			{ "port", 1, 0, 'p' },
-			{ "with-trx1", 0, 0, 't' },
 			{ "software", 1, 0, 's' },
 			{ "safety", 1, 0, 'S' },
 			{ "delay", 1, 0, 'd' },
 			{ "disconnect", 0, 0, 'D' },
 			{ "win-size", 1, 0, 'w' },
 			{ "forced", 0, 0, 'f' },
+			{ "restart", 0, 0, 'r' },
 		};
 
-		c = getopt_long(argc, argv, "hp:s:S:td:Dw:f",
+		c = getopt_long(argc, argv, "hp:s:S:td:Dw:fr",
 				long_options, &option_index);
 
 		if (c == -1)
@@ -430,9 +441,6 @@
 		case 'p':
 			serial_port = optarg;
 			break;
-		case 't':
-			have_trx1 = 1;
-			break;
 		case 's':
 			fname_software = optarg;
 			break;
@@ -451,6 +459,10 @@
 		case 'f':
 			param_forced = 1;
 			break;
+		case 'r':
+			param_disconnect = 1;
+			param_restart = 1;
+			break;
 		default:
 			break;
 		}
@@ -498,9 +510,6 @@
 	abis_nm_bs11_factory_logon(g_bts, 1);
 	//abis_nm_bs11_get_serno(g_bts);
 
-	if (param_disconnect)
-		abis_nm_bs11_bsc_disconnect(g_bts, 0);
-
 	while (1) {
 		bsc_select_main();
 	}