diff --git a/cmd/arouter/arouter.go b/cmd/arouter/arouter.go
index cfd0282..9415362 100644
--- a/cmd/arouter/arouter.go
+++ b/cmd/arouter/arouter.go
@@ -27,17 +27,19 @@
 	"os"
 )
 
-func main() {
+// startup arouter, return exit status as an integer
+func startup() int {
 
 	conf, err := afrouter.ParseCmd()
 	if err != nil {
 		fmt.Printf("Error: %v\n", err)
-		return
+		return 1
 	}
 
 	// Setup logging
 	if _, err := log.SetDefaultLogger(log.JSON, *conf.LogLevel, log.Fields{"instanceId": conf.InstanceID}); err != nil {
 		log.With(log.Fields{"error": err}).Fatal("Cannot setup logging")
+		return 1
 	}
 
 	defer func() {
@@ -52,14 +54,14 @@
 	if *conf.DisplayVersionOnly {
 		fmt.Println("VOLTHA API Server (afrouter)")
 		fmt.Println(version.VersionInfo.String("  "))
-		return
+		return 0
 	}
 
 	// Parse the config file
 	err = conf.LoadConfig()
 	if err != nil {
 		log.Error(err)
-		return
+		return 1
 	}
 	log.With(log.Fields{"config": *conf}).Debug("Configuration loaded")
 
@@ -72,18 +74,29 @@
 	err = afrouter.InitExitHandler()
 	if err != nil {
 		log.Errorf("Failed to initialize exit handler, exiting: %v", err)
-		return
+		return 1
 	}
 
 	// Create the affinity router proxy...
 	if ap, err := afrouter.NewArouterProxy(conf); err != nil {
 		log.Errorf("Failed to create the arouter proxy, exiting:%v", err)
-		return
+		return 1
 		// and start it.
 		// This function never returns unless an error
 		// occurs or a signal is caught.
+	} else if *conf.DryRun {
+		// Do nothing
 	} else if err := ap.ListenAndServe(); err != nil {
 		log.Errorf("Exiting on error %v", err)
+		return 1
 	}
 
+	return 0
+}
+
+func main() {
+	status := startup()
+	if status != 0 {
+		os.Exit(status)
+	}
 }
