diff --git a/test/csit/scripts/dmaap-message-router/dmaap-mr-launch.sh b/test/csit/scripts/dmaap-message-router/dmaap-mr-launch.sh
new file mode 100755
index 0000000..95fecff
--- /dev/null
+++ b/test/csit/scripts/dmaap-message-router/dmaap-mr-launch.sh
@@ -0,0 +1,105 @@
+#!/bin/bash
+#
+# ============LICENSE_START=======================================================
+# ONAP DMAAP MR 
+# ================================================================================
+# Copyright (C) 2018 AT&T Intellectual Property. All rights
+#                             reserved.
+# ================================================================================
+# 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.
+# ============LICENSE_END============================================
+# ===================================================================
+# ECOMP is a trademark and service mark of AT&T Intellectual Property.
+#
+# This script is a copy of plans/dmaap/mrpubsub/setup.sh, placed in the scripts
+# dir, and edited to be a callable function from other plans. e.g. dmaap-buscontroller needs it.
+#
+source ${SCRIPTS}/common_functions.sh
+
+# function to launch DMaaP MR docker containers.
+# sets global var IP with assigned IP address of MR container.
+# (kafka and zk containers are not called externally)
+
+function dmaap_mr_launch() {
+		# Clone DMaaP Message Router repo
+		mkdir -p $WORKSPACE/archives/dmaapmr
+		cd $WORKSPACE/archives/dmaapmr
+		#unset http_proxy https_proxy
+		git clone --depth 1 http://gerrit.onap.org/r/dmaap/messagerouter/messageservice -b master
+		git pull
+		cd $WORKSPACE/archives/dmaapmr/messageservice/src/main/resources/docker-compose
+		cp $WORKSPACE/archives/dmaapmr/messageservice/bundleconfig-local/etc/appprops/MsgRtrApi.properties /var/tmp/
+
+
+		# start DMaaP MR containers with docker compose and configuration from docker-compose.yml
+		docker login -u docker -p docker nexus3.onap.org:10001
+		docker-compose up -d
+
+		# Wait for initialization of Docker contaienr for DMaaP MR, Kafka and Zookeeper
+		for i in {1..50}; do
+			if [ $(docker inspect --format '{{ .State.Running }}' dockercompose_dmaap_1) ] && \
+				[ $(docker inspect --format '{{ .State.Running }}' dockercompose_zookeeper_1) ] && \
+				[ $(docker inspect --format '{{ .State.Running }}' dockercompose_dmaap_1) ] 
+			then
+				echo "DMaaP Service Running"	
+				break    		
+			else 
+				echo sleep $i		
+				sleep $i
+			fi
+		done
+
+
+		DMAAP_MR_IP=$(docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' dockercompose_dmaap_1)
+		IP=${DMAAP_MR_IP}
+		KAFKA_IP=$(docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' dockercompose_kafka_1)
+		ZOOKEEPER_IP=$(docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' dockercompose_zookeeper_1)
+
+		echo DMAAP_MR_IP=${DMAAP_MR_IP}
+		echo IP=${IP}
+		echo KAFKA_IP=${KAFKA_IP}
+		echo ZOOKEEPER_IP=${ZOOKEEPER_IP}
+
+		# Initial docker-compose up and down is for populating kafka and zookeeper IPs in /var/tmp/MsgRtrApi.properites
+		docker-compose down 
+
+		# Update kafkfa and zookeeper properties in MsgRtrApi.propeties which will be copied to DMaaP Container
+		sed -i -e 's/<zookeeper_host>/'$ZOOKEEPER_IP'/' /var/tmp/MsgRtrApi.properties
+		sed -i -e 's/<kafka_host>:<kafka_port>/'$KAFKA_IP':9092/' /var/tmp/MsgRtrApi.properties
+
+		docker-compose build
+		docker login -u docker -p docker nexus3.onap.org:10001
+		docker-compose up -d 
+
+		# Wait for initialization of Docker containers
+		for i in {1..50}; do
+				if [ $(docker inspect --format '{{ .State.Running }}' dockercompose_dmaap_1) ] && \
+						[ $(docker inspect --format '{{ .State.Running }}' dockercompose_zookeeper_1) ] && \
+						[ $(docker inspect --format '{{ .State.Running }}' dockercompose_dmaap_1) ]
+				then
+						echo "DMaaP Service Running"
+						break
+				else
+						echo sleep $i
+						sleep $i
+				fi
+		done
+
+		# Wait for initialization of docker services
+		for i in {1..50}; do
+			curl -sS -m 1 ${DMAAP_MR_IP}:3904/events/TestTopic && break 
+			echo sleep $i
+			sleep $i
+		done
+}
+
