diff --git a/.env.example b/.env.example
new file mode 100644
index 0000000..6d0368f
--- /dev/null
+++ b/.env.example
@@ -0,0 +1,20 @@
+#Serve Http
+PORT=7123
+HOST=127.0.0.1
+
+#AfricasTalking USSD POST endpoint
+AT_ENDPOINT=/ussd/africastalking
+
+#PostgreSQL
+DB_CONN=postgres://postgres:strongpass@localhost:5432/urdt_ussd
+#DB_TIMEZONE=Africa/Nairobi
+#DB_SCHEMA=vise
+
+#External API Calls
+CUSTODIAL_URL_BASE=http://localhost:5003
+BEARER_TOKEN=eyJeSIsInRcCI6IkpXVCJ.yJwdWJsaWNLZXkiOiIwrrrrrr
+DATA_URL_BASE=http://localhost:5006
+
+#Language
+DEFAULT_LANGUAGE=eng
+LANGUAGES=eng, swa
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..b523c77
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,9 @@
+**/*.env
+covprofile
+go.work*
+**/*/*.bin
+**/*/.state/
+cmd/.state/
+id_*
+*.gdbm
+*.log
diff --git a/cmd/africastalking/main.go b/cmd/africastalking/main.go
new file mode 100644
index 0000000..532eeb4
--- /dev/null
+++ b/cmd/africastalking/main.go
@@ -0,0 +1,177 @@
+package main
+
+import (
+	"context"
+	"flag"
+	"fmt"
+	"net/http"
+	"os"
+	"os/signal"
+	"path"
+	"strconv"
+	"syscall"
+
+	"git.defalsify.org/vise.git/engine"
+	"git.defalsify.org/vise.git/logging"
+	"git.defalsify.org/vise.git/lang"
+	"git.defalsify.org/vise.git/resource"
+
+	"git.grassecon.net/grassrootseconomics/visedriver/config"
+	"git.grassecon.net/grassrootseconomics/visedriver/initializers"
+	"git.grassecon.net/grassrootseconomics/visedriver/remote"
+	"git.grassecon.net/grassrootseconomics/visedriver/common"
+	"git.grassecon.net/grassrootseconomics/visedriver/session"
+	
+	at "git.grassecon.net/grassrootseconomics/visedriver-africastalking/africastalking"
+	"git.grassecon.net/grassrootseconomics/visedriver-africastalking/args"
+	"git.grassecon.net/grassrootseconomics/sarafu-vise/handlers"
+)
+
+var (
+	logg          = logging.NewVanilla().WithDomain("AfricasTalking").WithContextKey("at-session-id")
+	scriptDir     = path.Join("services", "registration")
+	build         = "dev"
+	menuSeparator = ": "
+)
+
+func init() {
+	initializers.LoadEnvVariables()
+}
+
+func main() {
+	config.LoadConfig()
+
+	var connStr string
+	var resourceDir string
+	var size uint
+	var database string
+	var engineDebug bool
+	var host string
+	var port uint
+	var err error
+	var gettextDir string
+	var langs args.LangVar
+
+
+	flag.StringVar(&resourceDir, "resourcedir", path.Join("services", "registration"), "resource dir")
+	flag.StringVar(&connStr, "c", "", "connection string")
+	flag.BoolVar(&engineDebug, "d", false, "use engine debug output")
+	flag.UintVar(&size, "s", 160, "max size of output")
+	flag.StringVar(&host, "h", initializers.GetEnv("HOST", "127.0.0.1"), "http host")
+	flag.UintVar(&port, "p", initializers.GetEnvUint("PORT", 7123), "http port")
+	flag.StringVar(&gettextDir, "gettext", "", "use gettext translations from given directory")
+	flag.Var(&langs, "language", "add symbol resolution for language")
+	flag.Parse()
+
+	if connStr == "" {
+		connStr = config.DbConn
+	}
+	connData, err := common.ToConnData(config.DbConn)
+	if err != nil {
+		fmt.Fprintf(os.Stderr, "connstr err: %v", err)
+		os.Exit(1)
+	}
+
+	logg.Infof("start command", "build", build, "conn", connData, "resourcedir", resourceDir, "outputsize", size)
+
+	ctx := context.Background()
+	ctx = context.WithValue(ctx, "Database", database)
+	ln, err := lang.LanguageFromCode(config.DefaultLanguage)
+	if err != nil {
+		fmt.Fprintf(os.Stderr, "default language set error: %v", err)
+		os.Exit(1)
+	}
+	ctx = context.WithValue(ctx, "Language", ln)
+
+	pfp := path.Join(scriptDir, "pp.csv")
+
+	cfg := engine.Config{
+		Root:          "root",
+		OutputSize:    uint32(size),
+		FlagCount:     uint32(128),
+		MenuSeparator: menuSeparator,
+	}
+
+	if engineDebug {
+		cfg.EngineDebug = true
+	}
+
+	menuStorageService, err := common.NewStorageService(connData)
+	if err != nil {
+		fmt.Fprintf(os.Stderr, err.Error())
+		os.Exit(1)
+	}
+
+	rs, err := menuStorageService.GetResource(ctx)
+	if err != nil {
+		fmt.Fprintf(os.Stderr, err.Error())
+		os.Exit(1)
+	}
+
+	userdataStore, err := menuStorageService.GetUserdataDb(ctx)
+	if err != nil {
+		fmt.Fprintf(os.Stderr, err.Error())
+		os.Exit(1)
+	}
+	defer userdataStore.Close()
+
+	dbResource, ok := rs.(*resource.DbResource)
+	if !ok {
+		os.Exit(1)
+	}
+
+	lhs, err := handlers.NewLocalHandlerService(ctx, pfp, true, dbResource, cfg, rs)
+	if err != nil {
+		fmt.Fprintf(os.Stderr, err.Error())
+		os.Exit(1)
+	}
+	lhs.SetDataStore(&userdataStore)
+
+	if err != nil {
+		fmt.Fprintf(os.Stderr, err.Error())
+		os.Exit(1)
+	}
+
+	accountService := remote.AccountService{}
+	hl, err := lhs.GetHandler(&accountService)
+	if err != nil {
+		fmt.Fprintf(os.Stderr, err.Error())
+		os.Exit(1)
+	}
+
+	stateStore, err := menuStorageService.GetStateStore(ctx)
+	if err != nil {
+		fmt.Fprintf(os.Stderr, err.Error())
+		os.Exit(1)
+	}
+	defer stateStore.Close()
+
+	rp := &at.ATRequestParser{}
+	bsh := session.NewBaseSessionHandler(cfg, rs, stateStore, userdataStore, rp, hl)
+	sh := at.NewATSessionHandler(bsh)
+
+	mux := http.NewServeMux()
+	mux.Handle(initializers.GetEnv("AT_ENDPOINT", "/"), sh)
+
+	s := &http.Server{
+		Addr:    fmt.Sprintf("%s:%s", host, strconv.Itoa(int(port))),
+		Handler: mux,
+	}
+	s.RegisterOnShutdown(sh.Shutdown)
+
+	cint := make(chan os.Signal)
+	cterm := make(chan os.Signal)
+	signal.Notify(cint, os.Interrupt, syscall.SIGINT)
+	signal.Notify(cterm, os.Interrupt, syscall.SIGTERM)
+	go func() {
+		select {
+		case _ = <-cint:
+		case _ = <-cterm:
+		}
+		s.Shutdown(ctx)
+	}()
+	err = s.ListenAndServe()
+	if err != nil {
+		logg.Infof("Server closed with error", "err", err)
+	}
+}
diff --git a/cmd/async/main.go b/cmd/async/main.go
new file mode 100644
index 0000000..ba25ba0
--- /dev/null
+++ b/cmd/async/main.go
@@ -0,0 +1,199 @@
+package main
+
+import (
+	"context"
+	"flag"
+	"fmt"
+	"os"
+	"os/signal"
+	"path"
+	"syscall"
+
+	"git.defalsify.org/vise.git/engine"
+	"git.defalsify.org/vise.git/lang"
+	"git.defalsify.org/vise.git/logging"
+	"git.defalsify.org/vise.git/resource"
+
+	"git.grassecon.net/grassrootseconomics/visedriver/config"
+	"git.grassecon.net/grassrootseconomics/visedriver/initializers"
+	"git.grassecon.net/grassrootseconomics/visedriver/storage"
+	"git.grassecon.net/grassrootseconomics/visedriver/session"
+	"git.grassecon.net/grassrootseconomics/visedriver/remote"
+	"git.grassecon.net/grassrootseconomics/visedriver/request"
+	"git.grassecon.net/grassrootseconomics/sarafu-vise/args"
+	"git.grassecon.net/grassrootseconomics/sarafu-vise/handlers"
+)
+
+var (
+	logg          = logging.NewVanilla()
+	scriptDir     = path.Join("services", "registration")
+	menuSeparator = ": "
+)
+
+func init() {
+	initializers.LoadEnvVariables()
+}
+
+type asyncRequestParser struct {
+	sessionId string
+	input     []byte
+}
+
+func (p *asyncRequestParser) GetSessionId(ctx context.Context, r any) (string, error) {
+	return p.sessionId, nil
+}
+
+func (p *asyncRequestParser) GetInput(r any) ([]byte, error) {
+	return p.input, nil
+}
+
+func main() {
+	config.LoadConfig()
+
+	var connStr string
+	var sessionId string
+	var resourceDir string
+	var size uint
+	var engineDebug bool
+	var host string
+	var port uint
+	var err error
+	var gettextDir string
+	var langs args.LangVar
+
+	flag.StringVar(&sessionId, "session-id", "075xx2123", "session id")
+	flag.StringVar(&resourceDir, "resourcedir", path.Join("services", "registration"), "resource dir")
+	flag.StringVar(&connStr, "c", "", "connection string")
+	flag.BoolVar(&engineDebug, "d", false, "use engine debug output")
+	flag.UintVar(&size, "s", 160, "max size of output")
+	flag.StringVar(&host, "h", initializers.GetEnv("HOST", "127.0.0.1"), "http host")
+	flag.UintVar(&port, "p", initializers.GetEnvUint("PORT", 7123), "http port")
+	flag.StringVar(&gettextDir, "gettext", "", "use gettext translations from given directory")
+	flag.Var(&langs, "language", "add symbol resolution for language")
+	flag.Parse()
+
+	if connStr == "" {
+		connStr = config.DbConn
+	}
+	connData, err := storage.ToConnData(connStr)
+	if err != nil {
+		fmt.Fprintf(os.Stderr, "connstr err: %v", err)
+		os.Exit(1)
+	}
+
+	logg.Infof("start command", "conn", connData, "resourcedir", resourceDir, "outputsize", size, "sessionId", sessionId)
+
+	ctx := context.Background()
+
+	ln, err := lang.LanguageFromCode(config.DefaultLanguage)
+	if err != nil {
+		fmt.Fprintf(os.Stderr, "default language set error: %v", err)
+		os.Exit(1)
+	}
+	ctx = context.WithValue(ctx, "Language", ln)
+
+	pfp := path.Join(scriptDir, "pp.csv")
+
+	cfg := engine.Config{
+		Root:          "root",
+		OutputSize:    uint32(size),
+		FlagCount:     uint32(128),
+		MenuSeparator: menuSeparator,
+	}
+
+	if engineDebug {
+		cfg.EngineDebug = true
+	}
+
+	menuStorageService := storage.NewMenuStorageService(connData, resourceDir)
+	if err != nil {
+		fmt.Fprintf(os.Stderr, err.Error())
+		os.Exit(1)
+	}
+
+	rs, err := menuStorageService.GetResource(ctx)
+	if err != nil {
+		fmt.Fprintf(os.Stderr, err.Error())
+		os.Exit(1)
+	}
+
+	userdataStore, err := menuStorageService.GetUserdataDb(ctx)
+	if err != nil {
+		fmt.Fprintf(os.Stderr, err.Error())
+		os.Exit(1)
+	}
+	defer userdataStore.Close()
+
+	dbResource, ok := rs.(*resource.DbResource)
+	if !ok {
+		os.Exit(1)
+	}
+
+	lhs, err := handlers.NewLocalHandlerService(ctx, pfp, true, dbResource, cfg, rs)
+	lhs.SetDataStore(&userdataStore)
+	accountService := remote.AccountService{}
+
+	hl, err := lhs.GetHandler(&accountService)
+	if err != nil {
+		fmt.Fprintf(os.Stderr, err.Error())
+		os.Exit(1)
+	}
+
+	stateStore, err := menuStorageService.GetStateStore(ctx)
+	if err != nil {
+		fmt.Fprintf(os.Stderr, err.Error())
+		os.Exit(1)
+	}
+	defer stateStore.Close()
+
+	rp := &asyncRequestParser{
+		sessionId: sessionId,
+	}
+	sh := session.NewBaseSessionHandler(cfg, rs, stateStore, userdataStore, rp, hl)
+	cfg.SessionId = sessionId
+	rqs := request.RequestSession{
+		Ctx:    ctx,
+		Writer: os.Stdout,
+		Config: cfg,
+	}
+
+	cint := make(chan os.Signal)
+	cterm := make(chan os.Signal)
+	signal.Notify(cint, os.Interrupt, syscall.SIGINT)
+	signal.Notify(cterm, os.Interrupt, syscall.SIGTERM)
+	go func() {
+		select {
+		case _ = <-cint:
+		case _ = <-cterm:
+		}
+		sh.Shutdown()
+	}()
+
+	for true {
+		rqs, err = sh.Process(rqs)
+		if err != nil {
+			logg.ErrorCtxf(ctx, "error in process: %v", "err", err)
+			fmt.Errorf("error in process: %v", err)
+			os.Exit(1)
+		}
+		rqs, err = sh.Output(rqs)
+		if err != nil {
+			logg.ErrorCtxf(ctx, "error in output: %v", "err", err)
+			fmt.Errorf("error in output: %v", err)
+			os.Exit(1)
+		}
+		rqs, err = sh.Reset(rqs)
+		if err != nil {
+			logg.ErrorCtxf(ctx, "error in reset: %v", "err", err)
+			fmt.Errorf("error in reset: %v", err)
+			os.Exit(1)
+		}
+		fmt.Println("")
+		_, err = fmt.Scanln(&rqs.Input)
+		if err != nil {
+			logg.ErrorCtxf(ctx, "error in input", "err", err)
+			fmt.Errorf("error in input: %v", err)
+			os.Exit(1)
+		}
+	}
+}
diff --git a/cmd/http/main.go b/cmd/http/main.go
new file mode 100644
index 0000000..ae43a68
--- /dev/null
+++ b/cmd/http/main.go
@@ -0,0 +1,162 @@
+package main
+
+import (
+	"context"
+	"flag"
+	"fmt"
+	"net/http"
+	"os"
+	"os/signal"
+	"path"
+	"strconv"
+	"syscall"
+
+	"git.defalsify.org/vise.git/engine"
+	"git.defalsify.org/vise.git/lang"
+	"git.defalsify.org/vise.git/logging"
+	"git.defalsify.org/vise.git/resource"
+
+	"git.grassecon.net/grassrootseconomics/visedriver/config"
+	"git.grassecon.net/grassrootseconomics/visedriver/initializers"
+	httpsession "git.grassecon.net/grassrootseconomics/visedriver/session/http"
+	"git.grassecon.net/grassrootseconomics/visedriver/storage"
+	"git.grassecon.net/grassrootseconomics/visedriver/session"
+	"git.grassecon.net/grassrootseconomics/visedriver/remote"
+
+	"git.grassecon.net/grassrootseconomics/sarafu-vise/args"
+	"git.grassecon.net/grassrootseconomics/sarafu-vise/handlers"
+)
+
+var (
+	logg          = logging.NewVanilla()
+	scriptDir     = path.Join("services", "registration")
+	menuSeparator = ": "
+)
+
+func init() {
+	initializers.LoadEnvVariables()
+}
+
+func main() {
+	config.LoadConfig()
+
+	var connStr string
+	var resourceDir string
+	var size uint
+	var engineDebug bool
+	var host string
+	var port uint
+	var err error
+	var gettextDir string
+	var langs args.LangVar
+
+	flag.StringVar(&resourceDir, "resourcedir", path.Join("services", "registration"), "resource dir")
+	flag.StringVar(&connStr, "c", "", "connection string")
+	flag.BoolVar(&engineDebug, "d", false, "use engine debug output")
+	flag.UintVar(&size, "s", 160, "max size of output")
+	flag.StringVar(&host, "h", initializers.GetEnv("HOST", "127.0.0.1"), "http host")
+	flag.UintVar(&port, "p", initializers.GetEnvUint("PORT", 7123), "http port")
+	flag.StringVar(&gettextDir, "gettext", "", "use gettext translations from given directory")
+	flag.Var(&langs, "language", "add symbol resolution for language")
+	flag.Parse()
+
+	if connStr == "" {
+		connStr = config.DbConn
+	}
+	connData, err := storage.ToConnData(connStr)
+	if err != nil {
+		fmt.Fprintf(os.Stderr, "connstr err: %v", err)
+		os.Exit(1)
+	}
+
+	logg.Infof("start command", "conn", connData, "resourcedir", resourceDir, "outputsize", size)
+
+	ctx := context.Background()
+
+	ln, err := lang.LanguageFromCode(config.DefaultLanguage)
+	if err != nil {
+		fmt.Fprintf(os.Stderr, "default language set error: %v", err)
+		os.Exit(1)
+	}
+	ctx = context.WithValue(ctx, "Language", ln)
+
+	pfp := path.Join(scriptDir, "pp.csv")
+
+	cfg := engine.Config{
+		Root:          "root",
+		OutputSize:    uint32(size),
+		FlagCount:     uint32(128),
+		MenuSeparator: menuSeparator,
+	}
+
+	if engineDebug {
+		cfg.EngineDebug = true
+	}
+
+	menuStorageService := storage.NewMenuStorageService(connData, resourceDir)
+
+	rs, err := menuStorageService.GetResource(ctx)
+	if err != nil {
+		fmt.Fprintf(os.Stderr, err.Error())
+		os.Exit(1)
+	}
+
+	userdataStore, err := menuStorageService.GetUserdataDb(ctx)
+	if err != nil {
+		fmt.Fprintf(os.Stderr, err.Error())
+		os.Exit(1)
+	}
+	defer userdataStore.Close()
+
+	dbResource, ok := rs.(*resource.DbResource)
+	if !ok {
+		os.Exit(1)
+	}
+
+	lhs, err := handlers.NewLocalHandlerService(ctx, pfp, true, dbResource, cfg, rs)
+	lhs.SetDataStore(&userdataStore)
+
+	if err != nil {
+		fmt.Fprintf(os.Stderr, err.Error())
+		os.Exit(1)
+	}
+
+	accountService := remote.AccountService{}
+	hl, err := lhs.GetHandler(&accountService)
+	if err != nil {
+		fmt.Fprintf(os.Stderr, err.Error())
+		os.Exit(1)
+	}
+
+	stateStore, err := menuStorageService.GetStateStore(ctx)
+	if err != nil {
+		fmt.Fprintf(os.Stderr, err.Error())
+		os.Exit(1)
+	}
+	defer stateStore.Close()
+
+	rp := &httpsession.DefaultRequestParser{}
+	bsh := session.NewBaseSessionHandler(cfg, rs, stateStore, userdataStore, rp, hl)
+	sh := httpsession.NewHTTPSessionHandler(bsh)
+	s := &http.Server{
+		Addr:    fmt.Sprintf("%s:%s", host, strconv.Itoa(int(port))),
+		Handler: sh,
+	}
+	s.RegisterOnShutdown(sh.Shutdown)
+
+	cint := make(chan os.Signal)
+	cterm := make(chan os.Signal)
+	signal.Notify(cint, os.Interrupt, syscall.SIGINT)
+	signal.Notify(cterm, os.Interrupt, syscall.SIGTERM)
+	go func() {
+		select {
+		case _ = <-cint:
+		case _ = <-cterm:
+		}
+		s.Shutdown(ctx)
+	}()
+	err = s.ListenAndServe()
+	if err != nil {
+		logg.Infof("Server closed with error", "err", err)
+	}
+}
diff --git a/cmd/ssh/README.md b/cmd/ssh/README.md
new file mode 100644
index 0000000..ff325d7
--- /dev/null
+++ b/cmd/ssh/README.md
@@ -0,0 +1,34 @@
+# URDT-USSD SSH server
+
+An SSH server entry point for the vise engine.
+
+
+## Adding public keys for access
+
+Map your (client) public key to a session identifier (e.g. phone number)
+
+```
+go run -v -tags logtrace ./cmd/ssh/sshkey/main.go -i <session_id> [--dbdir <dbpath>] <client_publickey_filepath>
+```
+
+
+## Create a private key for the server
+
+```
+ssh-keygen -N "" -f <server_privatekey_filepath>
+```
+
+
+## Run the server
+
+
+```
+go run -v -tags logtrace ./cmd/ssh/main.go -h <host> -p <port> [--dbdir <dbpath>] <server_privatekey_filepath>
+```
+
+
+## Connect to the server
+
+```
+ssh [-v] -T -p <port> -i <client_publickey_filepath> <host>
+```
diff --git a/cmd/ssh/main.go b/cmd/ssh/main.go
new file mode 100644
index 0000000..82e5bbf
--- /dev/null
+++ b/cmd/ssh/main.go
@@ -0,0 +1,144 @@
+package main
+
+import (
+	"context"
+	"flag"
+	"fmt"
+	"os"
+	"os/signal"
+	"path"
+	"sync"
+	"syscall"
+
+	"git.defalsify.org/vise.git/db"
+	"git.defalsify.org/vise.git/engine"
+	"git.defalsify.org/vise.git/logging"
+
+	"git.grassecon.net/grassrootseconomics/visedriver/config"
+	"git.grassecon.net/grassrootseconomics/visedriver/initializers"
+	"git.grassecon.net/grassrootseconomics/sarafu-vise/ssh"
+	"git.grassecon.net/grassrootseconomics/visedriver/storage"
+)
+
+var (
+	wg        sync.WaitGroup
+	keyStore  db.Db
+	logg      = logging.NewVanilla()
+	scriptDir = path.Join("services", "registration")
+
+	build = "dev"
+)
+
+func init() {
+	initializers.LoadEnvVariables()
+}
+
+func main() {
+	config.LoadConfig()
+
+	var connStr string
+	var authConnStr string
+	var resourceDir string
+	var size uint
+	var engineDebug bool
+	var stateDebug bool
+	var host string
+	var port uint
+	flag.StringVar(&connStr, "c", "", "connection string")
+	flag.StringVar(&authConnStr, "authdb", "", "auth connection string")
+	flag.StringVar(&resourceDir, "resourcedir", path.Join("services", "registration"), "resource dir")
+	flag.BoolVar(&engineDebug, "d", false, "use engine debug output")
+	flag.UintVar(&size, "s", 160, "max size of output")
+	flag.StringVar(&host, "h", "127.0.0.1", "socket host")
+	flag.UintVar(&port, "p", 7122, "socket port")
+	flag.Parse()
+
+	if connStr == "" {
+		connStr = config.DbConn
+	}
+	if authConnStr == "" {
+		authConnStr = connStr
+	}
+	connData, err := storage.ToConnData(connStr)
+	if err != nil {
+		fmt.Fprintf(os.Stderr, "connstr err: %v", err)
+		os.Exit(1)
+	}
+	authConnData, err := storage.ToConnData(authConnStr)
+	if err != nil {
+		fmt.Fprintf(os.Stderr, "auth connstr err: %v", err)
+		os.Exit(1)
+	}
+
+	sshKeyFile := flag.Arg(0)
+	_, err = os.Stat(sshKeyFile)
+	if err != nil {
+		fmt.Fprintf(os.Stderr, "cannot open ssh server private key file: %v\n", err)
+		os.Exit(1)
+	}
+
+	ctx := context.Background()
+	logg.WarnCtxf(ctx, "!!!!! WARNING WARNING WARNING")
+	logg.WarnCtxf(ctx, "!!!!! =======================")
+	logg.WarnCtxf(ctx, "!!!!! This is not a production ready server!")
+	logg.WarnCtxf(ctx, "!!!!! Do not expose to internet and only use with tunnel!")
+	logg.WarnCtxf(ctx, "!!!!! (See ssh -L <...>)")
+
+	logg.Infof("start command", "conn", connData, "authconn", authConnData, "resourcedir", resourceDir, "outputsize", size, "keyfile", sshKeyFile, "host", host, "port", port)
+
+	pfp := path.Join(scriptDir, "pp.csv")
+
+	cfg := engine.Config{
+		Root:       "root",
+		OutputSize: uint32(size),
+		FlagCount:  uint32(16),
+	}
+	if stateDebug {
+		cfg.StateDebug = true
+	}
+	if engineDebug {
+		cfg.EngineDebug = true
+	}
+
+	authKeyStore, err := ssh.NewSshKeyStore(ctx, authConnData.String())
+	if err != nil {
+		fmt.Fprintf(os.Stderr, "keystore file open error: %v", err)
+		os.Exit(1)
+	}
+	defer func() {
+		logg.TraceCtxf(ctx, "shutdown auth key store reached")
+		err = authKeyStore.Close()
+		if err != nil {
+			logg.ErrorCtxf(ctx, "keystore close error", "err", err)
+		}
+	}()
+
+	cint := make(chan os.Signal)
+	cterm := make(chan os.Signal)
+	signal.Notify(cint, os.Interrupt, syscall.SIGINT)
+	signal.Notify(cterm, os.Interrupt, syscall.SIGTERM)
+
+	runner := &ssh.SshRunner{
+		Cfg: cfg,
+		Debug: engineDebug,
+		FlagFile: pfp,
+		Conn: connData,
+		ResourceDir: resourceDir,
+		SrvKeyFile:  sshKeyFile,
+		Host:        host,
+		Port:        port,
+	}
+	go func() {
+		select {
+		case _ = <-cint:
+		case _ = <-cterm:
+		}
+		logg.TraceCtxf(ctx, "shutdown runner reached")
+		err := runner.Stop()
+		if err != nil {
+			logg.ErrorCtxf(ctx, "runner stop error", "err", err)
+		}
+
+	}()
+	runner.Run(ctx, authKeyStore)
+}
diff --git a/cmd/ssh/sshkey/main.go b/cmd/ssh/sshkey/main.go
new file mode 100644
index 0000000..3aac78c
--- /dev/null
+++ b/cmd/ssh/sshkey/main.go
@@ -0,0 +1,44 @@
+package main
+
+import (
+	"context"
+	"flag"
+	"fmt"
+	"os"
+
+	"git.grassecon.net/grassrootseconomics/sarafu-vise/ssh"
+)
+
+func main() {
+	var dbDir string
+	var sessionId string
+	flag.StringVar(&dbDir, "dbdir", ".state", "database dir to read from")
+	flag.StringVar(&sessionId, "i", "", "session id")
+	flag.Parse()
+
+	if sessionId == "" {
+		fmt.Fprintf(os.Stderr, "empty session id\n")
+		os.Exit(1)
+	}
+
+	ctx := context.Background()
+
+	sshKeyFile := flag.Arg(0)
+	if sshKeyFile == "" {
+		fmt.Fprintf(os.Stderr, "missing key file argument\n")
+		os.Exit(1)
+	}
+
+	store, err := ssh.NewSshKeyStore(ctx, dbDir)
+	if err != nil {
+		fmt.Fprintf(os.Stderr, "%v\n", err)
+		os.Exit(1)
+	}
+	defer store.Close()
+
+	err = store.AddFromFile(ctx, sshKeyFile, sessionId)
+	if err != nil {
+		fmt.Fprintf(os.Stderr, "%v\n", err)
+		os.Exit(1)
+	}
+}
diff --git a/go.mod b/go.mod
index 18e3399..876cc3c 100644
--- a/go.mod
+++ b/go.mod
@@ -4,8 +4,8 @@ go 1.23.4
 
 require (
 	git.defalsify.org/vise.git v0.2.3-0.20250103172917-3e190a44568d
-	git.grassecon.net/grassrootseconomics/visedriver v0.8.0-beta.10.0.20250110203936-8387644019e6
-	git.grassecon.net/urdt/ussd v0.8.0-beta.11
+	git.grassecon.net/grassrootseconomics/visedriver v0.8.0-beta.10.0.20250111151614-46bf21b7b8bd
+	git.grassecon.net/grassrootseconomics/visedriver-africastalking v0.0.0-20250111150203-fd8301144509
 	github.com/alecthomas/assert/v2 v2.2.2
 	github.com/gofrs/uuid v4.4.0+incompatible
 	github.com/grassrootseconomics/ussd-data-service v1.2.0-beta
diff --git a/go.sum b/go.sum
index dcd6549..18547a9 100644
--- a/go.sum
+++ b/go.sum
@@ -1,9 +1,9 @@
 git.defalsify.org/vise.git v0.2.3-0.20250103172917-3e190a44568d h1:bPAOVZOX4frSGhfOdcj7kc555f8dc9DmMd2YAyC2AMw=
 git.defalsify.org/vise.git v0.2.3-0.20250103172917-3e190a44568d/go.mod h1:jyBMe1qTYUz3mmuoC9JQ/TvFeW0vTanCUcPu3H8p4Ck=
-git.grassecon.net/grassrootseconomics/visedriver v0.8.0-beta.10.0.20250110203936-8387644019e6 h1:KvcNmeY9EpvsVtcwYW48FxTb7cTdDY1aX0Jcwd649c0=
-git.grassecon.net/grassrootseconomics/visedriver v0.8.0-beta.10.0.20250110203936-8387644019e6/go.mod h1:E6W7ZOa7ZvVr0Bc5ot0LNSwpSPYq4hXlAIvEPy3AJ7U=
-git.grassecon.net/urdt/ussd v0.8.0-beta.11 h1:lAKH5DI21cD+YlS9J+69h5OR45LyYo7dQkufol926FI=
-git.grassecon.net/urdt/ussd v0.8.0-beta.11/go.mod h1:Xct45L7FUE4pYtLN4gmhkMCoafUNpcOJ7horP9kPDAc=
+git.grassecon.net/grassrootseconomics/visedriver v0.8.0-beta.10.0.20250111151614-46bf21b7b8bd h1:mKCov8udBJBQuMF3aFg38SkClL8OvAUZmtArNzgIPak=
+git.grassecon.net/grassrootseconomics/visedriver v0.8.0-beta.10.0.20250111151614-46bf21b7b8bd/go.mod h1:E6W7ZOa7ZvVr0Bc5ot0LNSwpSPYq4hXlAIvEPy3AJ7U=
+git.grassecon.net/grassrootseconomics/visedriver-africastalking v0.0.0-20250111150203-fd8301144509 h1:xlX2FAJkjn1/VS/1z8A9eSGnKWDUmBJy+GtEEDRmggc=
+git.grassecon.net/grassrootseconomics/visedriver-africastalking v0.0.0-20250111150203-fd8301144509/go.mod h1:FwJ9MQtaKlDThtL0ovxZXBIDJoDNgiSeSAxeZNriQJk=
 github.com/alecthomas/assert/v2 v2.2.2 h1:Z/iVC0xZfWTaFNE6bA3z07T86hd45Xe2eLt6WVy2bbk=
 github.com/alecthomas/assert/v2 v2.2.2/go.mod h1:pXcQ2Asjp247dahGEmsZ6ru0UVwnkhktn7S0bBDLxvQ=
 github.com/alecthomas/participle/v2 v2.0.0 h1:Fgrq+MbuSsJwIkw3fEj9h75vDP0Er5JzepJ0/HNHv0g=
diff --git a/handlers/application/menuhandler.go b/handlers/application/menuhandler.go
index ccfbc87..3991789 100644
--- a/handlers/application/menuhandler.go
+++ b/handlers/application/menuhandler.go
@@ -21,7 +21,6 @@ import (
 	"git.grassecon.net/grassrootseconomics/visedriver/utils"
 	"git.grassecon.net/grassrootseconomics/visedriver/models"
 	"git.grassecon.net/grassrootseconomics/visedriver/remote"
-	"git.grassecon.net/grassrootseconomics/visedriver/handlers"
 	"gopkg.in/leonelquinteros/gotext.v1"
 
 	dbstorage "git.grassecon.net/grassrootseconomics/visedriver/storage/db"
@@ -39,10 +38,6 @@ type FlagManager struct {
 	parser *asm.FlagParser
 }
 
-type MenuHandlers struct {
-	*handlers.Handlers
-}
-
 // NewFlagManager creates a new FlagManager instance
 func NewFlagManager(csvPath string) (*FlagManager, error) {
 	parser := asm.NewFlagParser()
@@ -61,12 +56,55 @@ func (fm *FlagManager) GetFlag(label string) (uint32, error) {
 	return fm.parser.GetFlag(label)
 }
 
-func ToMenuHandlers(h *handlers.Handlers) *MenuHandlers { 
-	return &MenuHandlers{
-		Handlers: h,
-	}
+type MenuHandlers struct {
+	pe                   *persist.Persister
+	st                   *state.State
+	ca                   cache.Memory
+	userdataStore        common.DataStore
+	adminstore           *utils.AdminStore
+	flagManager          *asm.FlagParser
+	accountService       remote.AccountServiceInterface
+	prefixDb             dbstorage.PrefixDb
+	profile              *models.Profile
+	ReplaceSeparatorFunc func(string) string
 }
 
+// NewHandlers creates a new instance of the Handlers struct with the provided dependencies.
+func NewMenuHandlers(appFlags *asm.FlagParser, userdataStore db.Db, adminstore *utils.AdminStore, accountService remote.AccountServiceInterface, replaceSeparatorFunc func(string) string) (*MenuHandlers, error) {
+	if userdataStore == nil {
+		return nil, fmt.Errorf("cannot create handler with nil userdata store")
+	}
+	userDb := &common.UserDataStore{
+		Db: userdataStore,
+	}
+
+	// Instantiate the SubPrefixDb with "DATATYPE_USERDATA" prefix
+	prefix := common.ToBytes(db.DATATYPE_USERDATA)
+	prefixDb := dbstorage.NewSubPrefixDb(userdataStore, prefix)
+
+	h := &MenuHandlers{
+		userdataStore:        userDb,
+		flagManager:          appFlags,
+		adminstore:           adminstore,
+		accountService:       accountService,
+		prefixDb:             prefixDb,
+		profile:              &models.Profile{Max: 6},
+		ReplaceSeparatorFunc: replaceSeparatorFunc,
+	}
+	return h, nil
+}
+
+// WithPersister sets persister instance to the handlers.
+//func (h *MenuHandlers) WithPersister(pe *persist.Persister) *MenuHandlers {
+func (h *MenuHandlers) SetPersister(pe *persist.Persister) {
+	if h.pe != nil {
+		panic("persister already set")
+	}
+	h.pe = pe
+	//return h
+}
+
+
 // Init initializes the handler for a new session.
 func (h *MenuHandlers) Init(ctx context.Context, sym string, input []byte) (resource.Result, error) {
 	var r resource.Result
@@ -121,6 +159,7 @@ func (h *MenuHandlers) SetLanguage(ctx context.Context, sym string, input []byte
 	symbol, _ := h.st.Where()
 	code := strings.Split(symbol, "_")[1]
 
+	// TODO: Use defaultlanguage from config
 	if !utils.IsValidISO639(code) {
 		//Fallback to english instead?
 		code = "eng"
diff --git a/handlers/application/menuhandler_test.go b/handlers/application/menuhandler_test.go
index a87ce58..c34cc51 100644
--- a/handlers/application/menuhandler_test.go
+++ b/handlers/application/menuhandler_test.go
@@ -72,7 +72,7 @@ func InitializeTestSubPrefixDb(t *testing.T, ctx context.Context) *dbstorage.Sub
 	return spdb
 }
 
-func TestNewHandlers(t *testing.T) {
+func TestNewMenuHandlers(t *testing.T) {
 	_, store := InitializeTestStore(t)
 
 	fm, err := NewFlagManager(flagsPath)
@@ -84,7 +84,7 @@ func TestNewHandlers(t *testing.T) {
 
 	// Test case for valid UserDataStore
 	t.Run("Valid UserDataStore", func(t *testing.T) {
-		handlers, err := NewHandlers(fm.parser, store, nil, &accountService, mockReplaceSeparator)
+		handlers, err := NewMenuHandlers(fm.parser, store, nil, &accountService, mockReplaceSeparator)
 		if err != nil {
 			t.Fatalf("expected no error, got %v", err)
 		}
@@ -108,7 +108,7 @@ func TestNewHandlers(t *testing.T) {
 
 	// Test case for nil UserDataStore
 	t.Run("Nil UserDataStore", func(t *testing.T) {
-		handlers, err := NewHandlers(fm.parser, nil, nil, &accountService, mockReplaceSeparator)
+		handlers, err := NewMenuHandlers(fm.parser, nil, nil, &accountService, mockReplaceSeparator)
 		if err == nil {
 			t.Fatal("expected an error, got none")
 		}
@@ -144,23 +144,23 @@ func TestInit(t *testing.T) {
 
 	tests := []struct {
 		name           string
-		setup          func() (*Handlers, context.Context)
+		setup          func() (*MenuHandlers, context.Context)
 		input          []byte
 		expectedResult resource.Result
 	}{
 		{
 			name: "Handler not ready",
-			setup: func() (*Handlers, context.Context) {
-				return &Handlers{}, ctx
+			setup: func() (*MenuHandlers, context.Context) {
+				return &MenuHandlers{}, ctx
 			},
 			input:          []byte("1"),
 			expectedResult: resource.Result{},
 		},
 		{
 			name: "State and memory initialization",
-			setup: func() (*Handlers, context.Context) {
+			setup: func() (*MenuHandlers, context.Context) {
 				pe := persist.NewPersister(store).WithSession(sessionId).WithContent(st, ca)
-				h := &Handlers{
+				h := &MenuHandlers{
 					flagManager: fm.parser,
 					adminstore:  adminstore,
 					pe:          pe,
@@ -174,9 +174,9 @@ func TestInit(t *testing.T) {
 		},
 		{
 			name: "Non-admin session initialization",
-			setup: func() (*Handlers, context.Context) {
+			setup: func() (*MenuHandlers, context.Context) {
 				pe := persist.NewPersister(store).WithSession("0712345678").WithContent(st, ca)
-				h := &Handlers{
+				h := &MenuHandlers{
 					flagManager: fm.parser,
 					adminstore:  adminstore,
 					pe:          pe,
@@ -190,9 +190,9 @@ func TestInit(t *testing.T) {
 		},
 		{
 			name: "Move to top node on empty input",
-			setup: func() (*Handlers, context.Context) {
+			setup: func() (*MenuHandlers, context.Context) {
 				pe := persist.NewPersister(store).WithSession(sessionId).WithContent(st, ca)
-				h := &Handlers{
+				h := &MenuHandlers{
 					flagManager: fm.parser,
 					adminstore:  adminstore,
 					pe:          pe,
@@ -253,7 +253,7 @@ func TestCreateAccount(t *testing.T) {
 		t.Run(tt.name, func(t *testing.T) {
 			mockAccountService := new(mocks.MockAccountService)
 
-			h := &Handlers{
+			h := &MenuHandlers{
 				userdataStore:  store,
 				accountService: mockAccountService,
 				flagManager:    fm.parser,
@@ -275,20 +275,20 @@ func TestCreateAccount(t *testing.T) {
 
 func TestWithPersister(t *testing.T) {
 	// Test case: Setting a persister
-	h := &Handlers{}
+	h := &MenuHandlers{}
 	p := &persist.Persister{}
 
-	result := h.WithPersister(p)
+	h.SetPersister(p)
 
 	assert.Equal(t, p, h.pe, "The persister should be set correctly.")
-	assert.Equal(t, h, result, "The returned handler should be the same instance.")
+	//assert.Equal(t, h, result, "The returned handler should be the same instance.")
 }
 
 func TestWithPersister_PanicWhenAlreadySet(t *testing.T) {
 	// Test case: Panic on multiple calls
-	h := &Handlers{pe: &persist.Persister{}}
+	h := &MenuHandlers{pe: &persist.Persister{}}
 	require.Panics(t, func() {
-		h.WithPersister(&persist.Persister{})
+		h.SetPersister(&persist.Persister{})
 	}, "Should panic when trying to set a persister again.")
 }
 
@@ -317,8 +317,8 @@ func TestSaveFirstname(t *testing.T) {
 
 	expectedResult.FlagSet = []uint32{flag_firstname_set}
 
-	// Create the Handlers instance with the mock store
-	h := &Handlers{
+	// Create the MenuHandlers instance with the mock store
+	h := &MenuHandlers{
 		userdataStore: store,
 		flagManager:   fm.parser,
 		st:            mockState,
@@ -361,8 +361,8 @@ func TestSaveFamilyname(t *testing.T) {
 		t.Fatal(err)
 	}
 
-	// Create the Handlers instance with the mock store
-	h := &Handlers{
+	// Create the MenuHandlers instance with the mock store
+	h := &MenuHandlers{
 		userdataStore: store,
 		st:            mockState,
 		flagManager:   fm.parser,
@@ -405,8 +405,8 @@ func TestSaveYoB(t *testing.T) {
 
 	expectedResult.FlagSet = []uint32{flag_yob_set}
 
-	// Create the Handlers instance with the mock store
-	h := &Handlers{
+	// Create the MenuHandlers instance with the mock store
+	h := &MenuHandlers{
 		userdataStore: store,
 		flagManager:   fm.parser,
 		st:            mockState,
@@ -449,8 +449,8 @@ func TestSaveLocation(t *testing.T) {
 
 	expectedResult.FlagSet = []uint32{flag_location_set}
 
-	// Create the Handlers instance with the mock store
-	h := &Handlers{
+	// Create the MenuHandlers instance with the mock store
+	h := &MenuHandlers{
 		userdataStore: store,
 		flagManager:   fm.parser,
 		st:            mockState,
@@ -493,8 +493,8 @@ func TestSaveOfferings(t *testing.T) {
 
 	expectedResult.FlagSet = []uint32{flag_offerings_set}
 
-	// Create the Handlers instance with the mock store
-	h := &Handlers{
+	// Create the MenuHandlers instance with the mock store
+	h := &MenuHandlers{
 		userdataStore: store,
 		flagManager:   fm.parser,
 		st:            mockState,
@@ -560,8 +560,8 @@ func TestSaveGender(t *testing.T) {
 			}
 
 			mockState.ExecPath = append(mockState.ExecPath, tt.executingSymbol)
-			// Create the Handlers instance with the mock store
-			h := &Handlers{
+			// Create the MenuHandlers instance with the mock store
+			h := &MenuHandlers{
 				userdataStore: store,
 				st:            mockState,
 				flagManager:   fm.parser,
@@ -597,8 +597,8 @@ func TestSaveTemporaryPin(t *testing.T) {
 
 	flag_incorrect_pin, _ := fm.parser.GetFlag("flag_incorrect_pin")
 
-	// Create the Handlers instance with the mock flag manager
-	h := &Handlers{
+	// Create the MenuHandlers instance with the mock flag manager
+	h := &MenuHandlers{
 		flagManager:   fm.parser,
 		userdataStore: store,
 	}
@@ -668,8 +668,8 @@ func TestCheckIdentifier(t *testing.T) {
 				t.Fatal(err)
 			}
 
-			// Create the Handlers instance with the mock store
-			h := &Handlers{
+			// Create the MenuHandlers instance with the mock store
+			h := &MenuHandlers{
 				userdataStore: store,
 			}
 
@@ -688,8 +688,8 @@ func TestGetSender(t *testing.T) {
 	ctx, _ := InitializeTestStore(t)
 	ctx = context.WithValue(ctx, "SessionId", sessionId)
 
-	// Create the Handlers instance
-	h := &Handlers{}
+	// Create the MenuHandlers instance
+	h := &MenuHandlers{}
 
 	// Call the method
 	res, _ := h.GetSender(ctx, "get_sender", []byte(""))
@@ -717,8 +717,8 @@ func TestGetAmount(t *testing.T) {
 		t.Fatal(err)
 	}
 
-	// Create the Handlers instance with the mock store
-	h := &Handlers{
+	// Create the MenuHandlers instance with the mock store
+	h := &MenuHandlers{
 		userdataStore: store,
 	}
 
@@ -743,8 +743,8 @@ func TestGetRecipient(t *testing.T) {
 		t.Fatal(err)
 	}
 
-	// Create the Handlers instance with the mock store
-	h := &Handlers{
+	// Create the MenuHandlers instance with the mock store
+	h := &MenuHandlers{
 		userdataStore: store,
 	}
 
@@ -810,8 +810,8 @@ func TestSetLanguage(t *testing.T) {
 			// Set the ExecPath
 			mockState.ExecPath = tt.execPath
 
-			// Create the Handlers instance with the mock flag manager
-			h := &Handlers{
+			// Create the MenuHandlers instance with the mock flag manager
+			h := &MenuHandlers{
 				flagManager:   fm.parser,
 				userdataStore: store,
 				st:            mockState,
@@ -854,8 +854,8 @@ func TestResetAllowUpdate(t *testing.T) {
 
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
-			// Create the Handlers instance with the mock flag manager
-			h := &Handlers{
+			// Create the MenuHandlers instance with the mock flag manager
+			h := &MenuHandlers{
 				flagManager: fm.parser,
 			}
 
@@ -896,8 +896,8 @@ func TestResetAccountAuthorized(t *testing.T) {
 
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
-			// Create the Handlers instance with the mock flag manager
-			h := &Handlers{
+			// Create the MenuHandlers instance with the mock flag manager
+			h := &MenuHandlers{
 				flagManager: fm.parser,
 			}
 
@@ -979,8 +979,8 @@ func TestIncorrectPinReset(t *testing.T) {
 				t.Fatal(err)
 			}
 
-			// Create the Handlers instance with the mock flag manager
-			h := &Handlers{
+			// Create the MenuHandlers instance with the mock flag manager
+			h := &MenuHandlers{
 				flagManager:   fm.parser,
 				userdataStore: store,
 			}
@@ -1022,8 +1022,8 @@ func TestResetIncorrectYob(t *testing.T) {
 
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
-			// Create the Handlers instance with the mock flag manager
-			h := &Handlers{
+			// Create the MenuHandlers instance with the mock flag manager
+			h := &MenuHandlers{
 				flagManager: fm.parser,
 			}
 
@@ -1059,7 +1059,7 @@ func TestAuthorize(t *testing.T) {
 	// Set 1234 is the correct account pin
 	accountPIN := "1234"
 
-	h := &Handlers{
+	h := &MenuHandlers{
 		userdataStore:  store,
 		accountService: mockAccountService,
 		flagManager:    fm.parser,
@@ -1133,7 +1133,7 @@ func TestVerifyYob(t *testing.T) {
 	flag_incorrect_date_format, _ := fm.parser.GetFlag("flag_incorrect_date_format")
 	ctx := context.WithValue(context.Background(), "SessionId", sessionId)
 
-	h := &Handlers{
+	h := &MenuHandlers{
 		accountService: mockAccountService,
 		flagManager:    fm.parser,
 		st:             mockState,
@@ -1199,7 +1199,7 @@ func TestVerifyCreatePin(t *testing.T) {
 	flag_pin_mismatch, _ := fm.parser.GetFlag("flag_pin_mismatch")
 	flag_pin_set, _ := fm.parser.GetFlag("flag_pin_set")
 
-	h := &Handlers{
+	h := &MenuHandlers{
 		userdataStore:  store,
 		accountService: mockAccountService,
 		flagManager:    fm.parser,
@@ -1293,7 +1293,7 @@ func TestCheckAccountStatus(t *testing.T) {
 		t.Run(tt.name, func(t *testing.T) {
 			mockAccountService := new(mocks.MockAccountService)
 
-			h := &Handlers{
+			h := &MenuHandlers{
 				userdataStore:  store,
 				accountService: mockAccountService,
 				flagManager:    fm.parser,
@@ -1333,7 +1333,7 @@ func TestTransactionReset(t *testing.T) {
 
 	mockAccountService := new(mocks.MockAccountService)
 
-	h := &Handlers{
+	h := &MenuHandlers{
 		userdataStore:  store,
 		accountService: mockAccountService,
 		flagManager:    fm.parser,
@@ -1380,7 +1380,7 @@ func TestResetTransactionAmount(t *testing.T) {
 
 	mockAccountService := new(mocks.MockAccountService)
 
-	h := &Handlers{
+	h := &MenuHandlers{
 		userdataStore:  store,
 		accountService: mockAccountService,
 		flagManager:    fm.parser,
@@ -1424,7 +1424,7 @@ func TestInitiateTransaction(t *testing.T) {
 
 	mockAccountService := new(mocks.MockAccountService)
 
-	h := &Handlers{
+	h := &MenuHandlers{
 		userdataStore:  store,
 		accountService: mockAccountService,
 		flagManager:    fm.parser,
@@ -1521,7 +1521,7 @@ func TestQuit(t *testing.T) {
 
 	ctx := context.WithValue(context.Background(), "SessionId", sessionId)
 
-	h := &Handlers{
+	h := &MenuHandlers{
 		accountService: mockAccountService,
 		flagManager:    fm.parser,
 	}
@@ -1570,7 +1570,7 @@ func TestValidateAmount(t *testing.T) {
 
 	mockAccountService := new(mocks.MockAccountService)
 
-	h := &Handlers{
+	h := &MenuHandlers{
 		userdataStore:  store,
 		accountService: mockAccountService,
 		flagManager:    fm.parser,
@@ -1691,8 +1691,8 @@ func TestValidateRecipient(t *testing.T) {
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
 			mockAccountService := new(mocks.MockAccountService)
-			// Create the Handlers instance
-			h := &Handlers{
+			// Create the MenuHandlers instance
+			h := &MenuHandlers{
 				flagManager:    fm.parser,
 				userdataStore:  store,
 				accountService: mockAccountService,
@@ -1745,7 +1745,7 @@ func TestCheckBalance(t *testing.T) {
 			mockAccountService := new(mocks.MockAccountService)
 			ctx := context.WithValue(ctx, "SessionId", tt.sessionId)
 
-			h := &Handlers{
+			h := &MenuHandlers{
 				userdataStore:  store,
 				accountService: mockAccountService,
 			}
@@ -1780,7 +1780,7 @@ func TestGetProfile(t *testing.T) {
 	mockAccountService := new(mocks.MockAccountService)
 	mockState := state.NewState(16)
 
-	h := &Handlers{
+	h := &MenuHandlers{
 		userdataStore:  store,
 		accountService: mockAccountService,
 		st:             mockState,
@@ -1858,7 +1858,7 @@ func TestVerifyNewPin(t *testing.T) {
 
 	flag_valid_pin, _ := fm.parser.GetFlag("flag_valid_pin")
 	mockAccountService := new(mocks.MockAccountService)
-	h := &Handlers{
+	h := &MenuHandlers{
 		flagManager:    fm.parser,
 		accountService: mockAccountService,
 	}
@@ -1904,7 +1904,7 @@ func TestConfirmPin(t *testing.T) {
 	fm, _ := NewFlagManager(flagsPath)
 	flag_pin_mismatch, _ := fm.parser.GetFlag("flag_pin_mismatch")
 	mockAccountService := new(mocks.MockAccountService)
-	h := &Handlers{
+	h := &MenuHandlers{
 		userdataStore:  store,
 		flagManager:    fm.parser,
 		accountService: mockAccountService,
@@ -1968,7 +1968,7 @@ func TestFetchCommunityBalance(t *testing.T) {
 			mockAccountService := new(mocks.MockAccountService)
 			mockState := state.NewState(16)
 
-			h := &Handlers{
+			h := &MenuHandlers{
 				userdataStore:  store,
 				st:             mockState,
 				accountService: mockAccountService,
@@ -2033,7 +2033,7 @@ func TestSetDefaultVoucher(t *testing.T) {
 		t.Run(tt.name, func(t *testing.T) {
 			mockAccountService := new(mocks.MockAccountService)
 
-			h := &Handlers{
+			h := &MenuHandlers{
 				userdataStore:  store,
 				accountService: mockAccountService,
 				flagManager:    fm.parser,
@@ -2066,7 +2066,7 @@ func TestCheckVouchers(t *testing.T) {
 	ctx = context.WithValue(ctx, "SessionId", sessionId)
 	spdb := InitializeTestSubPrefixDb(t, ctx)
 
-	h := &Handlers{
+	h := &MenuHandlers{
 		userdataStore:  store,
 		accountService: mockAccountService,
 		prefixDb:       spdb,
@@ -2108,8 +2108,8 @@ func TestGetVoucherList(t *testing.T) {
 
 	spdb := InitializeTestSubPrefixDb(t, ctx)
 
-	// Initialize Handlers
-	h := &Handlers{
+	// Initialize MenuHandlers
+	h := &MenuHandlers{
 		prefixDb:             spdb,
 		ReplaceSeparatorFunc: mockReplaceSeparator,
 	}
@@ -2142,7 +2142,7 @@ func TestViewVoucher(t *testing.T) {
 
 	spdb := InitializeTestSubPrefixDb(t, ctx)
 
-	h := &Handlers{
+	h := &MenuHandlers{
 		userdataStore: store,
 		flagManager:   fm.parser,
 		prefixDb:      spdb,
@@ -2175,7 +2175,7 @@ func TestSetVoucher(t *testing.T) {
 
 	ctx = context.WithValue(ctx, "SessionId", sessionId)
 
-	h := &Handlers{
+	h := &MenuHandlers{
 		userdataStore: store,
 	}
 
@@ -2215,7 +2215,7 @@ func TestGetVoucherDetails(t *testing.T) {
 
 	tokA_AAddress := "0x0000000000000000000000000000000000000000"
 
-	h := &Handlers{
+	h := &MenuHandlers{
 		userdataStore:  store,
 		flagManager:    fm.parser,
 		accountService: mockAccountService,
@@ -2246,7 +2246,7 @@ func TestCountIncorrectPINAttempts(t *testing.T) {
 	ctx = context.WithValue(ctx, "SessionId", sessionId)
 	attempts := uint8(2)
 
-	h := &Handlers{
+	h := &MenuHandlers{
 		userdataStore: store,
 	}
 	err := store.WriteEntry(ctx, sessionId, common.DATA_INCORRECT_PIN_ATTEMPTS, []byte(strconv.Itoa(int(attempts))))
@@ -2279,7 +2279,7 @@ func TestResetIncorrectPINAttempts(t *testing.T) {
 		t.Logf(err.Error())
 	}
 
-	h := &Handlers{
+	h := &MenuHandlers{
 		userdataStore: store,
 	}
 	h.resetIncorrectPINAttempts(ctx, sessionId)
@@ -2298,7 +2298,7 @@ func TestPersistLanguageCode(t *testing.T) {
 	sessionId := "session123"
 	ctx = context.WithValue(ctx, "SessionId", sessionId)
 
-	h := &Handlers{
+	h := &MenuHandlers{
 		userdataStore: store,
 	}
 	tests := []struct {
diff --git a/handlers/local.go b/handlers/local.go
index 211e31e..bf800f1 100644
--- a/handlers/local.go
+++ b/handlers/local.go
@@ -16,7 +16,7 @@ import (
 )
 
 type HandlerService interface {
-	GetHandler() (*application.Handlers, error)
+	GetHandler() (*application.MenuHandlers, error)
 }
 
 func getParser(fp string, debug bool) (*asm.FlagParser, error) {
@@ -64,16 +64,17 @@ func (ls *LocalHandlerService) SetDataStore(db *db.Db) {
 	ls.UserdataStore = db
 }
 
-func (ls *LocalHandlerService) GetHandler(accountService remote.AccountServiceInterface) (*application.Handlers, error) {
+func (ls *LocalHandlerService) GetHandler(accountService remote.AccountServiceInterface) (*application.MenuHandlers, error) {
 	replaceSeparatorFunc := func(input string) string {
 		return strings.ReplaceAll(input, ":", ls.Cfg.MenuSeparator)
 	}
 
-	appHandlers, err := application.NewHandlers(ls.Parser, *ls.UserdataStore, ls.AdminStore, accountService, replaceSeparatorFunc)
+	appHandlers, err := application.NewMenuHandlers(ls.Parser, *ls.UserdataStore, ls.AdminStore, accountService, replaceSeparatorFunc)
 	if err != nil {
 		return nil, err
 	}
-	appHandlers = appHandlers.WithPersister(ls.Pe)
+	//appHandlers = appHandlers.WithPersister(ls.Pe)
+	appHandlers.SetPersister(ls.Pe)
 	ls.DbRs.AddLocalFunc("set_language", appHandlers.SetLanguage)
 	ls.DbRs.AddLocalFunc("create_account", appHandlers.CreateAccount)
 	ls.DbRs.AddLocalFunc("save_temporary_pin", appHandlers.SaveTemporaryPin)
diff --git a/services/registration/Makefile b/services/registration/Makefile
new file mode 100644
index 0000000..80bbba2
--- /dev/null
+++ b/services/registration/Makefile
@@ -0,0 +1,23 @@
+# Variables to match files in the current directory
+INPUTS = $(wildcard ./*.vis)
+TXTS = $(wildcard ./*.txt.orig)
+VISE_PATH := ../../go-vise
+
+# Rule to build .bin files from .vis files
+%.vis:
+	go run  $(VISE_PATH)/dev/asm/main.go -f pp.csv $(basename $@).vis > $(basename $@).bin
+	@echo "Built $(basename $@).bin from $(basename $@).vis"
+
+# Rule to copy .orig files to .txt
+%.txt.orig:
+	cp -v $(basename $@).orig $(basename $@)
+	@echo "Copied $(basename $@).orig to $(basename $@)"
+
+# 'all' target depends on all .vis and .txt.orig files
+all: $(INPUTS) $(TXTS)
+	@echo "Running all: $(INPUTS) $(TXTS)"
+
+clean: 
+	rm -vf *.bin
+
+.PHONY: clean
diff --git a/services/registration/_catch b/services/registration/_catch
new file mode 100644
index 0000000..e81b8e9
--- /dev/null
+++ b/services/registration/_catch
@@ -0,0 +1 @@
+Something went wrong.Please try again
\ No newline at end of file
diff --git a/services/registration/_catch.bin b/services/registration/_catch.bin
new file mode 100644
index 0000000..549c577
Binary files /dev/null and b/services/registration/_catch.bin differ
diff --git a/services/registration/_catch.vis b/services/registration/_catch.vis
new file mode 100644
index 0000000..72e55ad
--- /dev/null
+++ b/services/registration/_catch.vis
@@ -0,0 +1 @@
+HALT
diff --git a/services/registration/_catch_swa b/services/registration/_catch_swa
new file mode 100644
index 0000000..3affebd
--- /dev/null
+++ b/services/registration/_catch_swa
@@ -0,0 +1 @@
+Tatizo la kimtambo limetokea,tafadhali jaribu tena baadaye.
\ No newline at end of file
diff --git a/services/registration/account_creation b/services/registration/account_creation
new file mode 100644
index 0000000..e9463a6
--- /dev/null
+++ b/services/registration/account_creation
@@ -0,0 +1 @@
+Your account is being created...
\ No newline at end of file
diff --git a/services/registration/account_creation.bin b/services/registration/account_creation.bin
new file mode 100644
index 0000000..1bf6995
Binary files /dev/null and b/services/registration/account_creation.bin differ
diff --git a/services/registration/account_creation.vis b/services/registration/account_creation.vis
new file mode 100644
index 0000000..380fe6d
--- /dev/null
+++ b/services/registration/account_creation.vis
@@ -0,0 +1,4 @@
+RELOAD verify_create_pin
+CATCH create_pin_mismatch flag_pin_mismatch 1
+LOAD quit 0
+HALT
diff --git a/services/registration/account_creation_failed b/services/registration/account_creation_failed
new file mode 100644
index 0000000..0df00db
--- /dev/null
+++ b/services/registration/account_creation_failed
@@ -0,0 +1 @@
+Your account creation request failed. Please try again later.
\ No newline at end of file
diff --git a/services/registration/account_creation_failed.bin b/services/registration/account_creation_failed.bin
new file mode 100644
index 0000000..2505996
Binary files /dev/null and b/services/registration/account_creation_failed.bin differ
diff --git a/services/registration/account_creation_failed.vis b/services/registration/account_creation_failed.vis
new file mode 100644
index 0000000..b62b797
--- /dev/null
+++ b/services/registration/account_creation_failed.vis
@@ -0,0 +1,3 @@
+MOUT quit 9
+HALT
+INCMP quit 9
diff --git a/services/registration/account_creation_failed_swa b/services/registration/account_creation_failed_swa
new file mode 100644
index 0000000..6f0ac7b
--- /dev/null
+++ b/services/registration/account_creation_failed_swa
@@ -0,0 +1 @@
+Ombi lako la kusajiliwa haliwezi kukamilishwa. Tafadhali jaribu tena baadaye.
\ No newline at end of file
diff --git a/services/registration/account_creation_swa b/services/registration/account_creation_swa
new file mode 100644
index 0000000..6e5b1e1
--- /dev/null
+++ b/services/registration/account_creation_swa
@@ -0,0 +1 @@
+Akaunti yako inatengenezwa...
\ No newline at end of file
diff --git a/services/registration/account_menu b/services/registration/account_menu
new file mode 100644
index 0000000..7aa9fe9
--- /dev/null
+++ b/services/registration/account_menu
@@ -0,0 +1 @@
+My Account
\ No newline at end of file
diff --git a/services/registration/account_menu_swa b/services/registration/account_menu_swa
new file mode 100644
index 0000000..c77102f
--- /dev/null
+++ b/services/registration/account_menu_swa
@@ -0,0 +1 @@
+Akaunti yangu
\ No newline at end of file
diff --git a/services/registration/account_pending b/services/registration/account_pending
new file mode 100644
index 0000000..4eadf25
--- /dev/null
+++ b/services/registration/account_pending
@@ -0,0 +1 @@
+Your account is still being created.
\ No newline at end of file
diff --git a/services/registration/account_pending.bin b/services/registration/account_pending.bin
new file mode 100644
index 0000000..90b810c
Binary files /dev/null and b/services/registration/account_pending.bin differ
diff --git a/services/registration/account_pending.vis b/services/registration/account_pending.vis
new file mode 100644
index 0000000..d122613
--- /dev/null
+++ b/services/registration/account_pending.vis
@@ -0,0 +1,3 @@
+RELOAD check_account_status
+CATCH main flag_account_success 1
+HALT
diff --git a/services/registration/account_pending_swa b/services/registration/account_pending_swa
new file mode 100644
index 0000000..2e514b5
--- /dev/null
+++ b/services/registration/account_pending_swa
@@ -0,0 +1 @@
+Akaunti yako bado inatengenezwa
\ No newline at end of file
diff --git a/services/registration/address b/services/registration/address
new file mode 100644
index 0000000..6353876
--- /dev/null
+++ b/services/registration/address
@@ -0,0 +1 @@
+Address: {{.check_identifier}}
\ No newline at end of file
diff --git a/services/registration/address.bin b/services/registration/address.bin
new file mode 100644
index 0000000..60cc03b
Binary files /dev/null and b/services/registration/address.bin differ
diff --git a/services/registration/address.vis b/services/registration/address.vis
new file mode 100644
index 0000000..dfc46d1
--- /dev/null
+++ b/services/registration/address.vis
@@ -0,0 +1,8 @@
+LOAD check_identifier 0
+RELOAD check_identifier
+MAP check_identifier
+MOUT back 0
+MOUT quit 9
+HALT
+INCMP _ 0
+INCMP quit 9
diff --git a/services/registration/address_swa b/services/registration/address_swa
new file mode 100644
index 0000000..3e7a55e
--- /dev/null
+++ b/services/registration/address_swa
@@ -0,0 +1 @@
+Anwani:{{.check_identifier}}
\ No newline at end of file
diff --git a/services/registration/amount b/services/registration/amount
new file mode 100644
index 0000000..9142aba
--- /dev/null
+++ b/services/registration/amount
@@ -0,0 +1,2 @@
+Maximum amount: {{.max_amount}}
+Enter amount:
\ No newline at end of file
diff --git a/services/registration/amount.bin b/services/registration/amount.bin
new file mode 100644
index 0000000..35757a4
Binary files /dev/null and b/services/registration/amount.bin differ
diff --git a/services/registration/amount.vis b/services/registration/amount.vis
new file mode 100644
index 0000000..2266160
--- /dev/null
+++ b/services/registration/amount.vis
@@ -0,0 +1,15 @@
+LOAD reset_transaction_amount 0
+LOAD max_amount 10
+RELOAD max_amount
+MAP max_amount
+MOUT back 0
+HALT
+LOAD validate_amount 64
+RELOAD validate_amount
+CATCH api_failure flag_api_call_error  1
+CATCH invalid_amount flag_invalid_amount 1
+INCMP _ 0
+LOAD get_recipient 0
+LOAD get_sender 64
+LOAD get_amount 32
+INCMP transaction_pin *
diff --git a/services/registration/amount_swa b/services/registration/amount_swa
new file mode 100644
index 0000000..0c8cf01
--- /dev/null
+++ b/services/registration/amount_swa
@@ -0,0 +1,2 @@
+Kiwango cha juu: {{.max_amount}}
+Weka kiwango:
\ No newline at end of file
diff --git a/services/registration/api_failure b/services/registration/api_failure
new file mode 100644
index 0000000..06d2d9e
--- /dev/null
+++ b/services/registration/api_failure
@@ -0,0 +1 @@
+Failed to connect to the custodial service.Please try again.
\ No newline at end of file
diff --git a/services/registration/api_failure.bin b/services/registration/api_failure.bin
new file mode 100644
index 0000000..ffc8224
Binary files /dev/null and b/services/registration/api_failure.bin differ
diff --git a/services/registration/api_failure.vis b/services/registration/api_failure.vis
new file mode 100644
index 0000000..37b3deb
--- /dev/null
+++ b/services/registration/api_failure.vis
@@ -0,0 +1,5 @@
+MOUT retry 1
+MOUT quit 9
+HALT
+INCMP _ 1
+INCMP quit 9
diff --git a/services/registration/back_menu b/services/registration/back_menu
new file mode 100644
index 0000000..2278c97
--- /dev/null
+++ b/services/registration/back_menu
@@ -0,0 +1 @@
+Back
\ No newline at end of file
diff --git a/services/registration/back_menu_swa b/services/registration/back_menu_swa
new file mode 100644
index 0000000..c3e6e37
--- /dev/null
+++ b/services/registration/back_menu_swa
@@ -0,0 +1 @@
+Rudi
\ No newline at end of file
diff --git a/services/registration/balances b/services/registration/balances
new file mode 100644
index 0000000..27a69d5
--- /dev/null
+++ b/services/registration/balances
@@ -0,0 +1 @@
+Balances:
\ No newline at end of file
diff --git a/services/registration/balances.bin b/services/registration/balances.bin
new file mode 100644
index 0000000..352a0a4
Binary files /dev/null and b/services/registration/balances.bin differ
diff --git a/services/registration/balances.vis b/services/registration/balances.vis
new file mode 100644
index 0000000..9a346d5
--- /dev/null
+++ b/services/registration/balances.vis
@@ -0,0 +1,10 @@
+LOAD reset_account_authorized 0
+RELOAD reset_account_authorized
+MOUT my_balance 1
+MOUT community_balance 2
+MOUT back 0
+HALT
+INCMP _ 0
+INCMP my_balance 1
+INCMP community_balance 2
+INCMP . * 
diff --git a/services/registration/balances_swa b/services/registration/balances_swa
new file mode 100644
index 0000000..1649055
--- /dev/null
+++ b/services/registration/balances_swa
@@ -0,0 +1 @@
+Salio:
\ No newline at end of file
diff --git a/services/registration/blocked_account.bin b/services/registration/blocked_account.bin
new file mode 100644
index 0000000..c8642b4
Binary files /dev/null and b/services/registration/blocked_account.bin differ
diff --git a/services/registration/blocked_account.vis b/services/registration/blocked_account.vis
new file mode 100644
index 0000000..d8adab2
--- /dev/null
+++ b/services/registration/blocked_account.vis
@@ -0,0 +1,2 @@
+LOAD show_blocked_account 0
+HALT 
diff --git a/services/registration/change_language b/services/registration/change_language
new file mode 100644
index 0000000..72bedfe
--- /dev/null
+++ b/services/registration/change_language
@@ -0,0 +1 @@
+Select language:
\ No newline at end of file
diff --git a/services/registration/change_language.bin b/services/registration/change_language.bin
new file mode 100644
index 0000000..c5ec01a
Binary files /dev/null and b/services/registration/change_language.bin differ
diff --git a/services/registration/change_language.vis b/services/registration/change_language.vis
new file mode 100644
index 0000000..f20bcfb
--- /dev/null
+++ b/services/registration/change_language.vis
@@ -0,0 +1,10 @@
+LOAD reset_account_authorized 0
+LOAD reset_incorrect 0
+CATCH incorrect_pin flag_incorrect_pin 1
+CATCH pin_entry flag_account_authorized 0
+MOUT english 1
+MOUT kiswahili 2
+HALT
+INCMP set_eng 1
+INCMP set_swa 2
+INCMP . *
diff --git a/services/registration/change_language_menu b/services/registration/change_language_menu
new file mode 100644
index 0000000..7175fce
--- /dev/null
+++ b/services/registration/change_language_menu
@@ -0,0 +1 @@
+Change language
\ No newline at end of file
diff --git a/services/registration/change_language_menu_swa b/services/registration/change_language_menu_swa
new file mode 100644
index 0000000..58cdd10
--- /dev/null
+++ b/services/registration/change_language_menu_swa
@@ -0,0 +1 @@
+Badili lugha
\ No newline at end of file
diff --git a/services/registration/change_language_swa b/services/registration/change_language_swa
new file mode 100644
index 0000000..90e21a8
--- /dev/null
+++ b/services/registration/change_language_swa
@@ -0,0 +1 @@
+Chagua lugha:
\ No newline at end of file
diff --git a/services/registration/change_pin_menu b/services/registration/change_pin_menu
new file mode 100644
index 0000000..4fa175a
--- /dev/null
+++ b/services/registration/change_pin_menu
@@ -0,0 +1 @@
+Change PIN
\ No newline at end of file
diff --git a/services/registration/change_pin_menu_swa b/services/registration/change_pin_menu_swa
new file mode 100644
index 0000000..bb51b21
--- /dev/null
+++ b/services/registration/change_pin_menu_swa
@@ -0,0 +1 @@
+Badili PIN
\ No newline at end of file
diff --git a/services/registration/check_balance_menu b/services/registration/check_balance_menu
new file mode 100644
index 0000000..253f368
--- /dev/null
+++ b/services/registration/check_balance_menu
@@ -0,0 +1 @@
+Check balances
\ No newline at end of file
diff --git a/services/registration/check_balance_menu_swa b/services/registration/check_balance_menu_swa
new file mode 100644
index 0000000..4fe14f2
--- /dev/null
+++ b/services/registration/check_balance_menu_swa
@@ -0,0 +1 @@
+Angalia salio
\ No newline at end of file
diff --git a/services/registration/check_statement b/services/registration/check_statement
new file mode 100644
index 0000000..0e989db
--- /dev/null
+++ b/services/registration/check_statement
@@ -0,0 +1 @@
+Please enter your PIN to view statement:
\ No newline at end of file
diff --git a/services/registration/check_statement.bin b/services/registration/check_statement.bin
new file mode 100644
index 0000000..f038195
Binary files /dev/null and b/services/registration/check_statement.bin differ
diff --git a/services/registration/check_statement.vis b/services/registration/check_statement.vis
new file mode 100644
index 0000000..d79b5ca
--- /dev/null
+++ b/services/registration/check_statement.vis
@@ -0,0 +1,12 @@
+LOAD check_transactions 0
+RELOAD check_transactions
+CATCH no_transfers flag_no_transfers 1
+LOAD authorize_account 6
+MOUT back 0
+MOUT quit 9
+HALT
+RELOAD authorize_account
+CATCH incorrect_pin flag_incorrect_pin 1
+INCMP _ 0
+INCMP quit 9
+INCMP transactions *
diff --git a/services/registration/check_statement_menu b/services/registration/check_statement_menu
new file mode 100644
index 0000000..70e2bd5
--- /dev/null
+++ b/services/registration/check_statement_menu
@@ -0,0 +1 @@
+Check statement
\ No newline at end of file
diff --git a/services/registration/check_statement_menu_swa b/services/registration/check_statement_menu_swa
new file mode 100644
index 0000000..b8a338d
--- /dev/null
+++ b/services/registration/check_statement_menu_swa
@@ -0,0 +1 @@
+Taarifa ya matumizi
\ No newline at end of file
diff --git a/services/registration/check_statement_swa b/services/registration/check_statement_swa
new file mode 100644
index 0000000..468364f
--- /dev/null
+++ b/services/registration/check_statement_swa
@@ -0,0 +1 @@
+Tafadhali weka PIN yako kuona taarifa ya matumizi:
\ No newline at end of file
diff --git a/services/registration/comminity_balance_swa b/services/registration/comminity_balance_swa
new file mode 100644
index 0000000..d9f1d6e
--- /dev/null
+++ b/services/registration/comminity_balance_swa
@@ -0,0 +1 @@
+{{.fetch_community_balance}}
\ No newline at end of file
diff --git a/services/registration/community_balance b/services/registration/community_balance
new file mode 100644
index 0000000..d9f1d6e
--- /dev/null
+++ b/services/registration/community_balance
@@ -0,0 +1 @@
+{{.fetch_community_balance}}
\ No newline at end of file
diff --git a/services/registration/community_balance.bin b/services/registration/community_balance.bin
new file mode 100644
index 0000000..2d7034c
Binary files /dev/null and b/services/registration/community_balance.bin differ
diff --git a/services/registration/community_balance.vis b/services/registration/community_balance.vis
new file mode 100644
index 0000000..fad90cc
--- /dev/null
+++ b/services/registration/community_balance.vis
@@ -0,0 +1,12 @@
+LOAD reset_incorrect 6
+LOAD fetch_community_balance 0
+CATCH api_failure  flag_api_call_error  1
+MAP fetch_community_balance
+CATCH incorrect_pin flag_incorrect_pin 1
+CATCH pin_entry flag_account_authorized 0
+MOUT back 0
+MOUT quit 9
+HALT
+INCMP _ 0
+INCMP quit 9
+INCMP . * 
diff --git a/services/registration/community_balance_menu b/services/registration/community_balance_menu
new file mode 100644
index 0000000..a7344a2
--- /dev/null
+++ b/services/registration/community_balance_menu
@@ -0,0 +1 @@
+Community balance
\ No newline at end of file
diff --git a/services/registration/community_balance_menu_swa b/services/registration/community_balance_menu_swa
new file mode 100644
index 0000000..726fc99
--- /dev/null
+++ b/services/registration/community_balance_menu_swa
@@ -0,0 +1 @@
+Salio la kikundi
\ No newline at end of file
diff --git a/services/registration/confirm_create_pin b/services/registration/confirm_create_pin
new file mode 100644
index 0000000..e4632ad
--- /dev/null
+++ b/services/registration/confirm_create_pin
@@ -0,0 +1 @@
+Enter your four number PIN again:
\ No newline at end of file
diff --git a/services/registration/confirm_create_pin.bin b/services/registration/confirm_create_pin.bin
new file mode 100644
index 0000000..ad89ea6
Binary files /dev/null and b/services/registration/confirm_create_pin.bin differ
diff --git a/services/registration/confirm_create_pin.vis b/services/registration/confirm_create_pin.vis
new file mode 100644
index 0000000..02279dc
--- /dev/null
+++ b/services/registration/confirm_create_pin.vis
@@ -0,0 +1,4 @@
+LOAD save_temporary_pin 6
+HALT
+LOAD verify_create_pin 8
+INCMP account_creation *
diff --git a/services/registration/confirm_create_pin_swa b/services/registration/confirm_create_pin_swa
new file mode 100644
index 0000000..f697854
--- /dev/null
+++ b/services/registration/confirm_create_pin_swa
@@ -0,0 +1 @@
+Weka PIN yako tena:
\ No newline at end of file
diff --git a/services/registration/confirm_others_new_pin b/services/registration/confirm_others_new_pin
new file mode 100644
index 0000000..d345a0a
--- /dev/null
+++ b/services/registration/confirm_others_new_pin
@@ -0,0 +1 @@
+Please confirm new PIN  for:{{.retrieve_blocked_number}}
\ No newline at end of file
diff --git a/services/registration/confirm_others_new_pin.bin b/services/registration/confirm_others_new_pin.bin
new file mode 100644
index 0000000..b60a5ec
Binary files /dev/null and b/services/registration/confirm_others_new_pin.bin differ
diff --git a/services/registration/confirm_others_new_pin.vis b/services/registration/confirm_others_new_pin.vis
new file mode 100644
index 0000000..9132dc4
--- /dev/null
+++ b/services/registration/confirm_others_new_pin.vis
@@ -0,0 +1,14 @@
+CATCH pin_entry flag_incorrect_pin 1
+RELOAD retrieve_blocked_number
+MAP retrieve_blocked_number
+CATCH invalid_others_pin flag_valid_pin 0
+CATCH pin_reset_result flag_account_authorized 1
+LOAD save_others_temporary_pin 6
+RELOAD save_others_temporary_pin
+MOUT back 0
+HALT 
+INCMP _ 0
+LOAD check_pin_mismatch 0
+RELOAD check_pin_mismatch
+CATCH others_pin_mismatch flag_pin_mismatch 1
+INCMP pin_entry *
diff --git a/services/registration/confirm_others_new_pin_swa b/services/registration/confirm_others_new_pin_swa
new file mode 100644
index 0000000..f0b09c8
--- /dev/null
+++ b/services/registration/confirm_others_new_pin_swa
@@ -0,0 +1 @@
+Tafadhali thibitisha PIN mpya ya: {{.retrieve_blocked_number}}
\ No newline at end of file
diff --git a/services/registration/confirm_pin_change b/services/registration/confirm_pin_change
new file mode 100644
index 0000000..398a827
--- /dev/null
+++ b/services/registration/confirm_pin_change
@@ -0,0 +1 @@
+Confirm your new PIN:
diff --git a/services/registration/confirm_pin_change.bin b/services/registration/confirm_pin_change.bin
new file mode 100644
index 0000000..93400b1
Binary files /dev/null and b/services/registration/confirm_pin_change.bin differ
diff --git a/services/registration/confirm_pin_change.vis b/services/registration/confirm_pin_change.vis
new file mode 100644
index 0000000..cf485a1
--- /dev/null
+++ b/services/registration/confirm_pin_change.vis
@@ -0,0 +1,5 @@
+CATCH invalid_pin flag_valid_pin 0
+MOUT back 0
+HALT
+INCMP _ 0
+INCMP * pin_reset_success
diff --git a/services/registration/confirm_pin_change_swa b/services/registration/confirm_pin_change_swa
new file mode 100644
index 0000000..c7af4ea
--- /dev/null
+++ b/services/registration/confirm_pin_change_swa
@@ -0,0 +1 @@
+Thibitisha PIN yako mpya:
diff --git a/services/registration/create_pin b/services/registration/create_pin
new file mode 100644
index 0000000..f8836f5
--- /dev/null
+++ b/services/registration/create_pin
@@ -0,0 +1 @@
+Please enter a new four number PIN for your account:
\ No newline at end of file
diff --git a/services/registration/create_pin.bin b/services/registration/create_pin.bin
new file mode 100644
index 0000000..0065cc5
Binary files /dev/null and b/services/registration/create_pin.bin differ
diff --git a/services/registration/create_pin.vis b/services/registration/create_pin.vis
new file mode 100644
index 0000000..40989ec
--- /dev/null
+++ b/services/registration/create_pin.vis
@@ -0,0 +1,9 @@
+LOAD create_account 0
+CATCH account_creation_failed flag_account_creation_failed 1
+MOUT exit 0
+HALT
+LOAD save_temporary_pin 6
+RELOAD save_temporary_pin
+CATCH . flag_incorrect_pin 1
+INCMP quit 0
+INCMP confirm_create_pin *
diff --git a/services/registration/create_pin_mismatch b/services/registration/create_pin_mismatch
new file mode 100644
index 0000000..e75068c
--- /dev/null
+++ b/services/registration/create_pin_mismatch
@@ -0,0 +1 @@
+The PIN is not a match. Try again
\ No newline at end of file
diff --git a/services/registration/create_pin_mismatch.bin b/services/registration/create_pin_mismatch.bin
new file mode 100644
index 0000000..a80717a
Binary files /dev/null and b/services/registration/create_pin_mismatch.bin differ
diff --git a/services/registration/create_pin_mismatch.vis b/services/registration/create_pin_mismatch.vis
new file mode 100644
index 0000000..91793b5
--- /dev/null
+++ b/services/registration/create_pin_mismatch.vis
@@ -0,0 +1,5 @@
+MOUT retry 1
+MOUT quit 9
+HALT
+INCMP confirm_create_pin 1
+INCMP quit 9
diff --git a/services/registration/create_pin_mismatch_swa b/services/registration/create_pin_mismatch_swa
new file mode 100644
index 0000000..a1d7b6d
--- /dev/null
+++ b/services/registration/create_pin_mismatch_swa
@@ -0,0 +1 @@
+PIN uliyoweka haifanani. Jaribu tena
\ No newline at end of file
diff --git a/services/registration/create_pin_swa b/services/registration/create_pin_swa
new file mode 100644
index 0000000..1fdd972
--- /dev/null
+++ b/services/registration/create_pin_swa
@@ -0,0 +1 @@
+Tafadhali weka PIN mpya yenye nambari nne kwa akaunti yako:
\ No newline at end of file
diff --git a/services/registration/display_profile_info b/services/registration/display_profile_info
new file mode 100644
index 0000000..669c6c6
--- /dev/null
+++ b/services/registration/display_profile_info
@@ -0,0 +1,5 @@
+Wasifu wangu
+Name: Not provided
+Gender: Not provided
+Age: Not provided
+Location: Not provided
\ No newline at end of file
diff --git a/services/registration/display_profile_info.bin b/services/registration/display_profile_info.bin
new file mode 100644
index 0000000..e154dca
Binary files /dev/null and b/services/registration/display_profile_info.bin differ
diff --git a/services/registration/display_profile_info.vis b/services/registration/display_profile_info.vis
new file mode 100644
index 0000000..3790a08
--- /dev/null
+++ b/services/registration/display_profile_info.vis
@@ -0,0 +1,3 @@
+MOUT back 0
+HALT
+INCMP _ 0
diff --git a/services/registration/display_profile_info_swa b/services/registration/display_profile_info_swa
new file mode 100644
index 0000000..e69de29
diff --git a/services/registration/edit_family_name b/services/registration/edit_family_name
new file mode 100644
index 0000000..1d637be
--- /dev/null
+++ b/services/registration/edit_family_name
@@ -0,0 +1,2 @@
+Current family name: {{.get_current_profile_info}}
+Enter family name:
\ No newline at end of file
diff --git a/services/registration/edit_family_name.bin b/services/registration/edit_family_name.bin
new file mode 100644
index 0000000..d8b9a41
Binary files /dev/null and b/services/registration/edit_family_name.bin differ
diff --git a/services/registration/edit_family_name.vis b/services/registration/edit_family_name.vis
new file mode 100644
index 0000000..590eab1
--- /dev/null
+++ b/services/registration/edit_family_name.vis
@@ -0,0 +1,18 @@
+CATCH incorrect_pin flag_incorrect_pin 1
+CATCH update_familyname flag_allow_update 1
+LOAD get_current_profile_info 0
+RELOAD get_current_profile_info
+MAP get_current_profile_info
+MOUT back 0
+HALT
+RELOAD set_back 
+CATCH _ flag_back_set 1
+LOAD save_familyname 64
+RELOAD save_familyname
+CATCH pin_entry flag_familyname_set 1
+CATCH select_gender flag_gender_set 0
+CATCH edit_yob flag_yob_set 0
+CATCH edit_location flag_location_set 0
+CATCH edit_offerings flag_offerings_set 0
+CATCH pin_entry flag_familyname_set 0
+INCMP select_gender *
diff --git a/services/registration/edit_family_name_menu b/services/registration/edit_family_name_menu
new file mode 100644
index 0000000..21a9033
--- /dev/null
+++ b/services/registration/edit_family_name_menu
@@ -0,0 +1 @@
+Edit family name
\ No newline at end of file
diff --git a/services/registration/edit_family_name_menu_swa b/services/registration/edit_family_name_menu_swa
new file mode 100644
index 0000000..48a38b2
--- /dev/null
+++ b/services/registration/edit_family_name_menu_swa
@@ -0,0 +1 @@
+Weka jina la familia
\ No newline at end of file
diff --git a/services/registration/edit_family_name_swa b/services/registration/edit_family_name_swa
new file mode 100644
index 0000000..a1a1cab
--- /dev/null
+++ b/services/registration/edit_family_name_swa
@@ -0,0 +1,2 @@
+Jina la familia la sasa: {{.get_current_profile_info}}
+Weka jina la familia
\ No newline at end of file
diff --git a/services/registration/edit_first_name b/services/registration/edit_first_name
new file mode 100644
index 0000000..3d141ee
--- /dev/null
+++ b/services/registration/edit_first_name
@@ -0,0 +1,2 @@
+Current name: {{.get_current_profile_info}}
+Enter your first names:
\ No newline at end of file
diff --git a/services/registration/edit_first_name.bin b/services/registration/edit_first_name.bin
new file mode 100644
index 0000000..ef49f0f
Binary files /dev/null and b/services/registration/edit_first_name.bin differ
diff --git a/services/registration/edit_first_name.vis b/services/registration/edit_first_name.vis
new file mode 100644
index 0000000..6848b9c
--- /dev/null
+++ b/services/registration/edit_first_name.vis
@@ -0,0 +1,18 @@
+CATCH incorrect_pin flag_incorrect_pin 1
+CATCH update_firstname flag_allow_update 1
+LOAD get_current_profile_info 0
+RELOAD get_current_profile_info
+MAP get_current_profile_info
+MOUT back 0
+HALT
+RELOAD set_back 
+CATCH _ flag_back_set 1
+LOAD save_firstname 128
+RELOAD save_firstname
+CATCH pin_entry flag_firstname_set 1
+CATCH edit_family_name flag_familyname_set 0
+CATCH edit_gender flag_gender_set 0
+CATCH edit_yob flag_yob_set 0
+CATCH edit_location flag_location_set 0
+CATCH edit_offerings flag_offerings_set 0
+CATCH pin_entry flag_firstname_set 0
diff --git a/services/registration/edit_first_name_menu b/services/registration/edit_first_name_menu
new file mode 100644
index 0000000..c7383b7
--- /dev/null
+++ b/services/registration/edit_first_name_menu
@@ -0,0 +1 @@
+Edit name
\ No newline at end of file
diff --git a/services/registration/edit_first_name_menu_swa b/services/registration/edit_first_name_menu_swa
new file mode 100644
index 0000000..9395f7c
--- /dev/null
+++ b/services/registration/edit_first_name_menu_swa
@@ -0,0 +1 @@
+Weka jina
\ No newline at end of file
diff --git a/services/registration/edit_first_name_swa b/services/registration/edit_first_name_swa
new file mode 100644
index 0000000..5776bf0
--- /dev/null
+++ b/services/registration/edit_first_name_swa
@@ -0,0 +1,2 @@
+Jina la kwanza la sasa: {{.get_current_profile_info}}
+Weka majina yako ya kwanza:
\ No newline at end of file
diff --git a/services/registration/edit_gender_menu b/services/registration/edit_gender_menu
new file mode 100644
index 0000000..8946918
--- /dev/null
+++ b/services/registration/edit_gender_menu
@@ -0,0 +1 @@
+Edit gender
\ No newline at end of file
diff --git a/services/registration/edit_gender_menu_swa b/services/registration/edit_gender_menu_swa
new file mode 100644
index 0000000..6d31ea8
--- /dev/null
+++ b/services/registration/edit_gender_menu_swa
@@ -0,0 +1 @@
+Weka jinsia
\ No newline at end of file
diff --git a/services/registration/edit_location b/services/registration/edit_location
new file mode 100644
index 0000000..4e11d1a
--- /dev/null
+++ b/services/registration/edit_location
@@ -0,0 +1,2 @@
+Current location: {{.get_current_profile_info}}
+Enter your location:
\ No newline at end of file
diff --git a/services/registration/edit_location.bin b/services/registration/edit_location.bin
new file mode 100644
index 0000000..5964b21
Binary files /dev/null and b/services/registration/edit_location.bin differ
diff --git a/services/registration/edit_location.vis b/services/registration/edit_location.vis
new file mode 100644
index 0000000..e4fcd8b
--- /dev/null
+++ b/services/registration/edit_location.vis
@@ -0,0 +1,15 @@
+CATCH incorrect_pin flag_incorrect_pin 1
+CATCH update_location flag_allow_update 1
+LOAD get_current_profile_info 0
+RELOAD get_current_profile_info
+LOAD save_location 16
+MOUT back 0
+HALT
+RELOAD set_back 
+CATCH _ flag_back_set 1
+RELOAD save_location
+INCMP _ 0
+CATCH pin_entry flag_location_set 1
+CATCH edit_offerings flag_offerings_set 0
+CATCH pin_entry flag_location_set 0
+INCMP edit_offerings *
diff --git a/services/registration/edit_location_menu b/services/registration/edit_location_menu
new file mode 100644
index 0000000..39ff1b7
--- /dev/null
+++ b/services/registration/edit_location_menu
@@ -0,0 +1 @@
+Edit location
\ No newline at end of file
diff --git a/services/registration/edit_location_menu_swa b/services/registration/edit_location_menu_swa
new file mode 100644
index 0000000..a2a0e59
--- /dev/null
+++ b/services/registration/edit_location_menu_swa
@@ -0,0 +1 @@
+Weka eneo
\ No newline at end of file
diff --git a/services/registration/edit_location_swa b/services/registration/edit_location_swa
new file mode 100644
index 0000000..179c421
--- /dev/null
+++ b/services/registration/edit_location_swa
@@ -0,0 +1,2 @@
+Eneo la sasa: {{.get_current_profile_info}}
+Weka eneo:
\ No newline at end of file
diff --git a/services/registration/edit_offerings b/services/registration/edit_offerings
new file mode 100644
index 0000000..5bb0e7f
--- /dev/null
+++ b/services/registration/edit_offerings
@@ -0,0 +1,2 @@
+Current offerings: {{.get_current_profile_info}}
+Enter the services or goods you offer: 
\ No newline at end of file
diff --git a/services/registration/edit_offerings.bin b/services/registration/edit_offerings.bin
new file mode 100644
index 0000000..b26c7e9
Binary files /dev/null and b/services/registration/edit_offerings.bin differ
diff --git a/services/registration/edit_offerings.vis b/services/registration/edit_offerings.vis
new file mode 100644
index 0000000..9c1e747
--- /dev/null
+++ b/services/registration/edit_offerings.vis
@@ -0,0 +1,13 @@
+CATCH incorrect_pin flag_incorrect_pin 1
+CATCH update_offerings flag_allow_update 1
+LOAD get_current_profile_info 0
+RELOAD get_current_profile_info
+LOAD save_offerings 8
+MOUT back 0
+HALT
+RELOAD set_back 
+CATCH _ flag_back_set 1
+RELOAD save_offerings
+INCMP _ 0
+CATCH pin_entry flag_offerings_set 1
+INCMP update_profile_items *
diff --git a/services/registration/edit_offerings_menu b/services/registration/edit_offerings_menu
new file mode 100644
index 0000000..477ad54
--- /dev/null
+++ b/services/registration/edit_offerings_menu
@@ -0,0 +1 @@
+Edit offerings
\ No newline at end of file
diff --git a/services/registration/edit_offerings_menu_swa b/services/registration/edit_offerings_menu_swa
new file mode 100644
index 0000000..f37e125
--- /dev/null
+++ b/services/registration/edit_offerings_menu_swa
@@ -0,0 +1 @@
+Weka unachouza
\ No newline at end of file
diff --git a/services/registration/edit_offerings_swa b/services/registration/edit_offerings_swa
new file mode 100644
index 0000000..cd81497
--- /dev/null
+++ b/services/registration/edit_offerings_swa
@@ -0,0 +1,2 @@
+Unachouza kwa sasa: {{.get_current_profile_info}}
+Weka unachouza
\ No newline at end of file
diff --git a/services/registration/edit_profile b/services/registration/edit_profile
new file mode 100644
index 0000000..2c808e6
--- /dev/null
+++ b/services/registration/edit_profile
@@ -0,0 +1 @@
+My profile
\ No newline at end of file
diff --git a/services/registration/edit_profile.bin b/services/registration/edit_profile.bin
new file mode 100644
index 0000000..9a16c5e
Binary files /dev/null and b/services/registration/edit_profile.bin differ
diff --git a/services/registration/edit_profile.vis b/services/registration/edit_profile.vis
new file mode 100644
index 0000000..0f0adb7
--- /dev/null
+++ b/services/registration/edit_profile.vis
@@ -0,0 +1,23 @@
+LOAD reset_account_authorized 16
+RELOAD reset_account_authorized
+LOAD reset_allow_update 0
+RELOAD reset_allow_update
+MOUT edit_first_name 1
+MOUT edit_family_name 2
+MOUT edit_gender 3
+MOUT edit_yob 4
+MOUT edit_location 5
+MOUT edit_offerings 6
+MOUT view 7
+MOUT back 0
+HALT
+LOAD set_back 6
+INCMP ^ 0
+INCMP edit_first_name 1
+INCMP edit_family_name 2
+INCMP select_gender 3
+INCMP edit_yob 4
+INCMP edit_location 5
+INCMP edit_offerings 6
+INCMP view_profile 7
+INCMP . * 
diff --git a/services/registration/edit_profile_swa b/services/registration/edit_profile_swa
new file mode 100644
index 0000000..8a12b7d
--- /dev/null
+++ b/services/registration/edit_profile_swa
@@ -0,0 +1 @@
+Wasifu wangu
\ No newline at end of file
diff --git a/services/registration/edit_yob b/services/registration/edit_yob
new file mode 100644
index 0000000..105812b
--- /dev/null
+++ b/services/registration/edit_yob
@@ -0,0 +1,2 @@
+Current year of birth: {{.get_current_profile_info}}
+Enter your year of birth
\ No newline at end of file
diff --git a/services/registration/edit_yob.bin b/services/registration/edit_yob.bin
new file mode 100644
index 0000000..9a4fe71
Binary files /dev/null and b/services/registration/edit_yob.bin differ
diff --git a/services/registration/edit_yob.vis b/services/registration/edit_yob.vis
new file mode 100644
index 0000000..255bea5
--- /dev/null
+++ b/services/registration/edit_yob.vis
@@ -0,0 +1,19 @@
+CATCH incorrect_pin flag_incorrect_pin 1
+CATCH update_yob flag_allow_update 1
+LOAD get_current_profile_info 0
+RELOAD get_current_profile_info
+MAP get_current_profile_info
+MOUT back 0
+HALT
+RELOAD set_back 
+CATCH _ flag_back_set 1
+LOAD verify_yob 6
+RELOAD verify_yob
+CATCH incorrect_date_format flag_incorrect_date_format 1
+LOAD save_yob 32
+RELOAD save_yob
+CATCH pin_entry flag_yob_set 1
+CATCH edit_location flag_location_set 0
+CATCH edit_offerings flag_offerings_set 0
+CATCH pin_entry flag_yob_set 0
+INCMP edit_location *
diff --git a/services/registration/edit_yob_menu b/services/registration/edit_yob_menu
new file mode 100644
index 0000000..3451781
--- /dev/null
+++ b/services/registration/edit_yob_menu
@@ -0,0 +1 @@
+Edit year of birth
\ No newline at end of file
diff --git a/services/registration/edit_yob_menu_swa b/services/registration/edit_yob_menu_swa
new file mode 100644
index 0000000..9bb272a
--- /dev/null
+++ b/services/registration/edit_yob_menu_swa
@@ -0,0 +1 @@
+Weka mwaka wa kuzaliwa
\ No newline at end of file
diff --git a/services/registration/edit_yob_swa b/services/registration/edit_yob_swa
new file mode 100644
index 0000000..f923c86
--- /dev/null
+++ b/services/registration/edit_yob_swa
@@ -0,0 +1,2 @@
+Mwaka wa sasa wa kuzaliwa: {{.get_current_profile_info}}
+Weka mwaka wa kuzaliwa
\ No newline at end of file
diff --git a/services/registration/english_menu b/services/registration/english_menu
new file mode 100644
index 0000000..3d38949
--- /dev/null
+++ b/services/registration/english_menu
@@ -0,0 +1 @@
+English
\ No newline at end of file
diff --git a/services/registration/enter_other_number b/services/registration/enter_other_number
new file mode 100644
index 0000000..1c4a481
--- /dev/null
+++ b/services/registration/enter_other_number
@@ -0,0 +1 @@
+Enter other's phone number:
\ No newline at end of file
diff --git a/services/registration/enter_other_number.bin b/services/registration/enter_other_number.bin
new file mode 100644
index 0000000..85ecbaa
Binary files /dev/null and b/services/registration/enter_other_number.bin differ
diff --git a/services/registration/enter_other_number.vis b/services/registration/enter_other_number.vis
new file mode 100644
index 0000000..0957165
--- /dev/null
+++ b/services/registration/enter_other_number.vis
@@ -0,0 +1,7 @@
+CATCH no_admin_privilege flag_admin_privilege  0
+LOAD reset_account_authorized 0
+RELOAD reset_account_authorized
+MOUT back 0
+HALT
+INCMP _ 0
+INCMP enter_others_new_pin *
diff --git a/services/registration/enter_other_number_swa b/services/registration/enter_other_number_swa
new file mode 100644
index 0000000..214fc4a
--- /dev/null
+++ b/services/registration/enter_other_number_swa
@@ -0,0 +1 @@
+Weka nambari ya simu ili kutuma ombi la kubadilisha nambari ya siri:
\ No newline at end of file
diff --git a/services/registration/enter_others_new_pin b/services/registration/enter_others_new_pin
new file mode 100644
index 0000000..52ae664
--- /dev/null
+++ b/services/registration/enter_others_new_pin
@@ -0,0 +1 @@
+Please enter new PIN for: {{.retrieve_blocked_number}}
\ No newline at end of file
diff --git a/services/registration/enter_others_new_pin.bin b/services/registration/enter_others_new_pin.bin
new file mode 100644
index 0000000..a9e0690
Binary files /dev/null and b/services/registration/enter_others_new_pin.bin differ
diff --git a/services/registration/enter_others_new_pin.vis b/services/registration/enter_others_new_pin.vis
new file mode 100644
index 0000000..7711c97
--- /dev/null
+++ b/services/registration/enter_others_new_pin.vis
@@ -0,0 +1,12 @@
+LOAD validate_blocked_number 6
+RELOAD validate_blocked_number
+CATCH unregistered_number flag_unregistered_number 1
+LOAD retrieve_blocked_number 0
+RELOAD retrieve_blocked_number
+MAP retrieve_blocked_number
+MOUT back 0
+HALT 
+LOAD verify_new_pin 6
+RELOAD verify_new_pin
+INCMP _ 0
+INCMP * confirm_others_new_pin
diff --git a/services/registration/enter_others_new_pin_swa b/services/registration/enter_others_new_pin_swa
new file mode 100644
index 0000000..77ec2f3
--- /dev/null
+++ b/services/registration/enter_others_new_pin_swa
@@ -0,0 +1 @@
+Tafadhali weka PIN mpya ya: {{.retrieve_blocked_number}}
\ No newline at end of file
diff --git a/services/registration/enter_pin b/services/registration/enter_pin
new file mode 100644
index 0000000..cbb44ca
--- /dev/null
+++ b/services/registration/enter_pin
@@ -0,0 +1 @@
+Please enter your PIN:
\ No newline at end of file
diff --git a/services/registration/enter_pin.bin b/services/registration/enter_pin.bin
new file mode 100644
index 0000000..3919ba8
Binary files /dev/null and b/services/registration/enter_pin.bin differ
diff --git a/services/registration/enter_pin.vis b/services/registration/enter_pin.vis
new file mode 100644
index 0000000..1217074
--- /dev/null
+++ b/services/registration/enter_pin.vis
@@ -0,0 +1,4 @@
+MOUT back 0
+HALT
+INCMP _ 0
+INCMP display_profile_info *
diff --git a/services/registration/enter_pin_swa b/services/registration/enter_pin_swa
new file mode 100644
index 0000000..bb30cfd
--- /dev/null
+++ b/services/registration/enter_pin_swa
@@ -0,0 +1 @@
+Weka PIN yako
\ No newline at end of file
diff --git a/services/registration/exit_menu b/services/registration/exit_menu
new file mode 100644
index 0000000..1105a55
--- /dev/null
+++ b/services/registration/exit_menu
@@ -0,0 +1 @@
+Exit
\ No newline at end of file
diff --git a/services/registration/exit_menu_swa b/services/registration/exit_menu_swa
new file mode 100644
index 0000000..474f1ff
--- /dev/null
+++ b/services/registration/exit_menu_swa
@@ -0,0 +1 @@
+Ondoka
\ No newline at end of file
diff --git a/services/registration/female_menu b/services/registration/female_menu
new file mode 100644
index 0000000..18b94e5
--- /dev/null
+++ b/services/registration/female_menu
@@ -0,0 +1 @@
+Female
\ No newline at end of file
diff --git a/services/registration/female_menu_swa b/services/registration/female_menu_swa
new file mode 100644
index 0000000..0506300
--- /dev/null
+++ b/services/registration/female_menu_swa
@@ -0,0 +1 @@
+Mwanamke
\ No newline at end of file
diff --git a/services/registration/help.bin b/services/registration/help.bin
new file mode 100644
index 0000000..199c5db
Binary files /dev/null and b/services/registration/help.bin differ
diff --git a/services/registration/help.vis b/services/registration/help.vis
new file mode 100644
index 0000000..6244d4d
--- /dev/null
+++ b/services/registration/help.vis
@@ -0,0 +1,2 @@
+LOAD quit_with_help 0
+HALT
diff --git a/services/registration/help_menu b/services/registration/help_menu
new file mode 100644
index 0000000..0c64ced
--- /dev/null
+++ b/services/registration/help_menu
@@ -0,0 +1 @@
+Help
\ No newline at end of file
diff --git a/services/registration/help_menu_swa b/services/registration/help_menu_swa
new file mode 100644
index 0000000..393e0c8
--- /dev/null
+++ b/services/registration/help_menu_swa
@@ -0,0 +1 @@
+Usaidizi
\ No newline at end of file
diff --git a/services/registration/incorrect_date_format b/services/registration/incorrect_date_format
new file mode 100644
index 0000000..56df792
--- /dev/null
+++ b/services/registration/incorrect_date_format
@@ -0,0 +1,2 @@
+The year of birth you entered is invalid.
+Please try again.
\ No newline at end of file
diff --git a/services/registration/incorrect_date_format.bin b/services/registration/incorrect_date_format.bin
new file mode 100644
index 0000000..8188b43
Binary files /dev/null and b/services/registration/incorrect_date_format.bin differ
diff --git a/services/registration/incorrect_date_format.vis b/services/registration/incorrect_date_format.vis
new file mode 100644
index 0000000..f4a8a2b
--- /dev/null
+++ b/services/registration/incorrect_date_format.vis
@@ -0,0 +1,6 @@
+LOAD reset_incorrect_date_format 8
+MOUT retry 1
+MOUT quit 9
+HALT
+INCMP _ 1
+INCMP quit 9
diff --git a/services/registration/incorrect_date_format_swa b/services/registration/incorrect_date_format_swa
new file mode 100644
index 0000000..bd85f21
--- /dev/null
+++ b/services/registration/incorrect_date_format_swa
@@ -0,0 +1,2 @@
+Mwaka wa kuzaliwa ulioweka sio sahihi.
+Tafadhali jaribu tena.
\ No newline at end of file
diff --git a/services/registration/incorrect_pin b/services/registration/incorrect_pin
new file mode 100644
index 0000000..13a9562
--- /dev/null
+++ b/services/registration/incorrect_pin
@@ -0,0 +1 @@
+Incorrect PIN. You have: {{.reset_incorrect}} remaining attempt(s).
\ No newline at end of file
diff --git a/services/registration/incorrect_pin.bin b/services/registration/incorrect_pin.bin
new file mode 100644
index 0000000..8817c23
Binary files /dev/null and b/services/registration/incorrect_pin.bin differ
diff --git a/services/registration/incorrect_pin.vis b/services/registration/incorrect_pin.vis
new file mode 100644
index 0000000..167364a
--- /dev/null
+++ b/services/registration/incorrect_pin.vis
@@ -0,0 +1,9 @@
+LOAD reset_incorrect 0
+RELOAD reset_incorrect
+MAP reset_incorrect
+CATCH blocked_account flag_account_blocked 1
+MOUT retry 1
+MOUT quit 9
+HALT
+INCMP _ 1
+INCMP quit 9
diff --git a/services/registration/incorrect_pin_swa b/services/registration/incorrect_pin_swa
new file mode 100644
index 0000000..ed22beb
--- /dev/null
+++ b/services/registration/incorrect_pin_swa
@@ -0,0 +1 @@
+PIN ulioeka sio sahihi, una majaribio: {{.reset_incorrect}} yaliyobaki
\ No newline at end of file
diff --git a/services/registration/invalid_amount b/services/registration/invalid_amount
new file mode 100644
index 0000000..c4bbe3f
--- /dev/null
+++ b/services/registration/invalid_amount
@@ -0,0 +1 @@
+Amount {{.validate_amount}} is invalid, please try again:
\ No newline at end of file
diff --git a/services/registration/invalid_amount.bin b/services/registration/invalid_amount.bin
new file mode 100644
index 0000000..52bd9da
Binary files /dev/null and b/services/registration/invalid_amount.bin differ
diff --git a/services/registration/invalid_amount.vis b/services/registration/invalid_amount.vis
new file mode 100644
index 0000000..d5b5f03
--- /dev/null
+++ b/services/registration/invalid_amount.vis
@@ -0,0 +1,7 @@
+MAP validate_amount
+RELOAD reset_transaction_amount
+MOUT retry 1
+MOUT quit 9
+HALT
+INCMP _ 1
+INCMP quit 9
diff --git a/services/registration/invalid_amount_swa b/services/registration/invalid_amount_swa
new file mode 100644
index 0000000..836d7b2
--- /dev/null
+++ b/services/registration/invalid_amount_swa
@@ -0,0 +1 @@
+Kiwango {{.validate_amount}} sio sahihi, tafadhali weka tena:
\ No newline at end of file
diff --git a/services/registration/invalid_others_pin b/services/registration/invalid_others_pin
new file mode 100644
index 0000000..acdf45f
--- /dev/null
+++ b/services/registration/invalid_others_pin
@@ -0,0 +1 @@
+The PIN you have entered is invalid.Please try a 4 digit number instead.
\ No newline at end of file
diff --git a/services/registration/invalid_others_pin.bin b/services/registration/invalid_others_pin.bin
new file mode 100644
index 0000000..5f3163d
Binary files /dev/null and b/services/registration/invalid_others_pin.bin differ
diff --git a/services/registration/invalid_others_pin.vis b/services/registration/invalid_others_pin.vis
new file mode 100644
index 0000000..d218e6d
--- /dev/null
+++ b/services/registration/invalid_others_pin.vis
@@ -0,0 +1,5 @@
+MOUT retry 1
+MOUT quit 9
+HALT
+INCMP enter_others_new_pin 1
+INCMP quit 9
diff --git a/services/registration/invalid_pin b/services/registration/invalid_pin
new file mode 100644
index 0000000..dd984ea
--- /dev/null
+++ b/services/registration/invalid_pin
@@ -0,0 +1 @@
+The PIN you entered is invalid.The PIN must be different from your current PIN.For help call +254757628885
\ No newline at end of file
diff --git a/services/registration/invalid_pin.bin b/services/registration/invalid_pin.bin
new file mode 100644
index 0000000..e154dca
Binary files /dev/null and b/services/registration/invalid_pin.bin differ
diff --git a/services/registration/invalid_pin.vis b/services/registration/invalid_pin.vis
new file mode 100644
index 0000000..3790a08
--- /dev/null
+++ b/services/registration/invalid_pin.vis
@@ -0,0 +1,3 @@
+MOUT back 0
+HALT
+INCMP _ 0
diff --git a/services/registration/invalid_pin_swa b/services/registration/invalid_pin_swa
new file mode 100644
index 0000000..7512242
--- /dev/null
+++ b/services/registration/invalid_pin_swa
@@ -0,0 +1 @@
+PIN mpya na udhibitisho wa PIN mpya hazilingani.Tafadhali jaribu tena.Kwa usaidizi piga simu +254757628885.
diff --git a/services/registration/invalid_recipient b/services/registration/invalid_recipient
new file mode 100644
index 0000000..d9fcb1d
--- /dev/null
+++ b/services/registration/invalid_recipient
@@ -0,0 +1 @@
+{{.validate_recipient}} is invalid, please try again:
\ No newline at end of file
diff --git a/services/registration/invalid_recipient.bin b/services/registration/invalid_recipient.bin
new file mode 100644
index 0000000..dcf9d4e
Binary files /dev/null and b/services/registration/invalid_recipient.bin differ
diff --git a/services/registration/invalid_recipient.vis b/services/registration/invalid_recipient.vis
new file mode 100644
index 0000000..09efdde
--- /dev/null
+++ b/services/registration/invalid_recipient.vis
@@ -0,0 +1,7 @@
+MAP validate_recipient
+RELOAD transaction_reset
+MOUT retry 1
+MOUT quit 9
+HALT
+INCMP _ 1
+INCMP quit 9
diff --git a/services/registration/invalid_recipient_swa b/services/registration/invalid_recipient_swa
new file mode 100644
index 0000000..13dda97
--- /dev/null
+++ b/services/registration/invalid_recipient_swa
@@ -0,0 +1 @@
+{{.validate_recipient}} sio sahihi, tafadhali weka tena:
\ No newline at end of file
diff --git a/services/registration/invite_menu b/services/registration/invite_menu
new file mode 100644
index 0000000..e44862a
--- /dev/null
+++ b/services/registration/invite_menu
@@ -0,0 +1 @@
+Invite to Sarafu Network
\ No newline at end of file
diff --git a/services/registration/invite_menu_swa b/services/registration/invite_menu_swa
new file mode 100644
index 0000000..48c0ddf
--- /dev/null
+++ b/services/registration/invite_menu_swa
@@ -0,0 +1 @@
+Karibisha kwa matandao wa Sarafu
\ No newline at end of file
diff --git a/services/registration/invite_recipient b/services/registration/invite_recipient
new file mode 100644
index 0000000..aa3438d
--- /dev/null
+++ b/services/registration/invite_recipient
@@ -0,0 +1 @@
+{{.validate_recipient}} is not registered, please try again:
\ No newline at end of file
diff --git a/services/registration/invite_recipient.bin b/services/registration/invite_recipient.bin
new file mode 100644
index 0000000..962ccf3
Binary files /dev/null and b/services/registration/invite_recipient.bin differ
diff --git a/services/registration/invite_recipient.vis b/services/registration/invite_recipient.vis
new file mode 100644
index 0000000..1a4845f
--- /dev/null
+++ b/services/registration/invite_recipient.vis
@@ -0,0 +1,8 @@
+MAP validate_recipient
+MOUT retry 1
+MOUT invite 2
+MOUT quit 9
+HALT
+INCMP _ 1
+INCMP invite_result 2
+INCMP quit 9
diff --git a/services/registration/invite_recipient_swa b/services/registration/invite_recipient_swa
new file mode 100644
index 0000000..30cf599
--- /dev/null
+++ b/services/registration/invite_recipient_swa
@@ -0,0 +1 @@
+{{.validate_recipient}} haijasajiliwa, tafadhali weka tena:
\ No newline at end of file
diff --git a/services/registration/invite_result.bin b/services/registration/invite_result.bin
new file mode 100644
index 0000000..5e81094
Binary files /dev/null and b/services/registration/invite_result.bin differ
diff --git a/services/registration/invite_result.vis b/services/registration/invite_result.vis
new file mode 100644
index 0000000..5f31749
--- /dev/null
+++ b/services/registration/invite_result.vis
@@ -0,0 +1,2 @@
+LOAD invite_valid_recipient 0
+HALT
diff --git a/services/registration/kiswahili_menu b/services/registration/kiswahili_menu
new file mode 100644
index 0000000..e4d88a5
--- /dev/null
+++ b/services/registration/kiswahili_menu
@@ -0,0 +1 @@
+Kiswahili
\ No newline at end of file
diff --git a/services/registration/language_changed b/services/registration/language_changed
new file mode 100644
index 0000000..839a631
--- /dev/null
+++ b/services/registration/language_changed
@@ -0,0 +1 @@
+Your language change request was successful.
\ No newline at end of file
diff --git a/services/registration/language_changed.bin b/services/registration/language_changed.bin
new file mode 100644
index 0000000..fced72b
Binary files /dev/null and b/services/registration/language_changed.bin differ
diff --git a/services/registration/language_changed.vis b/services/registration/language_changed.vis
new file mode 100644
index 0000000..832ef22
--- /dev/null
+++ b/services/registration/language_changed.vis
@@ -0,0 +1,5 @@
+MOUT back 0
+MOUT quit 9
+HALT
+INCMP ^ 0
+INCMP quit 9
diff --git a/services/registration/language_changed_swa b/services/registration/language_changed_swa
new file mode 100644
index 0000000..4a7f03b
--- /dev/null
+++ b/services/registration/language_changed_swa
@@ -0,0 +1 @@
+Ombi lako la kubadilisha lugha limefanikiwa.
\ No newline at end of file
diff --git a/services/registration/list_offering b/services/registration/list_offering
new file mode 100644
index 0000000..e69de29
diff --git a/services/registration/list_offering.bin b/services/registration/list_offering.bin
new file mode 100644
index 0000000..e69de29
diff --git a/services/registration/list_offering.vis b/services/registration/list_offering.vis
new file mode 100644
index 0000000..e69de29
diff --git a/services/registration/locale/swa/default.po b/services/registration/locale/swa/default.po
new file mode 100644
index 0000000..6155063
--- /dev/null
+++ b/services/registration/locale/swa/default.po
@@ -0,0 +1,32 @@
+msgid "Your account balance is %s"
+msgstr "Salio lako ni %s"
+
+msgid "Your request has been sent. %s will receive %s %s from %s."
+msgstr "Ombi lako limetumwa. %s atapokea %s %s kutoka kwa %s."
+
+msgid "Thank you for using Sarafu. Goodbye!"
+msgstr "Asante kwa kutumia huduma ya Sarafu. Kwaheri!"
+
+msgid "For more help, please call: 0757628885"
+msgstr "Kwa usaidizi zaidi, piga: 0757628885"
+
+msgid "Your account has been locked. For help on how to unblock your account, contact support at: 0757628885"
+msgstr "Akaunti yako imefungwa. Kwa usaidizi wa jinsi ya kufungua akaunti yako, wasiliana na usaidizi kwa: 0757628885"
+
+msgid "Balance: %s\n"
+msgstr "Salio: %s\n"
+
+msgid "Your invite request for %s to Sarafu Network failed. Please try again later."
+msgstr "Ombi lako la kumwalika %s kwa matandao wa Sarafu halikufaulu. Tafadhali jaribu tena baadaye."
+
+msgid "Your invitation to %s to join Sarafu Network has been sent."
+msgstr "Ombi lako la kumwalika %s kwa matandao wa Sarafu limetumwa."
+
+msgid "Your request failed. Please try again later."
+msgstr "Ombi lako halikufaulu. Tafadhali jaribu tena baadaye."
+
+msgid "Community Balance: 0.00"
+msgstr "Salio la Kikundi: 0.00"
+
+msgid "Symbol: %s\nBalance: %s"
+msgstr "Sarafu: %s\nSalio: %s"
diff --git a/services/registration/main b/services/registration/main
new file mode 100644
index 0000000..afae8c1
--- /dev/null
+++ b/services/registration/main
@@ -0,0 +1 @@
+{{.check_balance}}
\ No newline at end of file
diff --git a/services/registration/main.bin b/services/registration/main.bin
new file mode 100644
index 0000000..1c10f2a
Binary files /dev/null and b/services/registration/main.bin differ
diff --git a/services/registration/main.vis b/services/registration/main.vis
new file mode 100644
index 0000000..2982f47
--- /dev/null
+++ b/services/registration/main.vis
@@ -0,0 +1,20 @@
+LOAD set_default_voucher 8
+RELOAD set_default_voucher
+LOAD check_vouchers 10
+RELOAD check_vouchers
+LOAD check_balance 128
+RELOAD check_balance
+CATCH api_failure flag_api_call_error 1
+MAP check_balance
+MOUT send 1
+MOUT vouchers 2
+MOUT account 3
+MOUT help 4
+MOUT quit 9
+HALT
+INCMP send 1
+INCMP my_vouchers 2
+INCMP my_account 3
+INCMP help 4
+INCMP quit 9
+INCMP . *
diff --git a/services/registration/main_swa b/services/registration/main_swa
new file mode 100644
index 0000000..afae8c1
--- /dev/null
+++ b/services/registration/main_swa
@@ -0,0 +1 @@
+{{.check_balance}}
\ No newline at end of file
diff --git a/services/registration/male_menu b/services/registration/male_menu
new file mode 100644
index 0000000..183883f
--- /dev/null
+++ b/services/registration/male_menu
@@ -0,0 +1 @@
+Male
\ No newline at end of file
diff --git a/services/registration/male_menu_swa b/services/registration/male_menu_swa
new file mode 100644
index 0000000..7afdee9
--- /dev/null
+++ b/services/registration/male_menu_swa
@@ -0,0 +1 @@
+Mwanaume
\ No newline at end of file
diff --git a/services/registration/my_account b/services/registration/my_account
new file mode 100644
index 0000000..7aa9fe9
--- /dev/null
+++ b/services/registration/my_account
@@ -0,0 +1 @@
+My Account
\ No newline at end of file
diff --git a/services/registration/my_account.bin b/services/registration/my_account.bin
new file mode 100644
index 0000000..7df7853
Binary files /dev/null and b/services/registration/my_account.bin differ
diff --git a/services/registration/my_account.vis b/services/registration/my_account.vis
new file mode 100644
index 0000000..e3956d2
--- /dev/null
+++ b/services/registration/my_account.vis
@@ -0,0 +1,17 @@
+LOAD reset_allow_update 0
+MOUT profile 1
+MOUT change_language 2
+MOUT check_balance 3
+MOUT check_statement 4
+MOUT pin_options 5
+MOUT my_address 6
+MOUT back 0
+HALT
+INCMP main 0
+INCMP edit_profile 1
+INCMP change_language 2
+INCMP balances 3
+INCMP check_statement 4
+INCMP pin_management 5
+INCMP address 6
+INCMP . *
diff --git a/services/registration/my_account_swa b/services/registration/my_account_swa
new file mode 100644
index 0000000..c77102f
--- /dev/null
+++ b/services/registration/my_account_swa
@@ -0,0 +1 @@
+Akaunti yangu
\ No newline at end of file
diff --git a/services/registration/my_address_menu b/services/registration/my_address_menu
new file mode 100644
index 0000000..5c13a7d
--- /dev/null
+++ b/services/registration/my_address_menu
@@ -0,0 +1 @@
+My Address
\ No newline at end of file
diff --git a/services/registration/my_address_menu_swa b/services/registration/my_address_menu_swa
new file mode 100644
index 0000000..531bc4e
--- /dev/null
+++ b/services/registration/my_address_menu_swa
@@ -0,0 +1 @@
+Anwani yangu
\ No newline at end of file
diff --git a/services/registration/my_balance b/services/registration/my_balance
new file mode 100644
index 0000000..afae8c1
--- /dev/null
+++ b/services/registration/my_balance
@@ -0,0 +1 @@
+{{.check_balance}}
\ No newline at end of file
diff --git a/services/registration/my_balance.bin b/services/registration/my_balance.bin
new file mode 100644
index 0000000..3809958
Binary files /dev/null and b/services/registration/my_balance.bin differ
diff --git a/services/registration/my_balance.vis b/services/registration/my_balance.vis
new file mode 100644
index 0000000..b6094c0
--- /dev/null
+++ b/services/registration/my_balance.vis
@@ -0,0 +1,12 @@
+LOAD reset_incorrect 6
+LOAD check_balance 0
+CATCH api_failure  flag_api_call_error  1
+MAP check_balance
+CATCH incorrect_pin flag_incorrect_pin 1
+CATCH pin_entry flag_account_authorized 0
+MOUT back 0
+MOUT quit 9
+HALT
+INCMP _ 0
+INCMP quit 9
+INCMP . * 
diff --git a/services/registration/my_balance_menu b/services/registration/my_balance_menu
new file mode 100644
index 0000000..fdd930b
--- /dev/null
+++ b/services/registration/my_balance_menu
@@ -0,0 +1 @@
+My balance
\ No newline at end of file
diff --git a/services/registration/my_balance_menu_swa b/services/registration/my_balance_menu_swa
new file mode 100644
index 0000000..810c386
--- /dev/null
+++ b/services/registration/my_balance_menu_swa
@@ -0,0 +1 @@
+Salio langu
\ No newline at end of file
diff --git a/services/registration/my_balance_swa b/services/registration/my_balance_swa
new file mode 100644
index 0000000..afae8c1
--- /dev/null
+++ b/services/registration/my_balance_swa
@@ -0,0 +1 @@
+{{.check_balance}}
\ No newline at end of file
diff --git a/services/registration/my_vouchers b/services/registration/my_vouchers
new file mode 100644
index 0000000..548de9c
--- /dev/null
+++ b/services/registration/my_vouchers
@@ -0,0 +1 @@
+My vouchers
\ No newline at end of file
diff --git a/services/registration/my_vouchers.bin b/services/registration/my_vouchers.bin
new file mode 100644
index 0000000..7d139e5
Binary files /dev/null and b/services/registration/my_vouchers.bin differ
diff --git a/services/registration/my_vouchers.vis b/services/registration/my_vouchers.vis
new file mode 100644
index 0000000..e79438e
--- /dev/null
+++ b/services/registration/my_vouchers.vis
@@ -0,0 +1,9 @@
+LOAD reset_account_authorized 16
+RELOAD reset_account_authorized
+MOUT select_voucher 1
+MOUT voucher_details 2
+MOUT back 0
+HALT
+INCMP _ 0
+INCMP select_voucher 1
+INCMP voucher_details 2
diff --git a/services/registration/new_pin b/services/registration/new_pin
new file mode 100644
index 0000000..65d8ed3
--- /dev/null
+++ b/services/registration/new_pin
@@ -0,0 +1 @@
+Enter a new four number PIN:
diff --git a/services/registration/new_pin.bin b/services/registration/new_pin.bin
new file mode 100644
index 0000000..7e7442a
Binary files /dev/null and b/services/registration/new_pin.bin differ
diff --git a/services/registration/new_pin.vis b/services/registration/new_pin.vis
new file mode 100644
index 0000000..29013a9
--- /dev/null
+++ b/services/registration/new_pin.vis
@@ -0,0 +1,13 @@
+LOAD authorize_account 12
+RELOAD authorize_account
+CATCH incorrect_pin flag_incorrect_pin 1
+CATCH old_pin flag_allow_update 0
+MOUT back 0
+HALT
+INCMP _ 0
+LOAD save_temporary_pin 6
+LOAD verify_new_pin 0
+RELOAD save_temporary_pin
+RELOAD verify_new_pin
+INCMP * confirm_pin_change
+
diff --git a/services/registration/new_pin_swa b/services/registration/new_pin_swa
new file mode 100644
index 0000000..1ec32d9
--- /dev/null
+++ b/services/registration/new_pin_swa
@@ -0,0 +1,2 @@
+Weka PIN mpya ya nne nambari: 
+
diff --git a/services/registration/next_menu b/services/registration/next_menu
new file mode 100644
index 0000000..e2e838e
--- /dev/null
+++ b/services/registration/next_menu
@@ -0,0 +1 @@
+Next
\ No newline at end of file
diff --git a/services/registration/next_menu_swa b/services/registration/next_menu_swa
new file mode 100644
index 0000000..6511e40
--- /dev/null
+++ b/services/registration/next_menu_swa
@@ -0,0 +1 @@
+Mbele
\ No newline at end of file
diff --git a/services/registration/no_admin_privilege b/services/registration/no_admin_privilege
new file mode 100644
index 0000000..27901dc
--- /dev/null
+++ b/services/registration/no_admin_privilege
@@ -0,0 +1 @@
+You do not have privileges to perform this action
diff --git a/services/registration/no_admin_privilege.bin b/services/registration/no_admin_privilege.bin
new file mode 100644
index 0000000..ec58654
Binary files /dev/null and b/services/registration/no_admin_privilege.bin differ
diff --git a/services/registration/no_admin_privilege.vis b/services/registration/no_admin_privilege.vis
new file mode 100644
index 0000000..3cf1e4c
--- /dev/null
+++ b/services/registration/no_admin_privilege.vis
@@ -0,0 +1,5 @@
+MOUT quit 9
+MOUT back 0
+HALT
+INCMP pin_management 0
+INCMP quit 9
diff --git a/services/registration/no_admin_privilege_swa b/services/registration/no_admin_privilege_swa
new file mode 100644
index 0000000..6c6d3dc
--- /dev/null
+++ b/services/registration/no_admin_privilege_swa
@@ -0,0 +1 @@
+Huna mapendeleo ya kufanya kitendo hiki
\ No newline at end of file
diff --git a/services/registration/no_menu b/services/registration/no_menu
new file mode 100644
index 0000000..289cc91
--- /dev/null
+++ b/services/registration/no_menu
@@ -0,0 +1 @@
+No
\ No newline at end of file
diff --git a/services/registration/no_menu_swa b/services/registration/no_menu_swa
new file mode 100644
index 0000000..a9d6b8d
--- /dev/null
+++ b/services/registration/no_menu_swa
@@ -0,0 +1 @@
+La
\ No newline at end of file
diff --git a/services/registration/no_transfers b/services/registration/no_transfers
new file mode 100644
index 0000000..3439806
--- /dev/null
+++ b/services/registration/no_transfers
@@ -0,0 +1 @@
+No transfers history
\ No newline at end of file
diff --git a/services/registration/no_transfers.bin b/services/registration/no_transfers.bin
new file mode 100644
index 0000000..fced72b
Binary files /dev/null and b/services/registration/no_transfers.bin differ
diff --git a/services/registration/no_transfers.vis b/services/registration/no_transfers.vis
new file mode 100644
index 0000000..832ef22
--- /dev/null
+++ b/services/registration/no_transfers.vis
@@ -0,0 +1,5 @@
+MOUT back 0
+MOUT quit 9
+HALT
+INCMP ^ 0
+INCMP quit 9
diff --git a/services/registration/no_transfers_swa b/services/registration/no_transfers_swa
new file mode 100644
index 0000000..1f82e82
--- /dev/null
+++ b/services/registration/no_transfers_swa
@@ -0,0 +1 @@
+Hakuna historia kwa akaunti yako
\ No newline at end of file
diff --git a/services/registration/no_voucher b/services/registration/no_voucher
new file mode 100644
index 0000000..6303197
--- /dev/null
+++ b/services/registration/no_voucher
@@ -0,0 +1 @@
+You need a voucher to proceed
\ No newline at end of file
diff --git a/services/registration/no_voucher.bin b/services/registration/no_voucher.bin
new file mode 100644
index 0000000..fced72b
Binary files /dev/null and b/services/registration/no_voucher.bin differ
diff --git a/services/registration/no_voucher.vis b/services/registration/no_voucher.vis
new file mode 100644
index 0000000..832ef22
--- /dev/null
+++ b/services/registration/no_voucher.vis
@@ -0,0 +1,5 @@
+MOUT back 0
+MOUT quit 9
+HALT
+INCMP ^ 0
+INCMP quit 9
diff --git a/services/registration/no_voucher_swa b/services/registration/no_voucher_swa
new file mode 100644
index 0000000..7291650
--- /dev/null
+++ b/services/registration/no_voucher_swa
@@ -0,0 +1 @@
+Unahitaji sarafu kuendelea
\ No newline at end of file
diff --git a/services/registration/old_pin b/services/registration/old_pin
new file mode 100644
index 0000000..2c64d42
--- /dev/null
+++ b/services/registration/old_pin
@@ -0,0 +1 @@
+Enter your old PIN
diff --git a/services/registration/old_pin.bin b/services/registration/old_pin.bin
new file mode 100644
index 0000000..085d9eb
Binary files /dev/null and b/services/registration/old_pin.bin differ
diff --git a/services/registration/old_pin.vis b/services/registration/old_pin.vis
new file mode 100644
index 0000000..1e99f4f
--- /dev/null
+++ b/services/registration/old_pin.vis
@@ -0,0 +1,7 @@
+LOAD reset_allow_update 0
+MOUT back 0
+HALT
+RELOAD reset_allow_update
+INCMP _ 0
+INCMP new_pin *
+
diff --git a/services/registration/old_pin_swa b/services/registration/old_pin_swa
new file mode 100644
index 0000000..312b597
--- /dev/null
+++ b/services/registration/old_pin_swa
@@ -0,0 +1 @@
+Weka PIN yako ya zamani:
diff --git a/services/registration/others_pin_mismatch b/services/registration/others_pin_mismatch
new file mode 100644
index 0000000..deb9fe5
--- /dev/null
+++ b/services/registration/others_pin_mismatch
@@ -0,0 +1 @@
+The PIN you have entered is not a match
diff --git a/services/registration/others_pin_mismatch.bin b/services/registration/others_pin_mismatch.bin
new file mode 100644
index 0000000..ffc8224
Binary files /dev/null and b/services/registration/others_pin_mismatch.bin differ
diff --git a/services/registration/others_pin_mismatch.vis b/services/registration/others_pin_mismatch.vis
new file mode 100644
index 0000000..37b3deb
--- /dev/null
+++ b/services/registration/others_pin_mismatch.vis
@@ -0,0 +1,5 @@
+MOUT retry 1
+MOUT quit 9
+HALT
+INCMP _ 1
+INCMP quit 9
diff --git a/services/registration/others_pin_mismatch_swa b/services/registration/others_pin_mismatch_swa
new file mode 100644
index 0000000..5787790
--- /dev/null
+++ b/services/registration/others_pin_mismatch_swa
@@ -0,0 +1 @@
+PIN uliyoweka hailingani.Jaribu tena.
\ No newline at end of file
diff --git a/services/registration/pin_entry b/services/registration/pin_entry
new file mode 100644
index 0000000..cbb44ca
--- /dev/null
+++ b/services/registration/pin_entry
@@ -0,0 +1 @@
+Please enter your PIN:
\ No newline at end of file
diff --git a/services/registration/pin_entry.bin b/services/registration/pin_entry.bin
new file mode 100644
index 0000000..685519b
Binary files /dev/null and b/services/registration/pin_entry.bin differ
diff --git a/services/registration/pin_entry.vis b/services/registration/pin_entry.vis
new file mode 100644
index 0000000..2eaf40f
--- /dev/null
+++ b/services/registration/pin_entry.vis
@@ -0,0 +1,4 @@
+LOAD authorize_account 0
+HALT
+RELOAD authorize_account
+MOVE _
diff --git a/services/registration/pin_entry_swa b/services/registration/pin_entry_swa
new file mode 100644
index 0000000..1b5e646
--- /dev/null
+++ b/services/registration/pin_entry_swa
@@ -0,0 +1 @@
+Tafadhali weka PIN yako
\ No newline at end of file
diff --git a/services/registration/pin_management b/services/registration/pin_management
new file mode 100644
index 0000000..b60e816
--- /dev/null
+++ b/services/registration/pin_management
@@ -0,0 +1 @@
+PIN Management
\ No newline at end of file
diff --git a/services/registration/pin_management.bin b/services/registration/pin_management.bin
new file mode 100644
index 0000000..5cffbb9
Binary files /dev/null and b/services/registration/pin_management.bin differ
diff --git a/services/registration/pin_management.vis b/services/registration/pin_management.vis
new file mode 100644
index 0000000..5eb7d5a
--- /dev/null
+++ b/services/registration/pin_management.vis
@@ -0,0 +1,8 @@
+MOUT change_pin 1
+MOUT reset_pin 2
+MOUT back 0
+HALT
+INCMP my_account 0
+INCMP old_pin  1
+INCMP enter_other_number 2
+INCMP . *
diff --git a/services/registration/pin_management_swa b/services/registration/pin_management_swa
new file mode 100644
index 0000000..e69de29
diff --git a/services/registration/pin_options_menu b/services/registration/pin_options_menu
new file mode 100644
index 0000000..778d28d
--- /dev/null
+++ b/services/registration/pin_options_menu
@@ -0,0 +1 @@
+PIN options
\ No newline at end of file
diff --git a/services/registration/pin_options_menu_swa b/services/registration/pin_options_menu_swa
new file mode 100644
index 0000000..e47ca0f
--- /dev/null
+++ b/services/registration/pin_options_menu_swa
@@ -0,0 +1 @@
+Mipangilio ya PIN
\ No newline at end of file
diff --git a/services/registration/pin_reset_mismatch b/services/registration/pin_reset_mismatch
new file mode 100644
index 0000000..dc0236b
--- /dev/null
+++ b/services/registration/pin_reset_mismatch
@@ -0,0 +1 @@
+The PIN is not a match. Try again
diff --git a/services/registration/pin_reset_mismatch.bin b/services/registration/pin_reset_mismatch.bin
new file mode 100644
index 0000000..6fd2407
Binary files /dev/null and b/services/registration/pin_reset_mismatch.bin differ
diff --git a/services/registration/pin_reset_mismatch.vis b/services/registration/pin_reset_mismatch.vis
new file mode 100644
index 0000000..5dc7e7c
--- /dev/null
+++ b/services/registration/pin_reset_mismatch.vis
@@ -0,0 +1,6 @@
+MOUT retry 1
+MOUT quit 9
+HALT
+INCMP confirm_pin_change 1
+INCMP quit 9
+
diff --git a/services/registration/pin_reset_mismatch_swa b/services/registration/pin_reset_mismatch_swa
new file mode 100644
index 0000000..5787790
--- /dev/null
+++ b/services/registration/pin_reset_mismatch_swa
@@ -0,0 +1 @@
+PIN uliyoweka hailingani.Jaribu tena.
\ No newline at end of file
diff --git a/services/registration/pin_reset_result b/services/registration/pin_reset_result
new file mode 100644
index 0000000..60554b9
--- /dev/null
+++ b/services/registration/pin_reset_result
@@ -0,0 +1 @@
+PIN reset request for {{.retrieve_blocked_number}} was successful
\ No newline at end of file
diff --git a/services/registration/pin_reset_result.bin b/services/registration/pin_reset_result.bin
new file mode 100644
index 0000000..07c70a4
Binary files /dev/null and b/services/registration/pin_reset_result.bin differ
diff --git a/services/registration/pin_reset_result.vis b/services/registration/pin_reset_result.vis
new file mode 100644
index 0000000..34b9789
--- /dev/null
+++ b/services/registration/pin_reset_result.vis
@@ -0,0 +1,8 @@
+LOAD retrieve_blocked_number 0
+MAP retrieve_blocked_number
+LOAD reset_others_pin 6
+MOUT back 0
+MOUT quit 9
+HALT
+INCMP pin_management 0
+INCMP quit  9
diff --git a/services/registration/pin_reset_result_swa b/services/registration/pin_reset_result_swa
new file mode 100644
index 0000000..30de04e
--- /dev/null
+++ b/services/registration/pin_reset_result_swa
@@ -0,0 +1 @@
+Ombi la kuweka upya PIN ya {{.retrieve_blocked_number}} limefanikiwa
\ No newline at end of file
diff --git a/services/registration/pin_reset_success b/services/registration/pin_reset_success
new file mode 100644
index 0000000..e9326ec
--- /dev/null
+++ b/services/registration/pin_reset_success
@@ -0,0 +1 @@
+Your PIN change request has been successful
diff --git a/services/registration/pin_reset_success.bin b/services/registration/pin_reset_success.bin
new file mode 100644
index 0000000..c5e8973
Binary files /dev/null and b/services/registration/pin_reset_success.bin differ
diff --git a/services/registration/pin_reset_success.vis b/services/registration/pin_reset_success.vis
new file mode 100644
index 0000000..96dee73
--- /dev/null
+++ b/services/registration/pin_reset_success.vis
@@ -0,0 +1,8 @@
+LOAD confirm_pin_change 0
+RELOAD confirm_pin_change
+CATCH pin_reset_mismatch  flag_pin_mismatch 1
+MOUT back 0
+MOUT quit 9
+HALT
+INCMP main 0
+INCMP quit 9
diff --git a/services/registration/pin_reset_success_swa b/services/registration/pin_reset_success_swa
new file mode 100644
index 0000000..af69b9f
--- /dev/null
+++ b/services/registration/pin_reset_success_swa
@@ -0,0 +1 @@
+Ombi lako la kubadili PIN limefanikiwa
diff --git a/services/registration/pp.csv b/services/registration/pp.csv
new file mode 100644
index 0000000..aa1eb05
--- /dev/null
+++ b/services/registration/pp.csv
@@ -0,0 +1,32 @@
+flag,flag_language_set,8,checks whether the user has set their prefered language
+flag,flag_account_created,9,this is set when an account has been created on the API
+flag,flag_account_creation_failed,10,this is set when there's an error from the API during account creation
+flag,flag_account_pending,11,this is set when an account does not have a status of SUCCESS
+flag,flag_account_success,12,this is set when an account has a status of SUCCESS
+flag,flag_pin_mismatch,13,this is set when the confirmation PIN matches the initial PIN during registration
+flag,flag_pin_set,14,this is set when a newly registered user sets a PIN. This must be present for an account to access the main menu
+flag,flag_account_authorized,15,this is set to allow a user access guarded nodes after providing a correct PIN
+flag,flag_invalid_recipient,16,this is set when the transaction recipient is invalid
+flag,flag_invalid_recipient_with_invite,17,this is set when the transaction recipient is valid but not on the platform
+flag,flag_invalid_amount,18,this is set when the given transaction amount is invalid
+flag,flag_incorrect_pin,19,this is set when the provided PIN is invalid or does not match the current account's PIN
+flag,flag_valid_pin,20,this is set when the given PIN is valid
+flag,flag_allow_update,21,this is set to allow a user to update their profile data
+flag,flag_single_edit,22,this is set to allow a user to edit a single profile item such as year of birth
+flag,flag_incorrect_date_format,23,this is set when the given year of birth is invalid
+flag,flag_incorrect_voucher,24,this is set when the selected voucher is invalid
+flag,flag_api_call_error,25,this is set when communication to an external service fails
+flag,flag_no_active_voucher,26,this is set when a user does not have an active voucher
+flag,flag_admin_privilege,27,this is set when a user has admin privileges.
+flag,flag_unregistered_number,28,this is set when an unregistered phonenumber tries to perform an action
+flag,flag_no_transfers,29,this is set when a user does not have any transactions
+flag,flag_incorrect_statement,30,this is set when the selected statement is invalid
+flag,flag_firstname_set,31,this is set when the first name of the profile is set
+flag,flag_familyname_set,32,this is set when the family name of the profile is set
+flag,flag_yob_set,33,this is set when the yob of the profile is set
+flag,flag_gender_set,34,this is set when the gender of the profile is set
+flag,flag_location_set,35,this is set when the location of the profile is set
+flag,flag_offerings_set,36,this is set when the offerings of the profile is set
+flag,flag_back_set,37,this is set when it is a back navigation
+flag,flag_account_blocked,38,this is set when an account has been blocked after the allowed incorrect PIN attempts have been exceeded
+
diff --git a/services/registration/prev_menu b/services/registration/prev_menu
new file mode 100644
index 0000000..72d90d8
--- /dev/null
+++ b/services/registration/prev_menu
@@ -0,0 +1 @@
+Prev
\ No newline at end of file
diff --git a/services/registration/prev_menu_swa b/services/registration/prev_menu_swa
new file mode 100644
index 0000000..e5a3e45
--- /dev/null
+++ b/services/registration/prev_menu_swa
@@ -0,0 +1 @@
+Nyuma
\ No newline at end of file
diff --git a/services/registration/profile_menu b/services/registration/profile_menu
new file mode 100644
index 0000000..0d6af58
--- /dev/null
+++ b/services/registration/profile_menu
@@ -0,0 +1 @@
+Profile
\ No newline at end of file
diff --git a/services/registration/profile_menu_swa b/services/registration/profile_menu_swa
new file mode 100644
index 0000000..8a12b7d
--- /dev/null
+++ b/services/registration/profile_menu_swa
@@ -0,0 +1 @@
+Wasifu wangu
\ No newline at end of file
diff --git a/services/registration/profile_update_success b/services/registration/profile_update_success
new file mode 100644
index 0000000..652942a
--- /dev/null
+++ b/services/registration/profile_update_success
@@ -0,0 +1 @@
+Profile updated successfully
diff --git a/services/registration/profile_update_success.bin b/services/registration/profile_update_success.bin
new file mode 100644
index 0000000..f152be1
Binary files /dev/null and b/services/registration/profile_update_success.bin differ
diff --git a/services/registration/profile_update_success.vis b/services/registration/profile_update_success.vis
new file mode 100644
index 0000000..f670e6e
--- /dev/null
+++ b/services/registration/profile_update_success.vis
@@ -0,0 +1,7 @@
+LOAD update_all_profile_items 0
+RELOAD update_all_profile_items
+MOUT back 0
+MOUT quit 9
+HALT
+INCMP edit_profile 0
+INCMP quit 9
diff --git a/services/registration/profile_update_success_swa b/services/registration/profile_update_success_swa
new file mode 100644
index 0000000..df0af2c
--- /dev/null
+++ b/services/registration/profile_update_success_swa
@@ -0,0 +1 @@
+Ombi la Kuweka wasifu limefanikiwa
diff --git a/services/registration/quit.bin b/services/registration/quit.bin
new file mode 100644
index 0000000..6368a90
Binary files /dev/null and b/services/registration/quit.bin differ
diff --git a/services/registration/quit.vis b/services/registration/quit.vis
new file mode 100644
index 0000000..0c8bb46
--- /dev/null
+++ b/services/registration/quit.vis
@@ -0,0 +1,2 @@
+LOAD quit 0
+HALT
diff --git a/services/registration/quit_menu b/services/registration/quit_menu
new file mode 100644
index 0000000..f3f23ca
--- /dev/null
+++ b/services/registration/quit_menu
@@ -0,0 +1 @@
+Quit
\ No newline at end of file
diff --git a/services/registration/quit_menu_swa b/services/registration/quit_menu_swa
new file mode 100644
index 0000000..474f1ff
--- /dev/null
+++ b/services/registration/quit_menu_swa
@@ -0,0 +1 @@
+Ondoka
\ No newline at end of file
diff --git a/services/registration/reset_pin_menu b/services/registration/reset_pin_menu
new file mode 100644
index 0000000..1f5d676
--- /dev/null
+++ b/services/registration/reset_pin_menu
@@ -0,0 +1 @@
+Reset other's PIN
\ No newline at end of file
diff --git a/services/registration/reset_pin_menu_swa b/services/registration/reset_pin_menu_swa
new file mode 100644
index 0000000..49214fe
--- /dev/null
+++ b/services/registration/reset_pin_menu_swa
@@ -0,0 +1 @@
+Badili PIN ya mwenzio
\ No newline at end of file
diff --git a/services/registration/retry_menu b/services/registration/retry_menu
new file mode 100644
index 0000000..ffde86c
--- /dev/null
+++ b/services/registration/retry_menu
@@ -0,0 +1 @@
+Retry
\ No newline at end of file
diff --git a/services/registration/retry_menu_swa b/services/registration/retry_menu_swa
new file mode 100644
index 0000000..c43b419
--- /dev/null
+++ b/services/registration/retry_menu_swa
@@ -0,0 +1 @@
+Jaribu tena
\ No newline at end of file
diff --git a/services/registration/root b/services/registration/root
new file mode 100644
index 0000000..3928a82
--- /dev/null
+++ b/services/registration/root
@@ -0,0 +1 @@
+Welcome to Sarafu Network
\ No newline at end of file
diff --git a/services/registration/root.bin b/services/registration/root.bin
new file mode 100644
index 0000000..e6a440b
Binary files /dev/null and b/services/registration/root.bin differ
diff --git a/services/registration/root.vis b/services/registration/root.vis
new file mode 100644
index 0000000..102e6e5
--- /dev/null
+++ b/services/registration/root.vis
@@ -0,0 +1,10 @@
+CATCH blocked_account flag_account_blocked 1
+CATCH select_language flag_language_set 0
+CATCH terms flag_account_created 0
+LOAD check_account_status 0
+RELOAD check_account_status
+CATCH api_failure  flag_api_call_error  1
+CATCH account_pending flag_account_pending 1
+CATCH create_pin flag_pin_set 0
+CATCH main flag_account_success 1
+HALT
diff --git a/services/registration/root_swa b/services/registration/root_swa
new file mode 100644
index 0000000..75bb624
--- /dev/null
+++ b/services/registration/root_swa
@@ -0,0 +1 @@
+Karibu Sarafu Network
\ No newline at end of file
diff --git a/services/registration/select_gender b/services/registration/select_gender
new file mode 100644
index 0000000..22b9be9
--- /dev/null
+++ b/services/registration/select_gender
@@ -0,0 +1,2 @@
+Current gender: {{.get_current_profile_info}}
+Select gender: 
\ No newline at end of file
diff --git a/services/registration/select_gender.bin b/services/registration/select_gender.bin
new file mode 100644
index 0000000..fa9627c
Binary files /dev/null and b/services/registration/select_gender.bin differ
diff --git a/services/registration/select_gender.vis b/services/registration/select_gender.vis
new file mode 100644
index 0000000..e41da10
--- /dev/null
+++ b/services/registration/select_gender.vis
@@ -0,0 +1,14 @@
+CATCH incorrect_pin flag_incorrect_pin 1
+CATCH profile_update_success flag_allow_update 1
+LOAD get_current_profile_info 0
+RELOAD get_current_profile_info
+MOUT male 1
+MOUT female 2
+MOUT unspecified 3
+MOUT back 0
+HALT
+INCMP _ 0
+INCMP set_male 1
+INCMP set_female 2
+INCMP set_unspecified 3
+INCMP . *
diff --git a/services/registration/select_gender_swa b/services/registration/select_gender_swa
new file mode 100644
index 0000000..39d99d5
--- /dev/null
+++ b/services/registration/select_gender_swa
@@ -0,0 +1,2 @@
+Jinsia ya sasa: {{.get_current_profile_info}}
+Chagua jinsia
\ No newline at end of file
diff --git a/services/registration/select_language b/services/registration/select_language
new file mode 100644
index 0000000..b3d4304
--- /dev/null
+++ b/services/registration/select_language
@@ -0,0 +1,2 @@
+Welcome to Sarafu Network
+Please select a language
\ No newline at end of file
diff --git a/services/registration/select_language.bin b/services/registration/select_language.bin
new file mode 100644
index 0000000..7071dd0
Binary files /dev/null and b/services/registration/select_language.bin differ
diff --git a/services/registration/select_language.vis b/services/registration/select_language.vis
new file mode 100644
index 0000000..0f7f298
--- /dev/null
+++ b/services/registration/select_language.vis
@@ -0,0 +1,6 @@
+MOUT english 1
+MOUT kiswahili 2
+HALT
+INCMP set_eng 1
+INCMP set_swa 2
+INCMP . *
diff --git a/services/registration/select_voucher b/services/registration/select_voucher
new file mode 100644
index 0000000..084b9b8
--- /dev/null
+++ b/services/registration/select_voucher
@@ -0,0 +1,2 @@
+Select number or symbol from your vouchers:
+{{.get_vouchers}}
\ No newline at end of file
diff --git a/services/registration/select_voucher.bin b/services/registration/select_voucher.bin
new file mode 100644
index 0000000..872671a
Binary files /dev/null and b/services/registration/select_voucher.bin differ
diff --git a/services/registration/select_voucher.vis b/services/registration/select_voucher.vis
new file mode 100644
index 0000000..058d791
--- /dev/null
+++ b/services/registration/select_voucher.vis
@@ -0,0 +1,16 @@
+CATCH no_voucher flag_no_active_voucher 1
+LOAD get_vouchers 0
+MAP get_vouchers
+MOUT back 0
+MOUT quit 99
+MNEXT next 11
+MPREV prev 22
+HALT
+LOAD view_voucher 80
+RELOAD view_voucher
+CATCH . flag_incorrect_voucher 1
+INCMP _ 0
+INCMP quit 99
+INCMP > 11
+INCMP < 22
+INCMP view_voucher *
diff --git a/services/registration/select_voucher_menu b/services/registration/select_voucher_menu
new file mode 100644
index 0000000..8ee06df
--- /dev/null
+++ b/services/registration/select_voucher_menu
@@ -0,0 +1 @@
+Select voucher
\ No newline at end of file
diff --git a/services/registration/select_voucher_menu_swa b/services/registration/select_voucher_menu_swa
new file mode 100644
index 0000000..2cb4daf
--- /dev/null
+++ b/services/registration/select_voucher_menu_swa
@@ -0,0 +1 @@
+Chagua Sarafu
\ No newline at end of file
diff --git a/services/registration/select_voucher_swa b/services/registration/select_voucher_swa
new file mode 100644
index 0000000..b4720bf
--- /dev/null
+++ b/services/registration/select_voucher_swa
@@ -0,0 +1,2 @@
+Chagua nambari au ishara kutoka kwa salio zako:
+{{.get_vouchers}}
\ No newline at end of file
diff --git a/services/registration/send b/services/registration/send
new file mode 100644
index 0000000..306466c
--- /dev/null
+++ b/services/registration/send
@@ -0,0 +1 @@
+Enter recipient's phone number/address/alias:
\ No newline at end of file
diff --git a/services/registration/send.bin b/services/registration/send.bin
new file mode 100644
index 0000000..0c1c15b
Binary files /dev/null and b/services/registration/send.bin differ
diff --git a/services/registration/send.vis b/services/registration/send.vis
new file mode 100644
index 0000000..8928725
--- /dev/null
+++ b/services/registration/send.vis
@@ -0,0 +1,11 @@
+LOAD transaction_reset 0
+RELOAD transaction_reset
+CATCH no_voucher flag_no_active_voucher 1
+MOUT back 0
+HALT
+LOAD validate_recipient 20
+RELOAD validate_recipient
+CATCH invalid_recipient flag_invalid_recipient 1
+CATCH invite_recipient flag_invalid_recipient_with_invite 1
+INCMP _ 0
+INCMP amount *
diff --git a/services/registration/send_menu b/services/registration/send_menu
new file mode 100644
index 0000000..5f5a837
--- /dev/null
+++ b/services/registration/send_menu
@@ -0,0 +1 @@
+Send
\ No newline at end of file
diff --git a/services/registration/send_menu_swa b/services/registration/send_menu_swa
new file mode 100644
index 0000000..605c8e8
--- /dev/null
+++ b/services/registration/send_menu_swa
@@ -0,0 +1 @@
+Tuma
\ No newline at end of file
diff --git a/services/registration/send_swa b/services/registration/send_swa
new file mode 100644
index 0000000..016760e
--- /dev/null
+++ b/services/registration/send_swa
@@ -0,0 +1 @@
+Weka nambari ya simu:
\ No newline at end of file
diff --git a/services/registration/set_default.bin b/services/registration/set_default.bin
new file mode 100644
index 0000000..2317371
Binary files /dev/null and b/services/registration/set_default.bin differ
diff --git a/services/registration/set_default.vis b/services/registration/set_default.vis
new file mode 100644
index 0000000..b66a1b7
--- /dev/null
+++ b/services/registration/set_default.vis
@@ -0,0 +1,4 @@
+LOAD set_language 6
+RELOAD set_language
+CATCH terms flag_account_created 0
+MOVE language_changed
diff --git a/services/registration/set_eng.bin b/services/registration/set_eng.bin
new file mode 100644
index 0000000..2317371
Binary files /dev/null and b/services/registration/set_eng.bin differ
diff --git a/services/registration/set_eng.vis b/services/registration/set_eng.vis
new file mode 100644
index 0000000..b66a1b7
--- /dev/null
+++ b/services/registration/set_eng.vis
@@ -0,0 +1,4 @@
+LOAD set_language 6
+RELOAD set_language
+CATCH terms flag_account_created 0
+MOVE language_changed
diff --git a/services/registration/set_female.bin b/services/registration/set_female.bin
new file mode 100644
index 0000000..0bfc8bf
Binary files /dev/null and b/services/registration/set_female.bin differ
diff --git a/services/registration/set_female.vis b/services/registration/set_female.vis
new file mode 100644
index 0000000..da92520
--- /dev/null
+++ b/services/registration/set_female.vis
@@ -0,0 +1,10 @@
+LOAD save_gender 32
+RELOAD save_gender
+CATCH incorrect_pin flag_incorrect_pin 1
+CATCH update_gender flag_allow_update 1
+CATCH pin_entry flag_gender_set 1
+CATCH edit_yob flag_yob_set 0
+CATCH edit_location flag_location_set 0
+CATCH edit_offerings flag_offerings_set 0
+CATCH pin_entry flag_gender_set 0
+MOVE edit_yob
diff --git a/services/registration/set_male.bin b/services/registration/set_male.bin
new file mode 100644
index 0000000..34e11b6
Binary files /dev/null and b/services/registration/set_male.bin differ
diff --git a/services/registration/set_male.vis b/services/registration/set_male.vis
new file mode 100644
index 0000000..9a95937
--- /dev/null
+++ b/services/registration/set_male.vis
@@ -0,0 +1,10 @@
+LOAD save_gender 16
+RELOAD save_gender
+CATCH incorrect_pin flag_incorrect_pin 1
+CATCH update_gender flag_allow_update 1
+CATCH pin_entry flag_gender_set 1
+CATCH edit_yob flag_yob_set 0
+CATCH edit_location flag_location_set 0
+CATCH edit_offerings flag_offerings_set 0
+CATCH pin_entry flag_gender_set 0
+MOVE edit_yob
diff --git a/services/registration/set_swa.bin b/services/registration/set_swa.bin
new file mode 100644
index 0000000..2317371
Binary files /dev/null and b/services/registration/set_swa.bin differ
diff --git a/services/registration/set_swa.vis b/services/registration/set_swa.vis
new file mode 100644
index 0000000..b66a1b7
--- /dev/null
+++ b/services/registration/set_swa.vis
@@ -0,0 +1,4 @@
+LOAD set_language 6
+RELOAD set_language
+CATCH terms flag_account_created 0
+MOVE language_changed
diff --git a/services/registration/set_unspecified.bin b/services/registration/set_unspecified.bin
new file mode 100644
index 0000000..e9af0c4
Binary files /dev/null and b/services/registration/set_unspecified.bin differ
diff --git a/services/registration/set_unspecified.vis b/services/registration/set_unspecified.vis
new file mode 100644
index 0000000..824105c
--- /dev/null
+++ b/services/registration/set_unspecified.vis
@@ -0,0 +1,10 @@
+LOAD save_gender 8
+RELOAD save_gender
+CATCH incorrect_pin flag_incorrect_pin 1
+CATCH update_gender flag_allow_update 1
+CATCH pin_entry flag_gender_set 1
+CATCH edit_yob flag_yob_set 0
+CATCH edit_location flag_location_set 0
+CATCH edit_offerings flag_offerings_set 0
+CATCH pin_entry flag_gender_set 0
+MOVE edit_yob
diff --git a/services/registration/terms b/services/registration/terms
new file mode 100644
index 0000000..8af5b06
--- /dev/null
+++ b/services/registration/terms
@@ -0,0 +1,2 @@
+Do you agree to terms and conditions?
+https://grassecon.org/pages/terms-and-conditions
diff --git a/services/registration/terms.bin b/services/registration/terms.bin
new file mode 100644
index 0000000..90a3872
Binary files /dev/null and b/services/registration/terms.bin differ
diff --git a/services/registration/terms.vis b/services/registration/terms.vis
new file mode 100644
index 0000000..372b6ca
--- /dev/null
+++ b/services/registration/terms.vis
@@ -0,0 +1,5 @@
+MOUT yes 1
+MOUT no 2
+HALT
+INCMP create_pin 1
+INCMP quit *
diff --git a/services/registration/terms_swa b/services/registration/terms_swa
new file mode 100644
index 0000000..5678186
--- /dev/null
+++ b/services/registration/terms_swa
@@ -0,0 +1,2 @@
+Kwa kutumia hii huduma umekubali sheria na masharti?
+https://grassecon.org/pages/terms-and-conditions
diff --git a/services/registration/transaction_initiated.bin b/services/registration/transaction_initiated.bin
new file mode 100644
index 0000000..3214df1
Binary files /dev/null and b/services/registration/transaction_initiated.bin differ
diff --git a/services/registration/transaction_initiated.vis b/services/registration/transaction_initiated.vis
new file mode 100644
index 0000000..f8cf19c
--- /dev/null
+++ b/services/registration/transaction_initiated.vis
@@ -0,0 +1,11 @@
+LOAD reset_incorrect 6
+CATCH incorrect_pin flag_incorrect_pin 1
+CATCH _ flag_account_authorized 0
+RELOAD get_amount
+MAP get_amount
+RELOAD get_recipient
+MAP get_recipient
+RELOAD get_sender
+MAP get_sender
+LOAD initiate_transaction 0
+HALT
diff --git a/services/registration/transaction_pin b/services/registration/transaction_pin
new file mode 100644
index 0000000..a1b7125
--- /dev/null
+++ b/services/registration/transaction_pin
@@ -0,0 +1,2 @@
+{{.get_recipient}} will receive {{.get_amount}} from {{.get_sender}}
+Please enter your PIN to confirm:
\ No newline at end of file
diff --git a/services/registration/transaction_pin.bin b/services/registration/transaction_pin.bin
new file mode 100644
index 0000000..4980bb2
Binary files /dev/null and b/services/registration/transaction_pin.bin differ
diff --git a/services/registration/transaction_pin.vis b/services/registration/transaction_pin.vis
new file mode 100644
index 0000000..0388f0c
--- /dev/null
+++ b/services/registration/transaction_pin.vis
@@ -0,0 +1,15 @@
+RELOAD get_amount
+MAP get_amount
+RELOAD get_recipient
+MAP get_recipient
+RELOAD get_sender
+MAP get_sender
+MOUT back 0
+MOUT quit 9
+LOAD authorize_account 6
+HALT
+RELOAD authorize_account
+CATCH incorrect_pin flag_incorrect_pin 1
+INCMP _ 0
+INCMP quit 9
+INCMP transaction_initiated *
diff --git a/services/registration/transaction_pin_swa b/services/registration/transaction_pin_swa
new file mode 100644
index 0000000..1924166
--- /dev/null
+++ b/services/registration/transaction_pin_swa
@@ -0,0 +1,2 @@
+{{.get_recipient}} atapokea {{.get_amount}} kutoka kwa {{.get_sender}}
+Tafadhali weka PIN yako kudhibitisha:
\ No newline at end of file
diff --git a/services/registration/transactions b/services/registration/transactions
new file mode 100644
index 0000000..8152c42
--- /dev/null
+++ b/services/registration/transactions
@@ -0,0 +1 @@
+{{.get_transactions}}
\ No newline at end of file
diff --git a/services/registration/transactions.bin b/services/registration/transactions.bin
new file mode 100644
index 0000000..be5a505
Binary files /dev/null and b/services/registration/transactions.bin differ
diff --git a/services/registration/transactions.vis b/services/registration/transactions.vis
new file mode 100644
index 0000000..b21f1dc
--- /dev/null
+++ b/services/registration/transactions.vis
@@ -0,0 +1,15 @@
+LOAD get_transactions 0
+MAP get_transactions
+MOUT back 0
+MOUT quit 99
+MNEXT next 11
+MPREV prev 22
+HALT
+LOAD view_statement 0
+RELOAD view_statement
+CATCH . flag_incorrect_statement 1
+INCMP ^ 0
+INCMP quit 99
+INCMP > 11
+INCMP < 22
+INCMP view_statement *
diff --git a/services/registration/transactions_swa b/services/registration/transactions_swa
new file mode 100644
index 0000000..8152c42
--- /dev/null
+++ b/services/registration/transactions_swa
@@ -0,0 +1 @@
+{{.get_transactions}}
\ No newline at end of file
diff --git a/services/registration/unregistered_number b/services/registration/unregistered_number
new file mode 100644
index 0000000..9cc33d7
--- /dev/null
+++ b/services/registration/unregistered_number
@@ -0,0 +1 @@
+The number you have entered is either not registered with Sarafu or is invalid.
\ No newline at end of file
diff --git a/services/registration/unregistered_number.bin b/services/registration/unregistered_number.bin
new file mode 100644
index 0000000..cf18ba1
Binary files /dev/null and b/services/registration/unregistered_number.bin differ
diff --git a/services/registration/unregistered_number.vis b/services/registration/unregistered_number.vis
new file mode 100644
index 0000000..0ff96be
--- /dev/null
+++ b/services/registration/unregistered_number.vis
@@ -0,0 +1,7 @@
+LOAD reset_unregistered_number 0
+RELOAD reset_unregistered_number
+MOUT back 0
+MOUT quit 9
+HALT
+INCMP ^ 0
+INCMP quit 9
diff --git a/services/registration/unregistered_number_swa b/services/registration/unregistered_number_swa
new file mode 100644
index 0000000..19810cb
--- /dev/null
+++ b/services/registration/unregistered_number_swa
@@ -0,0 +1 @@
+Nambari uliyoingiza haijasajiliwa na Sarafu au sio sahihi.
\ No newline at end of file
diff --git a/services/registration/unspecified_menu b/services/registration/unspecified_menu
new file mode 100644
index 0000000..4cd1a5c
--- /dev/null
+++ b/services/registration/unspecified_menu
@@ -0,0 +1 @@
+Unspecified
\ No newline at end of file
diff --git a/services/registration/unspecified_menu_swa b/services/registration/unspecified_menu_swa
new file mode 100644
index 0000000..009301f
--- /dev/null
+++ b/services/registration/unspecified_menu_swa
@@ -0,0 +1 @@
+Haijabainishwa
\ No newline at end of file
diff --git a/services/registration/update_age b/services/registration/update_age
new file mode 100644
index 0000000..76ca306
--- /dev/null
+++ b/services/registration/update_age
@@ -0,0 +1,2 @@
+RELOAD save_yob
+CATCH profile_update_success flag_allow_update 1
\ No newline at end of file
diff --git a/services/registration/update_familyname.bin b/services/registration/update_familyname.bin
new file mode 100644
index 0000000..7183798
Binary files /dev/null and b/services/registration/update_familyname.bin differ
diff --git a/services/registration/update_familyname.vis b/services/registration/update_familyname.vis
new file mode 100644
index 0000000..7cd4d9f
--- /dev/null
+++ b/services/registration/update_familyname.vis
@@ -0,0 +1,2 @@
+RELOAD save_familyname
+CATCH profile_update_success flag_allow_update 1
diff --git a/services/registration/update_firstname.bin b/services/registration/update_firstname.bin
new file mode 100644
index 0000000..379245a
Binary files /dev/null and b/services/registration/update_firstname.bin differ
diff --git a/services/registration/update_firstname.vis b/services/registration/update_firstname.vis
new file mode 100644
index 0000000..dca7036
--- /dev/null
+++ b/services/registration/update_firstname.vis
@@ -0,0 +1,2 @@
+RELOAD save_firstname
+CATCH profile_update_success flag_allow_update 1
diff --git a/services/registration/update_gender.bin b/services/registration/update_gender.bin
new file mode 100644
index 0000000..efd6ed0
Binary files /dev/null and b/services/registration/update_gender.bin differ
diff --git a/services/registration/update_gender.vis b/services/registration/update_gender.vis
new file mode 100644
index 0000000..506a56a
--- /dev/null
+++ b/services/registration/update_gender.vis
@@ -0,0 +1,2 @@
+RELOAD save_gender
+CATCH profile_update_success flag_allow_update 1
diff --git a/services/registration/update_location.bin b/services/registration/update_location.bin
new file mode 100644
index 0000000..c8438dc
Binary files /dev/null and b/services/registration/update_location.bin differ
diff --git a/services/registration/update_location.vis b/services/registration/update_location.vis
new file mode 100644
index 0000000..16c4ea2
--- /dev/null
+++ b/services/registration/update_location.vis
@@ -0,0 +1,2 @@
+RELOAD save_location
+CATCH profile_update_success flag_allow_update 1
diff --git a/services/registration/update_offerings.bin b/services/registration/update_offerings.bin
new file mode 100644
index 0000000..082e768
Binary files /dev/null and b/services/registration/update_offerings.bin differ
diff --git a/services/registration/update_offerings.vis b/services/registration/update_offerings.vis
new file mode 100644
index 0000000..4aeed74
--- /dev/null
+++ b/services/registration/update_offerings.vis
@@ -0,0 +1,2 @@
+RELOAD save_offerings
+CATCH profile_update_success flag_allow_update 1
diff --git a/services/registration/update_profile_items.bin b/services/registration/update_profile_items.bin
new file mode 100644
index 0000000..11af6ee
Binary files /dev/null and b/services/registration/update_profile_items.bin differ
diff --git a/services/registration/update_profile_items.vis b/services/registration/update_profile_items.vis
new file mode 100644
index 0000000..beda013
--- /dev/null
+++ b/services/registration/update_profile_items.vis
@@ -0,0 +1,3 @@
+CATCH incorrect_pin flag_incorrect_pin 1
+CATCH profile_update_success flag_allow_update 1
+MOVE pin_entry
diff --git a/services/registration/update_success b/services/registration/update_success
new file mode 100644
index 0000000..d8d5706
--- /dev/null
+++ b/services/registration/update_success
@@ -0,0 +1 @@
+Profile updated successfully
\ No newline at end of file
diff --git a/services/registration/update_success.bin b/services/registration/update_success.bin
new file mode 100644
index 0000000..fced72b
Binary files /dev/null and b/services/registration/update_success.bin differ
diff --git a/services/registration/update_success.vis b/services/registration/update_success.vis
new file mode 100644
index 0000000..832ef22
--- /dev/null
+++ b/services/registration/update_success.vis
@@ -0,0 +1,5 @@
+MOUT back 0
+MOUT quit 9
+HALT
+INCMP ^ 0
+INCMP quit 9
diff --git a/services/registration/update_success_swa b/services/registration/update_success_swa
new file mode 100644
index 0000000..834ba86
--- /dev/null
+++ b/services/registration/update_success_swa
@@ -0,0 +1 @@
+Akaunti imeupdatiwa
\ No newline at end of file
diff --git a/services/registration/update_yob.bin b/services/registration/update_yob.bin
new file mode 100644
index 0000000..9c0a5f8
Binary files /dev/null and b/services/registration/update_yob.bin differ
diff --git a/services/registration/update_yob.vis b/services/registration/update_yob.vis
new file mode 100644
index 0000000..a9388ae
--- /dev/null
+++ b/services/registration/update_yob.vis
@@ -0,0 +1,2 @@
+RELOAD save_yob
+CATCH profile_update_success flag_allow_update 1
diff --git a/services/registration/view_menu b/services/registration/view_menu
new file mode 100644
index 0000000..03add31
--- /dev/null
+++ b/services/registration/view_menu
@@ -0,0 +1 @@
+View profile
\ No newline at end of file
diff --git a/services/registration/view_menu_swa b/services/registration/view_menu_swa
new file mode 100644
index 0000000..bd84b19
--- /dev/null
+++ b/services/registration/view_menu_swa
@@ -0,0 +1 @@
+Angalia Wasifu
\ No newline at end of file
diff --git a/services/registration/view_profile b/services/registration/view_profile
new file mode 100644
index 0000000..5f59496
--- /dev/null
+++ b/services/registration/view_profile
@@ -0,0 +1,2 @@
+My profile:
+{{.get_profile_info}}
\ No newline at end of file
diff --git a/services/registration/view_profile.bin b/services/registration/view_profile.bin
new file mode 100644
index 0000000..c16454f
Binary files /dev/null and b/services/registration/view_profile.bin differ
diff --git a/services/registration/view_profile.vis b/services/registration/view_profile.vis
new file mode 100644
index 0000000..4f4947c
--- /dev/null
+++ b/services/registration/view_profile.vis
@@ -0,0 +1,11 @@
+LOAD get_profile_info 0
+MAP get_profile_info 
+LOAD reset_incorrect 6
+CATCH incorrect_pin flag_incorrect_pin 1
+CATCH pin_entry flag_account_authorized 0
+MOUT back 0
+MOUT quit 9
+HALT
+INCMP _ 0
+INCMP quit 9
+INCMP . *
diff --git a/services/registration/view_profile_swa b/services/registration/view_profile_swa
new file mode 100644
index 0000000..1362ebe
--- /dev/null
+++ b/services/registration/view_profile_swa
@@ -0,0 +1,2 @@
+Wasifu wangu:
+{{.get_profile_info}}
\ No newline at end of file
diff --git a/services/registration/view_statement b/services/registration/view_statement
new file mode 100644
index 0000000..1285cf9
--- /dev/null
+++ b/services/registration/view_statement
@@ -0,0 +1 @@
+{{.view_statement}}
\ No newline at end of file
diff --git a/services/registration/view_statement.bin b/services/registration/view_statement.bin
new file mode 100644
index 0000000..b0411b1
Binary files /dev/null and b/services/registration/view_statement.bin differ
diff --git a/services/registration/view_statement.vis b/services/registration/view_statement.vis
new file mode 100644
index 0000000..4dde523
--- /dev/null
+++ b/services/registration/view_statement.vis
@@ -0,0 +1,10 @@
+MAP view_statement
+MOUT back 0
+MOUT quit 9
+MNEXT next 11
+MPREV prev 22
+HALT
+INCMP _ 0
+INCMP quit 9
+INCMP > 11
+INCMP < 22
diff --git a/services/registration/view_swa b/services/registration/view_swa
new file mode 100644
index 0000000..bd84b19
--- /dev/null
+++ b/services/registration/view_swa
@@ -0,0 +1 @@
+Angalia Wasifu
\ No newline at end of file
diff --git a/services/registration/view_voucher b/services/registration/view_voucher
new file mode 100644
index 0000000..3940982
--- /dev/null
+++ b/services/registration/view_voucher
@@ -0,0 +1,2 @@
+Enter PIN to confirm selection:
+{{.view_voucher}}
\ No newline at end of file
diff --git a/services/registration/view_voucher.bin b/services/registration/view_voucher.bin
new file mode 100644
index 0000000..56034b2
Binary files /dev/null and b/services/registration/view_voucher.bin differ
diff --git a/services/registration/view_voucher.vis b/services/registration/view_voucher.vis
new file mode 100644
index 0000000..1480099
--- /dev/null
+++ b/services/registration/view_voucher.vis
@@ -0,0 +1,10 @@
+MAP view_voucher
+MOUT back 0
+MOUT quit 9
+LOAD authorize_account 6
+HALT
+RELOAD authorize_account
+CATCH incorrect_pin flag_incorrect_pin 1
+INCMP _ 0
+INCMP quit 9
+INCMP voucher_set *
diff --git a/services/registration/view_voucher_swa b/services/registration/view_voucher_swa
new file mode 100644
index 0000000..485e2ef
--- /dev/null
+++ b/services/registration/view_voucher_swa
@@ -0,0 +1,2 @@
+Weka PIN ili kuthibitisha chaguo:
+{{.view_voucher}}
\ No newline at end of file
diff --git a/services/registration/voucher_details b/services/registration/voucher_details
new file mode 100644
index 0000000..d437681
--- /dev/null
+++ b/services/registration/voucher_details
@@ -0,0 +1 @@
+{{.get_voucher_details}}
\ No newline at end of file
diff --git a/services/registration/voucher_details.bin b/services/registration/voucher_details.bin
new file mode 100644
index 0000000..47ea883
Binary files /dev/null and b/services/registration/voucher_details.bin differ
diff --git a/services/registration/voucher_details.vis b/services/registration/voucher_details.vis
new file mode 100644
index 0000000..1b009f1
--- /dev/null
+++ b/services/registration/voucher_details.vis
@@ -0,0 +1,6 @@
+CATCH no_voucher flag_no_active_voucher 1
+LOAD get_voucher_details 0
+MAP get_voucher_details
+MOUT back 0
+HALT
+INCMP _ 0
diff --git a/services/registration/voucher_details_menu b/services/registration/voucher_details_menu
new file mode 100644
index 0000000..a588f23
--- /dev/null
+++ b/services/registration/voucher_details_menu
@@ -0,0 +1 @@
+Voucher details
\ No newline at end of file
diff --git a/services/registration/voucher_details_menu_swa b/services/registration/voucher_details_menu_swa
new file mode 100644
index 0000000..e84661b
--- /dev/null
+++ b/services/registration/voucher_details_menu_swa
@@ -0,0 +1 @@
+Maelezo ya Sarafu
\ No newline at end of file
diff --git a/services/registration/voucher_details_swa b/services/registration/voucher_details_swa
new file mode 100644
index 0000000..d437681
--- /dev/null
+++ b/services/registration/voucher_details_swa
@@ -0,0 +1 @@
+{{.get_voucher_details}}
\ No newline at end of file
diff --git a/services/registration/voucher_set b/services/registration/voucher_set
new file mode 100644
index 0000000..e90d2e5
--- /dev/null
+++ b/services/registration/voucher_set
@@ -0,0 +1 @@
+Success! {{.set_voucher}} is now your active voucher.
\ No newline at end of file
diff --git a/services/registration/voucher_set.bin b/services/registration/voucher_set.bin
new file mode 100644
index 0000000..82016cc
Binary files /dev/null and b/services/registration/voucher_set.bin differ
diff --git a/services/registration/voucher_set.vis b/services/registration/voucher_set.vis
new file mode 100644
index 0000000..e75c693
--- /dev/null
+++ b/services/registration/voucher_set.vis
@@ -0,0 +1,10 @@
+LOAD reset_incorrect 6
+CATCH incorrect_pin flag_incorrect_pin 1
+CATCH _ flag_account_authorized 0
+LOAD set_voucher 12
+MAP set_voucher
+MOUT back 0
+MOUT quit 9
+HALT
+INCMP ^ 0
+INCMP quit 9
diff --git a/services/registration/voucher_set_swa b/services/registration/voucher_set_swa
new file mode 100644
index 0000000..97d3fde
--- /dev/null
+++ b/services/registration/voucher_set_swa
@@ -0,0 +1 @@
+Hongera! {{.set_voucher}} ni Sarafu inayotumika sasa.
\ No newline at end of file
diff --git a/services/registration/vouchers_menu b/services/registration/vouchers_menu
new file mode 100644
index 0000000..5084c32
--- /dev/null
+++ b/services/registration/vouchers_menu
@@ -0,0 +1 @@
+My Vouchers
\ No newline at end of file
diff --git a/services/registration/vouchers_menu_swa b/services/registration/vouchers_menu_swa
new file mode 100644
index 0000000..64ba54e
--- /dev/null
+++ b/services/registration/vouchers_menu_swa
@@ -0,0 +1 @@
+Sarafu yangu
\ No newline at end of file
diff --git a/services/registration/yes_menu b/services/registration/yes_menu
new file mode 100644
index 0000000..3fdfb3d
--- /dev/null
+++ b/services/registration/yes_menu
@@ -0,0 +1 @@
+Yes
\ No newline at end of file
diff --git a/services/registration/yes_menu_swa b/services/registration/yes_menu_swa
new file mode 100644
index 0000000..542d3c3
--- /dev/null
+++ b/services/registration/yes_menu_swa
@@ -0,0 +1 @@
+Ndio
\ No newline at end of file