You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fineract.apache.org by GitBox <gi...@apache.org> on 2018/09/17 09:10:38 UTC

[GitHub] awasum closed pull request #6: Increment 2

awasum closed pull request #6: Increment 2
URL: https://github.com/apache/fineract-cn-notifications/pull/6
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/.gitignore b/.gitignore
index 99b514a..3f7ccae 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,7 +2,13 @@
 .idea
 build/
 target/
-detail
+build/out
+service/out
+component-test/out
+api/out
+service/build
+component-test/build
+api/build
 
 # Ignore Gradle GUI config
 gradle-app.setting
@@ -15,3 +21,5 @@ gradle-app.setting
 *.log
 
 *.toDelete
+
+*.class
\ No newline at end of file
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 1ee78cd..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,49 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-language: java
-
-jdk: oraclejdk8
-
-sudo: enabled
-
-branches:
-  only:
-    - develop
-
-
-cache:
-  directories:
-  - $HOME/.m2
-
-install:
- - gradle install
-
-notifications:
-  email: true
-
-  deploy:
-    -
-      on:
-        branch: develop
-      provider: bintray
-      skip_cleanup: true
-      #file: target/bin/bintray.json
-      user: ebenezergraham
-      # key: $BINTRAY_API_KEY
\ No newline at end of file
diff --git a/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/PermittableGroupIds.class b/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/PermittableGroupIds.class
index a1dee5e..7f31257 100644
Binary files a/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/PermittableGroupIds.class and b/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/PermittableGroupIds.class differ
diff --git a/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/client/IamATeapotException.class b/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/client/IamATeapotException.class
deleted file mode 100644
index a197a0a..0000000
Binary files a/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/client/IamATeapotException.class and /dev/null differ
diff --git a/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/client/NotificationManager.class b/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/client/NotificationManager.class
index 741d5f5..fb44545 100644
Binary files a/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/client/NotificationManager.class and b/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/client/NotificationManager.class differ
diff --git a/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/domain/EmailConfiguration.class b/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/domain/EmailConfiguration.class
index dd410b5..68d087d 100644
Binary files a/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/domain/EmailConfiguration.class and b/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/domain/EmailConfiguration.class differ
diff --git a/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/domain/Notification.class b/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/domain/Notification.class
deleted file mode 100644
index afe7f46..0000000
Binary files a/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/domain/Notification.class and /dev/null differ
diff --git a/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/domain/SMSConfiguration.class b/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/domain/SMSConfiguration.class
index f7e3f18..b0e8563 100644
Binary files a/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/domain/SMSConfiguration.class and b/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/domain/SMSConfiguration.class differ
diff --git a/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/domain/Sample.class b/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/domain/Sample.class
deleted file mode 100644
index 818a105..0000000
Binary files a/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/domain/Sample.class and /dev/null differ
diff --git a/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/events/NotificationEventConstants.class b/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/events/NotificationEventConstants.class
index 6b2a09d..0600369 100644
Binary files a/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/events/NotificationEventConstants.class and b/api/out/production/classes/org/apache/fineract/cn/notification/api/v1/events/NotificationEventConstants.class differ
diff --git a/api/src/main/java/org/apache/fineract/cn/notification/api/v1/PermittableGroupIds.java b/api/src/main/java/org/apache/fineract/cn/notification/api/v1/PermittableGroupIds.java
index a854460..a5c9de2 100644
--- a/api/src/main/java/org/apache/fineract/cn/notification/api/v1/PermittableGroupIds.java
+++ b/api/src/main/java/org/apache/fineract/cn/notification/api/v1/PermittableGroupIds.java
@@ -20,6 +20,5 @@
 
 @SuppressWarnings("unused")
 public interface PermittableGroupIds {
-  String SAMPLE_MANAGEMENT = "notification__v1__samples";
-  String SELF_MANAGEMENT = "notification__v1__self";
+	String SELF_MANAGEMENT = "notification__v1__self";
 }
diff --git a/api/src/main/java/org/apache/fineract/cn/notification/api/v1/client/IamATeapotException.java b/api/src/main/java/org/apache/fineract/cn/notification/api/v1/client/ConfigurationNotFoundException.java
similarity index 80%
rename from api/src/main/java/org/apache/fineract/cn/notification/api/v1/client/IamATeapotException.java
rename to api/src/main/java/org/apache/fineract/cn/notification/api/v1/client/ConfigurationNotFoundException.java
index 9265ed4..4f5d185 100644
--- a/api/src/main/java/org/apache/fineract/cn/notification/api/v1/client/IamATeapotException.java
+++ b/api/src/main/java/org/apache/fineract/cn/notification/api/v1/client/ConfigurationNotFoundException.java
@@ -18,6 +18,11 @@
  */
 package org.apache.fineract.cn.notification.api.v1.client;
 
-@SuppressWarnings("WeakerAccess")
-public class IamATeapotException extends RuntimeException {
+import org.apache.fineract.cn.api.util.NotFoundException;
+
+public final class ConfigurationNotFoundException extends NotFoundException {
+	
+	public ConfigurationNotFoundException(String reason) {
+		super(reason);
+	}
 }
diff --git a/api/src/main/java/org/apache/fineract/cn/notification/api/v1/client/NotificationManager.java b/api/src/main/java/org/apache/fineract/cn/notification/api/v1/client/NotificationManager.java
index 6d0a7b1..b169cfd 100644
--- a/api/src/main/java/org/apache/fineract/cn/notification/api/v1/client/NotificationManager.java
+++ b/api/src/main/java/org/apache/fineract/cn/notification/api/v1/client/NotificationManager.java
@@ -18,42 +18,62 @@
  */
 package org.apache.fineract.cn.notification.api.v1.client;
 
-import org.apache.fineract.cn.notification.api.v1.domain.Sample;
-import java.util.List;
-import org.apache.fineract.cn.api.annotation.ThrowsException;
 import org.apache.fineract.cn.api.util.CustomFeignClientsConfiguration;
+import org.apache.fineract.cn.notification.api.v1.domain.EmailConfiguration;
+import org.apache.fineract.cn.notification.api.v1.domain.SMSConfiguration;
 import org.springframework.cloud.netflix.feign.FeignClient;
-import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 
 @SuppressWarnings("unused")
-@FeignClient(value="notification-v1", path="/notification/v1", configuration = CustomFeignClientsConfiguration.class)
+@FeignClient(value = "notification-v1", path = "/notification/v1", configuration = CustomFeignClientsConfiguration.class)
 public interface NotificationManager {
-
-  @RequestMapping(
-          value = "/notification",
-          method = RequestMethod.GET,
-          produces = MediaType.ALL_VALUE,
-          consumes = MediaType.APPLICATION_JSON_VALUE
-  )
-  List<Sample> findAllEntities();
-
-  @RequestMapping(
-          value = "/notification/{identifier}",
-          method = RequestMethod.GET,
-          produces = MediaType.ALL_VALUE,
-          consumes = MediaType.APPLICATION_JSON_VALUE)
-  Sample getEntity(@PathVariable("identifier") final String identifier);
-
-  @RequestMapping(
-      value = "/notification",
-      method = RequestMethod.POST,
-      produces = MediaType.APPLICATION_JSON_VALUE,
-      consumes = MediaType.APPLICATION_JSON_VALUE
-  )
-  @ThrowsException(status = HttpStatus.I_AM_A_TEAPOT, exception = IamATeapotException.class)
-  void createEntity(final Sample sample);
-}
+	
+	@RequestMapping(
+			value = "/notification/sms/active",
+			method = RequestMethod.GET,
+			produces = MediaType.ALL_VALUE,
+			consumes = MediaType.APPLICATION_JSON_VALUE)
+	SMSConfiguration findAllActiveSMSConfigurationEntities();
+	
+	@RequestMapping(
+			value = "/notification/email/active",
+			method = RequestMethod.GET,
+			produces = MediaType.ALL_VALUE,
+			consumes = MediaType.APPLICATION_JSON_VALUE)
+	EmailConfiguration findAllActiveEmailConfigurationEntities();
+	
+	@RequestMapping(
+			value = "/notification/sms/create",
+			method = RequestMethod.POST,
+			produces = MediaType.APPLICATION_JSON_VALUE,
+			consumes = MediaType.APPLICATION_JSON_VALUE
+	)
+	void createSMSConfiguration(final SMSConfiguration smsConfiguration);
+	
+	@RequestMapping(
+			value = "/notification/email/create",
+			method = RequestMethod.POST,
+			produces = MediaType.APPLICATION_JSON_VALUE,
+			consumes = MediaType.APPLICATION_JSON_VALUE
+	)
+	void createEmailConfiguration(final EmailConfiguration emailConfiguration);
+	
+	@RequestMapping(
+			value = "/notification/sms/{identifier}",
+			method = RequestMethod.GET,
+			produces = MediaType.APPLICATION_JSON_VALUE,
+			consumes = MediaType.APPLICATION_JSON_VALUE
+	)
+	SMSConfiguration findSMSConfigurationByIdentifier(@PathVariable("identifier") final String identifier);
+	
+	@RequestMapping(
+			value = "/notification/email/{identifier}",
+			method = RequestMethod.GET,
+			produces = MediaType.APPLICATION_JSON_VALUE,
+			consumes = MediaType.APPLICATION_JSON_VALUE
+	)
+	EmailConfiguration findEmailConfigurationByIdentifier(@PathVariable("identifier") final String identifier);
+}
\ No newline at end of file
diff --git a/api/src/main/java/org/apache/fineract/cn/notification/api/v1/domain/EmailConfiguration.java b/api/src/main/java/org/apache/fineract/cn/notification/api/v1/domain/EmailConfiguration.java
index 24aa0dc..6b95afd 100644
--- a/api/src/main/java/org/apache/fineract/cn/notification/api/v1/domain/EmailConfiguration.java
+++ b/api/src/main/java/org/apache/fineract/cn/notification/api/v1/domain/EmailConfiguration.java
@@ -25,138 +25,153 @@
 
 @SuppressWarnings({"WeakerAccess", "unused"})
 public class EmailConfiguration {
-  @ValidIdentifier
-  private String identifier;
-  @Length(max = 512)
-  private String payload;
-  @Length(max = 512)
-  private String host;
-  @Length(max = 512)
-  private String port;
-  @Length(max = 512)
-  private String username;
-  @Length(max = 512)
-  private String app_id;
-  @Length(max = 512)
-  private String smtp_auth;
-  @Length(max = 512)
-  private String start_tls;
-  @Length(max = 512)
-  private String option;
-
-  public EmailConfiguration(){
-    super();
-  }
-
-  public static EmailConfiguration create (String identifier, String payload,
-                            String host, String port,
-                            String username, String app_id,
-                            String smtp_auth, String start_tls,
-                            String option) {
-    EmailConfiguration emailConfiguration = new EmailConfiguration();
-    emailConfiguration.setIdentifier(identifier);
-    emailConfiguration.setPayload(payload);
-    emailConfiguration.setHost(host);
-    emailConfiguration.setPort(port);
-    emailConfiguration.setUsername(username);
-    emailConfiguration.setApp_id(app_id);
-    emailConfiguration.setSmtp_auth(smtp_auth);
-    emailConfiguration.setStart_tls(start_tls);
-    emailConfiguration.setOption(option);
-    return emailConfiguration;
-  }
-
-  public String getIdentifier() {
-    return identifier;
-  }
-
-  public void setIdentifier(String identifier) {
-    this.identifier = identifier;
-  }
-
-  public String getPayload() {
-    return payload;
-  }
-
-  public void setPayload(String payload) {
-    this.payload = payload;
-  }
-
-  public String getHost() {
-    return host;
-  }
-
-  public void setHost(String host) {
-    this.host = host;
-  }
-
-  public String getPort() {
-    return port;
-  }
-
-  public void setPort(String port) {
-    this.port = port;
-  }
-
-  public String getUsername() {
-    return username;
-  }
-
-  public void setUsername(String username) {
-    this.username = username;
-  }
-
-  public String getApp_id() {
-    return app_id;
-  }
-
-  public void setApp_id(String app_id) {
-    this.app_id = app_id;
-  }
-
-  public String getSmtp_auth() {
-    return smtp_auth;
-  }
-
-  public void setSmtp_auth(String smtp_auth) {
-    this.smtp_auth = smtp_auth;
-  }
-
-  public String getStart_tls() {
-    return start_tls;
-  }
-
-  public void setStart_tls(String start_tls) {
-    this.start_tls = start_tls;
-  }
-
-  public String getOption() {
-    return option;
-  }
-
-  public void setOption(String option) {
-    this.option = option;
-  }
-
-  @Override
-  public boolean equals(Object o) {
-    if (this == o) return true;
-    if (o == null || getClass() != o.getClass()) return false;
-    EmailConfiguration that = (EmailConfiguration) o;
-    return Objects.equals(identifier, that.identifier) &&
-            Objects.equals(payload, that.payload) &&
-            Objects.equals(host, that.host) &&
-            Objects.equals(port, that.port) &&
-            Objects.equals(username, that.username) &&
-            Objects.equals(app_id, that.app_id) &&
-            Objects.equals(smtp_auth, that.smtp_auth) &&
-            Objects.equals(start_tls, that.start_tls) &&
-            Objects.equals(option, that.option);
-  }
-
-  @Override
-  public int hashCode() {
-    return Objects.hash(identifier, payload, host, port, username,
-            app_id, smtp_auth, start_tls, option);
-  }
+	@ValidIdentifier
+	@Length(max = 11)
+	private String identifier;
+	@Length(max = 45)
+	private String host;
+	@Length(max = 45)
+	private String port;
+	@Length(max = 45)
+	private String protocol;
+	@Length(max = 45)
+	private String username;
+	@Length(max = 255)
+	private String app_password;
+	@Length(max = 45)
+	private String smtp_auth;
+	@Length(max = 45)
+	private String start_tls;
+	@Length(max = 45)
+	private String state;
+	
+	public EmailConfiguration() {
+		super();
+	}
+	
+	public static EmailConfiguration create(String identifier,
+	                                        String host, String port,
+	                                        String protocol, String username,
+	                                        String app_password, String smtp_auth,
+	                                        String start_tls, String state) {
+		EmailConfiguration emailConfiguration = new EmailConfiguration();
+		emailConfiguration.setIdentifier(identifier);
+		emailConfiguration.setHost(host);
+		emailConfiguration.setPort(port);
+		emailConfiguration.setProtocol(protocol);
+		emailConfiguration.setUsername(username);
+		emailConfiguration.setApp_password(app_password);
+		emailConfiguration.setSmtp_auth(smtp_auth);
+		emailConfiguration.setStart_tls(start_tls);
+		emailConfiguration.setState(state);
+		return emailConfiguration;
+	}
+	
+	public String getIdentifier() {
+		return identifier;
+	}
+	
+	public void setIdentifier(String identifier) {
+		this.identifier = identifier;
+	}
+	
+	public String getHost() {
+		return host;
+	}
+	
+	public void setHost(String host) {
+		this.host = host;
+	}
+	
+	public String getPort() {
+		return port;
+	}
+	
+	public void setPort(String port) {
+		this.port = port;
+	}
+	
+	public String getProtocol() {
+		return protocol;
+	}
+	
+	public void setProtocol(String protocol) {
+		this.protocol = protocol;
+	}
+	
+	public String getUsername() {
+		return username;
+	}
+	
+	public void setUsername(String username) {
+		this.username = username;
+	}
+	
+	public String getApp_password() {
+		return app_password;
+	}
+	
+	public void setApp_password(String app_password) {
+		this.app_password = app_password;
+	}
+	
+	public String getSmtp_auth() {
+		return smtp_auth;
+	}
+	
+	public void setSmtp_auth(String smtp_auth) {
+		this.smtp_auth = smtp_auth;
+	}
+	
+	public String getStart_tls() {
+		return start_tls;
+	}
+	
+	public void setStart_tls(String start_tls) {
+		this.start_tls = start_tls;
+	}
+	
+	public String getState() {
+		return state;
+	}
+	
+	public void setState(String state) {
+		this.state = state;
+	}
+	
+	@Override
+	public boolean equals(Object o) {
+		if (this == o) return true;
+		if (o == null || getClass() != o.getClass()) return false;
+		EmailConfiguration that = (EmailConfiguration) o;
+		return Objects.equals(identifier, that.identifier) &&
+				Objects.equals(host, that.host) &&
+				Objects.equals(port, that.port) &&
+				Objects.equals(protocol, that.protocol) &&
+				Objects.equals(username, that.username) &&
+				Objects.equals(app_password, that.app_password) &&
+				Objects.equals(smtp_auth, that.smtp_auth) &&
+				Objects.equals(start_tls, that.start_tls) &&
+				Objects.equals(state, that.state);
+	}
+	
+	@Override
+	public int hashCode() {
+		return Objects.hash(identifier, host, port, protocol, username, app_password, smtp_auth, start_tls, state);
+	}
+	
+	@Override
+	public String toString() {
+		return "EmailConfiguration{" +
+				"identifier='" + identifier + '\'' +
+				", host='" + host + '\'' +
+				", port='" + port + '\'' +
+				", protocol='" + protocol + '\'' +
+				", username='" + username + '\'' +
+				", app_password='" + app_password + '\'' +
+				", smtp_auth='" + smtp_auth + '\'' +
+				", start_tls='" + start_tls + '\'' +
+				", state='" + state + '\'' +
+				'}';
+	}
 }
diff --git a/api/src/main/java/org/apache/fineract/cn/notification/api/v1/domain/EmailPage.java b/api/src/main/java/org/apache/fineract/cn/notification/api/v1/domain/EmailPage.java
new file mode 100644
index 0000000..f57ee35
--- /dev/null
+++ b/api/src/main/java/org/apache/fineract/cn/notification/api/v1/domain/EmailPage.java
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.api.v1.domain;
+
+import java.util.List;
+import java.util.Objects;
+
+public class EmailPage {
+	
+	private List<EmailConfiguration> emailConfigurations;
+	private Integer totalPages;
+	private Long totalElements;
+	
+	public EmailPage() {
+		super();
+	}
+	
+	public List<EmailConfiguration> getEmailConfiguration() {
+		return this.emailConfigurations;
+	}
+	
+	public void setEmailConfiguration(final List<EmailConfiguration> emailConfiguration) {
+		this.emailConfigurations = emailConfigurations;
+	}
+	
+	public Integer getTotalPages() {
+		return this.totalPages;
+	}
+	
+	public void setTotalPages(final Integer totalPages) {
+		this.totalPages = totalPages;
+	}
+	
+	public Long getTotalElements() {
+		return this.totalElements;
+	}
+	
+	public void setTotalElements(final Long totalElements) {
+		this.totalElements = totalElements;
+	}
+	
+	@Override
+	public boolean equals(Object o) {
+		if (this == o) return true;
+		if (o == null || getClass() != o.getClass()) return false;
+		EmailPage emailPage = (EmailPage) o;
+		return Objects.equals(emailConfigurations, emailPage.emailConfigurations) &&
+				Objects.equals(totalPages, emailPage.totalPages) &&
+				Objects.equals(totalElements, emailPage.totalElements);
+	}
+	
+	@Override
+	public int hashCode() {
+		return Objects.hash(emailConfigurations, totalPages, totalElements);
+	}
+	
+	@Override
+	public String toString() {
+		return "EmailPage{" +
+				"emailConfigurations=" + emailConfigurations +
+				", totalPages=" + totalPages +
+				", totalElements=" + totalElements +
+				'}';
+	}
+}
diff --git a/api/src/main/java/org/apache/fineract/cn/notification/api/v1/domain/Event.java b/api/src/main/java/org/apache/fineract/cn/notification/api/v1/domain/Event.java
new file mode 100644
index 0000000..cb3fc5f
--- /dev/null
+++ b/api/src/main/java/org/apache/fineract/cn/notification/api/v1/domain/Event.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.api.v1.domain;
+/*
+ebenezergraham created on 8/19/18
+*/
+
+import java.util.Objects;
+
+public class Event {
+	private final String identifier;
+	private boolean enabled;
+	
+	public Event(String identifier, boolean enabled) {
+		super();
+		this.identifier = identifier;
+		this.enabled = enabled;
+	}
+	
+	public String getIdentifier() {
+		return identifier;
+	}
+	
+	public boolean isEnabled() {
+		return enabled;
+	}
+	
+	public void setEnabled(boolean state) {
+		this.enabled = state;
+	}
+	
+	@Override
+	public boolean equals(Object o) {
+		if (this == o) return true;
+		if (o == null || getClass() != o.getClass()) return false;
+		Event event = (Event) o;
+		return enabled == event.enabled &&
+				Objects.equals(identifier, event.identifier);
+	}
+	
+	@Override
+	public int hashCode() {
+		return Objects.hash(identifier, enabled);
+	}
+	
+	@Override
+	public String toString() {
+		return "Event{" +
+				"identifier='" + identifier + '\'' +
+				", enabled=" + enabled +
+				'}';
+	}
+}
diff --git a/api/src/main/java/org/apache/fineract/cn/notification/api/v1/domain/SMSConfiguration.java b/api/src/main/java/org/apache/fineract/cn/notification/api/v1/domain/SMSConfiguration.java
index cef7f57..dd76852 100644
--- a/api/src/main/java/org/apache/fineract/cn/notification/api/v1/domain/SMSConfiguration.java
+++ b/api/src/main/java/org/apache/fineract/cn/notification/api/v1/domain/SMSConfiguration.java
@@ -25,98 +25,112 @@
 
 @SuppressWarnings({"WeakerAccess", "unused"})
 public class SMSConfiguration {
-  @ValidIdentifier
-  private String identifier;
-  @Length(max = 512)
-  private String payload;
-  @Length(max = 512)
-  private String organisation;
-  @Length(max = 512)
-  private String auth_token;
-  @Length(max = 512)
-  private String accountid;
-  @Length(max = 256)
-  private String option;
-
-  public SMSConfiguration() {
-    super();
-  }
-
-  public static SMSConfiguration create(String identifier, String payload, String organisation, String auth_token, String accountid, String option) {
-    SMSConfiguration smsconfiguration = new SMSConfiguration();
-    smsconfiguration.setIdentifier(identifier);
-    smsconfiguration.setPayload(payload);
-    smsconfiguration.setOrganisation(organisation);
-    smsconfiguration.setAuth_token(auth_token);
-    smsconfiguration.setAccountid(accountid);
-    smsconfiguration.setOption(option);
-    return smsconfiguration;
-  }
-
-  public String getIdentifier() {
-    return identifier;
-  }
-
-  public void setIdentifier(String identifier) {
-    this.identifier = identifier;
-  }
-
-  public String getPayload() {
-    return payload;
-  }
-
-  public void setPayload(String payload) {
-    this.payload = payload;
-  }
-
-  public String getOrganisation() {
-    return organisation;
-  }
-
-  public void setOrganisation(String organisation) {
-    this.organisation = organisation;
-  }
-
-  public String getAuth_token() {
-    return auth_token;
-  }
-
-  public void setAuth_token(String auth_token) {
-    this.auth_token = auth_token;
-  }
-
-  public String getAccountid() {
-    return accountid;
-  }
-
-  public void setAccountid(String accountid) {
-    this.accountid = accountid;
-  }
-
-  public String getOption() {
-    return option;
-  }
-
-  public void setOption(String option) {
-    this.option = option;
-  }
-
-  @Override
-  public boolean equals(Object o) {
-    if (this == o) return true;
-    if (o == null || getClass() != o.getClass()) return false;
-    SMSConfiguration that = (SMSConfiguration) o;
-    return Objects.equals(identifier, that.identifier) &&
-            Objects.equals(payload, that.payload) &&
-            Objects.equals(organisation, that.organisation) &&
-            Objects.equals(auth_token, that.auth_token) &&
-            Objects.equals(accountid, that.accountid) &&
-            Objects.equals(option, that.option);
-  }
-
-  @Override
-  public int hashCode() {
-
-    return Objects.hash(identifier, payload, organisation, auth_token, accountid, option);
-  }
+	@ValidIdentifier
+	@Length(max = 45)
+	private String identifier;
+	@Length(max = 255)
+	private String auth_token;
+	@Length(max = 255)
+	private String account_sid;
+	@Length(max = 45)
+	private String sender_number;
+	@Length(max = 45)
+	private String state;
+	
+	public SMSConfiguration() {
+		super();
+	}
+	
+	public static SMSConfiguration create(String identifier,
+	                                      String auth_token,
+	                                      String account_sid,
+	                                      String sender_number,
+	                                      String state) {
+		SMSConfiguration smsconfiguration = new SMSConfiguration();
+		smsconfiguration.setIdentifier(identifier);
+		smsconfiguration.setAuth_token(auth_token);
+		smsconfiguration.setAccount_sid(account_sid);
+		smsconfiguration.setSender_number(sender_number);
+		smsconfiguration.setState(state);
+		return smsconfiguration;
+	}
+	
+	public String getIdentifier() {
+		return identifier;
+	}
+	
+	public void setIdentifier(String identifier) {
+		this.identifier = identifier;
+	}
+	
+	public String getAuth_token() {
+		return auth_token;
+	}
+	
+	public void setAuth_token(String auth_token) {
+		this.auth_token = auth_token;
+	}
+	
+	public String getAccount_sid() {
+		return account_sid;
+	}
+	
+	public void setAccount_sid(String account_sid) {
+		this.account_sid = account_sid;
+	}
+	
+	public String getSender_number() {
+		return sender_number;
+	}
+	
+	public void setSender_number(String sender_number) {
+		this.sender_number = sender_number;
+	}
+	
+	public String getState() {
+		return state;
+	}
+	
+	public void setState(String state) {
+		this.state = state;
+	}
+	
+	public String getType() {
+		return null;
+	}
+	
+	@Override
+	public boolean equals(Object o) {
+		if (this == o) return true;
+		if (o == null || getClass() != o.getClass()) return false;
+		SMSConfiguration that = (SMSConfiguration) o;
+		return Objects.equals(identifier, that.identifier) &&
+				Objects.equals(auth_token, that.auth_token) &&
+				Objects.equals(account_sid, that.account_sid) &&
+				Objects.equals(state, that.state);
+	}
+	
+	@Override
+	public int hashCode() {
+		return Objects.hash(identifier, auth_token, auth_token, account_sid, state);
+	}
+	
+	@Override
+	public String toString() {
+		return "SMSConfiguration{" +
+				"identifier='" + identifier + '\'' +
+				", auth_token='" + auth_token + '\'' +
+				", account_sid='" + account_sid + '\'' +
+				", sender_number='" + sender_number + '\'' +
+				", state='" + state + '\'' +
+				'}';
+	}
+	
+	private enum State {
+		ACTIVE,
+		DEACTIVATED;
+		
+		State() {
+		}
+	}
 }
diff --git a/api/src/main/java/org/apache/fineract/cn/notification/api/v1/domain/SMSPage.java b/api/src/main/java/org/apache/fineract/cn/notification/api/v1/domain/SMSPage.java
new file mode 100644
index 0000000..9e7ef8d
--- /dev/null
+++ b/api/src/main/java/org/apache/fineract/cn/notification/api/v1/domain/SMSPage.java
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.api.v1.domain;
+
+import java.util.List;
+import java.util.Objects;
+
+public class SMSPage {
+	
+	private List<SMSConfiguration> smsConfigurations;
+	private Integer totalPages;
+	private Long totalElements;
+	
+	public SMSPage() {
+		super();
+	}
+	
+	public List<SMSConfiguration> getSmsConfigurations() {
+		return this.smsConfigurations;
+	}
+	
+	public void setSmsConfigurations(final List<SMSConfiguration> smsConfigurations) {
+		this.smsConfigurations = smsConfigurations;
+	}
+	
+	public Integer getTotalPages() {
+		return this.totalPages;
+	}
+	
+	public void setTotalPages(final Integer totalPages) {
+		this.totalPages = totalPages;
+	}
+	
+	public Long getTotalElements() {
+		return this.totalElements;
+	}
+	
+	public void setTotalElements(final Long totalElements) {
+		this.totalElements = totalElements;
+	}
+	
+	@Override
+	public boolean equals(Object o) {
+		if (this == o) return true;
+		if (o == null || getClass() != o.getClass()) return false;
+		SMSPage smsPage = (SMSPage) o;
+		return Objects.equals(smsConfigurations, smsPage.smsConfigurations) &&
+				Objects.equals(totalPages, smsPage.totalPages) &&
+				Objects.equals(totalElements, smsPage.totalElements);
+	}
+	
+	@Override
+	public int hashCode() {
+		return Objects.hash(smsConfigurations, totalPages, totalElements);
+	}
+	
+	@Override
+	public String toString() {
+		return "SMSPage{" +
+				"smsConfigurations=" + smsConfigurations +
+				", totalPages=" + totalPages +
+				", totalElements=" + totalElements +
+				'}';
+	}
+}
diff --git a/api/src/main/java/org/apache/fineract/cn/notification/api/v1/domain/Sample.java b/api/src/main/java/org/apache/fineract/cn/notification/api/v1/domain/Sample.java
deleted file mode 100644
index 644dda9..0000000
--- a/api/src/main/java/org/apache/fineract/cn/notification/api/v1/domain/Sample.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.fineract.cn.notification.api.v1.domain;
-
-import java.util.Objects;
-import org.apache.fineract.cn.lang.validation.constraints.ValidIdentifier;
-import org.hibernate.validator.constraints.Length;
-
-@SuppressWarnings({"WeakerAccess", "unused"})
-public class Sample {
-  @ValidIdentifier
-  private String identifier;
-  @Length(max = 512)
-  private String payload;
-
-  public Sample() {
-    super();
-  }
-
-  public static Sample create(final String identifier, final String payload) {
-    final Sample sample = new Sample();
-    sample.setIdentifier(identifier);
-    sample.setPayload(payload);
-    return sample;
-  }
-
-  public String getIdentifier() {
-    return this.identifier;
-  }
-
-  public void setIdentifier(final String identifier) {
-    this.identifier = identifier;
-  }
-
-  public String getPayload() {
-    return payload;
-  }
-
-  public void setPayload(String payload) {
-    this.payload = payload;
-  }
-
-  @Override
-  public boolean equals(Object o) {
-    if (this == o) return true;
-    if (o == null || getClass() != o.getClass()) return false;
-    Sample sample = (Sample) o;
-    return Objects.equals(identifier, sample.identifier) &&
-            Objects.equals(payload, sample.payload);
-  }
-
-  @Override
-  public int hashCode() {
-    return Objects.hash(identifier, payload);
-  }
-}
diff --git a/api/src/main/java/org/apache/fineract/cn/notification/api/v1/events/NotificationEventConstants.java b/api/src/main/java/org/apache/fineract/cn/notification/api/v1/events/NotificationEventConstants.java
index 39c6eb0..f4d1be1 100644
--- a/api/src/main/java/org/apache/fineract/cn/notification/api/v1/events/NotificationEventConstants.java
+++ b/api/src/main/java/org/apache/fineract/cn/notification/api/v1/events/NotificationEventConstants.java
@@ -20,12 +20,26 @@
 
 @SuppressWarnings("unused")
 public interface NotificationEventConstants {
-
-    String DESTINATION = "notification-v1";
-    String SELECTOR_NAME = "action";
-    String INITIALIZE = "initialize";
-    String POST_SAMPLE = "post-sample";
-    String SELECTOR_INITIALIZE = SELECTOR_NAME + " = '" + INITIALIZE + "'";
-    String SELECTOR_POST_SAMPLE = SELECTOR_NAME + " = '" + POST_SAMPLE + "'";
-
+	
+	String DESTINATION = "notification-v1";
+	String SELECTOR_NAME = "action";
+	String INITIALIZE = "initialize";
+	
+	String POST_SMS_CONFIGURATION = "post-sms-configuration";
+	String POST_EMAIL_CONFIGURATION = "post-email-configuration";
+	String POST_SMS_NOTIFICATION = "post-sms-notification";
+	String POST_EMAIL_NOTIFICATION = "post-email-notification";
+	
+	String POST_ENABLE_CUSTOMER_CREATED_EVENT = "post-enable-customer-created-event";
+	String POST_ENABLE_CUSTOMER_UPDATED_EVENT = "post-enable-customer-updated-event";
+	String POST_ENABLE_CUSTOMER_CLOSED_EVENT = "post-enable-customer-closed-event";
+	String POST_ENABLE_CUSTOMER_LOCKED_EVENT = "post-enable-customer-locked-event";
+	String POST_ENABLE_CUSTOMER_ACTIVATED_EVENT = "post-enable-customer-activated-event";
+	String POST_ENABLE_CUSTOMER__EVENT = "post-enable-customer--event";
+	
+	String SELECTOR_INITIALIZE = SELECTOR_NAME + " = '" + INITIALIZE + "'";
+	String SELECTOR_POST_SMS_CONFIGURATION = SELECTOR_NAME + " = '" + POST_SMS_CONFIGURATION + "'";
+	String SELECTOR_POST_EMAIL_CONFIGURATION = SELECTOR_NAME + " = '" + POST_EMAIL_CONFIGURATION + "'";
+	String SELECTOR_POST_SMS_NOTIFICATION = SELECTOR_NAME + " = '" + POST_SMS_NOTIFICATION + "'";
+	String SELECTOR_POST_EMAIL_NOTIFICATION = SELECTOR_NAME + " = '" + POST_EMAIL_NOTIFICATION + "'";
 }
diff --git a/api/src/test/java/org/apache/fineract/cn/notification/api/v1/domain/EmailConfigurationTest.java b/api/src/test/java/org/apache/fineract/cn/notification/api/v1/domain/EmailConfigurationTest.java
new file mode 100644
index 0000000..294877a
--- /dev/null
+++ b/api/src/test/java/org/apache/fineract/cn/notification/api/v1/domain/EmailConfigurationTest.java
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.api.v1.domain;
+
+import org.apache.fineract.cn.test.domain.ValidationTest;
+import org.apache.fineract.cn.test.domain.ValidationTestCase;
+import org.junit.runners.Parameterized;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+public class EmailConfigurationTest extends ValidationTest<EmailConfiguration> {
+	
+	public EmailConfigurationTest(ValidationTestCase<EmailConfiguration> testCase) {
+		super(testCase);
+	}
+	
+	@Parameterized.Parameters
+	public static Collection testCases() {
+		final Collection<ValidationTestCase> ret = new ArrayList<>();
+		ret.add(new ValidationTestCase<EmailConfiguration>("basicCase")
+				.adjustment(x -> {
+				})
+				.valid(true));
+		ret.add(new ValidationTestCase<EmailConfiguration>("nullIdentifier")
+				.adjustment(x -> x.setIdentifier(null))
+				.valid(false));
+		ret.add(new ValidationTestCase<EmailConfiguration>("tooShortIdentifier")
+				.adjustment(x -> x.setIdentifier("z"))
+				.valid(false));
+		return ret;
+	}
+	
+	
+	protected EmailConfiguration createValidTestSubject() {
+		return EmailConfiguration.create("EmailTest",
+				"smtp.google.com",
+				"123",
+				"example",
+				"egraham",
+				"asdfaegw4t3rwg5w",
+				"true",
+				"true",
+				"ACTIVE");
+	}
+	
+	
+}
\ No newline at end of file
diff --git a/api/src/test/java/org/apache/fineract/cn/notification/api/v1/domain/EmailPageTest.java b/api/src/test/java/org/apache/fineract/cn/notification/api/v1/domain/EmailPageTest.java
new file mode 100644
index 0000000..f871958
--- /dev/null
+++ b/api/src/test/java/org/apache/fineract/cn/notification/api/v1/domain/EmailPageTest.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.api.v1.domain;
+
+import org.apache.fineract.cn.test.domain.ValidationTest;
+import org.apache.fineract.cn.test.domain.ValidationTestCase;
+import org.junit.runners.Parameterized;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+
+public class EmailPageTest extends ValidationTest<EmailPage> {
+	
+	EmailConfiguration emailConfiguration;
+	
+	public EmailPageTest(ValidationTestCase<EmailPage> testCase) {
+		super(testCase);
+	}
+	
+	@Parameterized.Parameters
+	public static Collection testCases() {
+		final Collection<ValidationTestCase> ret = new ArrayList<>();
+		ret.add(new ValidationTestCase<EmailPage>("basicCase")
+				.adjustment(x -> {
+				})
+				.valid(true));
+		ret.add(new ValidationTestCase<EmailPage>("getEmailConfiguration")
+				.adjustment(x -> x.getEmailConfiguration())
+				.valid(true));
+		return ret;
+	}
+	
+	@Override
+	protected EmailPage createValidTestSubject() {
+		EmailPage emailPage = new EmailPage();
+		emailConfiguration = new EmailConfiguration();
+		emailConfiguration.create("EmailTest",
+				"smtp.google.com",
+				"123",
+				"example",
+				"ebez",
+				"asdfaegw4t3rwg5w",
+				"true",
+				"true",
+				"ACTIVE");
+		emailPage.setEmailConfiguration(Arrays.asList(emailConfiguration));
+		return emailPage;
+	}
+}
\ No newline at end of file
diff --git a/api/src/test/java/org/apache/fineract/cn/notification/api/v1/domain/EventTest.java b/api/src/test/java/org/apache/fineract/cn/notification/api/v1/domain/EventTest.java
new file mode 100644
index 0000000..6983f14
--- /dev/null
+++ b/api/src/test/java/org/apache/fineract/cn/notification/api/v1/domain/EventTest.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.api.v1.domain;
+
+import org.apache.fineract.cn.test.domain.ValidationTest;
+import org.apache.fineract.cn.test.domain.ValidationTestCase;
+import org.junit.runners.Parameterized;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+public class EventTest extends ValidationTest<Event> {
+	
+	public EventTest(ValidationTestCase<Event> testCase) {
+		super(testCase);
+	}
+	
+	@Parameterized.Parameters
+	public static Collection testCases() {
+		final Collection<ValidationTestCase> ret = new ArrayList<>();
+		ret.add(new ValidationTestCase<Event>("basicCase")
+				.adjustment(x -> {
+				})
+				.valid(true));
+		ret.add(new ValidationTestCase<Event>("nullIdentifier")
+				.adjustment(x -> x.getIdentifier().equals("customerCreated"))
+				.valid(true));
+		ret.add(new ValidationTestCase<Event>("Is Enabled")
+				.adjustment(x -> x.isEnabled())
+				.valid(true));
+		return ret;
+	}
+	
+	@Override
+	protected Event createValidTestSubject() {
+		return new Event("customerCreated", true);
+	}
+}
\ No newline at end of file
diff --git a/api/src/test/java/org/apache/fineract/cn/notification/api/v1/domain/SMSConfigurationTest.java b/api/src/test/java/org/apache/fineract/cn/notification/api/v1/domain/SMSConfigurationTest.java
new file mode 100644
index 0000000..9b3b0c7
--- /dev/null
+++ b/api/src/test/java/org/apache/fineract/cn/notification/api/v1/domain/SMSConfigurationTest.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.api.v1.domain;
+
+import org.apache.commons.lang3.RandomStringUtils;
+import org.apache.fineract.cn.test.domain.ValidationTest;
+import org.apache.fineract.cn.test.domain.ValidationTestCase;
+import org.junit.runners.Parameterized;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+public class SMSConfigurationTest extends ValidationTest<SMSConfiguration> {
+	
+	public SMSConfigurationTest(ValidationTestCase<SMSConfiguration> testCase) {
+		super(testCase);
+	}
+	
+	@Parameterized.Parameters
+	public static Collection testCases() {
+		final Collection<ValidationTestCase> ret = new ArrayList<>();
+		ret.add(new ValidationTestCase<SMSConfiguration>("basicCase")
+				.adjustment(x -> {
+				})
+				.valid(false));
+		ret.add(new ValidationTestCase<SMSConfiguration>("nullIdentifier")
+				.adjustment(x -> x.setIdentifier(null))
+				.valid(false));
+		ret.add(new ValidationTestCase<SMSConfiguration>("tooShortIdentifier")
+				.adjustment(x -> x.setIdentifier("z"))
+				.valid(false));
+		ret.add(new ValidationTestCase<SMSConfiguration>("LongToken")
+				.adjustment(x -> x.getAccount_sid())
+				.valid(false));
+		ret.add(new ValidationTestCase<SMSConfiguration>("tooLongSID")
+				.adjustment(x -> x.getAccount_sid())
+				.valid(false));
+		return ret;
+	}
+	
+	@Override
+	protected SMSConfiguration createValidTestSubject() {
+		return SMSConfiguration.create("test",
+				RandomStringUtils.randomAlphanumeric(300),
+				RandomStringUtils.randomAlphanumeric(300),
+				"ACTIVE",
+				"SMS");
+	}
+}
\ No newline at end of file
diff --git a/api/src/test/java/org/apache/fineract/cn/notification/api/v1/domain/SampleTest.java b/api/src/test/java/org/apache/fineract/cn/notification/api/v1/domain/SMSPageTest.java
similarity index 51%
rename from api/src/test/java/org/apache/fineract/cn/notification/api/v1/domain/SampleTest.java
rename to api/src/test/java/org/apache/fineract/cn/notification/api/v1/domain/SMSPageTest.java
index 65cd1ac..58535bb 100644
--- a/api/src/test/java/org/apache/fineract/cn/notification/api/v1/domain/SampleTest.java
+++ b/api/src/test/java/org/apache/fineract/cn/notification/api/v1/domain/SMSPageTest.java
@@ -18,40 +18,44 @@
  */
 package org.apache.fineract.cn.notification.api.v1.domain;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import org.apache.commons.lang.RandomStringUtils;
 import org.apache.fineract.cn.test.domain.ValidationTest;
 import org.apache.fineract.cn.test.domain.ValidationTestCase;
 import org.junit.runners.Parameterized;
 
-public class SampleTest extends ValidationTest<Sample> {
-
-  public SampleTest(ValidationTestCase<Sample> testCase) {
-    super(testCase);
-  }
-
-  @Override
-  protected Sample createValidTestSubject() {
-    return Sample.create("xxxx", "yyy");
-  }
-
-  @Parameterized.Parameters
-  public static Collection testCases() {
-    final Collection<ValidationTestCase> ret = new ArrayList<>();
-    ret.add(new ValidationTestCase<Sample>("basicCase")
-            .adjustment(x -> {})
-            .valid(true));
-    ret.add(new ValidationTestCase<Sample>("nullIdentifier")
-            .adjustment(x -> x.setIdentifier(null))
-            .valid(false));
-    ret.add(new ValidationTestCase<Sample>("tooShortIdentifier")
-            .adjustment(x -> x.setIdentifier("z"))
-            .valid(false));
-    ret.add(new ValidationTestCase<Sample>("tooLongPayload")
-            .adjustment(x -> x.setPayload(RandomStringUtils.randomAlphanumeric(513)))
-            .valid(false));
-    return ret;
-  }
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
 
+public class SMSPageTest extends ValidationTest<SMSPage> {
+	
+	SMSConfiguration smsConfiguration;
+	
+	public SMSPageTest(ValidationTestCase<SMSPage> testCase) {
+		super(testCase);
+	}
+	
+	@Parameterized.Parameters
+	public static Collection testCases() {
+		final Collection<ValidationTestCase> ret = new ArrayList<>();
+		ret.add(new ValidationTestCase<SMSPage>("basicCase")
+				.adjustment(x -> {
+				})
+				.valid(true));
+		ret.add(new ValidationTestCase<SMSPage>("getSMSConfiguration")
+				.adjustment(x -> x.getSmsConfigurations())
+				.valid(true));
+		return ret;
+	}
+	
+	protected SMSPage createValidTestSubject() {
+		SMSPage smsPage = new SMSPage();
+		smsConfiguration = new SMSConfiguration();
+		SMSConfiguration.create("EmailTest",
+				"dfghjklpytredfghjkloi8u7y6trfdghjklop",
+				"ghjklp098iuyhgbnmkoiuytgtrdcfvghj",
+				"ACTIVE",
+				"SMS");
+		smsPage.setSmsConfigurations(Arrays.asList(smsConfiguration));
+		return smsPage;
+	}
 }
\ No newline at end of file
diff --git a/api/src/test/java/org/apache/fineract/cn/notification/api/v1/domain/TestSuite.java b/api/src/test/java/org/apache/fineract/cn/notification/api/v1/domain/TestSuite.java
new file mode 100644
index 0000000..d6fcf81
--- /dev/null
+++ b/api/src/test/java/org/apache/fineract/cn/notification/api/v1/domain/TestSuite.java
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.api.v1.domain;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+
+@RunWith(Suite.class)
+@Suite.SuiteClasses({
+		EmailConfigurationTest.class,
+		SMSConfigurationTest.class,
+		EmailPageTest.class,
+		EventTest.class,
+		SMSPageTest.class
+})
+public class TestSuite {
+}
diff --git a/component-test/build.gradle b/component-test/build.gradle
index 0348f06..2e29cf4 100644
--- a/component-test/build.gradle
+++ b/component-test/build.gradle
@@ -43,7 +43,7 @@ dependencies {
             [group: 'org.apache.fineract.cn', name: 'api', version: versions.frameworkapi],
             [group: 'org.apache.fineract.cn', name: 'test', version: versions.frameworktest],
             [group: 'org.apache.fineract.cn', name: 'lang', version: versions.frameworklang],
-            [group: 'org.springframework.boot', name: 'spring-boot-starter-test']
+            [group: 'org.springframework.boot', name: 'spring-boot-starter-test'],
     )
 }
 
diff --git a/component-test/src/main/java/org/apache/fineract/cn/notification/SuiteTestEnvironment.java b/component-test/src/main/java/org/apache/fineract/cn/notification/SuiteTestEnvironment.java
index 5f2b5f4..5063d2e 100644
--- a/component-test/src/main/java/org/apache/fineract/cn/notification/SuiteTestEnvironment.java
+++ b/component-test/src/main/java/org/apache/fineract/cn/notification/SuiteTestEnvironment.java
@@ -33,16 +33,16 @@
  * initializing and de-initializing external resources.
  */
 public class SuiteTestEnvironment {
-  static final String APP_VERSION = "1";
-  static final String APP_NAME = "notification-v" + APP_VERSION;
-
-  static final TestEnvironment testEnvironment = new TestEnvironment(APP_NAME);
-  static final CassandraInitializer cassandraInitializer = new CassandraInitializer();
-  static final MariaDBInitializer mariaDBInitializer = new MariaDBInitializer();
-
-  @ClassRule
-  public static TestRule orderClassRules = RuleChain
-      .outerRule(new RunExternalResourceOnce(testEnvironment))
-      .around(new RunExternalResourceOnce(cassandraInitializer))
-      .around(new RunExternalResourceOnce(mariaDBInitializer));
+	static final String APP_VERSION = "1";
+	static final String APP_NAME = "notification-v" + APP_VERSION;
+	
+	static final TestEnvironment testEnvironment = new TestEnvironment(APP_NAME);
+	static final CassandraInitializer cassandraInitializer = new CassandraInitializer();
+	static final MariaDBInitializer mariaDBInitializer = new MariaDBInitializer();
+	
+	@ClassRule
+	public static TestRule orderClassRules = RuleChain
+			.outerRule(new RunExternalResourceOnce(testEnvironment))
+			.around(new RunExternalResourceOnce(cassandraInitializer))
+			.around(new RunExternalResourceOnce(mariaDBInitializer));
 }
diff --git a/component-test/src/main/java/org/apache/fineract/cn/notification/TestEmailService.java b/component-test/src/main/java/org/apache/fineract/cn/notification/TestEmailService.java
new file mode 100644
index 0000000..90f73c7
--- /dev/null
+++ b/component-test/src/main/java/org/apache/fineract/cn/notification/TestEmailService.java
@@ -0,0 +1,96 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification;
+
+import org.apache.commons.lang3.RandomStringUtils;
+import org.apache.fineract.cn.api.util.NotFoundException;
+import org.apache.fineract.cn.customer.api.v1.client.CustomerNotFoundException;
+import org.apache.fineract.cn.notification.api.v1.client.ConfigurationNotFoundException;
+import org.apache.fineract.cn.notification.api.v1.client.NotificationManager;
+import org.apache.fineract.cn.notification.api.v1.domain.EmailConfiguration;
+import org.apache.fineract.cn.notification.api.v1.events.NotificationEventConstants;
+import org.apache.fineract.cn.notification.service.internal.service.NotificationService;
+import org.apache.fineract.cn.notification.util.DomainObjectGenerator;
+import org.apache.fineract.cn.test.listener.EventRecorder;
+import org.junit.Assert;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestEmailService extends TestNotification {
+	
+	private final String configIdentifier = "Gmail";
+	@Autowired
+	private NotificationService notificationService;
+	@Autowired
+	private NotificationManager notificationManager;
+	@Autowired
+	private EventRecorder eventRecorder;
+	
+	public TestEmailService() {
+		super();
+	}
+	
+	@Test
+	public void sendEmail() throws InterruptedException{
+		this.logger.info("Send Email Notification");
+		notificationService.sendEmail("fineractcnnotificationdemo@gmail.com",
+				"egraham15@alustudent.com",
+				"Address Details Changed",
+				"Dear Valued Customer," +
+						"\n\nYour address has been changed successfully" +
+						"\nStreet: Test Street"+
+						"\nCity: Test City"+
+						"\nState: Test State"+
+						"\nCountry: Mauritius"+
+						"\n\nBest Regards" +
+						"\nMFI");
+	}
+	
+	@Test
+	public void shouldRetrieveEmailConfigurationEntity() {
+		logger.info("Create and retrieve Email Gateway configuration");
+		EmailConfiguration sampleRetrieved = this.notificationManager.findEmailConfigurationByIdentifier(configIdentifier);
+		Assert.assertNotNull(sampleRetrieved);
+		Assert.assertEquals(sampleRetrieved.getIdentifier(), configIdentifier);
+	}
+	
+	@Test
+	public void shouldCreateNewEmailConfigurationEntity() throws InterruptedException{
+		logger.info("Create Email Gateway configuration");
+		this.notificationManager.createEmailConfiguration(DomainObjectGenerator.emailConfiguration());
+		
+		eventRecorder.wait(NotificationEventConstants.POST_EMAIL_CONFIGURATION,EmailConfiguration.class);
+	}
+	
+	@Test(expected = NotFoundException.class)
+	public void emailConfigurationNotFound() throws CustomerNotFoundException {
+		logger.info("Configuration not found");
+		try {
+			this.notificationManager.findEmailConfigurationByIdentifier(RandomStringUtils.randomAlphanumeric(8));
+		} catch (final ConfigurationNotFoundException ex) {
+			logger.info("Error Asserted");
+		}
+	}
+	
+	@Test
+	public void checkEmailConfigurationEntityExist() {
+		logger.info("Email Gateway configuration Exist");
+		Assert.assertTrue(this.notificationService.emailConfigurationExists(configIdentifier));
+	}
+}
diff --git a/component-test/src/main/java/org/apache/fineract/cn/notification/TestNotification.java b/component-test/src/main/java/org/apache/fineract/cn/notification/TestNotification.java
new file mode 100644
index 0000000..6a6bf6b
--- /dev/null
+++ b/component-test/src/main/java/org/apache/fineract/cn/notification/TestNotification.java
@@ -0,0 +1,112 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification;
+
+import org.apache.fineract.cn.anubis.test.v1.TenantApplicationSecurityEnvironmentTestRule;
+import org.apache.fineract.cn.api.context.AutoUserContext;
+import org.apache.fineract.cn.notification.api.v1.events.NotificationEventConstants;
+import org.apache.fineract.cn.notification.service.NotificationConfiguration;
+import org.apache.fineract.cn.test.fixture.TenantDataStoreContextTestRule;
+import org.apache.fineract.cn.test.listener.EnableEventRecording;
+import org.apache.fineract.cn.test.listener.EventRecorder;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.ClassRule;
+import org.junit.Rule;
+import org.junit.runner.RunWith;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.cloud.netflix.feign.EnableFeignClients;
+import org.springframework.cloud.netflix.ribbon.RibbonClient;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.security.interfaces.RSAPrivateKey;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT,
+		classes = {TestNotification.TestConfiguration.class})
+public class TestNotification extends SuiteTestEnvironment {
+	
+	@ClassRule
+	public final static TenantDataStoreContextTestRule tenantDataStoreContext = TenantDataStoreContextTestRule.forRandomTenantName(cassandraInitializer, mariaDBInitializer);
+	private static final String LOGGER_NAME = "test-logger";
+	private static final String TEST_USER = "homer";
+	@SuppressWarnings("WeakerAccess")
+	@Autowired
+	@Qualifier(LOGGER_NAME)
+	Logger logger;
+	private AutoUserContext userContext;
+	@Autowired
+	private EventRecorder eventRecorder;
+	@Rule
+	public final TenantApplicationSecurityEnvironmentTestRule tenantApplicationSecurityEnvironment
+			= new TenantApplicationSecurityEnvironmentTestRule(testEnvironment, this::waitForInitialize);
+	
+	public TestNotification() {
+		super();
+	}
+	
+	@Before
+	public void prepTest() {
+		userContext = tenantApplicationSecurityEnvironment.createAutoUserContext(TestNotification.TEST_USER);
+		final RSAPrivateKey tenantPrivateKey = tenantApplicationSecurityEnvironment.getSystemSecurityEnvironment().tenantPrivateKey();
+		logger.info("tenantPrivateKey = {}", tenantPrivateKey);
+	}
+	
+	@After
+	public void cleanTest() {
+		userContext.close();
+		eventRecorder.clear();
+	}
+	
+	public boolean waitForInitialize() {
+		try {
+			return this.eventRecorder.wait(NotificationEventConstants.INITIALIZE, APP_VERSION);
+		} catch (final InterruptedException e) {
+			throw new IllegalStateException(e);
+		}
+	}
+	
+	@Configuration
+	@EnableEventRecording
+	@EnableFeignClients(basePackages = {"org.apache.fineract.cn.notification.api.v1.client"})
+	@RibbonClient(name = APP_NAME)
+	@ComponentScan({"org.apache.fineract.cn.notification.listener",
+			"org.apache.fineract.cn.notification.service.internal.service",
+			"org.apache.fineract.cn.notification.service.internal.service.helperservice"
+	})
+	@Import({NotificationConfiguration.class})
+	public static class TestConfiguration {
+		public TestConfiguration() {
+			super();
+		}
+		
+		@Bean(name = LOGGER_NAME)
+		public Logger logger() {
+			return LoggerFactory.getLogger(LOGGER_NAME);
+		}
+	}
+}
diff --git a/component-test/src/main/java/org/apache/fineract/cn/notification/TestSMSService.java b/component-test/src/main/java/org/apache/fineract/cn/notification/TestSMSService.java
new file mode 100644
index 0000000..e25a3e8
--- /dev/null
+++ b/component-test/src/main/java/org/apache/fineract/cn/notification/TestSMSService.java
@@ -0,0 +1,102 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification;
+
+import org.apache.commons.lang3.RandomStringUtils;
+import org.apache.fineract.cn.api.util.NotFoundException;
+import org.apache.fineract.cn.customer.api.v1.client.CustomerNotFoundException;
+import org.apache.fineract.cn.notification.api.v1.client.ConfigurationNotFoundException;
+import org.apache.fineract.cn.notification.api.v1.client.NotificationManager;
+import org.apache.fineract.cn.notification.api.v1.domain.EmailConfiguration;
+import org.apache.fineract.cn.notification.api.v1.domain.SMSConfiguration;
+import org.apache.fineract.cn.notification.api.v1.events.NotificationEventConstants;
+import org.apache.fineract.cn.notification.service.internal.service.NotificationService;
+import org.apache.fineract.cn.notification.util.DomainObjectGenerator;
+import org.apache.fineract.cn.test.listener.EventRecorder;
+import org.junit.Assert;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestSMSService extends TestNotification {
+	
+	@Autowired
+	private NotificationService notificationService;
+	
+	@Autowired
+	private NotificationManager notificationManager;
+	
+	@Autowired
+	private EventRecorder eventRecorder;
+	
+	private String configIdentifier = "Twilio";
+	
+	public TestSMSService() {
+		super();
+	}
+	
+	
+	@Test
+	public void shouldCreateNewSMSConfigurationEntity() throws InterruptedException{
+		logger.info("Create SMS Gateway configuration");
+		this.notificationManager.createSMSConfiguration(DomainObjectGenerator.smsConfiguration());
+		
+		eventRecorder.wait(NotificationEventConstants.POST_EMAIL_CONFIGURATION, SMSConfiguration.class);
+	}
+	
+	@Test
+	public void shouldTriggerCustomerCreated() throws InterruptedException{
+		logger.info("Create SMS Gateway configuration");
+		
+		eventRecorder.wait(NotificationEventConstants.POST_EMAIL_CONFIGURATION, SMSConfiguration.class);
+	}
+	
+	@Test(expected = NotFoundException.class)
+	public void smsConfigurationNotFound() throws CustomerNotFoundException {
+		logger.info("SMS Gateway configuration Not Found");
+		try {
+			this.notificationManager.findSMSConfigurationByIdentifier(RandomStringUtils.randomAlphanumeric(8));
+		} catch (final ConfigurationNotFoundException ex) {
+			logger.info("Error Asserted");
+		}
+	}
+	
+	@Test
+	public void sendSMS() {
+		this.logger.info("Send SMS Notification");
+		this.notificationService.sendSMS("+23058409206",
+				"Dear Valued Customer\n\nTalk is cheap show me the code\n\nBest Regards\nYour MFI");
+}
+	
+	@Test
+	public void shouldCreateAndRetrieveSMSConfigurationEntity() {
+		logger.info("Create and Retrieve SMS Gateway configuration");
+		final SMSConfiguration smsConfiguration = DomainObjectGenerator.smsConfiguration();
+		this.notificationManager.createSMSConfiguration(smsConfiguration);
+		
+		SMSConfiguration sampleRetrieved = this.notificationManager.findSMSConfigurationByIdentifier(configIdentifier);
+		Assert.assertNotNull(sampleRetrieved);
+		Assert.assertEquals(sampleRetrieved.getIdentifier(), configIdentifier);
+	}
+	
+	@Test
+	public void checkSMSConfigurationEntityExist() {
+		logger.info("SMS Gateway configuration Exist");
+		Assert.assertTrue(this.notificationService.smsConfigurationExists(configIdentifier));
+	}
+}
diff --git a/component-test/src/main/java/org/apache/fineract/cn/notification/TestSample.java b/component-test/src/main/java/org/apache/fineract/cn/notification/TestSample.java
deleted file mode 100644
index 3b2811e..0000000
--- a/component-test/src/main/java/org/apache/fineract/cn/notification/TestSample.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.fineract.cn.notification;
-
-import org.apache.fineract.cn.notification.api.v1.client.NotificationManager;
-import org.apache.fineract.cn.notification.api.v1.domain.Sample;
-import org.apache.fineract.cn.notification.api.v1.events.NotificationEventConstants;
-import java.util.List;
-import org.apache.commons.lang3.RandomStringUtils;
-import org.apache.fineract.cn.anubis.test.v1.TenantApplicationSecurityEnvironmentTestRule;
-import org.apache.fineract.cn.api.context.AutoUserContext;
-import org.apache.fineract.cn.notification.service.NotificationConfiguration;
-import org.apache.fineract.cn.test.fixture.TenantDataStoreContextTestRule;
-import org.apache.fineract.cn.test.listener.EnableEventRecording;
-import org.apache.fineract.cn.test.listener.EventRecorder;
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.ClassRule;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.cloud.netflix.feign.EnableFeignClients;
-import org.springframework.cloud.netflix.ribbon.RibbonClient;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.ComponentScan;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Import;
-import org.springframework.test.context.junit4.SpringRunner;
-
-@RunWith(SpringRunner.class)
-@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
-public class TestSample extends SuiteTestEnvironment {
-  private static final String LOGGER_NAME = "test-logger";
-  private static final String TEST_USER = "homer";
-
-
-  @Configuration
-  @EnableEventRecording
-  @EnableFeignClients(basePackages = {"org.apache.fineract.cn.notification.api.v1.client"})
-  @RibbonClient(name = APP_NAME)
-  @Import({NotificationConfiguration.class})
-  @ComponentScan("org.apache.fineract.cn.notification.listener")
-  public static class TestConfiguration {
-    public TestConfiguration() {
-      super();
-    }
-
-    @Bean(name = LOGGER_NAME)
-    public Logger logger() {
-      return LoggerFactory.getLogger(LOGGER_NAME);
-    }
-  }
-
-  @ClassRule
-  public final static TenantDataStoreContextTestRule tenantDataStoreContext = TenantDataStoreContextTestRule.forRandomTenantName(cassandraInitializer, mariaDBInitializer);
-
-  @Rule
-  public final TenantApplicationSecurityEnvironmentTestRule tenantApplicationSecurityEnvironment
-          = new TenantApplicationSecurityEnvironmentTestRule(testEnvironment, this::waitForInitialize);
-
-  private AutoUserContext userContext;
-
-  @Autowired
-  private NotificationManager testSubject;
-
-  @Autowired
-  private EventRecorder eventRecorder;
-
-  @SuppressWarnings("WeakerAccess")
-  @Autowired
-  @Qualifier(LOGGER_NAME)
-  Logger logger;
-
-  public TestSample() {
-    super();
-  }
-
-  @Before
-  public void prepTest() {
-    userContext = tenantApplicationSecurityEnvironment.createAutoUserContext(TestSample.TEST_USER);
-  }
-
-  @After
-  public void cleanTest() {
-    userContext.close();
-    eventRecorder.clear();
-  }
-
-  public boolean waitForInitialize() {
-    try {
-      return this.eventRecorder.wait(NotificationEventConstants.INITIALIZE, APP_VERSION);
-    } catch (final InterruptedException e) {
-      throw new IllegalStateException(e);
-    }
-  }
-
-  @Test
-  public void shouldCreateSample() throws InterruptedException {
-    logger.info("Running test shouldCreateSample.");
-    final Sample sample = Sample.create(RandomStringUtils.randomAlphanumeric(8), RandomStringUtils.randomAlphanumeric(512));
-    this.testSubject.createEntity(sample);
-
-    Assert.assertTrue(this.eventRecorder.wait(NotificationEventConstants.POST_SAMPLE, sample.getIdentifier()));
-
-    final Sample createdSample = this.testSubject.getEntity(sample.getIdentifier());
-    Assert.assertEquals(sample, createdSample);
-  }
-
-  @Test
-  public void shouldListSamples() {
-    logger.info("Running test shouldListSamples.");
-    final List<Sample> allEntities = this.testSubject.findAllEntities();
-    Assert.assertNotNull(allEntities);
-  }
-}
diff --git a/component-test/src/main/java/org/apache/fineract/cn/notification/TestSuite.java b/component-test/src/main/java/org/apache/fineract/cn/notification/TestSuite.java
index a4d42bf..868e949 100644
--- a/component-test/src/main/java/org/apache/fineract/cn/notification/TestSuite.java
+++ b/component-test/src/main/java/org/apache/fineract/cn/notification/TestSuite.java
@@ -23,8 +23,8 @@
 
 @RunWith(Suite.class)
 @Suite.SuiteClasses({
-    TestSample.class,
-    //TODO: when you create a new component test, add it here so you can run it with the suite.
+		TestEmailService.class,
+		TestSMSService.class,
 })
 public class TestSuite extends SuiteTestEnvironment {
 }
diff --git a/component-test/src/main/java/org/apache/fineract/cn/notification/listener/MigrationEventListener.java b/component-test/src/main/java/org/apache/fineract/cn/notification/listener/MigrationEventListener.java
index c24b97c..38e2c8d 100644
--- a/component-test/src/main/java/org/apache/fineract/cn/notification/listener/MigrationEventListener.java
+++ b/component-test/src/main/java/org/apache/fineract/cn/notification/listener/MigrationEventListener.java
@@ -29,22 +29,22 @@
 @SuppressWarnings("unused")
 @Component
 public class MigrationEventListener {
-
-  private final EventRecorder eventRecorder;
-
-  @Autowired
-  public MigrationEventListener(@SuppressWarnings("SpringJavaAutowiringInspection") final EventRecorder eventRecorder) {
-    super();
-    this.eventRecorder = eventRecorder;
-  }
-
-  @JmsListener(
-      subscription = NotificationEventConstants.DESTINATION,
-      destination = NotificationEventConstants.DESTINATION,
-      selector = NotificationEventConstants.SELECTOR_INITIALIZE
-  )
-  public void onInitialization(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                               final String payload) {
-    this.eventRecorder.event(tenant, NotificationEventConstants.INITIALIZE, payload, String.class);
-  }
+	
+	private final EventRecorder eventRecorder;
+	
+	@Autowired
+	public MigrationEventListener(@SuppressWarnings("SpringJavaAutowiringInspection") final EventRecorder eventRecorder) {
+		super();
+		this.eventRecorder = eventRecorder;
+	}
+	
+	@JmsListener(
+			subscription = NotificationEventConstants.DESTINATION,
+			destination = NotificationEventConstants.DESTINATION,
+			selector = NotificationEventConstants.SELECTOR_INITIALIZE
+	)
+	public void onInitialization(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+	                             final String payload) {
+		this.eventRecorder.event(tenant, NotificationEventConstants.INITIALIZE, payload, String.class);
+	}
 }
diff --git a/component-test/src/main/java/org/apache/fineract/cn/notification/listener/SampleEventListener.java b/component-test/src/main/java/org/apache/fineract/cn/notification/listener/NotificationEventListener.java
similarity index 52%
rename from component-test/src/main/java/org/apache/fineract/cn/notification/listener/SampleEventListener.java
rename to component-test/src/main/java/org/apache/fineract/cn/notification/listener/NotificationEventListener.java
index 85abe9e..838b2c7 100644
--- a/component-test/src/main/java/org/apache/fineract/cn/notification/listener/SampleEventListener.java
+++ b/component-test/src/main/java/org/apache/fineract/cn/notification/listener/NotificationEventListener.java
@@ -28,23 +28,33 @@
 
 @SuppressWarnings("unused")
 @Component
-public class SampleEventListener {
-
-  private final EventRecorder eventRecorder;
-
-  @Autowired
-  public SampleEventListener(@SuppressWarnings("SpringJavaAutowiringInspection") final EventRecorder eventRecorder) {
-    super();
-    this.eventRecorder = eventRecorder;
-  }
-
-  @JmsListener(
-      subscription = NotificationEventConstants.DESTINATION,
-      destination = NotificationEventConstants.DESTINATION,
-      selector = NotificationEventConstants.SELECTOR_POST_SAMPLE
-  )
-  public void onCreateSample(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                             final String payload) {
-    this.eventRecorder.event(tenant, NotificationEventConstants.POST_SAMPLE, payload, String.class);
-  }
+public class NotificationEventListener {
+	
+	private final EventRecorder eventRecorder;
+	
+	@Autowired
+	public NotificationEventListener(@SuppressWarnings("SpringJavaAutowiringInspection") final EventRecorder eventRecorder) {
+		super();
+		this.eventRecorder = eventRecorder;
+	}
+	
+	@JmsListener(
+			subscription = NotificationEventConstants.DESTINATION,
+			destination = NotificationEventConstants.DESTINATION,
+			selector = NotificationEventConstants.SELECTOR_POST_SMS_NOTIFICATION
+	)
+	public void onPostSMS(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+	                      final String payload) {
+		this.eventRecorder.event(tenant, NotificationEventConstants.POST_SMS_NOTIFICATION, payload, String.class);
+	}
+	
+	@JmsListener(
+			subscription = NotificationEventConstants.DESTINATION,
+			destination = NotificationEventConstants.DESTINATION,
+			selector = NotificationEventConstants.SELECTOR_POST_SMS_CONFIGURATION
+	)
+	public void onCreateSMSConfiguration(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+	                                     final String payload) {
+		this.eventRecorder.event(tenant, NotificationEventConstants.POST_SMS_NOTIFICATION, payload, String.class);
+	}
 }
diff --git a/component-test/src/main/java/org/apache/fineract/cn/notification/util/DomainObjectGenerator.java b/component-test/src/main/java/org/apache/fineract/cn/notification/util/DomainObjectGenerator.java
new file mode 100644
index 0000000..d323eea
--- /dev/null
+++ b/component-test/src/main/java/org/apache/fineract/cn/notification/util/DomainObjectGenerator.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.util;
+/*
+ebenezergraham created on 8/20/18
+*/
+
+import org.apache.commons.lang.RandomStringUtils;
+import org.apache.fineract.cn.notification.api.v1.domain.EmailConfiguration;
+import org.apache.fineract.cn.notification.api.v1.domain.SMSConfiguration;
+
+public class DomainObjectGenerator {
+	
+	public static EmailConfiguration emailConfiguration() {
+		EmailConfiguration emailConfiguration = EmailConfiguration.create("emailtest",
+				"smtp.google.com",
+				"1233",
+				"smtp",
+				"example",
+				RandomStringUtils.randomAlphanumeric(16),
+				"true",
+				"true",
+				"ACTIVE");
+		return emailConfiguration;
+	}
+	
+	public static SMSConfiguration smsConfiguration() {
+		SMSConfiguration smsConfiguration = SMSConfiguration.create(
+				RandomStringUtils.randomAlphanumeric(8),
+				RandomStringUtils.randomAlphanumeric(16),
+				RandomStringUtils.randomAlphanumeric(16),
+				"+309483932",
+				"ACTIVE");
+		
+		return smsConfiguration;
+	}
+}
diff --git a/service/build.gradle b/service/build.gradle
index 42b1c6f..cb2d88c 100644
--- a/service/build.gradle
+++ b/service/build.gradle
@@ -45,20 +45,13 @@ springBoot {
 
 dependencies {
     compile(
-            [group: 'com.twilio.sdk', name: 'twilio', version: '7.17.+'],
-            [group: 'org.springframework.boot', name: 'spring-boot-starter-mail', version: '1.4.3.RELEASE'],
+            [group: 'com.twilio.sdk', name: 'twilio', version: versions.twilioapi],
+            [group: 'org.springframework.boot', name: 'spring-boot-starter-mail', version: versions.springjavamail],
 
             [group: 'org.apache.fineract.cn.customer', name: 'api', version: versions.fineractcncustomer],
-            [group: 'org.apache.fineract.cn.office', name: 'api', version: versions.fineractcnoffice],
             [group: 'org.apache.fineract.cn.portfolio', name: 'api', version: versions.fineractcnportfolio],
-            [group: 'org.apache.fineract.cn.group', name: 'api', version: versions.fineractcngroup],
-
-            //[group: 'org.apache.fineract.cn.deposit-account-management', name: 'api', version: versions.fineractcndeposit],
-            //[group: 'org.apache.fineract.cn.teller', name: 'api', version: versions.fineractcnteller],
-            //[group: 'org.apache.fineract.cn.reporting', name: 'api', version: versions.fineractcnreporting],
-            //[group: 'org.apache.fineract.cn.cheques', name: 'api', version: versions.kuelapcheques],
-            //[group: 'org.apache.fineract.cn.payroll', name: 'api', version: versions.fineractcnpayroll],
-            //[group: 'org.apache.fineract.cn.notification', name: 'api', version: versions.fineractcnnotification],
+            [group: 'org.apache.fineract.cn.office', name: 'api', version: versions.fineractcnoffice],
+            [group: 'org.apache.fineract.cn.identity', name: 'api', version: versions.fineractcnidentity],
 
             [group: 'org.springframework.cloud', name: 'spring-cloud-starter-config'],
             [group: 'org.springframework.cloud', name: 'spring-cloud-starter-eureka'],
diff --git a/service/out/production/resources/application.yml b/service/out/production/resources/application.yml
index 37acaaf..fa7165e 100644
--- a/service/out/production/resources/application.yml
+++ b/service/out/production/resources/application.yml
@@ -23,6 +23,20 @@ spring:
       enabled: false
     config:
       enabled: false
+    mail:
+      host: smtp.gmail.com
+      port: 587
+      username:
+      password:
+      properties:
+        debug: true
+        mail:
+          smtp:
+            auth: true
+            starttls:
+              enable: true
+
+
 
 eureka:
   client:
@@ -68,11 +82,7 @@ async:
 flyway:
   enabled: false
 
-fineract:
-  customer:
-    accountcreated:
-      message: Dear Valued Customer, Your account has been created.
-    accountclosed:
-      message: Dear Valued Customer, Your account has been successfully closed.
-
-
+smssender:
+  accountSID: AC1fde2c6f26f367b93231c5fdb944c908
+  authToken: bc9a53e41745b8471e0ecafc859d86aa
+  senderNumber: +1 510-944-1898
diff --git a/service/out/production/resources/db/migrations/mariadb/V1__initial_setup.sql b/service/out/production/resources/db/migrations/mariadb/V1__initial_setup.sql
index ff9a61f..57cefe1 100644
--- a/service/out/production/resources/db/migrations/mariadb/V1__initial_setup.sql
+++ b/service/out/production/resources/db/migrations/mariadb/V1__initial_setup.sql
@@ -18,55 +18,39 @@
 --
 
 -- -----------------------------------------------------
--- Table `fineract-cn-notification`.`email_gateway_configurations`
+-- Table wada_sms_gateway_configurations
 -- -----------------------------------------------------
-CREATE TABLE IF NOT EXISTS `fineract-cn-notification`.`email_gateway_configurations` (
-  `id` INT(11) NOT NULL AUTO_INCREMENT,
-  `identifer` VARCHAR(45) NULL DEFAULT NULL,
-  `host` VARCHAR(45) NOT NULL,
-  `port` VARCHAR(45) NOT NULL,
-  `username` VARCHAR(45) NOT NULL,
-  `app_id` VARCHAR(45) NOT NULL,
-  PRIMARY KEY (`id`))
-ENGINE = InnoDB
-DEFAULT CHARACTER SET = latin1;
-
+CREATE TABLE wada_sms_gateway_configurations (
+  id INT(11) NOT NULL AUTO_INCREMENT,
+  identifier VARCHAR(45) NULL DEFAULT NULL,
+  account_sid VARCHAR(255) NOT NULL,
+  auth_token VARCHAR(255) NOT NULL,
+  sender_number VARCHAR(45) NOT NULL,
+  state VARCHAR(45) NULL DEFAULT NULL,
+  PRIMARY KEY (id));
 
 -- -----------------------------------------------------
--- Table `fineract-cn-notification`.`sms_gateway_configurations`
+-- Table wada_email_gateway_configurations
 -- -----------------------------------------------------
-CREATE TABLE IF NOT EXISTS `fineract-cn-notification`.`sms_gateway_configurations` (
-  `id` INT(11) NOT NULL AUTO_INCREMENT,
-  `identifier` VARCHAR(45) NULL DEFAULT NULL,
-  `accountsid` VARCHAR(255) NOT NULL,
-  `auth_token` VARCHAR(255) NOT NULL,
-  `option` VARCHAR(45) NULL DEFAULT NULL,
-  PRIMARY KEY (`id`))
-ENGINE = InnoDB
-DEFAULT CHARACTER SET = latin1;
-
+CREATE TABLE wada_email_gateway_configurations (
+  id INT(11) NOT NULL AUTO_INCREMENT,
+  identifier VARCHAR(45) NULL DEFAULT NULL,
+  host VARCHAR(45) NOT NULL,
+  port VARCHAR(45) NOT NULL,
+  username VARCHAR(45) NOT NULL,
+  app_password VARCHAR(255) NOT NULL,
+  protocol VARCHAR(45)NOT NULL,
+  smtp_auth VARCHAR (45)NOT NULL,
+  start_tls VARCHAR (45)NOT NULL,
+  state VARCHAR(45)NOT NULL,
+  PRIMARY KEY (id));
 
 -- -----------------------------------------------------
--- Table `fineract-cn-notification`.`templates`
+-- Table wada_templates
 -- -----------------------------------------------------
-CREATE TABLE IF NOT EXISTS `fineract-cn-notification`.`templates` (
-  `id` INT(11) NOT NULL AUTO_INCREMENT,
-  PRIMARY KEY (`id`))
-ENGINE = InnoDB
-DEFAULT CHARACTER SET = latin1;
-
--- ------------------------------------------------------
-
-CREATE TABLE sample (
-  id BIGINT NOT NULL AUTO_INCREMENT,
-  identifier VARCHAR(8) NOT NULL,
-  payload VARCHAR(512) NULL,
-  CONSTRAINT notification_pk PRIMARY KEY (id)
-);
-
-CREATE TABLE template_sample (
-  id BIGINT NOT NULL AUTO_INCREMENT,
-  identifier VARCHAR(8) NOT NULL,
-  payload VARCHAR(512) NULL,
-  CONSTRAINT template_sample_pk PRIMARY KEY (id)
-);
\ No newline at end of file
+CREATE TABLE wada_templates (
+  id INT(11) NOT NULL AUTO_INCREMENT,
+  identifier VARCHAR(45) NULL DEFAULT NULL,
+  event VARCHAR(45) NULL DEFAULT NULL,
+  url VARCHAR(255) NOT NULL,
+  PRIMARY KEY (id));
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/NotificationApplication.java b/service/src/main/java/org/apache/fineract/cn/notification/service/NotificationApplication.java
index 5968d0d..29d448b 100644
--- a/service/src/main/java/org/apache/fineract/cn/notification/service/NotificationApplication.java
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/NotificationApplication.java
@@ -21,12 +21,12 @@
 import org.springframework.boot.SpringApplication;
 
 public class NotificationApplication {
-
-  public NotificationApplication() {
-    super();
-  }
-
-  public static void main(String[] args) {
-    SpringApplication.run(NotificationConfiguration.class, args);
-  }
+	
+	public NotificationApplication() {
+		super();
+	}
+	
+	public static void main(String[] args) {
+		SpringApplication.run(NotificationConfiguration.class, args);
+	}
 }
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/NotificationConfiguration.java b/service/src/main/java/org/apache/fineract/cn/notification/service/NotificationConfiguration.java
index cdc55ce..4f9a63c 100644
--- a/service/src/main/java/org/apache/fineract/cn/notification/service/NotificationConfiguration.java
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/NotificationConfiguration.java
@@ -18,32 +18,37 @@
  */
 package org.apache.fineract.cn.notification.service;
 
+import org.apache.activemq.command.ActiveMQTopic;
+import org.apache.activemq.jms.pool.PooledConnectionFactory;
+import org.apache.activemq.spring.ActiveMQConnectionFactory;
+import org.apache.fineract.cn.identity.api.v1.client.IdentityManager;
 import org.apache.fineract.cn.anubis.config.EnableAnubis;
 import org.apache.fineract.cn.async.config.EnableAsync;
 import org.apache.fineract.cn.cassandra.config.EnableCassandra;
 import org.apache.fineract.cn.command.config.EnableCommandProcessing;
+import org.apache.fineract.cn.customer.api.v1.client.CustomerManager;
+import org.apache.fineract.cn.lang.ApplicationName;
 import org.apache.fineract.cn.lang.config.EnableServiceException;
 import org.apache.fineract.cn.lang.config.EnableTenantContext;
 import org.apache.fineract.cn.mariadb.config.EnableMariaDB;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
-import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.boot.autoconfigure.domain.EntityScan;
 import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.cloud.netflix.feign.EnableFeignClients;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.core.env.Environment;
 import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
 import org.springframework.jms.annotation.EnableJms;
 import org.springframework.jms.config.DefaultJmsListenerContainerFactory;
-import org.springframework.mail.javamail.JavaMailSender;
-import org.springframework.mail.javamail.JavaMailSenderImpl;
+import org.springframework.jms.config.JmsListenerContainerFactory;
+import org.springframework.jms.core.JmsTemplate;
 import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
 
-import java.util.Properties;
-
 @SuppressWarnings("WeakerAccess")
 @Configuration
 @EnableAutoConfiguration
@@ -56,55 +61,75 @@
 @EnableAnubis
 @EnableServiceException
 @EnableJms
+@EnableFeignClients(
+		clients = {
+				CustomerManager.class,
+				IdentityManager.class
+		}
+)
 @ComponentScan({
-    "org.apache.fineract.cn.notification.service.rest",
-    "org.apache.fineract.cn.notification.service.internal.service",
-    "org.apache.fineract.cn.notification.service.internal.repository",
-    "org.apache.fineract.cn.notification.service.internal.command.handler"
-})
+		"org.apache.fineract.cn.notification.service.rest",
+		"org.apache.fineract.cn.notification.service.listener",
+		"org.apache.fineract.cn.notification.service.internal.service",
+		"org.apache.fineract.cn.notification.service.internal.repository",
+		"org.apache.fineract.cn.notification.service.internal.command.handler",
+}
+)
 @EnableJpaRepositories({
-    "org.apache.fineract.cn.notification.service.internal.repository"
+		"org.apache.fineract.cn.notification.service.internal.repository"
 })
+@EntityScan(basePackages = "org.apache.fineract.cn.notification.service.internal.repository")
 public class NotificationConfiguration extends WebMvcConfigurerAdapter {
-
-  public NotificationConfiguration() {
-    super();
-  }
-
-  @Bean(name = ServiceConstants.LOGGER_NAME)
-  public Logger logger() {
-    return LoggerFactory.getLogger(ServiceConstants.LOGGER_NAME);
-  }
-
-//  @Bean
-//  public DefaultJmsListenerContainerFactory myJmsListenerContainerFactory() {
-//    DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
-//    return factory;
-//  }
-  @Override
-  public void configurePathMatch(final PathMatchConfigurer configurer) {
-    configurer.setUseSuffixPatternMatch(Boolean.FALSE);
-  }
-
-
-
-  @Bean
-  @Qualifier("gmail")
-  public JavaMailSender getJavaMailSender() {
-
-    JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
-    mailSender.setHost("smtp.gmail.com");
-    mailSender.setPort(587);
-
-    mailSender.setUsername("ebenezergraham69@gmail.com");
-    mailSender.setPassword("fdzmzbhbmtkafzvq");
-
-    Properties props = mailSender.getJavaMailProperties();
-    props.put("mail.transport.protocol", "smtp");
-    props.put("mail.smtp.auth", "true");
-    props.put("mail.smtp.starttls.enable", "true");
-    props.put("mail.debug", "true");
-
-    return mailSender;
-  }
+	
+	private final Environment environment;
+	
+	public NotificationConfiguration(Environment environment) {
+		super();
+		this.environment = environment;
+	}
+	
+	
+	@Override
+	public void configurePathMatch(final PathMatchConfigurer configurer) {
+		configurer.setUseSuffixPatternMatch(Boolean.FALSE);
+	}
+	
+	@Bean
+	public PooledConnectionFactory jmsFactory() {
+		PooledConnectionFactory pooledConnectionFactory = new PooledConnectionFactory();
+		ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory();
+		activeMQConnectionFactory.setBrokerURL(this.environment.getProperty("activemq.brokerUrl", "vm://localhost?broker.persistent=falseac"));
+		pooledConnectionFactory.setConnectionFactory(activeMQConnectionFactory);
+		return pooledConnectionFactory;
+	}
+	
+	@Bean
+	public JmsListenerContainerFactory jmsListenerContainerFactory(PooledConnectionFactory jmsFactory) {
+		DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
+		factory.setPubSubDomain(true);
+		factory.setConnectionFactory(jmsFactory);
+		factory.setErrorHandler(ex -> {
+			loggerBean().error(ex.getCause().toString());
+		});
+		factory.setConcurrency(this.environment.getProperty("activemq.concurrency", "1-1"));
+		return factory;
+	}
+	
+	@Bean
+	public JmsTemplate jmsTemplate(ApplicationName applicationName, PooledConnectionFactory jmsFactory) {
+		ActiveMQTopic activeMQTopic = new ActiveMQTopic(applicationName.toString());
+		JmsTemplate jmsTemplate = new JmsTemplate();
+		jmsTemplate.setPubSubDomain(true);
+		jmsTemplate.setConnectionFactory(jmsFactory);
+		jmsTemplate.setDefaultDestination(activeMQTopic);
+		return jmsTemplate;
+	}
+	
+	@Bean(
+			name = {ServiceConstants.LOGGER_NAME}
+	)
+	public Logger loggerBean() {
+		return LoggerFactory.getLogger(ServiceConstants.LOGGER_NAME);
+	}
+	
 }
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/ServiceConstants.java b/service/src/main/java/org/apache/fineract/cn/notification/service/ServiceConstants.java
index cb4e902..dc96c42 100644
--- a/service/src/main/java/org/apache/fineract/cn/notification/service/ServiceConstants.java
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/ServiceConstants.java
@@ -19,5 +19,12 @@
 package org.apache.fineract.cn.notification.service;
 
 public interface ServiceConstants {
-  String LOGGER_NAME = "rest-logger";
+	String LOGGER_NAME = "notification-logger";
+	
+	String MAIL_TRANSPORT_PROTOCOL_PROPERTY = "mail.transport.protocol";
+	String MAIL_TRANSPORT_PROTOCOL_VALUE = "smtp";
+	String MAIL_SMTP_AUTH_PROPERTY = "mail.smtp.auth";
+	String MAIL_SMTP_AUTH_VALUE = "true";
+	String MAIL_SMTP_STARTTLS_ENABLE_PROPERTY = "mail.smtp.starttls.enable";
+	String MAIL_SMTP_STARTTLS_ENABLE_VALUE = "true";
 }
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/CreateEmailConfigurationCommand.java b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/CreateEmailConfigurationCommand.java
new file mode 100644
index 0000000..828ba4e
--- /dev/null
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/CreateEmailConfigurationCommand.java
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.service.internal.command;
+
+import org.apache.fineract.cn.notification.api.v1.domain.EmailConfiguration;
+
+public class CreateEmailConfigurationCommand {
+	
+	private final EmailConfiguration emailConfiguration;
+	
+	public CreateEmailConfigurationCommand(final EmailConfiguration emailConfiguration) {
+		super();
+		this.emailConfiguration = emailConfiguration;
+	}
+	
+	public EmailConfiguration getEmailConfiguration() {
+		return this.emailConfiguration;
+	}
+	
+	@Override
+	public String toString() {
+		return "CreateEmailConfigurationCommand{"
+				+ "EmailConfiguration=" + emailConfiguration.getIdentifier()
+				+ '}';
+	}
+}
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/CreateSMSConfigurationCommand.java b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/CreateSMSConfigurationCommand.java
new file mode 100644
index 0000000..ef206c8
--- /dev/null
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/CreateSMSConfigurationCommand.java
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.service.internal.command;
+
+import org.apache.fineract.cn.notification.api.v1.domain.SMSConfiguration;
+
+public class CreateSMSConfigurationCommand {
+	
+	private final SMSConfiguration smsConfiguration;
+	
+	public CreateSMSConfigurationCommand(final SMSConfiguration smsConfiguration) {
+		super();
+		this.smsConfiguration = smsConfiguration;
+	}
+	
+	public SMSConfiguration getSMSConfiguration() {
+		return this.smsConfiguration;
+	}
+	
+	@Override
+	public String toString() {
+		return "CreateSMSConfigurationCommand{"
+				+ "SMSConfiguration=" + smsConfiguration.getIdentifier()
+				+ '}';
+	}
+}
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/InitializeServiceCommand.java b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/InitializeServiceCommand.java
index 21335ac..9ab4d6f 100644
--- a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/InitializeServiceCommand.java
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/InitializeServiceCommand.java
@@ -19,13 +19,13 @@
 package org.apache.fineract.cn.notification.service.internal.command;
 
 public class InitializeServiceCommand {
-
-  public InitializeServiceCommand() {
-    super();
-  }
-
-  @Override
-  public String toString() {
-    return "InitializeServiceCommand{}";
-  }
+	
+	public InitializeServiceCommand() {
+		super();
+	}
+	
+	@Override
+	public String toString() {
+		return "InitializeServiceCommand{}";
+	}
 }
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/SampleCommand.java b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/PostSMSCommand.java
similarity index 68%
rename from service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/SampleCommand.java
rename to service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/PostSMSCommand.java
index 3fa3aac..2ffc416 100644
--- a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/SampleCommand.java
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/PostSMSCommand.java
@@ -18,25 +18,23 @@
  */
 package org.apache.fineract.cn.notification.service.internal.command;
 
-import org.apache.fineract.cn.notification.api.v1.domain.Sample;
-
-public class SampleCommand {
-
-  private final Sample sample;
-
-  public SampleCommand(final Sample sample) {
-    super();
-    this.sample = sample;
-  }
-
-  public Sample sample() {
-    return this.sample;
-  }
-
-  @Override
-  public String toString() {
-    return "SampleCommand{" +
-        "sample=" + sample.getIdentifier() +
-        '}';
-  }
+public class PostSMSCommand {
+	
+	private final String identifier;
+	
+	public PostSMSCommand(final String identifier) {
+		super();
+		this.identifier = identifier;
+	}
+	
+	public String getIdentifier() {
+		return this.identifier;
+	}
+	
+	@Override
+	public String toString() {
+		return "PostSMSCommand{"
+				+ "PostSMS=" + identifier
+				+ '}';
+	}
 }
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/handler/EmailConfigurationAggregate.java b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/handler/EmailConfigurationAggregate.java
new file mode 100644
index 0000000..6cc80d0
--- /dev/null
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/handler/EmailConfigurationAggregate.java
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.service.internal.command.handler;
+
+import org.apache.fineract.cn.command.annotation.Aggregate;
+import org.apache.fineract.cn.command.annotation.CommandHandler;
+import org.apache.fineract.cn.command.annotation.CommandLogLevel;
+import org.apache.fineract.cn.command.annotation.EventEmitter;
+import org.apache.fineract.cn.notification.api.v1.domain.EmailConfiguration;
+import org.apache.fineract.cn.notification.api.v1.events.NotificationEventConstants;
+import org.apache.fineract.cn.notification.service.internal.command.CreateEmailConfigurationCommand;
+import org.apache.fineract.cn.notification.service.internal.mapper.EmailConfigurationMapper;
+import org.apache.fineract.cn.notification.service.internal.repository.EmailGatewayConfigurationEntity;
+import org.apache.fineract.cn.notification.service.internal.repository.EmailGatewayConfigurationRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+@SuppressWarnings("unused")
+@Aggregate
+public class EmailConfigurationAggregate {
+	
+	private final EmailGatewayConfigurationRepository emailGatewayConfigurationRepository;
+	
+	@Autowired
+	public EmailConfigurationAggregate(EmailGatewayConfigurationRepository emailGatewayConfigurationRepository) {
+		super();
+		this.emailGatewayConfigurationRepository = emailGatewayConfigurationRepository;
+	}
+	
+	@CommandHandler(logStart = CommandLogLevel.DEBUG, logFinish = CommandLogLevel.DEBUG)
+	@Transactional
+	@EventEmitter(selectorName = NotificationEventConstants.SELECTOR_NAME, selectorValue = NotificationEventConstants.POST_EMAIL_CONFIGURATION)
+	public String createEmailConfiguration(final CreateEmailConfigurationCommand createEmailConfigurationCommand) {
+		
+		EmailConfiguration emailConfiguration = createEmailConfigurationCommand.getEmailConfiguration();
+		final EmailGatewayConfigurationEntity entity = EmailConfigurationMapper.map(emailConfiguration);
+		this.emailGatewayConfigurationRepository.save(entity);
+		
+		return emailConfiguration.getIdentifier();
+	}
+}
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/handler/EventsAggregate.java b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/handler/EventsAggregate.java
new file mode 100644
index 0000000..27f129b
--- /dev/null
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/handler/EventsAggregate.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.service.internal.command.handler;
+
+import org.apache.fineract.cn.command.annotation.Aggregate;
+import org.apache.fineract.cn.command.annotation.CommandHandler;
+import org.apache.fineract.cn.command.annotation.CommandLogLevel;
+import org.apache.fineract.cn.command.annotation.EventEmitter;
+import org.apache.fineract.cn.notification.api.v1.domain.SMSConfiguration;
+import org.apache.fineract.cn.notification.api.v1.events.NotificationEventConstants;
+import org.apache.fineract.cn.notification.service.internal.command.CreateSMSConfigurationCommand;
+import org.apache.fineract.cn.notification.service.internal.command.PostSMSCommand;
+import org.apache.fineract.cn.notification.service.internal.mapper.SMSConfigurationMapper;
+import org.apache.fineract.cn.notification.service.internal.repository.SMSGatewayConfigurationEntity;
+import org.apache.fineract.cn.notification.service.internal.repository.SMSGatewayConfigurationRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+@SuppressWarnings("unused")
+@Aggregate
+public class EventsAggregate {
+	
+	public EventsAggregate() {
+		super();
+	}
+	
+	@CommandHandler(logStart = CommandLogLevel.INFO, logFinish = CommandLogLevel.INFO)
+	@Transactional
+	@EventEmitter(selectorName = NotificationEventConstants.SELECTOR_NAME, selectorValue = NotificationEventConstants.POST_SMS_NOTIFICATION)
+	public String postSMS(final PostSMSCommand postSMSCommand) {
+		return postSMSCommand.getIdentifier();
+	}
+}
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/handler/MigrationAggregate.java b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/handler/MigrationAggregate.java
index da7cc6e..1abc754 100644
--- a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/handler/MigrationAggregate.java
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/handler/MigrationAggregate.java
@@ -18,50 +18,51 @@
  */
 package org.apache.fineract.cn.notification.service.internal.command.handler;
 
-import org.apache.fineract.cn.notification.api.v1.events.NotificationEventConstants;
-import org.apache.fineract.cn.notification.service.ServiceConstants;
-import org.apache.fineract.cn.notification.service.internal.command.InitializeServiceCommand;
-import javax.sql.DataSource;
 import org.apache.fineract.cn.command.annotation.Aggregate;
 import org.apache.fineract.cn.command.annotation.CommandHandler;
 import org.apache.fineract.cn.command.annotation.CommandLogLevel;
 import org.apache.fineract.cn.command.annotation.EventEmitter;
 import org.apache.fineract.cn.lang.ApplicationName;
 import org.apache.fineract.cn.mariadb.domain.FlywayFactoryBean;
+import org.apache.fineract.cn.notification.api.v1.events.NotificationEventConstants;
+import org.apache.fineract.cn.notification.service.ServiceConstants;
+import org.apache.fineract.cn.notification.service.internal.command.InitializeServiceCommand;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.sql.DataSource;
+
 @SuppressWarnings({
-    "unused"
+		"unused"
 })
 @Aggregate
 public class MigrationAggregate {
-
-  private final Logger logger;
-  private final DataSource dataSource;
-  private final FlywayFactoryBean flywayFactoryBean;
-  private final ApplicationName applicationName;
-
-  @Autowired
-  public MigrationAggregate(@Qualifier(ServiceConstants.LOGGER_NAME) final Logger logger,
-                            final DataSource dataSource,
-                            final FlywayFactoryBean flywayFactoryBean,
-                            final ApplicationName applicationName) {
-    super();
-    this.logger = logger;
-    this.dataSource = dataSource;
-    this.flywayFactoryBean = flywayFactoryBean;
-    this.applicationName = applicationName;
-  }
-
-  @CommandHandler(logStart = CommandLogLevel.INFO, logFinish = CommandLogLevel.INFO)
-  @Transactional
-  @EventEmitter(selectorName = NotificationEventConstants.SELECTOR_NAME, selectorValue = NotificationEventConstants.INITIALIZE)
-  public String initialize(final InitializeServiceCommand initializeServiceCommand) {
-    this.logger.debug("Start service migration.");
-    this.flywayFactoryBean.create(this.dataSource).migrate();
-    return this.applicationName.getVersionString();
-  }
+	
+	private final Logger logger;
+	private final DataSource dataSource;
+	private final FlywayFactoryBean flywayFactoryBean;
+	private final ApplicationName applicationName;
+	
+	@Autowired
+	public MigrationAggregate(@Qualifier(ServiceConstants.LOGGER_NAME) final Logger logger,
+	                          final DataSource dataSource,
+	                          final FlywayFactoryBean flywayFactoryBean,
+	                          final ApplicationName applicationName) {
+		super();
+		this.logger = logger;
+		this.dataSource = dataSource;
+		this.flywayFactoryBean = flywayFactoryBean;
+		this.applicationName = applicationName;
+	}
+	
+	@CommandHandler(logStart = CommandLogLevel.INFO, logFinish = CommandLogLevel.INFO)
+	@Transactional
+	@EventEmitter(selectorName = NotificationEventConstants.SELECTOR_NAME, selectorValue = NotificationEventConstants.INITIALIZE)
+	public String initialize(final InitializeServiceCommand initializeServiceCommand) {
+		this.logger.debug("Start service migration.");
+		this.flywayFactoryBean.create(this.dataSource).migrate();
+		return this.applicationName.getVersionString();
+	}
 }
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/handler/SMSConfigurationAggregate.java b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/handler/SMSConfigurationAggregate.java
new file mode 100644
index 0000000..1d240fb
--- /dev/null
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/handler/SMSConfigurationAggregate.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.service.internal.command.handler;
+
+import org.apache.fineract.cn.command.annotation.Aggregate;
+import org.apache.fineract.cn.command.annotation.CommandHandler;
+import org.apache.fineract.cn.command.annotation.CommandLogLevel;
+import org.apache.fineract.cn.command.annotation.EventEmitter;
+import org.apache.fineract.cn.notification.api.v1.domain.SMSConfiguration;
+import org.apache.fineract.cn.notification.api.v1.events.NotificationEventConstants;
+import org.apache.fineract.cn.notification.service.internal.command.CreateSMSConfigurationCommand;
+import org.apache.fineract.cn.notification.service.internal.mapper.SMSConfigurationMapper;
+import org.apache.fineract.cn.notification.service.internal.repository.SMSGatewayConfigurationEntity;
+import org.apache.fineract.cn.notification.service.internal.repository.SMSGatewayConfigurationRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+@SuppressWarnings("unused")
+@Aggregate
+public class SMSConfigurationAggregate {
+	
+	private final SMSGatewayConfigurationRepository smsGatewayConfigurationRepository;
+	
+	@Autowired
+	public SMSConfigurationAggregate(SMSGatewayConfigurationRepository smsGatewayConfigurationRepository) {
+		super();
+		this.smsGatewayConfigurationRepository = smsGatewayConfigurationRepository;
+	}
+	
+	@CommandHandler(logStart = CommandLogLevel.INFO, logFinish = CommandLogLevel.INFO)
+	@Transactional
+	@EventEmitter(selectorName = NotificationEventConstants.SELECTOR_NAME, selectorValue = NotificationEventConstants.POST_SMS_CONFIGURATION)
+	public String createSMSConfiguration(final CreateSMSConfigurationCommand createSMSConfigurationCommand) {
+		SMSConfiguration smsConfiguration = createSMSConfigurationCommand.getSMSConfiguration();
+		final SMSGatewayConfigurationEntity entity = SMSConfigurationMapper.map(smsConfiguration);
+		this.smsGatewayConfigurationRepository.save(entity);
+		
+		return smsConfiguration.getIdentifier();
+	}
+}
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/handler/SampleAggregate.java b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/handler/SampleAggregate.java
deleted file mode 100644
index a21589d..0000000
--- a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/command/handler/SampleAggregate.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.fineract.cn.notification.service.internal.command.handler;
-
-import org.apache.fineract.cn.notification.api.v1.events.NotificationEventConstants;
-import org.apache.fineract.cn.notification.service.internal.command.SampleCommand;
-import org.apache.fineract.cn.command.annotation.Aggregate;
-import org.apache.fineract.cn.command.annotation.CommandHandler;
-import org.apache.fineract.cn.command.annotation.CommandLogLevel;
-import org.apache.fineract.cn.command.annotation.EventEmitter;
-import org.apache.fineract.cn.notification.service.internal.repository.SampleJpaEntity;
-import org.apache.fineract.cn.notification.service.internal.repository.SampleJpaEntityRepository;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.transaction.annotation.Transactional;
-
-@SuppressWarnings("unused")
-@Aggregate
-public class SampleAggregate {
-
-  private final SampleJpaEntityRepository sampleJpaEntityRepository;
-
-  @Autowired
-  public SampleAggregate(final SampleJpaEntityRepository sampleJpaEntityRepository) {
-    super();
-    this.sampleJpaEntityRepository = sampleJpaEntityRepository;
-  }
-
-  //TODO: Think about your command handler logging, then delete this comment.
-  // The log levels provided in the command handler cause log messages to be emitted each time this
-  // command handler is called before and after the call. Before the call, the command is logged
-  // using its toString() method, and after the call, the emitted event is logged via its toString()
-  // method.
-  //
-  // If you wish to adjust the information in the log messages, do so via the toString() methods.
-  // Financial transactions, passwords, and customer address data are examples of information which
-  // should not be placed in the logs.
-  //
-  // If a command handler should not emit a log message, change logStart and logFinish to:
-  // CommandLogLevel.NONE.
-  @CommandHandler(logStart = CommandLogLevel.INFO, logFinish = CommandLogLevel.INFO)
-  @Transactional
-  @EventEmitter(selectorName = NotificationEventConstants.SELECTOR_NAME, selectorValue = NotificationEventConstants.POST_SAMPLE)
-  public String sample(final SampleCommand sampleCommand) {
-
-    final SampleJpaEntity entity = new SampleJpaEntity();
-    entity.setIdentifier(sampleCommand.sample().getIdentifier());
-    entity.setPayload(sampleCommand.sample().getPayload());
-    this.sampleJpaEntityRepository.save(entity);
-
-    return sampleCommand.sample().getIdentifier();
-  }
-}
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/mapper/EmailConfigurationMapper.java b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/mapper/EmailConfigurationMapper.java
index 10e4a86..d9c5649 100644
--- a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/mapper/EmailConfigurationMapper.java
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/mapper/EmailConfigurationMapper.java
@@ -16,34 +16,51 @@
  * specific language governing permissions and limitations
  * under the License.
  */
+
 package org.apache.fineract.cn.notification.service.internal.mapper;
 
 import org.apache.fineract.cn.notification.api.v1.domain.EmailConfiguration;
-import org.apache.fineract.cn.notification.service.internal.repository.EmailGatewayConfiguration;
+import org.apache.fineract.cn.notification.service.internal.repository.EmailGatewayConfigurationEntity;
 
 import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
 
 public class EmailConfigurationMapper {
-
-  private EmailConfigurationMapper() {
-    super();
-  }
-
-  public static EmailConfiguration map(final EmailGatewayConfiguration emailGatewayConfiguration) {
-    final EmailConfiguration emailConfiguration = new EmailConfiguration();
-    emailConfiguration.setIdentifier(emailGatewayConfiguration.getIdentifier());
-    emailConfiguration.setHost(emailGatewayConfiguration.getHost());
-    emailConfiguration.setPort(emailGatewayConfiguration.getPort());
-    emailConfiguration.setUsername(emailGatewayConfiguration.getUsername());
-    emailConfiguration.setApp_id(emailGatewayConfiguration.getApp_id());
-    return emailConfiguration;
-  }
-
-//  public static List<EmailGatewayConfiguration> map(final List<EmailGatewayConfiguration> emailGatewayConfiguration) {
-//    final ArrayList<EmailGatewayConfiguration> entities = new ArrayList<>(emailGatewayConfiguration.size());
-//    entities.addAll(emailGatewayConfiguration.stream().map(EmailGatewayConfiguration::map).collect(Collectors.toList()));
-//    return entities;
-//  }
+	
+	private EmailConfigurationMapper() {
+		super();
+	}
+	
+	public static EmailConfiguration map(final EmailGatewayConfigurationEntity emailGatewayConfigurationEntity) {
+		final EmailConfiguration emailConfiguration = new EmailConfiguration();
+		emailConfiguration.setIdentifier(emailGatewayConfigurationEntity.getIdentifier());
+		emailConfiguration.setHost(emailGatewayConfigurationEntity.getHost());
+		emailConfiguration.setPort(emailGatewayConfigurationEntity.getPort());
+		emailConfiguration.setUsername(emailGatewayConfigurationEntity.getUsername());
+		emailConfiguration.setApp_password(emailGatewayConfigurationEntity.getApp_password());
+		return emailConfiguration;
+	}
+	
+	public static EmailGatewayConfigurationEntity map(final EmailConfiguration emailConfiguration) {
+		final EmailGatewayConfigurationEntity emailGatewayConfigurationEntity = new EmailGatewayConfigurationEntity();
+		emailGatewayConfigurationEntity.setIdentifier(emailConfiguration.getIdentifier());
+		emailGatewayConfigurationEntity.setHost(emailConfiguration.getHost());
+		emailGatewayConfigurationEntity.setPort(emailConfiguration.getPort());
+		emailGatewayConfigurationEntity.setProtocol(emailConfiguration.getProtocol());
+		emailGatewayConfigurationEntity.setApp_password(emailConfiguration.getApp_password());
+		emailGatewayConfigurationEntity.setUsername(emailConfiguration.getUsername());
+		emailGatewayConfigurationEntity.setSmtp_auth(emailConfiguration.getSmtp_auth());
+		emailGatewayConfigurationEntity.setStart_tls(emailConfiguration.getStart_tls());
+		emailGatewayConfigurationEntity.setState(emailConfiguration.getState());
+		return emailGatewayConfigurationEntity;
+	}
+	
+	public static List<EmailConfiguration> map(final List<EmailGatewayConfigurationEntity> emailGatewayConfigurationEntity) {
+		final ArrayList<EmailConfiguration> emailConfigurationList = new ArrayList<>(emailGatewayConfigurationEntity.size());
+		emailConfigurationList.addAll(emailGatewayConfigurationEntity.stream().map(EmailConfigurationMapper::map).collect(Collectors.toList()));
+		return emailConfigurationList;
+	}
+	
 }
+
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/mapper/SMSConfigurationMapper.java b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/mapper/SMSConfigurationMapper.java
index 43e6c1c..60418e8 100644
--- a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/mapper/SMSConfigurationMapper.java
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/mapper/SMSConfigurationMapper.java
@@ -19,29 +19,41 @@
 package org.apache.fineract.cn.notification.service.internal.mapper;
 
 import org.apache.fineract.cn.notification.api.v1.domain.SMSConfiguration;
-import org.apache.fineract.cn.notification.service.internal.repository.SMSGatewayConfiguration;
+import org.apache.fineract.cn.notification.service.internal.repository.SMSGatewayConfigurationEntity;
 
 import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
 
 public class SMSConfigurationMapper {
-
-  private SMSConfigurationMapper() {
-    super();
-  }
-
-  public static SMSConfiguration map(final SMSGatewayConfiguration smsGatewayConfiguration) {
-    final SMSConfiguration smsConfiguration = new SMSConfiguration();
-    smsConfiguration.setIdentifier(smsGatewayConfiguration.getIdentifier());
-    smsConfiguration.setAccountid(smsGatewayConfiguration.getAccountid());
-    smsConfiguration.setAuth_token(smsGatewayConfiguration.getAuth_token());
-    return smsConfiguration;
-  }
-
-//  public static List<SMSGatewayConfiguration> map(final List<SMSGatewayConfiguration> smsGatewayConfiguration) {
-//    final ArrayList<SMSGatewayConfiguration> entities = new ArrayList<>(smsGatewayConfiguration.size());
-//    entities.addAll(smsGatewayConfiguration.stream().map(SMSConfigurationMapper::map).collect(Collectors.toList()));
-//    return entities;
-//  }
+	
+	private SMSConfigurationMapper() {
+		super();
+	}
+	
+	public static SMSConfiguration map(final SMSGatewayConfigurationEntity smsGatewayConfigurationEntity) {
+		final SMSConfiguration smsConfiguration = new SMSConfiguration();
+		smsConfiguration.setIdentifier(smsGatewayConfigurationEntity.getIdentifier());
+		smsConfiguration.setAccount_sid(smsGatewayConfigurationEntity.getAccount_sid());
+		smsConfiguration.setAuth_token(smsGatewayConfigurationEntity.getAuth_token());
+		smsConfiguration.setSender_number(smsGatewayConfigurationEntity.getSender_number());
+		smsConfiguration.setState(smsGatewayConfigurationEntity.getState());
+		return smsConfiguration;
+	}
+	
+	public static SMSGatewayConfigurationEntity map(final SMSConfiguration smsConfiguration) {
+		final SMSGatewayConfigurationEntity smsGatewayConfigurationEntity = new SMSGatewayConfigurationEntity();
+		smsGatewayConfigurationEntity.setIdentifier(smsConfiguration.getIdentifier());
+		smsGatewayConfigurationEntity.setAccount_sid(smsConfiguration.getAccount_sid());
+		smsGatewayConfigurationEntity.setAuth_token(smsConfiguration.getAuth_token());
+		smsGatewayConfigurationEntity.setSender_number(smsConfiguration.getSender_number());
+		smsGatewayConfigurationEntity.setState(smsConfiguration.getState());
+		return smsGatewayConfigurationEntity;
+	}
+	
+	public static List<SMSConfiguration> map(final List<SMSGatewayConfigurationEntity> smsGatewayConfigurationEntity) {
+		final ArrayList<SMSConfiguration> smsConfigurationList = new ArrayList<>(smsGatewayConfigurationEntity.size());
+		smsConfigurationList.addAll(smsGatewayConfigurationEntity.stream().map(SMSConfigurationMapper::map).collect(Collectors.toList()));
+		return smsConfigurationList;
+	}
 }
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/mapper/SampleMapper.java b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/mapper/SampleMapper.java
deleted file mode 100644
index a56b7aa..0000000
--- a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/mapper/SampleMapper.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.fineract.cn.notification.service.internal.mapper;
-
-import org.apache.fineract.cn.notification.api.v1.domain.Sample;
-import org.apache.fineract.cn.notification.service.internal.repository.SampleJpaEntity;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Collectors;
-
-public class SampleMapper {
-
-  private SampleMapper() {
-    super();
-  }
-
-  public static Sample map(final SampleJpaEntity sampleJpaEntity) {
-    final Sample sample = new Sample();
-    sample.setIdentifier(sampleJpaEntity.getIdentifier());
-    sample.setPayload(sampleJpaEntity.getPayload());
-    return sample;
-  }
-
-  public static List<Sample> map(final List<SampleJpaEntity> sampleJpaEntities) {
-    final ArrayList<Sample> samples = new ArrayList<>(sampleJpaEntities.size());
-    samples.addAll(sampleJpaEntities.stream().map(SampleMapper::map).collect(Collectors.toList()));
-    return samples;
-  }
-}
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/EmailGatewayConfiguration.java b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/EmailGatewayConfiguration.java
deleted file mode 100644
index c344708..0000000
--- a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/EmailGatewayConfiguration.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.fineract.cn.notification.service.internal.repository;
-
-import javax.persistence.*;
-
-@SuppressWarnings("unused")
-@Entity
-@Table(name = "email_gateway_configuration")
-public class EmailGatewayConfiguration {
-
-  @Id
-  @GeneratedValue(strategy = GenerationType.IDENTITY)
-  @Column(name = "id")
-  private Long id;
-  @Column(name = "identifier")
-  private String identifier;
-  @Column(name = "host")
-  private String host;
-  @Column(name = "port")
-  private String port;
-  @Column(name = "username")
-  private String username;
-  @Column(name = "app_id")
-  private String app_id;
-  @Column(name = "smtp_auth")
-  private String smtp_auth;
-  @Column(name = "start_tls")
-  private String start_tls;
-  @Column(name = "option")
-  private String option;
-
-  public EmailGatewayConfiguration() {
-    super();
-  }
-
-  public Long getId() {
-    return id;
-  }
-
-  public void setId(Long id) {
-    this.id = id;
-  }
-
-  public String getIdentifier() {
-    return this.identifier;
-  }
-
-  public void setIdentifier(final String identifier) {
-    this.identifier = identifier;
-  }
-
-  public String getHost() {
-    return host;
-  }
-
-  public void setHost(String host) {
-    this.host = host;
-  }
-
-  public String getPort() {
-    return port;
-  }
-
-  public void setPort(String port) {
-    this.port = port;
-  }
-
-  public String getUsername() {
-    return username;
-  }
-
-  public void setUsername(String username) {
-    this.username = username;
-  }
-
-  public String getApp_id() {
-    return app_id;
-  }
-
-  public void setApp_id(String app_id) {
-    this.app_id = app_id;
-  }
-
-  public String getSmtp_auth() {
-    return smtp_auth;
-  }
-
-  public void setSmtp_auth(String smtp_auth) {
-    this.smtp_auth = smtp_auth;
-  }
-
-  public String getStart_tls() {
-    return start_tls;
-  }
-
-  public void setStart_tls(String start_tls) {
-    this.start_tls = start_tls;
-  }
-
-  public String getOption() {
-    return option;
-  }
-
-  public void setOption(String option) {
-    this.option = option;
-  }
-}
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/EmailGatewayConfigurationEntity.java b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/EmailGatewayConfigurationEntity.java
new file mode 100644
index 0000000..2697a2b
--- /dev/null
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/EmailGatewayConfigurationEntity.java
@@ -0,0 +1,134 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.service.internal.repository;
+
+import javax.persistence.*;
+
+@SuppressWarnings("unused")
+@Entity
+@Table(name = "wada_email_gateway_configurations")
+public class EmailGatewayConfigurationEntity {
+	
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	private Long id;
+	@Column(name = "identifier")
+	private String identifier;
+	@Column(name = "host")
+	private String host;
+	@Column(name = "port")
+	private String port;
+	@Column(name = "username")
+	private String username;
+	@Column(name = "app_password")
+	private String app_password;
+	@Column(name = "protocol")
+	private String protocol;
+	@Column(name = "smtp_auth")
+	private String smtp_auth;
+	@Column(name = "start_tls")
+	private String start_tls;
+	@Column(name = "state")
+	private String state;
+	
+	public EmailGatewayConfigurationEntity() {
+		super();
+	}
+	
+	public Long getId() {
+		return id;
+	}
+	
+	public void setId(Long id) {
+		this.id = id;
+	}
+	
+	public String getIdentifier() {
+		return this.identifier;
+	}
+	
+	public void setIdentifier(final String identifier) {
+		this.identifier = identifier;
+	}
+	
+	public String getHost() {
+		return host;
+	}
+	
+	public void setHost(String host) {
+		this.host = host;
+	}
+	
+	public String getPort() {
+		return port;
+	}
+	
+	public void setPort(String port) {
+		this.port = port;
+	}
+	
+	public String getProtocol() {
+		return protocol;
+	}
+	
+	public void setProtocol(String protocol) {
+		this.protocol = protocol;
+	}
+	
+	public String getUsername() {
+		return username;
+	}
+	
+	public void setUsername(String username) {
+		this.username = username;
+	}
+	
+	public String getApp_password() {
+		return app_password;
+	}
+	
+	public void setApp_password(String app_password) {
+		this.app_password = app_password;
+	}
+	
+	public String getSmtp_auth() {
+		return smtp_auth;
+	}
+	
+	public void setSmtp_auth(String smtp_auth) {
+		this.smtp_auth = smtp_auth;
+	}
+	
+	public String getStart_tls() {
+		return start_tls;
+	}
+	
+	public void setStart_tls(String start_tls) {
+		this.start_tls = start_tls;
+	}
+	
+	public String getState() {
+		return state;
+	}
+	
+	public void setState(String state) {
+		this.state = state;
+	}
+}
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/EmailGatewayConfigurationRepository.java b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/EmailGatewayConfigurationRepository.java
index b380def..1a5af4c 100644
--- a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/EmailGatewayConfigurationRepository.java
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/EmailGatewayConfigurationRepository.java
@@ -19,11 +19,16 @@
 package org.apache.fineract.cn.notification.service.internal.repository;
 
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
 
 import java.util.Optional;
 
 @Repository
-public interface EmailGatewayConfigurationRepository extends JpaRepository<EmailGatewayConfiguration, Long> {
-  Optional<EmailGatewayConfiguration> findByIdentifier(String identifier);
+public interface EmailGatewayConfigurationRepository extends JpaRepository<EmailGatewayConfigurationEntity, Long> {
+	Optional<EmailGatewayConfigurationEntity> findByIdentifier(String identifier);
+	
+	@Query("SELECT CASE WHEN COUNT(c) > 0 THEN 'true' ELSE 'false' END FROM EmailGatewayConfigurationEntity c WHERE c.identifier = :identifier")
+	Boolean existsByIdentifier(@Param("identifier") final String identifier);
 }
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/SMSGatewayConfiguration.java b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/SMSGatewayConfiguration.java
deleted file mode 100644
index 770db6a..0000000
--- a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/SMSGatewayConfiguration.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.fineract.cn.notification.service.internal.repository;
-
-import javax.persistence.*;
-
-@SuppressWarnings("unused")
-@Entity
-@Table(name = "sms_gateway_configuration")
-public class SMSGatewayConfiguration {
-
-  @Id
-  @GeneratedValue(strategy = GenerationType.IDENTITY)
-  @Column(name = "id")
-  private Long id;
-  @Column(name = "identifier")
-  private String identifier;
-  @Column(name = "organisation")
-  private String organisation;
-  @Column(name = "auth_token")
-  private String auth_token;
-  @Column(name = "accountid")
-  private String accountid;
-  @Column(name = "option")
-  private String option;
-
-  public SMSGatewayConfiguration() {
-    super();
-  }
-
-  public Long getId() {
-    return id;
-  }
-
-  public void setId(Long id) {
-    this.id = id;
-  }
-
-  public String getIdentifier() {
-    return this.identifier;
-  }
-
-  public void setIdentifier(final String identifier) {
-    this.identifier = identifier;
-  }
-
-  public String getOrganisation() {
-    return organisation;
-  }
-
-  public void setOrganisation(String organisation) {
-    this.organisation = organisation;
-  }
-
-  public String getAuth_token() {
-    return auth_token;
-  }
-
-  public void setAuth_token(String auth_token) {
-    this.auth_token = auth_token;
-  }
-
-  public String getAccountid() {
-    return accountid;
-  }
-
-  public void setAccountid(String accountid) {
-    this.accountid = accountid;
-  }
-
-  public String getOption() {
-    return option;
-  }
-
-  public void setOption(String option) {
-    this.option = option;
-  }
-}
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/SMSGatewayConfigurationEntity.java b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/SMSGatewayConfigurationEntity.java
new file mode 100644
index 0000000..dcf3301
--- /dev/null
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/SMSGatewayConfigurationEntity.java
@@ -0,0 +1,94 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.service.internal.repository;
+
+import javax.persistence.*;
+
+@SuppressWarnings("unused")
+@Entity
+@Table(name = "wada_sms_gateway_configurations")
+public class SMSGatewayConfigurationEntity {
+	
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	private Long id;
+	@Column(name = "identifier")
+	private String identifier;
+	@Column(name = "account_sid")
+	private String account_sid;
+	@Column(name = "auth_token")
+	private String auth_token;
+	@Column(name = "sender_number")
+	private String sender_number;
+	@Column(name = "state")
+	private String state;
+	
+	public SMSGatewayConfigurationEntity() {
+		super();
+	}
+	
+	public Long getId() {
+		return id;
+	}
+	
+	public void setId(Long id) {
+		this.id = id;
+	}
+	
+	public String getIdentifier() {
+		return this.identifier;
+	}
+	
+	public void setIdentifier(final String identifier) {
+		this.identifier = identifier;
+	}
+	
+	public String getAuth_token() {
+		return auth_token;
+	}
+	
+	public void setAuth_token(String auth_token) {
+		this.auth_token = auth_token;
+	}
+	
+	public String getAccount_sid() {
+		return account_sid;
+	}
+	
+	public void setAccount_sid(String account_sid) {
+		this.account_sid = account_sid;
+	}
+	
+	public String getState() {
+		return state;
+	}
+	
+	public void setState(String state) {
+		this.state = state;
+	}
+	
+	public String getSender_number() {
+		return sender_number;
+	}
+	
+	public void setSender_number(String sender_number) {
+		this.sender_number = sender_number;
+	}
+}
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/SMSGatewayConfigurationRepository.java b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/SMSGatewayConfigurationRepository.java
index 7daae78..ebac1c7 100644
--- a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/SMSGatewayConfigurationRepository.java
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/SMSGatewayConfigurationRepository.java
@@ -19,11 +19,16 @@
 package org.apache.fineract.cn.notification.service.internal.repository;
 
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
 
 import java.util.Optional;
 
 @Repository
-public interface SMSGatewayConfigurationRepository extends JpaRepository<SMSGatewayConfiguration, Long> {
-  Optional<SMSGatewayConfiguration> findByIdentifier(String identifier);
+public interface SMSGatewayConfigurationRepository extends JpaRepository<SMSGatewayConfigurationEntity, Long> {
+	Optional<SMSGatewayConfigurationEntity> findByIdentifier(String identifier);
+	
+	@Query("SELECT CASE WHEN COUNT(c) > 0 THEN 'true' ELSE 'false' END FROM SMSGatewayConfigurationEntity c WHERE c.identifier = :identifier")
+	Boolean existsByIdentifier(@Param("identifier") final String identifier);
 }
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/SampleJpaEntity.java b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/SampleJpaEntity.java
deleted file mode 100644
index f740d85..0000000
--- a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/SampleJpaEntity.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.fineract.cn.notification.service.internal.repository;
-
-import javax.persistence.*;
-
-@SuppressWarnings("unused")
-@Entity
-@Table(name = "template_samples")
-public class SampleJpaEntity {
-
-  @Id
-  @GeneratedValue(strategy = GenerationType.IDENTITY)
-  @Column(name = "id")
-  private Long id;
-  @Column(name = "identifier")
-  private String identifier;
-  @Column(name = "payload")
-  private String payload;
-
-  public SampleJpaEntity() {
-    super();
-  }
-
-  public Long getId() {
-    return id;
-  }
-
-  public void setId(Long id) {
-    this.id = id;
-  }
-
-  public String getIdentifier() {
-    return this.identifier;
-  }
-
-  public void setIdentifier(final String identifier) {
-    this.identifier = identifier;
-  }
-
-  public String getPayload() {
-    return payload;
-  }
-
-  public void setPayload(String payload) {
-    this.payload = payload;
-  }
-}
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/TemplateEntity.java b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/TemplateEntity.java
new file mode 100644
index 0000000..c699b9c
--- /dev/null
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/TemplateEntity.java
@@ -0,0 +1,102 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.service.internal.repository;
+
+import javax.persistence.*;
+import java.util.Objects;
+
+@SuppressWarnings("unused")
+@Entity
+@Table(name = "wada_templates")
+public class TemplateEntity {
+	
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	private Long id;
+	@Column(name = "identifier")
+	private String identifier;
+	@Column(name = "event")
+	private String event;
+	@Column(name = "url")
+	private String url;
+	
+	
+	public TemplateEntity() {
+		super();
+	}
+	
+	public Long getId() {
+		return id;
+	}
+	
+	public void setId(Long id) {
+		this.id = id;
+	}
+	
+	public String getIdentifier() {
+		return this.identifier;
+	}
+	
+	public void setIdentifier(final String identifier) {
+		this.identifier = identifier;
+	}
+	
+	public String getEvent() {
+		return event;
+	}
+	
+	public void setEvent(String event) {
+		this.event = event;
+	}
+	
+	public String getUrl() {
+		return url;
+	}
+	
+	public void setUrl(String url) {
+		this.url = url;
+	}
+	
+	@Override
+	public boolean equals(Object o) {
+		if (this == o) return true;
+		if (o == null || getClass() != o.getClass()) return false;
+		TemplateEntity that = (TemplateEntity) o;
+		return Objects.equals(id, that.id) &&
+				Objects.equals(identifier, that.identifier) &&
+				Objects.equals(event, that.event) &&
+				Objects.equals(url, that.url);
+	}
+	
+	@Override
+	public int hashCode() {
+		return Objects.hash(id, identifier, event, url);
+	}
+	
+	@Override
+	public String toString() {
+		return "TemplateEntity{" +
+				"id=" + id +
+				", identifier='" + identifier + '\'' +
+				", event='" + event + '\'' +
+				", url='" + url + '\'' +
+				'}';
+	}
+}
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/SampleJpaEntityRepository.java b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/TemplateRepository.java
similarity index 87%
rename from service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/SampleJpaEntityRepository.java
rename to service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/TemplateRepository.java
index b4d8abd..5e82d1f 100644
--- a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/SampleJpaEntityRepository.java
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/repository/TemplateRepository.java
@@ -18,11 +18,12 @@
  */
 package org.apache.fineract.cn.notification.service.internal.repository;
 
-import java.util.Optional;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
 
+import java.util.Optional;
+
 @Repository
-public interface SampleJpaEntityRepository extends JpaRepository<SampleJpaEntity, Long> {
-  Optional<SampleJpaEntity> findByIdentifier(String identifier);
+public interface TemplateRepository extends JpaRepository<TemplateEntity, Long> {
+	Optional<TemplateEntity> findByIdentifier(String identifier);
 }
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/service/EmailSender.java b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/service/EmailSender.java
deleted file mode 100644
index bebb3c9..0000000
--- a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/service/EmailSender.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.fineract.cn.notification.service.internal.service;
-
-
-import org.apache.fineract.cn.notification.service.internal.mapper.EmailConfigurationMapper;
-import org.apache.fineract.cn.notification.service.internal.repository.EmailGatewayConfiguration;
-import org.apache.fineract.cn.notification.service.internal.repository.EmailGatewayConfigurationRepository;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.mail.SimpleMailMessage;
-import org.springframework.mail.javamail.JavaMailSender;
-import org.springframework.stereotype.Service;
-
-import java.util.Optional;
-
-@Service
-public class EmailSender {
-
-    @Autowired
-    @Qualifier("gmail")
-    private JavaMailSender sender;
-
-    private final EmailGatewayConfigurationRepository emailGatewayConfigurationRepository;
-
-    @Autowired
-    public EmailSender(final EmailGatewayConfigurationRepository emailGatewayConfigurationRepository) {
-        super();
-        this.emailGatewayConfigurationRepository = emailGatewayConfigurationRepository;
-    }
-
-//    public Optional<EmailGatewayConfiguration> findByIdentifier(final String identifier) {
-//        return this.emailGatewayConfigurationRepository.findByIdentifier(identifier).map(EmailGatewayConfiguration::map);
-//    }
-
-    public void sendEmail(String to, String subject, String message) {
-        SimpleMailMessage mail = new SimpleMailMessage();
-        mail.setTo(to);
-        mail.setSubject(subject);
-        mail.setText(message);
-        sender.send(mail);
-    }
-
-}
\ No newline at end of file
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/service/EmailService.java b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/service/EmailService.java
new file mode 100644
index 0000000..5260e98
--- /dev/null
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/service/EmailService.java
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.service.internal.service;
+
+import org.apache.fineract.cn.notification.service.ServiceConstants;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.mail.MailException;
+import org.springframework.mail.SimpleMailMessage;
+import org.springframework.mail.javamail.JavaMailSender;
+import org.springframework.mail.javamail.JavaMailSenderImpl;
+import org.springframework.stereotype.Component;
+
+import java.util.Properties;
+
+@Component
+public class EmailService {
+	
+	private Logger logger;
+	
+	@Autowired
+	public EmailService(@Qualifier(ServiceConstants.LOGGER_NAME) final Logger logger) {
+		super();
+		this.logger = logger;
+	}
+	
+	public void sendEmail(String from, String to, String subject, String message) {
+		
+		JavaMailSender sender = getJavaMailSender();
+		try {
+			SimpleMailMessage mail = new SimpleMailMessage();
+			mail.setFrom(from);
+			mail.setTo(to);
+			mail.setSubject(subject);
+			mail.setText(message);
+			sender.send(mail);
+		} catch (MailException exception) {
+			logger.debug("Caused by:" + exception.getCause().toString());
+		}
+	}
+	
+	public JavaMailSender getJavaMailSender() {
+		
+		JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
+		mailSender.setHost("smtp.gmail.com");
+		mailSender.setPort(587);
+		mailSender.setUsername("fineractcnnotificationdemo@gmail.com");
+		//mailSender.setPassword("pnuugpwmcibipdpw");
+		mailSender.setPassword("fineractcnnotification");
+		
+		Properties properties = mailSender.getJavaMailProperties();
+		properties.put(ServiceConstants.MAIL_TRANSPORT_PROTOCOL_PROPERTY,
+				ServiceConstants.MAIL_TRANSPORT_PROTOCOL_VALUE);
+		properties.put(ServiceConstants.MAIL_SMTP_AUTH_PROPERTY,
+				ServiceConstants.MAIL_SMTP_AUTH_VALUE);
+		properties.put(ServiceConstants.MAIL_SMTP_STARTTLS_ENABLE_PROPERTY,
+				ServiceConstants.MAIL_SMTP_STARTTLS_ENABLE_VALUE);
+		mailSender.setJavaMailProperties(properties);
+		
+		return mailSender;
+	}
+}
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/service/NotificationService.java b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/service/NotificationService.java
new file mode 100644
index 0000000..8b25f1b
--- /dev/null
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/service/NotificationService.java
@@ -0,0 +1,118 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.service.internal.service;
+
+import org.apache.fineract.cn.customer.api.v1.domain.Customer;
+import org.apache.fineract.cn.notification.api.v1.domain.EmailConfiguration;
+import org.apache.fineract.cn.notification.api.v1.domain.SMSConfiguration;
+import org.apache.fineract.cn.notification.service.ServiceConstants;
+import org.apache.fineract.cn.notification.service.internal.mapper.EmailConfigurationMapper;
+import org.apache.fineract.cn.notification.service.internal.mapper.SMSConfigurationMapper;
+import org.apache.fineract.cn.notification.service.internal.repository.EmailGatewayConfigurationRepository;
+import org.apache.fineract.cn.notification.service.internal.repository.SMSGatewayConfigurationRepository;
+import org.apache.fineract.cn.notification.service.internal.service.helperservice.CustomerAdaptor;
+import org.apache.fineract.cn.notification.service.internal.service.helperservice.NotificationAuthentication;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Optional;
+
+@Service
+public class NotificationService {
+	private final SMSService smsService;
+	private final EmailService emailService;
+	
+	private final SMSGatewayConfigurationRepository smsGatewayConfigurationRepository;
+	private final EmailGatewayConfigurationRepository emailGatewayConfigurationRepository;
+	
+	private final NotificationAuthentication notificationAuthentication;
+	private final CustomerAdaptor customerAdaptor;
+	private final Logger logger;
+	
+	private final String configureIdentifier = "Twilio";
+	
+	@Autowired
+	public NotificationService(final SMSGatewayConfigurationRepository smsGatewayConfigurationRepository,
+	                           final EmailGatewayConfigurationRepository emailGatewayConfigurationRepository,
+	                           final CustomerAdaptor customerAdaptor,
+	                           final SMSService smsService,
+	                           final EmailService emailService,
+	                           final NotificationAuthentication notificationAuthentication,
+	                           @Qualifier(ServiceConstants.LOGGER_NAME) final Logger logger
+	) {
+		super();
+		this.smsGatewayConfigurationRepository = smsGatewayConfigurationRepository;
+		this.emailGatewayConfigurationRepository = emailGatewayConfigurationRepository;
+		this.customerAdaptor = customerAdaptor;
+		this.smsService = smsService;
+		this.emailService = emailService;
+		this.notificationAuthentication = notificationAuthentication;
+		this.logger = logger;
+		this.logger.debug("{} has been initiated", this.getClass());
+	}
+	
+	
+	public List<SMSConfiguration> findAllActiveSMSConfigurationEntities() {
+		return SMSConfigurationMapper.map(this.smsGatewayConfigurationRepository.findAll());
+	}
+	
+	public List<EmailConfiguration> findAllActiveEmailConfigurationEntities() {
+		return EmailConfigurationMapper.map(this.emailGatewayConfigurationRepository.findAll());
+	}
+	
+	public Optional<SMSConfiguration> findSMSConfigurationByIdentifier(final String identifier) {
+		return this.smsGatewayConfigurationRepository.findByIdentifier(identifier).map(SMSConfigurationMapper::map);
+	}
+	
+	
+	public Optional<EmailConfiguration> findEmailConfigurationByIdentifier(final String identifier) {
+		return this.emailGatewayConfigurationRepository.findByIdentifier(identifier).map(EmailConfigurationMapper::map);
+	}
+	
+	public Optional<Customer> findCustomer(final String customerIdentifier, String tenant) {
+		notificationAuthentication.authenticate(tenant);
+		return this.customerAdaptor.findCustomer(customerIdentifier);
+	}
+	
+	public Boolean smsConfigurationExists(final String identifier) {
+		return this.smsGatewayConfigurationRepository.existsByIdentifier(identifier);
+	}
+	
+	public Boolean emailConfigurationExists(final String identifier) {
+		return this.emailGatewayConfigurationRepository.existsByIdentifier(identifier);
+	}
+	
+	public void configureSMSSender() {
+		SMSConfiguration configuration = findSMSConfigurationByIdentifier(configureIdentifier).get();
+		smsService.configure(configuration.getAccount_sid(),
+				configuration.getAuth_token(),
+				configuration.getSender_number());
+	}
+	
+	public void sendSMS(String receiver, String template) {
+		this.smsService.sendSMS(receiver, template);
+	}
+	
+	public void sendEmail(String from, String to, String subject, String message) {
+		this.emailService.sendEmail(from, to, subject, message);
+	}
+}
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/service/SMSSender.java b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/service/SMSSender.java
deleted file mode 100644
index ed98bea..0000000
--- a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/service/SMSSender.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.fineract.cn.notification.service.internal.service;
-
-
-import com.twilio.Twilio;
-import com.twilio.rest.api.v2010.account.Message;
-import com.twilio.type.PhoneNumber;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.context.annotation.Configuration;
-import com.twilio.rest.api.v2010.account.MessageCreator;
-import org.springframework.stereotype.Service;
-
-@Service
-@ConfigurationProperties(prefix ="smssender")
-public class SMSSender {
-
-    //@Value(value = "${smssender.accountSID}")
-    public String ACCOUNT_SID = "AC1fde2c6f26f367b93231c5fdb944c908";
-
-    //@Value("${smssender.authToken}")
-    public String AUTH_TOKEN = "bc9a53e41745b8471e0ecafc859d86aa";
-
-    //@Value("${smssender.senderNumber}")
-    public String sender = "+1 510-944-1898";
-
-    //@Value("${fineract.customer.accountcreated}")
-
-    public String template = "Test from the demo-server";
-
-    public void sendSMS(String receiver, String template) {
-
-        Twilio.init(ACCOUNT_SID, AUTH_TOKEN);
-
-        MessageCreator messageCreator = Message.creator(ACCOUNT_SID,new PhoneNumber(receiver), new PhoneNumber(sender), template);
-        Message message = messageCreator.create();
-        System.out.println(message.getSid());
-        System.out.println(message.getStatus());
-    }
-}
\ No newline at end of file
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/service/SMSService.java b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/service/SMSService.java
new file mode 100644
index 0000000..fca2476
--- /dev/null
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/service/SMSService.java
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.service.internal.service;
+
+
+import com.twilio.Twilio;
+import com.twilio.rest.api.v2010.account.Message;
+import com.twilio.rest.api.v2010.account.MessageCreator;
+import com.twilio.type.PhoneNumber;
+import org.apache.fineract.cn.notification.service.ServiceConstants;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+@Service
+public class SMSService {
+	
+	private final Logger logger;
+	@Value("${smssender.accountSID}")
+	private String ACCOUNT_SID;
+	@Value("${smssender.authToken}")
+	private String AUTH_TOKEN;
+	@Value("${smssender.senderNumber}")
+	private String SENDERNUMBER;
+	
+	@Autowired
+	public SMSService(@Qualifier(ServiceConstants.LOGGER_NAME) Logger logger) {
+		super();
+		this.logger = logger;
+	}
+	
+	public void configure(String accountSID,
+	                      String authToken,
+	                      String senderNumber) {
+		ACCOUNT_SID = accountSID;
+		AUTH_TOKEN = authToken;
+		SENDERNUMBER = senderNumber;
+	}
+	
+	public void sendSMS(String receiver, String template) {
+		this.logger.debug("sendSMS invoked");
+		Twilio.init(ACCOUNT_SID, AUTH_TOKEN);
+		MessageCreator messageCreator = Message.creator(ACCOUNT_SID,
+				new PhoneNumber(receiver),
+				new PhoneNumber(SENDERNUMBER),
+				template);
+		Message message = messageCreator.create();
+		System.out.println(message.getSid());
+	}
+}
\ No newline at end of file
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/service/SampleService.java b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/service/SampleService.java
deleted file mode 100644
index a0e4f71..0000000
--- a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/service/SampleService.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.fineract.cn.notification.service.internal.service;
-
-import org.apache.fineract.cn.notification.api.v1.domain.Sample;
-import org.apache.fineract.cn.notification.service.internal.mapper.SampleMapper;
-import org.apache.fineract.cn.notification.service.internal.repository.SampleJpaEntityRepository;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-import java.util.Optional;
-
-@Service
-public class SampleService {
-
-  private final SampleJpaEntityRepository sampleJpaEntityRepository;
-
-  @Autowired
-  public SampleService(final SampleJpaEntityRepository sampleJpaEntityRepository) {
-    super();
-    this.sampleJpaEntityRepository = sampleJpaEntityRepository;
-  }
-
-  public List<Sample> findAllEntities() {
-    return SampleMapper.map(this.sampleJpaEntityRepository.findAll());
-  }
-
-  public Optional<Sample> findByIdentifier(final String identifier) {
-    return this.sampleJpaEntityRepository.findByIdentifier(identifier).map(SampleMapper::map);
-  }
-}
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/service/helperservice/CustomerAdaptor.java b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/service/helperservice/CustomerAdaptor.java
new file mode 100644
index 0000000..33a79f4
--- /dev/null
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/service/helperservice/CustomerAdaptor.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.service.internal.service.helperservice;
+
+import org.apache.fineract.cn.customer.api.v1.client.CustomerManager;
+import org.apache.fineract.cn.customer.api.v1.client.CustomerNotFoundException;
+import org.apache.fineract.cn.customer.api.v1.domain.Customer;
+import org.apache.fineract.cn.notification.service.ServiceConstants;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Service;
+
+import java.util.Optional;
+
+@Service
+public class CustomerAdaptor {
+	
+	private final Logger logger;
+	private final CustomerManager customerManager;
+	
+	@Autowired
+	public CustomerAdaptor(@Qualifier(ServiceConstants.LOGGER_NAME) final Logger logger,
+	                       final CustomerManager customerManager) {
+		super();
+		this.logger = logger;
+		this.customerManager = customerManager;
+	}
+	
+	public Optional<Customer> findCustomer(final String customerIdentifier) {
+		try {
+			final Customer customer = this.customerManager.findCustomer(customerIdentifier.replaceAll("\"", ""));
+			return Optional.of(customer);
+		} catch (final CustomerNotFoundException cnfex) {
+			this.logger.warn("Customer {} not found.", customerIdentifier.replaceAll("\"", ""));
+		}
+		return Optional.empty();
+	}
+}
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/service/helperservice/NotificationAuthentication.java b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/service/helperservice/NotificationAuthentication.java
new file mode 100644
index 0000000..a4ab97c
--- /dev/null
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/service/helperservice/NotificationAuthentication.java
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.cn.notification.service.internal.service.helperservice;
+
+/*
+ ebenezergraham created on 8/4/18
+*/
+
+import org.apache.fineract.cn.api.util.UserContextHolder;
+import org.apache.fineract.cn.identity.api.v1.client.IdentityManager;
+import org.apache.fineract.cn.identity.api.v1.domain.Authentication;
+import org.apache.fineract.cn.lang.TenantContextHolder;
+import org.apache.fineract.cn.notification.service.ServiceConstants;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Component;
+import org.springframework.util.Base64Utils;
+
+@Component
+public class NotificationAuthentication {
+	private final String USER_PASSWORD = "init1@l";
+	private final String USER_IDENTIFIER = "operator";
+	
+	private IdentityManager identityManager;
+	private Logger logger;
+	
+	@Autowired
+	public NotificationAuthentication(IdentityManager identityManager,
+	                                 @Qualifier(ServiceConstants.LOGGER_NAME) final Logger logger) {
+		this.identityManager = identityManager;
+		this.logger = logger;
+		}
+	
+	public void authenticate(String tenant) {
+		TenantContextHolder.clear();
+		TenantContextHolder.setIdentifier(tenant);
+		
+		final Authentication authentication =
+				this.identityManager.login(USER_IDENTIFIER, Base64Utils.encodeToString(USER_PASSWORD.getBytes()));
+		UserContextHolder.clear();
+		UserContextHolder.setAccessToken(USER_IDENTIFIER, authentication.getAccessToken());
+	}
+}
\ No newline at end of file
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/listener/AccountingEventListener.java b/service/src/main/java/org/apache/fineract/cn/notification/service/listener/AccountingEventListener.java
deleted file mode 100644
index 9266b89..0000000
--- a/service/src/main/java/org/apache/fineract/cn/notification/service/listener/AccountingEventListener.java
+++ /dev/null
@@ -1,124 +0,0 @@
- /*
-         * Licensed to the Apache Software Foundation (ASF) under one
-         * or more contributor license agreements.  See the NOTICE file
-         * distributed with this work for additional information
-         * regarding copyright ownership.  The ASF licenses this file
-         * to you under the Apache License, Version 2.0 (the
-         * "License"); you may not use this file except in compliance
-         * with the License.  You may obtain a copy of the License at
-         *
-         *   http://www.apache.org/licenses/LICENSE-2.0
-         *
-         * Unless required by applicable law or agreed to in writing,
-         * software distributed under the License is distributed on an
-         * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-         * KIND, either express or implied.  See the License for the
-         * specific language governing permissions and limitations
-         * under the License.
-         */
-/*
-        package org.apache.fineract.cn.notification.service.listener;
-
-        import org.apache.fineract.cn.lang.config.TenantHeaderFilter;
-        import org.apache.fineract.cn.accounting.service.internal.service.AccountService;
-        import org.apache.fineract.cn.notification.service.internal.service.EmailSender;
-        import org.apache.fineract.cn.notification.service.internal.service.SMSSender;
-        import org.springframework.beans.factory.annotation.Autowired;
-        import org.springframework.jms.annotation.JmsListener;
-        import org.springframework.messaging.handler.annotation.Header;
-        import org.springframework.stereotype.Component;
-        import org.apache.fineract.cn.accounting.api.v1.EventConstants;
-
-
-@SuppressWarnings("unused")
-@Component
-public class AccountingEventListener {
-
-
-    @Autowired
-    public AccountingEventListener( final AccountService accountingManager) {
-        this.accountService = accountingManager;
-    }
-
-    @JmsListener(
-            destination = EventConstants.DESTINATION,
-            selector = EventConstants.SELECTOR_POST_ACCOUNT,
-            subscription = EventConstants.DESTINATION
-    )
-    public void onCreateAccount(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant, final String payload) {
-        accountService.findAccount(tenant);
-        String receiver = "";
-        String template = "";
-        smsSender.sendSMS(receiver,template);
-        emailSender.sendEmail(receiver,"Hello", "You account has been created");
-    }
-
-
-    @JmsListener(
-            destination = EventConstants.DESTINATION,
-            selector = EventConstants.SELECTOR_PUT_ACCOUNT,
-            subscription = EventConstants.DESTINATION
-    )
-    public void onChangeAccount(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                                final String payload) {
-        this.logger.debug("Account modified.");
-        this.eventRecorder.event(tenant, EventConstants.PUT_ACCOUNT, payload, String.class);
-    }
-
-    @JmsListener(
-            destination = EventConstants.DESTINATION,
-            selector = EventConstants.SELECTOR_CLOSE_ACCOUNT,
-            subscription = EventConstants.DESTINATION
-    )
-    public void onCloseAccount(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                               final String payload) {
-        this.logger.debug("Account closed.");
-        this.eventRecorder.event(tenant, EventConstants.CLOSE_ACCOUNT, payload, String.class);
-    }
-
-    @JmsListener(
-            destination = EventConstants.DESTINATION,
-            selector = EventConstants.SELECTOR_LOCK_ACCOUNT,
-            subscription = EventConstants.DESTINATION
-    )
-    public void onLockAccount(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                              final String payload) {
-        this.logger.debug("Account locked.");
-        this.eventRecorder.event(tenant, EventConstants.LOCK_ACCOUNT, payload, String.class);
-    }
-
-    @JmsListener(
-            destination = EventConstants.DESTINATION,
-            selector = EventConstants.SELECTOR_UNLOCK_ACCOUNT,
-            subscription = EventConstants.DESTINATION
-    )
-    public void onUnlockAccount(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                                final String payload) {
-        this.logger.debug("Account unlocked.");
-        this.eventRecorder.event(tenant, EventConstants.UNLOCK_ACCOUNT, payload, String.class);
-    }
-
-    @JmsListener(
-            destination = EventConstants.DESTINATION,
-            selector = EventConstants.SELECTOR_REOPEN_ACCOUNT,
-            subscription = EventConstants.DESTINATION
-    )
-    public void onReopenAccount(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                                final String payload) {
-        this.logger.debug("Account reopened.");
-        this.eventRecorder.event(tenant, EventConstants.REOPEN_ACCOUNT, payload, String.class);
-    }
-
-    @JmsListener(
-            destination = EventConstants.DESTINATION,
-            selector = EventConstants.SELECTOR_DELETE_ACCOUNT,
-            subscription = EventConstants.DESTINATION
-    )
-    public void onDeleteAccount(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                                final String payload) {
-        this.logger.debug("Account deleted.");
-        this.eventRecorder.event(tenant, EventConstants.DELETE_ACCOUNT, payload, String.class);
-    }
-
-}
- */
\ No newline at end of file
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/listener/ChequeEventListener.java b/service/src/main/java/org/apache/fineract/cn/notification/service/listener/ChequeEventListener.java
deleted file mode 100644
index 97dd5e2..0000000
--- a/service/src/main/java/org/apache/fineract/cn/notification/service/listener/ChequeEventListener.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-/*
-package org.apache.fineract.cn.notification.service.listener;
-
-import org.apache.fineract.cn.cheque.AbstractChequeTest;
-import org.apache.fineract.cn.cheque.api.v1.EventConstants;
-import org.apache.fineract.cn.lang.config.TenantHeaderFilter;
-import org.slf4j.Logger;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.jms.annotation.JmsListener;
-import org.springframework.messaging.handler.annotation.Header;
-import org.springframework.stereotype.Component;
-
-@Component
-public class ChequeEventListener {
-
-    private final Logger logger;
-
-    public ChequeEventListener(@Qualifier(AbstractChequeTest.TEST_LOGGER) final Logger logger) {
-        super();
-        this.logger = logger;
-    }
-
-    @JmsListener(
-            destination = EventConstants.DESTINATION,
-            selector = EventConstants.SELECTOR_ISSUE_CHEQUES,
-            subscription = EventConstants.DESTINATION
-    )
-    public void onIssueCheques(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                               final String payload) {
-        this.logger.debug("Cheques issued.");
-    }
-
-    @JmsListener(
-            destination = EventConstants.DESTINATION,
-            selector = EventConstants.SELECTOR_CHEQUE_TRANSACTION,
-            subscription = EventConstants.DESTINATION
-    )
-    public void onChequeTransaction(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                                    final String payload) {
-        this.logger.debug("Cheque transaction processed.");
-        this.eventRecorder.event(tenant, EventConstants.CHEQUE_TRANSACTION, payload, String.class);
-    }
-
-    @JmsListener(
-            destination = EventConstants.DESTINATION,
-            selector = EventConstants.SELECTOR_CHEQUE_TRANSACTION_APPROVED,
-            subscription = EventConstants.DESTINATION
-    )
-    public void onChequeApproved(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                                 final String payload) {
-        this.logger.debug("Cheque transaction approved.");
-        this.eventRecorder.event(tenant, EventConstants.CHEQUE_TRANSACTION_APPROVED, payload, String.class);
-    }
-
-    @JmsListener(
-            destination = EventConstants.DESTINATION,
-            selector = EventConstants.SELECTOR_CHEQUE_TRANSACTION_CANCELED,
-            subscription = EventConstants.DESTINATION
-    )
-    public void onChequeCanceled(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                                 final String payload) {
-        this.logger.debug("Cheque transaction canceled.");
-        this.eventRecorder.event(tenant, EventConstants.CHEQUE_TRANSACTION_CANCELED, payload, String.class);
-    }
-
-}
-*/
\ No newline at end of file
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/listener/CustomerEventListener.java b/service/src/main/java/org/apache/fineract/cn/notification/service/listener/CustomerEventListener.java
index 7db634a..d1cb4d6 100644
--- a/service/src/main/java/org/apache/fineract/cn/notification/service/listener/CustomerEventListener.java
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/listener/CustomerEventListener.java
@@ -16,193 +16,332 @@
      * specific language governing permissions and limitations
      * under the License.
      */
+    package org.apache.fineract.cn.notification.service.listener;
 
-package org.apache.fineract.cn.notification.service.listener;
+    import org.apache.fineract.cn.customer.api.v1.CustomerEventConstants;
+    import org.apache.fineract.cn.customer.api.v1.domain.ContactDetail;
+    import org.apache.fineract.cn.customer.api.v1.domain.Customer;
+    import org.apache.fineract.cn.lang.config.TenantHeaderFilter;
+    import org.apache.fineract.cn.notification.service.ServiceConstants;
+    import org.apache.fineract.cn.notification.service.internal.service.NotificationService;
+    import org.slf4j.Logger;
+    import org.springframework.beans.factory.annotation.Autowired;
+    import org.springframework.beans.factory.annotation.Qualifier;
+    import org.springframework.jms.annotation.JmsListener;
+    import org.springframework.messaging.handler.annotation.Header;
+    import org.springframework.stereotype.Component;
 
-import org.apache.fineract.cn.customer.api.v1.CustomerEventConstants;
-import org.apache.fineract.cn.lang.config.TenantHeaderFilter;
-import org.apache.fineract.cn.customer.api.v1.client.CustomerManager;
-import org.apache.fineract.cn.customer.api.v1.domain.ContactDetail;
-import org.apache.fineract.cn.customer.api.v1.domain.Customer;
-import org.apache.fineract.cn.notification.service.internal.service.EmailSender;
-import org.apache.fineract.cn.notification.service.internal.service.SMSSender;
-import org.slf4j.Logger;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.jms.annotation.JmsListener;
-import org.springframework.messaging.handler.annotation.Header;
-import org.springframework.stereotype.Component;
-
-@SuppressWarnings("unused")
-@Component
-public class CustomerEventListener {
-
-        private CustomerManager customerManager;
-        private SMSSender smsSender;
-        private EmailSender emailSender;
-        private final Logger logger;
-
-        @Autowired
-        public CustomerEventListener( final CustomerManager customerManager,
-                                      SMSSender smsSender, EmailSender emailSender, @Autowired Logger logger ) {
-            this.customerManager = customerManager;
-            this.smsSender = smsSender;
-            this.emailSender = emailSender;
-            this.logger = logger;
-            smsSender.sendSMS("+23058409206","just to be sure listen has been instantiated");
-        }
-
-        @JmsListener(
-                destination = CustomerEventConstants.DESTINATION,
-                selector = CustomerEventConstants.SELECTOR_POST_CUSTOMER
-        )
-        public void customerCreatedEvent(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                                         final String payload) {
-            System.out.println(payload);
-            Customer customer = customerManager.findCustomer(payload);
-            System.out.println("This is the customer created: "
-                    + customer.getGivenName() +"--payload" + payload +"--tenant"+ tenant);
-            this.logger.info("Logger --- This is the customer created: "
-                    + customer.getGivenName() +"--payload" + payload +"--tenant"+ tenant);
-            if (customer.getContactDetails().size() > 0) {
-                customer.getContactDetails().forEach(contactDetail -> {
-                    if (contactDetail.getType().equals(ContactDetail.Type.PHONE)) {
-                        String receiverNumber = customer.getContactDetails().get(0).getValue();
-                        // TODO: pass receiver number for templating and localization.
-                        smsSender.sendSMS(receiverNumber, "Dear Valued Customer, Your account has been created");
-                    } else if (contactDetail.getType().equals(ContactDetail.Type.EMAIL)) {
-                        String emailAddress = customer.getContactDetails().get(0).getValue();
-                        // TODO: pass email address for templating and localization.
-                        emailSender.sendEmail(emailAddress, "Account created", "Dear Valued Customer, Your account has been created");
-                    }
-                });
-            }
-        }
-
-    @JmsListener(
-            destination = CustomerEventConstants.DESTINATION,
-            selector = CustomerEventConstants.SELECTOR_ACTIVATE_CUSTOMER
-    )
-    public void customerActivatedEvent(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                                       final String payload) {
-
-        Customer customer = customerManager.findCustomer(payload);
-        System.out.println("This is the customer created: "
-                + customer.getGivenName() +"--payload" + payload +"--tenant"+ tenant);
-        this.logger.info("Logger --- This is the customer created: "
-                + customer.getGivenName() +"--payload" + payload +"--tenant"+ tenant);
-        if(customer.getCurrentState().equalsIgnoreCase("ACTIVE")){
-            customer.getContactDetails().forEach(contact-> {
-                if (contact.getType().equals(ContactDetail.Type.PHONE)) {
-                String receiverNumber = customer.getContactDetails().get(0).getValue();
-                smsSender.sendSMS(receiverNumber, "Dear Valued Customer, Your account has been Activated");
-            } else if (contact.getType().equals(ContactDetail.Type.EMAIL)) {
-                String emailAddress = customer.getContactDetails().get(0).getValue();
-                // TODO: pass email address for templating and localization.
-                emailSender.sendEmail(emailAddress, "Account created", "Dear Valued Customer, Your account has been Activated");
-            }
-            });
-        }
-    }
-
-    @JmsListener(
-            destination = CustomerEventConstants.DESTINATION,
-            selector = CustomerEventConstants.SELECTOR_LOCK_CUSTOMER
-    )
-    public void customerLockedEvent(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                                    final String payload) {
-        Customer customer = customerManager.findCustomer(payload);
-        System.out.println("This is the customer created: "
-                + customer.getGivenName() +"--payload" + payload +"--tenant"+ tenant);
-        this.logger.info("Logger --- This is the customer created: "
-                + customer.getGivenName() +"--payload" + payload +"--tenant"+ tenant);
-        if(customer.getCurrentState().equalsIgnoreCase("LOCKED")){
-            customer.getContactDetails().forEach(contact-> {
-                if (contact.getType().equals(ContactDetail.Type.PHONE)) {
-                    String receiverNumber = customer.getContactDetails().get(0).getValue();
-                    smsSender.sendSMS(receiverNumber, "Dear Valued Customer, Your account has been Locked");
-                } else if (contact.getType().equals(ContactDetail.Type.EMAIL)) {
-                    String emailAddress = customer.getContactDetails().get(0).getValue();
-                    // TODO: pass email address for templating and localization.
-                    emailSender.sendEmail(emailAddress, "Account created", "Dear Valued Customer, Your account has been Locked");
-                }
-            });
-        }
-    }
-
-    @JmsListener(
-            destination = CustomerEventConstants.DESTINATION,
-            selector = CustomerEventConstants.SELECTOR_UNLOCK_CUSTOMER
-    )
-    public void customerUnlockedEvent(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                                      final String payload) {
-        Customer customer = customerManager.findCustomer(payload);
-
-        System.out.println("This is the customer created: "
-                + customer.getGivenName() +"--payload" + payload +"--tenant"+ tenant);
-        this.logger.info("Logger --- This is the customer created: "
-                + customer.getGivenName() +"--payload" + payload +"--tenant"+ tenant);
-        if(customer.getCurrentState().equalsIgnoreCase("LOCKED")){
-            customer.getContactDetails().forEach(contact-> {
-                if (contact.getType().equals(ContactDetail.Type.PHONE)) {
-                    String receiverNumber = customer.getContactDetails().get(0).getValue();
-                    smsSender.sendSMS(receiverNumber, "Dear Valued Customer, Your account has been Unlocked");
-                } else if (contact.getType().equals(ContactDetail.Type.EMAIL)) {
-                    String emailAddress = customer.getContactDetails().get(0).getValue();
-                    // TODO: pass email address for templating and localization.
-                    emailSender.sendEmail(emailAddress, "Account created", "Dear Valued Customer, Your account has been Unlocked");
-                }
-            });
-        }
-    }
-
-    @JmsListener(
-            destination = CustomerEventConstants.DESTINATION,
-            selector = CustomerEventConstants.SELECTOR_CLOSE_CUSTOMER
-    )
-    public void customerClosedEvent(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                                    final String payload) {
-        Customer customer = customerManager.findCustomer(payload);
-        System.out.println("This is the customer created: "
-                + customer.getGivenName() +"--payload" + payload +"--tenant"+ tenant);
-        this.logger.info("Logger --- This is the customer created: "
-                + customer.getGivenName() +"--payload" + payload +"--tenant"+ tenant);
-
-        if(customer.getCurrentState().equalsIgnoreCase("CLOSED")){
-            customer.getContactDetails().forEach(contact-> {
-                if (contact.getType().equals(ContactDetail.Type.PHONE)) {
-                    String receiverNumber = customer.getContactDetails().get(0).getValue();
-                    smsSender.sendSMS(receiverNumber, "Dear Valued Customer, Your account has been Closed");
-                } else if (contact.getType().equals(ContactDetail.Type.EMAIL)) {
-                    String emailAddress = customer.getContactDetails().get(0).getValue();
-                    // TODO: pass email address for templating and localization.
-                    emailSender.sendEmail(emailAddress, "Account created", "Dear Valued Customer, Your account has been Closed");
-                }
-            });
-        }
-    }
-
-    @JmsListener(
-            destination = CustomerEventConstants.DESTINATION,
-            selector = CustomerEventConstants.SELECTOR_REOPEN_CUSTOMER
-    )
-    public void customerReopenedEvent(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                                      final String payload) {
-        Customer customer = customerManager.findCustomer(payload);
-        System.out.println("This is the customer created: "
-                + customer.getGivenName() +"--payload" + payload +"--tenant"+ tenant);
-        this.logger.info("Logger --- This is the customer created: "
-                + customer.getGivenName() +"--payload" + payload +"--tenant"+ tenant);
-        if(customer.getCurrentState().equalsIgnoreCase("LOCKED")){
-            customer.getContactDetails().forEach(contact-> {
-                if (contact.getType().equals(ContactDetail.Type.PHONE)) {
-                    String receiverNumber = customer.getContactDetails().get(0).getValue();
-                    smsSender.sendSMS(receiverNumber, "Dear Valued Customer, Your account has been reopened");
-                } else if (contact.getType().equals(ContactDetail.Type.EMAIL)) {
-                    String emailAddress = customer.getContactDetails().get(0).getValue();
-                    // TODO: pass email address for templating and localization.
-                    emailSender.sendEmail(emailAddress, "Account Reopened", "Dear Valued Customer, Your account has been reopened");
-                }
-            });
-        }
-    }
-}
+    @SuppressWarnings("unused")
+    @Component
+    public class CustomerEventListener {
+	    private final NotificationService notificationService;
+	    private final Logger logger;
+	
+	    @Autowired
+	    public CustomerEventListener(final NotificationService notificationService,
+	                                 @Qualifier(ServiceConstants.LOGGER_NAME) final Logger logger) {
+		    this.logger = logger;
+		    this.notificationService = notificationService;
+	    }
+	
+	    @JmsListener(
+			    destination = CustomerEventConstants.DESTINATION,
+			    selector = CustomerEventConstants.SELECTOR_POST_CUSTOMER
+	    )
+	    public void customerCreatedEvent(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+	                                     final String payload) {
+		    Customer customer = this.notificationService.findCustomer(payload, tenant).get();
+		    this.logger.debug("{} has been invoked", "customerCreatedEvent");
+		
+		    customer.getContactDetails().forEach(contact -> {
+			    if (contact.getType().equals(ContactDetail.Type.PHONE.toString())) {
+				    String receiverNumber = contact.getValue();
+				    // TODO: Localize message
+				    // TODO: Pass message to template
+				    notificationService.sendSMS(receiverNumber, "Dear Valued Customer," +
+						    "\n\nYour account has been created" +
+						    "\n\nBest Regards," +
+						    "\nYour MFI");
+			    } else if (contact.getType().equals(ContactDetail.Type.EMAIL.toString())) {
+				    String emailAddress = contact.getValue();
+				    // TODO: Localize message
+				    // TODO: Pass message to template
+				    notificationService.sendEmail("fineractcnnotificationdemo@gmail.com",
+						    emailAddress,
+						    "Account created",
+						    "Dear Valued Customer," +
+								    "\n\nYour account has been created" +
+								    "\n\nBest Regards," +
+								    "\nYour MFI");
+			    }
+		    });
+	    }
+	
+	    @JmsListener(
+			    destination = CustomerEventConstants.DESTINATION,
+			    selector = CustomerEventConstants.SELECTOR_PUT_CUSTOMER
+	    )
+	    public void customerUpdatedEvents(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+	                                      final String payload) {
+		    this.logger.debug("{} has been invoked", "customerUpdatedEvents");
+		    Customer customer = this.notificationService.findCustomer(payload, tenant).get();
+		
+		    customer.getContactDetails().forEach(contact -> {
+			    if (contact.getType().equals(ContactDetail.Type.PHONE.toString())) {
+				    String receiverNumber = contact.getValue();
+				    // TODO: Localize message
+				    // TODO: Pass message to template
+				    notificationService.sendSMS(receiverNumber,
+						    "Dear Valued Customer," +
+								    "\n\nYour account has been Updated" +
+								    "\n\nBest Regards," +
+								    "\nYour MFI");
+			    } else if (contact.getType().equals(ContactDetail.Type.EMAIL.toString())) {
+				    String emailAddress = contact.getValue();
+				    // TODO: Localize message
+				    // TODO: Pass message to template
+				    notificationService.sendEmail("fineractcnnotificationdemo@gmail.com",
+						    emailAddress,
+						    "Account created",
+						    "Dear Valued Customer," +
+								    "\n\nYour account has been Updated" +
+								    "\n\nBest Regards," +
+								    "\nYour MFI");
+			    }
+		    });
+	    }
+	
+	    @JmsListener(
+			    destination = CustomerEventConstants.DESTINATION,
+			    selector = CustomerEventConstants.SELECTOR_ACTIVATE_CUSTOMER
+	    )
+	    public void customerActivatedEvent(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+	                                       final String payload) {
+		    this.logger.debug("{} has been invoked", "customerActivatedEvent");
+		    Customer customer = this.notificationService.findCustomer(payload, tenant).get();
+		
+		    customer.getContactDetails().forEach(contact -> {
+			    if (contact.getType().equalsIgnoreCase(ContactDetail.Type.PHONE.toString())) {
+				    String receiverNumber = contact.getValue();
+				    notificationService.sendSMS(receiverNumber,
+						    "Dear Valued Customer," +
+								    "\n\nYour account has been Activated" +
+								    "\n\nBest Regards," +
+								    "\nYour MFI");
+			    } else if (contact.getType().equals(ContactDetail.Type.EMAIL.toString())) {
+				    String emailAddress = contact.getValue();
+				    // TODO: Localize message
+				    // TODO: Pass message to template
+				    notificationService.sendEmail("fineractcnnotificationdemo@gmail.com",
+						    emailAddress,
+						    "Account created",
+						    "Dear Valued Customer," +
+								    "\n\nYour account has been Activated" +
+								    "\n\nBest Regards," +
+								    "\nYour MFI");
+			    }
+		    });
+	    }
+	
+	    @JmsListener(
+			    destination = CustomerEventConstants.DESTINATION,
+			    selector = CustomerEventConstants.SELECTOR_LOCK_CUSTOMER
+	    )
+	    public void customerLockedEvent(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+	                                    final String payload) {
+		    this.logger.debug("{} has been invoked", "customerLockedEvent");
+		    Customer customer = this.notificationService.findCustomer(payload, tenant).get();
+		
+		    customer.getContactDetails().forEach(contact -> {
+			    if (contact.getType().equals(ContactDetail.Type.PHONE.toString())) {
+				    String receiverNumber = contact.getValue();
+				    notificationService.sendSMS(receiverNumber,
+						    "Dear Valued Customer," +
+								    "\n\nYour account has been Locked" +
+								    "\n\nBest Regards," +
+								    "\nYour MFI");
+			    } else if (contact.getType().equals(ContactDetail.Type.EMAIL.toString())) {
+				    String emailAddress = contact.getValue();
+				    // TODO: Localize message
+				    // TODO: Pass message to template
+				    notificationService.sendEmail("fineractcnnotificationdemo@gmail.com",
+						    emailAddress, "Account created",
+						    "Dear Valued Customer," +
+								    "\n\nYour account has been Locked" +
+								    "\n\nBest Regards," +
+								    "\nYour MFI");
+			    }
+		    });
+	    }
+	    
+	    @JmsListener(
+			    destination = CustomerEventConstants.DESTINATION,
+			    selector = CustomerEventConstants.SELECTOR_UNLOCK_CUSTOMER
+	    )
+	    public void customerUnlockedEvent(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+	                                      final String payload) {
+		    this.logger.debug("{} has been invoked", "customerUnlockedEvent");
+		    Customer customer = this.notificationService.findCustomer(payload, tenant).get();
+		
+		    customer.getContactDetails().forEach(contact -> {
+			    if (contact.getType().equals(ContactDetail.Type.PHONE.toString())) {
+				    String receiverNumber = contact.getValue();
+				    notificationService.sendSMS(receiverNumber,
+						    "Dear Valued Customer," +
+						    "\n\nYour account has been Unlocked" +
+								    "\n\nBest Regards," +
+								    "\nYour MFI");
+			    } else if (contact.getType().equals(ContactDetail.Type.EMAIL.toString())) {
+				    String emailAddress = contact.getValue();
+				    // TODO: Localize message
+				    // TODO: Pass message to template
+				    notificationService.sendEmail("fineractcnnotificationdemo@gmail.com",
+						    emailAddress,
+						    "Account created",
+						    "Dear Valued Customer," +
+								    "\n\nYour account has been Unlocked" +
+								    "\n\nBest Regards," +
+								    "\nYour MFI");
+			    }
+		    });
+	    }
+	
+	    @JmsListener(
+			    destination = CustomerEventConstants.DESTINATION,
+			    selector = CustomerEventConstants.SELECTOR_CLOSE_CUSTOMER
+	    )
+	    public void customerClosedEvent(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+	                                    final String payload) {
+		    this.logger.debug("{} has been invoked", "customerClosedEvent");
+		    Customer customer = this.notificationService.findCustomer(payload, tenant).get();
+		
+		    customer.getContactDetails().forEach(contact -> {
+			    if (contact.getType().equals(ContactDetail.Type.PHONE.toString())) {
+				    String receiverNumber = contact.getValue();
+				    notificationService.sendSMS(receiverNumber,
+						    "Dear Valued Customer," +
+						    "\n\nYour account has been Closed" +
+								    "\n\nBest Regards" +
+								    "\nYour MFI");
+			    } else if (contact.getType().equals(ContactDetail.Type.EMAIL.toString())) {
+				    String emailAddress = contact.getValue();
+				    // TODO: Localize message
+				    // TODO: Pass message to template
+				    notificationService.sendEmail("fineractcnnotificationdemo@gmail.com",
+						    emailAddress, "Account created",
+						    "Dear Valued Customer," +
+								    "\n\nYour account has been Closed" +
+								    "\n\nBest Regards," +
+								    "\nYour MFI");
+			    }
+		    });
+	    }
+	
+	    @JmsListener(
+			    destination = CustomerEventConstants.DESTINATION,
+			    selector = CustomerEventConstants.SELECTOR_REOPEN_CUSTOMER
+	    )
+	    public void customerReopenedEvent(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+	                                      final String payload) {
+		    this.logger.debug("{} has been invoked", "customerReopenedEvent");
+		    Customer customer = this.notificationService.findCustomer(payload, tenant).get();
+		
+		    customer.getContactDetails().forEach(contact -> {
+			    if (contact.getType().equals(ContactDetail.Type.PHONE.toString())) {
+				    String receiverNumber = contact.getValue();
+				    notificationService.sendSMS(receiverNumber,
+						    "Dear Valued Customer," +
+								    "\n\nYour account has been reopened" +
+								    "\n\nBest Regards," +
+								    "\nYour MFI");
+			    } else if (contact.getType().equals(ContactDetail.Type.EMAIL.toString())) {
+				    String emailAddress = contact.getValue();
+				    // TODO: Localize message
+				    // TODO: Pass message to template
+				    notificationService.sendEmail("fineractcnnotificationdemo@gmail.com",
+						    emailAddress,
+						    "Account Reopened",
+						    "Dear Valued Customer," +
+								    "\n\nYour account has been reopened" +
+								    "\n\nBest Regards," +
+								    "\nYour MFI");
+			    }
+		    });
+	    }
+	
+	    @JmsListener(
+			    destination = CustomerEventConstants.DESTINATION,
+			    selector = CustomerEventConstants.SELECTOR_PUT_CONTACT_DETAILS
+	    )
+	    public void contactDetailsChangedEvent(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+	                                           final String payload) {
+		    this.logger.debug("{} has been invoked", "contactDetailsChangedEvent");
+		    Customer customer = this.notificationService.findCustomer(payload, tenant).get();
+		
+		    customer.getContactDetails().forEach(contact -> {
+			    if (contact.getType().equals(ContactDetail.Type.PHONE.toString())) {
+				    String receiverNumber = contact.getValue();
+				    notificationService.sendSMS(receiverNumber,
+						    "Dear Valued Customer," +
+								    "\n\nYour contact has been changed successfully" +
+								    "\nNew Contact: "+receiverNumber+
+								    "\n\nBest Regards," +
+								    "\nYour MFI");
+			    } else if (contact.getType().equals(ContactDetail.Type.EMAIL.toString())) {
+				    String emailAddress = contact.getValue();
+				    // TODO: Localize message
+				    // TODO: Pass message to template
+				    notificationService.sendEmail("fineractcnnotificationdemo@gmail.com",
+						    emailAddress,
+						    "Contact Details Changed",
+						    "Dear Valued Customer," +
+								    "\n\nYour contact has been changed successfully" +
+								    "\n\tNew Contact: "+emailAddress+
+								    "\n\nBest Regards" +
+								    "\nYour MFI");
+			    }
+		    });
+	    }
+	
+	    @JmsListener(
+			    destination = CustomerEventConstants.DESTINATION,
+			    selector = CustomerEventConstants.SELECTOR_PUT_ADDRESS
+	    )
+	    public void addressChangedEvent(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+	                                    final String payload) {
+		    this.logger.debug("{} has been invoked", "addressChangedEvent");
+		
+		    Customer customer = this.notificationService.findCustomer(payload, tenant).get();
+		
+		    customer.getContactDetails().forEach(contact -> {
+			    if (contact.getType().equals(ContactDetail.Type.PHONE.toString())) {
+				    String receiverNumber = contact.getValue();
+				    notificationService.sendSMS(receiverNumber,
+						    "Dear Valued Customer," +
+								    "\n\nYour address has been changed successfully" +
+								    "\n\tStreet: "+ customer.getAddress().getStreet()+
+								    "\n\tCity: "+ customer.getAddress().getCity()+
+								    "\n\tState: "+ customer.getAddress().getRegion()+
+								    "\n\tCountry: "+ customer.getAddress().getCountry()+
+								    "\n\nBest Regards," +
+								    "\nYour MFI");
+			    } else if (contact.getType().equals(ContactDetail.Type.EMAIL.toString())) {
+				    String emailAddress = contact.getValue();
+				    // TODO: Localize message
+				    // TODO: Pass message to template
+				    notificationService.sendEmail("fineractcnnotificationdemo@gmail.com",
+						    emailAddress,
+						    "Contact Details Changed" +
+								    "New Contact: "+emailAddress,
+						    "Dear Valued Customer," +
+								    "\n\nYour address has been changed successfully" +
+								    "\nStreet: "+ customer.getAddress().getStreet() +
+								    "\nCity: "+ customer.getAddress().getCity() +
+								    "\nState: "+ customer.getAddress().getRegion() +
+								    "\nCountry: "+ customer.getAddress().getCountry() +
+								    "\n\nBest Regards" +
+								    "\nYour MFI");
+			    }
+		    });
+	    }
+    }
\ No newline at end of file
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/listener/DepositEventListener.java b/service/src/main/java/org/apache/fineract/cn/notification/service/listener/DepositEventListener.java
deleted file mode 100644
index fa66ace..0000000
--- a/service/src/main/java/org/apache/fineract/cn/notification/service/listener/DepositEventListener.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-/*
-package org.apache.fineract.cn.deposit.listener;
-
-import org.apache.fineract.cn.deposit.api.v1.EventConstants;
-import org.apache.fineract.cn.lang.config.TenantHeaderFilter;
-import org.slf4j.Logger;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.jms.annotation.JmsListener;
-import org.springframework.messaging.handler.annotation.Header;
-import org.springframework.stereotype.Component;
-
-@Component
-public class DepositEventListener {
-
-
-    @Autowired
-    public DepositEventListener() {
-        super();
-    }
-
-    @JmsListener(
-            destination = EventConstants.DESTINATION,
-            selector = EventConstants.SELECTOR_INTEREST_ACCRUED,
-            subscription = EventConstants.DESTINATION
-    )
-    public void onAccrual(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                          final String payload) {
-    }
-
-    @JmsListener(
-            destination = EventConstants.DESTINATION,
-            selector = EventConstants.SELECTOR_DIVIDEND_DISTRIBUTION,
-            subscription = EventConstants.DESTINATION
-    )
-    public void onDividendDistribution(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                                       final String payload) {
-        this.logger.debug("Dividend distributed for product {}.", payload);
-        this.eventRecorder.event(tenant, EventConstants.DIVIDEND_DISTRIBUTION, payload, String.class);
-    }
-
-}
-*/
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/listener/IdentityEventListener.java b/service/src/main/java/org/apache/fineract/cn/notification/service/listener/IdentityEventListener.java
deleted file mode 100644
index 142f138..0000000
--- a/service/src/main/java/org/apache/fineract/cn/notification/service/listener/IdentityEventListener.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-/*
-package org.apache.fineract.cn.notification.service.listener;
-
-import org.apache.fineract.cn.identity.api.v1.events.EventConstants;
-import org.apache.fineract.cn.lang.config.TenantHeaderFilter;
-import org.apache.fineract.cn.test.listener.EventRecorder;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.jms.annotation.JmsListener;
-import org.springframework.messaging.handler.annotation.Header;
-import org.springframework.stereotype.Component;
-
-@Component
-public class IdentityEventListener {
-
-    private IdentityManager identityManager;
-
-    @Autowired
-    public IdentityEventListener( final IdentityManager identityManager) {
-        this.identityManager = identityManager;
-    }
-
-
-    @JmsListener(
-            subscription = EventConstants.DESTINATION,
-            destination = EventConstants.DESTINATION,
-            selector = EventConstants.SELECTOR_POST_USER
-    )
-    public void onCreateUser(
-            @Header(TenantHeaderFilter.TENANT_HEADER)final String tenant,
-            final String payload) throws Exception {
-        eventRecorder.event(tenant, EventConstants.OPERATION_POST_USER, payload, String.class);
-    }
-
-    @JmsListener(
-            subscription = EventConstants.DESTINATION,
-            destination = EventConstants.DESTINATION,
-            selector = EventConstants.SELECTOR_PUT_USER_ROLEIDENTIFIER
-    )
-    public void onChangeUserRole(
-            @Header(TenantHeaderFilter.TENANT_HEADER)final String tenant,
-            final String payload) throws Exception {
-        eventRecorder.event(tenant, EventConstants.OPERATION_PUT_USER_ROLEIDENTIFIER, payload, String.class);
-    }
-
-    @JmsListener(
-            subscription = EventConstants.DESTINATION,
-            destination = EventConstants.DESTINATION,
-            selector = EventConstants.SELECTOR_PUT_USER_PASSWORD
-    )
-    public void onChangeUserPassword(
-            @Header(TenantHeaderFilter.TENANT_HEADER)final String tenant,
-            final String payload) throws Exception {
-        eventRecorder.event(tenant, EventConstants.OPERATION_PUT_USER_PASSWORD, payload, String.class);
-    }
-
-    @JmsListener(
-            subscription = EventConstants.DESTINATION,
-            destination = EventConstants.DESTINATION,
-            selector = EventConstants.SELECTOR_AUTHENTICATE
-    )
-    public void onAuthentication(
-            @Header(TenantHeaderFilter.TENANT_HEADER)final String tenant,
-            final String payload) throws Exception {
-        eventRecorder.event(tenant, EventConstants.OPERATION_AUTHENTICATE, payload, String.class);
-    }
-
-
-}
-*/
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/listener/OfficeEventListener.java b/service/src/main/java/org/apache/fineract/cn/notification/service/listener/OfficeEventListener.java
deleted file mode 100644
index 219c830..0000000
--- a/service/src/main/java/org/apache/fineract/cn/notification/service/listener/OfficeEventListener.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.fineract.cn.notification.service.listener;
-
-import org.apache.fineract.cn.notification.service.internal.service.EmailSender;
-import org.apache.fineract.cn.notification.service.internal.service.SMSSender;
-import org.apache.fineract.cn.office.api.v1.EventConstants;
-import org.apache.fineract.cn.lang.config.TenantHeaderFilter;
-import org.apache.fineract.cn.office.api.v1.client.OrganizationManager;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.jms.annotation.JmsListener;
-import org.springframework.messaging.handler.annotation.Header;
-import org.springframework.stereotype.Component;
-
-@Component
-@SuppressWarnings("unused")
-public class OfficeEventListener {
-
-	private OrganizationManager organizationManager;
-	private SMSSender smsSender;
-	private EmailSender emailSender;
-
-	@Autowired
-	public OfficeEventListener(final OrganizationManager organizationManager, SMSSender smsSender,
-	                           final EmailSender emailSender) {
-		this.organizationManager = organizationManager;
-		this.smsSender = smsSender;
-		this.emailSender = emailSender;
-	}
-
-	@JmsListener(
-			subscription = EventConstants.DESTINATION,
-			destination = EventConstants.DESTINATION,
-			selector = EventConstants.SELECTOR_POST_OFFICE
-	)
-	public void onCreateOffice(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-	                           final String payload) {
-		//for testing purposes
-		String office = this.organizationManager.findOfficeByIdentifier(payload).getName();
-		if (office.equalsIgnoreCase("Head Office")) {
-			smsSender.sendSMS("+23058409206", "Test From Demo");
-		}
-	}
-}
-
-/*
-	@JmsListener(
-            subscription = EventConstants.DESTINATION,
-            destination = EventConstants.DESTINATION,
-            selector = EventConstants.SELECTOR_POST_EMPLOYEE
-    )
-    public void onCreateEmployee(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                                 final String eventPayload) throws Exception {
-        this.eventRecorder.event(tenant, EventConstants.OPERATION_POST_EMPLOYEE, eventPayload, String.class);
-    }
-
-    @JmsListener(
-            subscription = EventConstants.DESTINATION,
-            destination = EventConstants.DESTINATION,
-            selector = EventConstants.SELECTOR_PUT_EMPLOYEE
-    )
-    public void onUpdateEmployee(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                                 final String eventPayload) throws Exception {
-        this.eventRecorder.event(tenant, EventConstants.OPERATION_PUT_EMPLOYEE, eventPayload, String.class);
-    }
-
-    @JmsListener(
-            subscription = EventConstants.DESTINATION,
-            destination = EventConstants.DESTINATION,
-            selector = EventConstants.SELECTOR_DELETE_EMPLOYEE
-    )
-    public void onDeleteEmployee(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                                 final String eventPayload) throws Exception {
-        this.eventRecorder.event(tenant, EventConstants.OPERATION_DELETE_EMPLOYEE, eventPayload, String.class);
-    }
-
-    @JmsListener(
-            subscription = EventConstants.DESTINATION,
-            destination = EventConstants.DESTINATION,
-            selector = EventConstants.SELECTOR_PUT_CONTACT_DETAIL
-    )
-    public void onSetContactDetail(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                                   final String eventPayload) throws Exception {
-        this.eventRecorder.event(tenant, EventConstants.OPERATION_PUT_CONTACT_DETAIL, eventPayload, String.class);
-    }
-
-    @JmsListener(
-            subscription = EventConstants.DESTINATION,
-            destination = EventConstants.DESTINATION,
-            selector = EventConstants.SELECTOR_DELETE_CONTACT_DETAIL
-    )
-    public void onDeleteContactDetail(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                                      final String eventPayload) throws Exception {
-        this.eventRecorder.event(tenant, EventConstants.OPERATION_DELETE_CONTACT_DETAIL, eventPayload, String.class);
-    }
-
-    @JmsListener(
-            subscription = EventConstants.DESTINATION,
-            destination = EventConstants.DESTINATION,
-            selector = EventConstants.SELECTOR_DELETE_OFFICE
-    )
-    public void onDeleteOffice(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                               final String payload)
-            throws Exception {
-        this.eventRecorder.event(tenant, EventConstants.OPERATION_DELETE_OFFICE, payload, String.class);
-    }
-
-    @JmsListener(
-            subscription = EventConstants.DESTINATION,
-            destination = EventConstants.DESTINATION,
-            selector = EventConstants.SELECTOR_PUT_OFFICE
-    )
-    public void onUpdateOffice(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                               final String payload)
-            throws Exception {
-        this.eventRecorder.event(tenant, EventConstants.OPERATION_PUT_OFFICE, payload, String.class);
-    }
-
-}
-*/
\ No newline at end of file
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/listener/PayrollEventListener.java b/service/src/main/java/org/apache/fineract/cn/notification/service/listener/PayrollEventListener.java
deleted file mode 100644
index ce4cc70..0000000
--- a/service/src/main/java/org/apache/fineract/cn/notification/service/listener/PayrollEventListener.java
+++ /dev/null
@@ -1,61 +0,0 @@
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-    /*
-package org.apache.fineract.cn.payroll.listener;
-
-import org.apache.fineract.cn.payroll.api.v1.EventConstants;
-import org.apache.fineract.cn.payroll.service.ServiceConstants;
-import org.apache.fineract.cn.lang.config.TenantHeaderFilter;
-import org.apache.fineract.cn.test.listener.EventRecorder;
-import org.slf4j.Logger;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.jms.annotation.JmsListener;
-import org.springframework.messaging.handler.annotation.Header;
-import org.springframework.stereotype.Component;
-
-@Component
-public class PayrollEventListener {
-
-    private final Logger logger;
-    private final EventRecorder eventRecorder;
-
-    @Autowired
-    public PayrollEventListener(@Qualifier(ServiceConstants.LOGGER_NAME) final Logger logger,
-                                       final EventRecorder eventRecorder) {
-        super();
-        this.logger = logger;
-        this.eventRecorder = eventRecorder;
-    }
-
-
-    @JmsListener(
-            subscription = EventConstants.DESTINATION,
-            destination = EventConstants.DESTINATION,
-            selector = EventConstants.SELECTOR_POST_DISTRIBUTION
-    )
-    public void onPostCollection(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                                 final String payload) {
-        this.logger.info("Payment distribution with source account {0} processed.", payload);
-        this.eventRecorder.event(tenant, EventConstants.POST_DISTRIBUTION, payload, String.class);
-    }
-
-}
-*/
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/listener/PortfolioEventListener.java b/service/src/main/java/org/apache/fineract/cn/notification/service/listener/PortfolioEventListener.java
index 50697b2..2f860e5 100644
--- a/service/src/main/java/org/apache/fineract/cn/notification/service/listener/PortfolioEventListener.java
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/listener/PortfolioEventListener.java
@@ -18,129 +18,149 @@
  */
 package org.apache.fineract.cn.notification.service.listener;
 
-import org.apache.fineract.cn.group.api.v1.EventConstants;
 import org.apache.fineract.cn.individuallending.api.v1.events.IndividualLoanEventConstants;
 import org.apache.fineract.cn.lang.config.TenantHeaderFilter;
-import org.apache.fineract.cn.notification.service.internal.service.EmailSender;
-import org.apache.fineract.cn.notification.service.internal.service.SMSSender;
+import org.apache.fineract.cn.notification.service.ServiceConstants;
+import org.apache.fineract.cn.notification.service.internal.service.NotificationService;
+import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.jms.annotation.JmsListener;
 import org.springframework.messaging.handler.annotation.Header;
 import org.springframework.stereotype.Component;
-import org.apache.fineract.cn.portfolio.api.v1.client.PortfolioManager;
 
+/**
+ * @author Ebenezer Graham
+ */
 @SuppressWarnings("unused")
 @Component
 public class PortfolioEventListener {
-
-    private PortfolioManager portfolioManager;
-    private SMSSender smsSender;
-    private EmailSender emailSender;
-
-    @Autowired
-    public PortfolioEventListener(PortfolioManager portfolioManager, SMSSender smsSender, EmailSender emailSender) {
-        super();
-        this.portfolioManager = portfolioManager;
-        this.smsSender = smsSender;
-        this.emailSender = emailSender;
-    }
-
-    @JmsListener(
-            subscription = IndividualLoanEventConstants.DESTINATION,
-            destination = IndividualLoanEventConstants.DESTINATION,
-            selector = IndividualLoanEventConstants.SELECTOR_DENY_INDIVIDUALLOAN_CASE
-    )
-    public void onDeny(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                       final String payload) {
-
-    }
-
-    @JmsListener(
-            subscription = IndividualLoanEventConstants.DESTINATION,
-            destination = IndividualLoanEventConstants.DESTINATION,
-            selector = IndividualLoanEventConstants.SELECTOR_APPROVE_INDIVIDUALLOAN_CASE
-    )
-    public void onApprove(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                          final String payload) {
-
-    }
-
-    @JmsListener(
-            subscription = IndividualLoanEventConstants.DESTINATION,
-            destination = IndividualLoanEventConstants.DESTINATION,
-            selector = IndividualLoanEventConstants.SELECTOR_ACCEPT_PAYMENT_INDIVIDUALLOAN_CASE
-    )
-    public void onAcceptPayment(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                                final String payload) {
-    }
-
-
-    @JmsListener(
-            subscription = IndividualLoanEventConstants.DESTINATION,
-            destination = IndividualLoanEventConstants.DESTINATION,
-            selector = IndividualLoanEventConstants.SELECTOR_DISBURSE_INDIVIDUALLOAN_CASE
-    )
-    public void onDisburse(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                           final String payload) {
-
-    }
-
-    @JmsListener(
-            subscription = IndividualLoanEventConstants.DESTINATION,
-            destination = IndividualLoanEventConstants.DESTINATION,
-            selector = IndividualLoanEventConstants.SELECTOR_CHECK_LATE_INDIVIDUALLOAN_CASE
-    )
-    public void onCheckLate(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                            final String payload) {
-
-    }
-
-    @JmsListener(
-            subscription = IndividualLoanEventConstants.DESTINATION,
-            destination = IndividualLoanEventConstants.DESTINATION,
-            selector = IndividualLoanEventConstants.SELECTOR_OPEN_INDIVIDUALLOAN_CASE
-    )
-    public void onOpen(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                       final String payload) {
-
-    }
-
-    @JmsListener(
-            subscription = IndividualLoanEventConstants.DESTINATION,
-            destination = IndividualLoanEventConstants.DESTINATION,
-            selector = IndividualLoanEventConstants.SELECTOR_MARK_LATE_INDIVIDUALLOAN_CASE
-    )
-    public void onMarkLate(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                           final String payload) {
-
-    }
-
-    @JmsListener(
-            subscription = IndividualLoanEventConstants.DESTINATION,
-            destination = IndividualLoanEventConstants.DESTINATION,
-            selector = IndividualLoanEventConstants.SELECTOR_CLOSE_INDIVIDUALLOAN_CASE
-    )
-    public void onClose(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                        final String payload) {
-    }
-
-    @JmsListener(
-                subscription = EventConstants.DESTINATION,
-                destination = EventConstants.DESTINATION,
-                selector = EventConstants.SELECTOR_POST_GROUP
-        )
-    public void onGroupCreated(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                                   final String payload) {
-
-        }
-
-        @JmsListener(
-                subscription = EventConstants.DESTINATION,
-                destination = EventConstants.DESTINATION,
-                selector = EventConstants.SELECTOR_ACTIVATE_GROUP
-        )
-        public void onGroupActivated(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                                     final String payload) {
-        }
-
-    }
+	
+	private final NotificationService notificationService;
+	private final Logger logger;
+	
+	@Autowired
+	public PortfolioEventListener(
+			final NotificationService notificationService,
+			@Qualifier(ServiceConstants.LOGGER_NAME) final Logger logger) {
+		super();
+		this.logger = logger;
+		this.notificationService = notificationService;
+	}
+	
+	@JmsListener(
+			subscription = IndividualLoanEventConstants.DESTINATION,
+			destination = IndividualLoanEventConstants.DESTINATION,
+			selector = IndividualLoanEventConstants.SELECTOR_OPEN_INDIVIDUALLOAN_CASE
+	)
+	public void onOpen(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+	                   final String payload) {
+	}
+	
+	@JmsListener(
+			subscription = IndividualLoanEventConstants.DESTINATION,
+			destination = IndividualLoanEventConstants.DESTINATION,
+			selector = IndividualLoanEventConstants.SELECTOR_DENY_INDIVIDUALLOAN_CASE
+	)
+	public void onDeny(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+	                   final String payload) {
+		this.notificationService.sendSMS("+23058409206",
+				"Dear Valued Customer,\n\nYour loan request has been denied\n\nBest Regards\nYour MFI");
+	}
+	
+	@JmsListener(
+			subscription = IndividualLoanEventConstants.DESTINATION,
+			destination = IndividualLoanEventConstants.DESTINATION,
+			selector = IndividualLoanEventConstants.SELECTOR_APPROVE_INDIVIDUALLOAN_CASE
+	)
+	public void onApprove(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+	                      final String payload) {
+		logger.info(payload);
+		this.notificationService.sendSMS("+23058409206",
+				"Dear Valued Customer,\n\nYour loan has been Approved and waiting disbursal\n\nBest Regards\nYour MFI");
+	}
+	
+	@JmsListener(
+			subscription = IndividualLoanEventConstants.DESTINATION,
+			destination = IndividualLoanEventConstants.DESTINATION,
+			selector = IndividualLoanEventConstants.SELECTOR_DISBURSE_INDIVIDUALLOAN_CASE
+	)
+	public void onDisburse(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+	                       final String payload) {
+		logger.info(payload);
+		this.notificationService.sendSMS("+23058409206",
+			"Dear Valued Customer,\n\nYour loan has been disbursed\n\nBest Regards\nYour MFI");
+	}
+	
+	@JmsListener(
+			subscription = IndividualLoanEventConstants.DESTINATION,
+			destination = IndividualLoanEventConstants.DESTINATION,
+			selector = IndividualLoanEventConstants.SELECTOR_APPLY_INTEREST_INDIVIDUALLOAN_CASE
+	)
+	public void onApplyInterest(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+	                            final String payload) {
+	}
+	
+	@JmsListener(
+			subscription = IndividualLoanEventConstants.DESTINATION,
+			destination = IndividualLoanEventConstants.DESTINATION,
+			selector = IndividualLoanEventConstants.SELECTOR_ACCEPT_PAYMENT_INDIVIDUALLOAN_CASE
+	)
+	public void onAcceptPayment(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+	                            final String payload) {
+	}
+	
+	@JmsListener(
+			subscription = IndividualLoanEventConstants.DESTINATION,
+			destination = IndividualLoanEventConstants.DESTINATION,
+			selector = IndividualLoanEventConstants.SELECTOR_CHECK_LATE_INDIVIDUALLOAN_CASE
+	)
+	public void onCheckLate(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+	                        final String payload) {
+	}
+	
+	@JmsListener(
+			subscription = IndividualLoanEventConstants.DESTINATION,
+			destination = IndividualLoanEventConstants.DESTINATION,
+			selector = IndividualLoanEventConstants.SELECTOR_MARK_LATE_INDIVIDUALLOAN_CASE
+	)
+	public void onMarkLate(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+	                       final String payload) {
+	}
+	
+	@JmsListener(
+			subscription = IndividualLoanEventConstants.DESTINATION,
+			destination = IndividualLoanEventConstants.DESTINATION,
+			selector = IndividualLoanEventConstants.SELECTOR_MARK_IN_ARREARS_INDIVIDUALLOAN_CASE
+	)
+	public void onMarkInArrears(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+	                            final String payload) {
+	}
+	
+	@JmsListener(
+			subscription = IndividualLoanEventConstants.DESTINATION,
+			destination = IndividualLoanEventConstants.DESTINATION,
+			selector = IndividualLoanEventConstants.SELECTOR_WRITE_OFF_INDIVIDUALLOAN_CASE
+	)
+	public void onWriteOff(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+	                       final String payload) {
+	}
+	
+	@JmsListener(
+			subscription = IndividualLoanEventConstants.DESTINATION,
+			destination = IndividualLoanEventConstants.DESTINATION,
+			selector = IndividualLoanEventConstants.SELECTOR_CLOSE_INDIVIDUALLOAN_CASE
+	)
+	public void onClose(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+	                    final String payload) {
+	}
+	
+	@JmsListener(
+			subscription = IndividualLoanEventConstants.DESTINATION,
+			destination = IndividualLoanEventConstants.DESTINATION,
+			selector = IndividualLoanEventConstants.SELECTOR_RECOVER_INDIVIDUALLOAN_CASE
+	)
+	public void onRecover(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
+	                      final String payload) {
+	}
+}
\ No newline at end of file
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/listener/TellerEventListener.java b/service/src/main/java/org/apache/fineract/cn/notification/service/listener/TellerEventListener.java
deleted file mode 100644
index 5b461be..0000000
--- a/service/src/main/java/org/apache/fineract/cn/notification/service/listener/TellerEventListener.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-    /*
-package org.apache.fineract.cn.teller.listener;
-
-import org.apache.fineract.cn.teller.AbstractTellerTest;
-import org.apache.fineract.cn.teller.api.v1.EventConstants;
-import org.apache.fineract.cn.lang.config.TenantHeaderFilter;
-import org.apache.fineract.cn.test.listener.EventRecorder;
-import org.slf4j.Logger;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.jms.annotation.JmsListener;
-import org.springframework.messaging.handler.annotation.Header;
-import org.springframework.stereotype.Component;
-
-@Component
-public class TellerEventListener {
-
-    private final Logger logger;
-    private final EventRecorder eventRecorder;
-
-    public TellerEventListener(@Qualifier(AbstractTellerTest.LOGGER_NAME) final Logger logger,
-                               final EventRecorder eventRecorder) {
-        super();
-        this.logger = logger;
-        this.eventRecorder = eventRecorder;
-    }
-
-
-    @JmsListener(
-            destination = EventConstants.DESTINATION,
-            selector = EventConstants.SELECTOR_POST_TELLER,
-            subscription = EventConstants.DESTINATION
-    )
-    public void onCreate(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                         final String payload) {
-        this.logger.debug("Teller {} created.", payload);
-        this.eventRecorder.event(tenant, EventConstants.POST_TELLER, payload, String.class);
-    }
-
-    @JmsListener(
-            destination = EventConstants.DESTINATION,
-            selector = EventConstants.SELECTOR_PUT_TELLER,
-            subscription = EventConstants.DESTINATION
-    )
-    public void onChange(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                         final String payload) {
-        this.logger.debug("Teller {} created.", payload);
-        this.eventRecorder.event(tenant, EventConstants.PUT_TELLER, payload, String.class);
-    }
-
-    @JmsListener(
-            destination = EventConstants.DESTINATION,
-            selector = EventConstants.SELECTOR_OPEN_TELLER,
-            subscription = EventConstants.DESTINATION
-    )
-    public void onOpen(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                       final String payload) {
-        this.logger.debug("Teller {} created.", payload);
-        this.eventRecorder.event(tenant, EventConstants.OPEN_TELLER, payload, String.class);
-    }
-
-    @JmsListener(
-            destination = EventConstants.DESTINATION,
-            selector = EventConstants.SELECTOR_CLOSE_TELLER,
-            subscription = EventConstants.DESTINATION
-    )
-    public void onClose(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                        final String payload) {
-        this.logger.debug("Teller {} created.", payload);
-        this.eventRecorder.event(tenant, EventConstants.CLOSE_TELLER, payload, String.class);
-    }
-
-    @JmsListener(
-            destination = EventConstants.DESTINATION,
-            selector = EventConstants.SELECTOR_AUTHENTICATE_TELLER,
-            subscription = EventConstants.DESTINATION
-    )
-    public void onAuthenticate(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                               final String payload) {
-        this.logger.debug("Teller {} created.", payload);
-        this.eventRecorder.event(tenant, EventConstants.AUTHENTICATE_TELLER, payload, String.class);
-    }
-
-    @JmsListener(
-            destination = EventConstants.DESTINATION,
-            selector = EventConstants.SELECTOR_PAUSE_TELLER,
-            subscription = EventConstants.DESTINATION
-    )
-    public void onPause(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                        final String payload) {
-        this.logger.debug("Teller {} created.", payload);
-        this.eventRecorder.event(tenant, EventConstants.PAUSE_TELLER, payload, String.class);
-    }
-
-    @JmsListener(
-            destination = EventConstants.DESTINATION,
-            selector = EventConstants.SELECTOR_CONFIRM_TRANSACTION,
-            subscription = EventConstants.DESTINATION
-    )
-    public void confirmTransaction(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                                   final String payload) {
-        this.logger.debug("Teller {} created.", payload);
-        this.eventRecorder.event(tenant, EventConstants.CONFIRM_TRANSACTION, payload, String.class);
-    }
-
-    @JmsListener(
-            destination = EventConstants.DESTINATION,
-            selector = EventConstants.SELECTOR_DELETE_TELLER,
-            subscription = EventConstants.DESTINATION
-    )
-    public void onDeleteTeller(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                               final String payload) {
-        this.logger.debug("Teller {} created.", payload);
-        this.eventRecorder.event(tenant, EventConstants.DELETE_TELLER, payload, String.class);
-    }
-
-    @JmsListener(
-            destination = EventConstants.DESTINATION,
-            selector = EventConstants.SELECTOR_SAVE_DENOMINATION,
-            subscription = EventConstants.DESTINATION
-    )
-    public void onSaveDenomination(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
-                                   final String payload) {
-        this.logger.debug("Teller {} created.", payload);
-        this.eventRecorder.event(tenant, EventConstants.SAVE_DENOMINATION, payload, String.class);
-    }
-
-}
-*/
diff --git a/service/src/main/java/org/apache/fineract/cn/notification/service/rest/NotificationRestController.java b/service/src/main/java/org/apache/fineract/cn/notification/service/rest/NotificationRestController.java
index 983b43e..df36f03 100644
--- a/service/src/main/java/org/apache/fineract/cn/notification/service/rest/NotificationRestController.java
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/rest/NotificationRestController.java
@@ -18,102 +18,153 @@
  */
 package org.apache.fineract.cn.notification.service.rest;
 
-import org.apache.fineract.cn.notification.api.v1.PermittableGroupIds;
-import org.apache.fineract.cn.notification.api.v1.domain.Sample;
-import org.apache.fineract.cn.notification.service.ServiceConstants;
-import org.apache.fineract.cn.notification.service.internal.command.InitializeServiceCommand;
-import org.apache.fineract.cn.notification.service.internal.command.SampleCommand;
-import org.apache.fineract.cn.notification.service.internal.service.SampleService;
-import java.util.List;
-import javax.validation.Valid;
 import org.apache.fineract.cn.anubis.annotation.AcceptedTokenType;
 import org.apache.fineract.cn.anubis.annotation.Permittable;
 import org.apache.fineract.cn.command.gateway.CommandGateway;
 import org.apache.fineract.cn.lang.ServiceException;
+import org.apache.fineract.cn.notification.api.v1.PermittableGroupIds;
+import org.apache.fineract.cn.notification.api.v1.client.ConfigurationNotFoundException;
+import org.apache.fineract.cn.notification.api.v1.domain.EmailConfiguration;
+import org.apache.fineract.cn.notification.api.v1.domain.SMSConfiguration;
+import org.apache.fineract.cn.notification.service.ServiceConstants;
+import org.apache.fineract.cn.notification.service.internal.command.CreateEmailConfigurationCommand;
+import org.apache.fineract.cn.notification.service.internal.command.CreateSMSConfigurationCommand;
+import org.apache.fineract.cn.notification.service.internal.command.InitializeServiceCommand;
+import org.apache.fineract.cn.notification.service.internal.command.PostSMSCommand;
+import org.apache.fineract.cn.notification.service.internal.service.NotificationService;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.List;
 
 @SuppressWarnings("unused")
 @RestController
 @RequestMapping("/")
 public class NotificationRestController {
-
-  private final Logger logger;
-  private final CommandGateway commandGateway;
-  private final SampleService sampleService;
-
-  @Autowired
-  public NotificationRestController(@Qualifier(ServiceConstants.LOGGER_NAME) final Logger logger,
-                              final CommandGateway commandGateway,
-                              final SampleService sampleService) {
-    super();
-    this.logger = logger;
-    this.commandGateway = commandGateway;
-    this.sampleService = sampleService;
-  }
-
-  @Permittable(value = AcceptedTokenType.SYSTEM)
-  @RequestMapping(
-      value = "/initialize",
-      method = RequestMethod.POST,
-      consumes = MediaType.ALL_VALUE,
-      produces = MediaType.APPLICATION_JSON_VALUE
-  )
-  public
-  @ResponseBody
-  ResponseEntity<Void> initialize() throws InterruptedException {
-      this.commandGateway.process(new InitializeServiceCommand());
-      return ResponseEntity.accepted().build();
-  }
-
-  @Permittable(value = AcceptedTokenType.TENANT, groupId = PermittableGroupIds.SAMPLE_MANAGEMENT)
-  @RequestMapping(
-          value = "/sample",
-          method = RequestMethod.GET,
-          consumes = MediaType.ALL_VALUE,
-          produces = MediaType.APPLICATION_JSON_VALUE
-  )
-  public
-  @ResponseBody
-  List<Sample> findAllEntities() {
-    return this.sampleService.findAllEntities();
-  }
-
-  @Permittable(value = AcceptedTokenType.TENANT, groupId = PermittableGroupIds.SAMPLE_MANAGEMENT)
-  @RequestMapping(
-          value = "/sample/{identifier}",
-          method = RequestMethod.GET,
-          consumes = MediaType.ALL_VALUE,
-          produces = MediaType.APPLICATION_JSON_VALUE
-  )
-  public
-  @ResponseBody
-  ResponseEntity<Sample> getEntity(@PathVariable("identifier") final String identifier) {
-    return this.sampleService.findByIdentifier(identifier)
-            .map(ResponseEntity::ok)
-            .orElseThrow(() -> ServiceException.notFound("Instance with identifier " + identifier + " doesn't exist."));
-  }
-
-  @Permittable(value = AcceptedTokenType.TENANT, groupId = PermittableGroupIds.SAMPLE_MANAGEMENT)
-  @RequestMapping(
-      value = "/sample",
-      method = RequestMethod.POST,
-      consumes = MediaType.APPLICATION_JSON_VALUE,
-      produces = MediaType.APPLICATION_JSON_VALUE
-  )
-  public
-  @ResponseBody
-  ResponseEntity<Void> createEntity(@RequestBody @Valid final Sample instance) throws InterruptedException {
-    this.commandGateway.process(new SampleCommand(instance));
-    return ResponseEntity.accepted().build();
-  }
+	
+	private final Logger logger;
+	private final CommandGateway commandGateway;
+	private final NotificationService notificationService;
+	
+	@Autowired
+	public NotificationRestController(@Qualifier(ServiceConstants.LOGGER_NAME) final Logger logger,
+	                                  final CommandGateway commandGateway,
+	                                  final NotificationService notificationService) {
+		super();
+		this.logger = logger;
+		this.commandGateway = commandGateway;
+		this.notificationService = notificationService;
+	}
+	
+	@Permittable(value = AcceptedTokenType.SYSTEM)
+	@RequestMapping(
+			value = "/initialize",
+			method = RequestMethod.POST,
+			consumes = MediaType.ALL_VALUE,
+			produces = MediaType.APPLICATION_JSON_VALUE
+	)
+	public
+	@ResponseBody
+	ResponseEntity<Void> initialize() throws InterruptedException {
+		this.commandGateway.process(new InitializeServiceCommand());
+		return ResponseEntity.accepted().build();
+	}
+	
+	@Permittable(value = AcceptedTokenType.TENANT, groupId = PermittableGroupIds.SELF_MANAGEMENT)
+	@RequestMapping(
+			value = "/notification/sms/active",
+			method = RequestMethod.GET,
+			consumes = MediaType.ALL_VALUE,
+			produces = MediaType.APPLICATION_JSON_VALUE
+	)
+	public
+	@ResponseBody
+	List<SMSConfiguration> findAllActiveSMSConfigurationEntities() {
+		return this.notificationService.findAllActiveSMSConfigurationEntities();
+	}
+	
+	@Permittable(value = AcceptedTokenType.TENANT, groupId = PermittableGroupIds.SELF_MANAGEMENT)
+	@RequestMapping(
+			value = "/notification/email/active",
+			method = RequestMethod.GET,
+			consumes = MediaType.ALL_VALUE,
+			produces = MediaType.APPLICATION_JSON_VALUE
+	)
+	public
+	@ResponseBody
+	List<EmailConfiguration> findAllActiveEmailConfigurationEntities() {
+		return this.notificationService.findAllActiveEmailConfigurationEntities();
+	}
+	
+	@Permittable(value = AcceptedTokenType.TENANT, groupId = PermittableGroupIds.SELF_MANAGEMENT)
+	@RequestMapping(
+			value = "/notification/sms/{identifier}",
+			method = RequestMethod.GET,
+			consumes = MediaType.ALL_VALUE,
+			produces = MediaType.APPLICATION_JSON_VALUE
+	)
+	public
+	@ResponseBody
+	ResponseEntity<SMSConfiguration> findSMSConfigurationByIdentifier(@PathVariable("identifier") final String identifier)
+	throws ConfigurationNotFoundException {
+		return this.notificationService.findSMSConfigurationByIdentifier(identifier)
+				.map(ResponseEntity::ok)
+				.orElseThrow(() -> ServiceException.notFound("SMS Gateway Configuration with identifier " + identifier + " doesn't exist."));
+	}
+	
+	@Permittable(value = AcceptedTokenType.TENANT, groupId = PermittableGroupIds.SELF_MANAGEMENT)
+	@RequestMapping(
+			value = "/notification/email/{identifier}",
+			method = RequestMethod.GET,
+			consumes = MediaType.ALL_VALUE,
+			produces = MediaType.APPLICATION_JSON_VALUE
+	)
+	public
+	@ResponseBody
+	ResponseEntity<EmailConfiguration> findEmailConfigurationByIdentifier(@PathVariable("identifier") final String identifier)
+			throws ConfigurationNotFoundException {
+		return this.notificationService.findEmailConfigurationByIdentifier(identifier)
+				.map(ResponseEntity::ok)
+				.orElseThrow(() -> ServiceException.notFound("Email Gateway Configuration with identifier " + identifier + " doesn't exist."));
+	}
+	
+	@Permittable(value = AcceptedTokenType.TENANT, groupId = PermittableGroupIds.SELF_MANAGEMENT)
+	@RequestMapping(
+			value = "/notification/sms/create",
+			method = RequestMethod.POST,
+			consumes = MediaType.APPLICATION_JSON_VALUE,
+			produces = MediaType.APPLICATION_JSON_VALUE
+	)
+	public
+	@ResponseBody
+	ResponseEntity<Void> createSMSConfiguration(@RequestBody @Valid final SMSConfiguration smsConfiguration) throws InterruptedException {
+		if (this.notificationService.smsConfigurationExists(smsConfiguration.getIdentifier())) {
+			throw ServiceException.conflict("Configuration {0} already exists.", smsConfiguration.getIdentifier());
+		}
+		
+		this.commandGateway.process(new CreateSMSConfigurationCommand(smsConfiguration));
+		return ResponseEntity.accepted().build();
+	}
+	
+	@Permittable(value = AcceptedTokenType.TENANT, groupId = PermittableGroupIds.SELF_MANAGEMENT)
+	@RequestMapping(
+			value = "/notification/email/create",
+			method = RequestMethod.POST,
+			consumes = MediaType.APPLICATION_JSON_VALUE,
+			produces = MediaType.APPLICATION_JSON_VALUE
+	)
+	public
+	@ResponseBody
+	ResponseEntity<Void> createEmailConfiguration(@RequestBody @Valid final EmailConfiguration emailConfiguration) throws InterruptedException {
+		if (this.notificationService.emailConfigurationExists(emailConfiguration.getIdentifier())) {
+			throw ServiceException.conflict("Configuration {0} already exists.", emailConfiguration.getIdentifier());
+		}
+		this.commandGateway.process(new CreateEmailConfigurationCommand(emailConfiguration));
+		return ResponseEntity.accepted().build();
+	}
 }
diff --git a/service/src/main/resources/application.yml b/service/src/main/resources/application.yml
index ec163fc..fa7165e 100644
--- a/service/src/main/resources/application.yml
+++ b/service/src/main/resources/application.yml
@@ -23,6 +23,20 @@ spring:
       enabled: false
     config:
       enabled: false
+    mail:
+      host: smtp.gmail.com
+      port: 587
+      username:
+      password:
+      properties:
+        debug: true
+        mail:
+          smtp:
+            auth: true
+            starttls:
+              enable: true
+
+
 
 eureka:
   client:
@@ -68,14 +82,7 @@ async:
 flyway:
   enabled: false
 
-fineract:
-  customer:
-    accountcreated:
-      message: Dear Valued Customer, Your account has been created.
-    accountclosed:
-      message: Dear Valued Customer, Your account has been successfully closed.
-
 smssender:
   accountSID: AC1fde2c6f26f367b93231c5fdb944c908
-  authtoken: bc9a53e41745b8471e0ecafc859d86aa
+  authToken: bc9a53e41745b8471e0ecafc859d86aa
   senderNumber: +1 510-944-1898
diff --git a/service/src/main/resources/db/migrations/mariadb/V1__initial_setup.sql b/service/src/main/resources/db/migrations/mariadb/V1__initial_setup.sql
index ff9a61f..57cefe1 100644
--- a/service/src/main/resources/db/migrations/mariadb/V1__initial_setup.sql
+++ b/service/src/main/resources/db/migrations/mariadb/V1__initial_setup.sql
@@ -18,55 +18,39 @@
 --
 
 -- -----------------------------------------------------
--- Table `fineract-cn-notification`.`email_gateway_configurations`
+-- Table wada_sms_gateway_configurations
 -- -----------------------------------------------------
-CREATE TABLE IF NOT EXISTS `fineract-cn-notification`.`email_gateway_configurations` (
-  `id` INT(11) NOT NULL AUTO_INCREMENT,
-  `identifer` VARCHAR(45) NULL DEFAULT NULL,
-  `host` VARCHAR(45) NOT NULL,
-  `port` VARCHAR(45) NOT NULL,
-  `username` VARCHAR(45) NOT NULL,
-  `app_id` VARCHAR(45) NOT NULL,
-  PRIMARY KEY (`id`))
-ENGINE = InnoDB
-DEFAULT CHARACTER SET = latin1;
-
+CREATE TABLE wada_sms_gateway_configurations (
+  id INT(11) NOT NULL AUTO_INCREMENT,
+  identifier VARCHAR(45) NULL DEFAULT NULL,
+  account_sid VARCHAR(255) NOT NULL,
+  auth_token VARCHAR(255) NOT NULL,
+  sender_number VARCHAR(45) NOT NULL,
+  state VARCHAR(45) NULL DEFAULT NULL,
+  PRIMARY KEY (id));
 
 -- -----------------------------------------------------
--- Table `fineract-cn-notification`.`sms_gateway_configurations`
+-- Table wada_email_gateway_configurations
 -- -----------------------------------------------------
-CREATE TABLE IF NOT EXISTS `fineract-cn-notification`.`sms_gateway_configurations` (
-  `id` INT(11) NOT NULL AUTO_INCREMENT,
-  `identifier` VARCHAR(45) NULL DEFAULT NULL,
-  `accountsid` VARCHAR(255) NOT NULL,
-  `auth_token` VARCHAR(255) NOT NULL,
-  `option` VARCHAR(45) NULL DEFAULT NULL,
-  PRIMARY KEY (`id`))
-ENGINE = InnoDB
-DEFAULT CHARACTER SET = latin1;
-
+CREATE TABLE wada_email_gateway_configurations (
+  id INT(11) NOT NULL AUTO_INCREMENT,
+  identifier VARCHAR(45) NULL DEFAULT NULL,
+  host VARCHAR(45) NOT NULL,
+  port VARCHAR(45) NOT NULL,
+  username VARCHAR(45) NOT NULL,
+  app_password VARCHAR(255) NOT NULL,
+  protocol VARCHAR(45)NOT NULL,
+  smtp_auth VARCHAR (45)NOT NULL,
+  start_tls VARCHAR (45)NOT NULL,
+  state VARCHAR(45)NOT NULL,
+  PRIMARY KEY (id));
 
 -- -----------------------------------------------------
--- Table `fineract-cn-notification`.`templates`
+-- Table wada_templates
 -- -----------------------------------------------------
-CREATE TABLE IF NOT EXISTS `fineract-cn-notification`.`templates` (
-  `id` INT(11) NOT NULL AUTO_INCREMENT,
-  PRIMARY KEY (`id`))
-ENGINE = InnoDB
-DEFAULT CHARACTER SET = latin1;
-
--- ------------------------------------------------------
-
-CREATE TABLE sample (
-  id BIGINT NOT NULL AUTO_INCREMENT,
-  identifier VARCHAR(8) NOT NULL,
-  payload VARCHAR(512) NULL,
-  CONSTRAINT notification_pk PRIMARY KEY (id)
-);
-
-CREATE TABLE template_sample (
-  id BIGINT NOT NULL AUTO_INCREMENT,
-  identifier VARCHAR(8) NOT NULL,
-  payload VARCHAR(512) NULL,
-  CONSTRAINT template_sample_pk PRIMARY KEY (id)
-);
\ No newline at end of file
+CREATE TABLE wada_templates (
+  id INT(11) NOT NULL AUTO_INCREMENT,
+  identifier VARCHAR(45) NULL DEFAULT NULL,
+  event VARCHAR(45) NULL DEFAULT NULL,
+  url VARCHAR(255) NOT NULL,
+  PRIMARY KEY (id));
diff --git a/service/src/main/resources/db/migrations/mariadb/V2__sms_gateway_configurations.sql b/service/src/main/resources/db/migrations/mariadb/V2__sms_gateway_configurations.sql
new file mode 100644
index 0000000..d795f01
--- /dev/null
+++ b/service/src/main/resources/db/migrations/mariadb/V2__sms_gateway_configurations.sql
@@ -0,0 +1,20 @@
+--
+-- Licensed to the Apache Software Foundation (ASF) under one
+-- or more contributor license agreements.  See the NOTICE file
+-- distributed with this work for additional information
+-- regarding copyright ownership.  The ASF licenses this file
+-- to you under the Apache License, Version 2.0 (the
+-- "License"); you may not use this file except in compliance
+-- with the License.  You may obtain a copy of the License at
+--
+--   http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing,
+-- software distributed under the License is distributed on an
+-- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+-- KIND, either express or implied.  See the License for the
+-- specific language governing permissions and limitations
+-- under the License.
+--
+
+INSERT INTO wada_sms_gateway_configurations VALUES ('1', 'Twilio', 'AC1fde2c6f26f367b93231c5fdb944c908', 'c9a53e41745b8471e0ecafc859d86aa', '+1 510-944-1898', 'ACTIVE');
\ No newline at end of file
diff --git a/service/src/main/resources/db/migrations/mariadb/V3__email_gateway_configurations.sql b/service/src/main/resources/db/migrations/mariadb/V3__email_gateway_configurations.sql
new file mode 100644
index 0000000..9482b7c
--- /dev/null
+++ b/service/src/main/resources/db/migrations/mariadb/V3__email_gateway_configurations.sql
@@ -0,0 +1,20 @@
+--
+-- Licensed to the Apache Software Foundation (ASF) under one
+-- or more contributor license agreements.  See the NOTICE file
+-- distributed with this work for additional information
+-- regarding copyright ownership.  The ASF licenses this file
+-- to you under the Apache License, Version 2.0 (the
+-- "License"); you may not use this file except in compliance
+-- with the License.  You may obtain a copy of the License at
+--
+--   http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing,
+-- software distributed under the License is distributed on an
+-- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+-- KIND, either express or implied.  See the License for the
+-- specific language governing permissions and limitations
+-- under the License.
+--
+
+INSERT INTO wada_email_gateway_configurations VALUES ('1', 'Gmail', 'smtp.gmail.com', '587','fineractcnnotificationdemo@gmail.com', 'pnuugpwmcibipdpw', 'smtp', 'true', 'true', 'ACTIVE');
\ No newline at end of file
diff --git a/service/src/main/resources/logback.xml b/service/src/main/resources/logback.xml
new file mode 100644
index 0000000..5cd9b4c
--- /dev/null
+++ b/service/src/main/resources/logback.xml
@@ -0,0 +1,58 @@
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+-->
+<configuration>
+    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>logs/notification.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>logs/archive/notification.%d{yyyy-MM-dd}.log</fileNamePattern>
+            <maxHistory>7</maxHistory>
+            <totalSizeCap>2GB</totalSizeCap>
+        </rollingPolicy>
+        <encoder>
+            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
+        </encoder>
+    </appender>
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder>
+            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
+        </encoder>
+    </appender>
+
+    <logger name="com" level="INFO">
+        <appender-ref ref="STDOUT" />
+    </logger>
+
+    <logger name="org" level="INFO">
+        <appender-ref ref="STDOUT" />
+    </logger>
+
+    <logger name="io" level="INFO">
+        <appender-ref ref="STDOUT" />
+    </logger>
+
+    <logger name="net" level="INFO">
+        <appender-ref ref="STDOUT" />
+    </logger>
+
+    <root level="DEBUG">
+        <appender-ref ref="FILE"/>
+    </root>
+</configuration>
\ No newline at end of file
diff --git a/shared.gradle b/shared.gradle
index 4a65927..6b000b7 100644
--- a/shared.gradle
+++ b/shared.gradle
@@ -20,15 +20,11 @@ version '0.1.0-BUILD-SNAPSHOT'
 
 ext.versions = [
         fineractcnidentity      : '0.1.0-BUILD-SNAPSHOT',
-        fineractcnprovisioner   : '0.1.0-BUILD-SNAPSHOT',
-        fineractcnrhythm        : '0.1.0-BUILD-SNAPSHOT',
         fineractcnoffice        : '0.1.0-BUILD-SNAPSHOT',
         fineractcncustomer      : '0.1.0-BUILD-SNAPSHOT',
         fineractcnaccounting    : '0.1.0-BUILD-SNAPSHOT',
         fineractcnportfolio     : '0.1.0-BUILD-SNAPSHOT',
-        fineractcndeposit       : '0.1.0-BUILD-SNAPSHOT',
         fineractcnteller        : '0.1.0-BUILD-SNAPSHOT',
-        kuelapcheques           : '0.1.0-BUILD-SNAPSHOT',
         fineractcnpayroll       : '0.1.0-BUILD-SNAPSHOT',
         fineractcngroup         : '0.1.0-BUILD-SNAPSHOT',
         frameworkapi            : '0.1.0-BUILD-SNAPSHOT',
@@ -39,7 +35,9 @@ ext.versions = [
         frameworkcommand        : '0.1.0-BUILD-SNAPSHOT',
         frameworktest           : '0.1.0-BUILD-SNAPSHOT',
         frameworkanubis         : '0.1.0-BUILD-SNAPSHOT',
-        validator : '5.3.0.Final'
+        validator               : '5.3.0.Final',
+        springjavamail          : '1.4.1.RELEASE',
+        twilioapi               : '7.17.+'
 ]
 
 apply plugin: 'java'
diff --git a/system-analysis.mdj b/system-analysis.mdj
deleted file mode 100644
index 4c7f1af..0000000
--- a/system-analysis.mdj
+++ /dev/null
@@ -1,4104 +0,0 @@
-{
-	"_type": "Project",
-	"_id": "AAAAAAFF+h6SjaM2Hec=",
-	"name": "Untitled",
-	"ownedElements": [
-		{
-			"_type": "UMLModel",
-			"_id": "AAAAAAFF+qBWK6M3Z8Y=",
-			"_parent": {
-				"$ref": "AAAAAAFF+h6SjaM2Hec="
-			},
-			"name": "Model",
-			"ownedElements": [
-				{
-					"_type": "UMLClassDiagram",
-					"_id": "AAAAAAFF+qBtyKM79qY=",
-					"_parent": {
-						"$ref": "AAAAAAFF+qBWK6M3Z8Y="
-					},
-					"name": "Main",
-					"visible": true,
-					"defaultDiagram": true
-				},
-				{
-					"_type": "UMLActivity",
-					"_id": "AAAAAAFjqASLHqqfH1M=",
-					"_parent": {
-						"$ref": "AAAAAAFF+qBWK6M3Z8Y="
-					},
-					"name": "Activity1",
-					"ownedElements": [
-						{
-							"_type": "UMLActivityDiagram",
-							"_id": "AAAAAAFjqASLIKqg3FE=",
-							"_parent": {
-								"$ref": "AAAAAAFjqASLHqqfH1M="
-							},
-							"name": "Notification Activity",
-							"visible": true,
-							"defaultDiagram": false,
-							"ownedViews": [
-								{
-									"_type": "UMLControlNodeView",
-									"_id": "AAAAAAFjqASvhqqmFR0=",
-									"_parent": {
-										"$ref": "AAAAAAFjqASLIKqg3FE="
-									},
-									"model": {
-										"$ref": "AAAAAAFjqASvhaqkmH0="
-									},
-									"visible": true,
-									"enabled": true,
-									"lineColor": "#000000",
-									"fillColor": "#ffffff",
-									"fontColor": "#000000",
-									"font": "Arial;13;0",
-									"showShadow": true,
-									"containerChangeable": true,
-									"containerExtending": false,
-									"left": 178,
-									"top": 32,
-									"width": 20,
-									"height": 20,
-									"autoResize": false
-								},
-								{
-									"_type": "UMLActionView",
-									"_id": "AAAAAAFjqATelaqrA88=",
-									"_parent": {
-										"$ref": "AAAAAAFjqASLIKqg3FE="
-									},
-									"model": {
-										"$ref": "AAAAAAFjqATelKqpPIs="
-									},
-									"subViews": [
-										{
-											"_type": "UMLNameCompartmentView",
-											"_id": "AAAAAAFjqATelqqsQwY=",
-											"_parent": {
-												"$ref": "AAAAAAFjqATelaqrA88="
-											},
-											"model": {
-												"$ref": "AAAAAAFjqATelKqpPIs="
-											},
-											"subViews": [
-												{
-													"_type": "LabelView",
-													"_id": "AAAAAAFjqATelqqtdxw=",
-													"_parent": {
-														"$ref": "AAAAAAFjqATelqqsQwY="
-													},
-													"visible": false,
-													"enabled": true,
-													"lineColor": "#000000",
-													"fillColor": "#ffffff",
-													"fontColor": "#000000",
-													"font": "Arial;13;0",
-													"showShadow": true,
-													"containerChangeable": false,
-													"containerExtending": false,
-													"left": 32,
-													"top": 0,
-													"width": 0,
-													"height": 13,
-													"autoResize": false,
-													"underline": false,
-													"horizontalAlignment": 2,
-													"verticalAlignment": 5,
-													"wordWrap": false
-												},
-												{
-													"_type": "LabelView",
-													"_id": "AAAAAAFjqATel6qupnU=",
-													"_parent": {
-														"$ref": "AAAAAAFjqATelqqsQwY="
-													},
-													"visible": true,
-													"enabled": true,
-													"lineColor": "#000000",
-													"fillColor": "#ffffff",
-													"fontColor": "#000000",
-													"font": "Arial;13;1",
-													"showShadow": true,
-													"containerChangeable": false,
-													"containerExtending": false,
-													"left": 144,
-													"top": 95,
-													"width": 87,
-													"height": 26,
-													"autoResize": false,
-													"underline": false,
-													"text": "JMSListener injects event",
-													"horizontalAlignment": 2,
-													"verticalAlignment": 5,
-													"wordWrap": true
-												},
-												{
-													"_type": "LabelView",
-													"_id": "AAAAAAFjqATemKqvl8w=",
-													"_parent": {
-														"$ref": "AAAAAAFjqATelqqsQwY="
-													},
-													"visible": false,
-													"enabled": true,
-													"lineColor": "#000000",
-													"fillColor": "#ffffff",
-													"fontColor": "#000000",
-													"font": "Arial;13;0",
-													"showShadow": true,
-													"containerChangeable": false,
-													"containerExtending": false,
-													"left": 32,
-													"top": 0,
-													"width": 86,
-													"height": 13,
-													"autoResize": false,
-													"underline": false,
-													"text": "(from Activity1)",
-													"horizontalAlignment": 2,
-													"verticalAlignment": 5,
-													"wordWrap": false
-												},
-												{
-													"_type": "LabelView",
-													"_id": "AAAAAAFjqATemKqwuws=",
-													"_parent": {
-														"$ref": "AAAAAAFjqATelqqsQwY="
-													},
-													"visible": false,
-													"enabled": true,
-													"lineColor": "#000000",
-													"fillColor": "#ffffff",
-													"fontColor": "#000000",
-													"font": "Arial;13;0",
-													"showShadow": true,
-													"containerChangeable": false,
-													"containerExtending": false,
-													"left": 32,
-													"top": 0,
-													"width": 0,
-													"height": 13,
-													"autoResize": false,
-													"underline": false,
-													"horizontalAlignment": 1,
-													"verticalAlignment": 5,
-													"wordWrap": false
-												}
-											],
-											"visible": true,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Arial;13;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 139,
-											"top": 88,
-											"width": 97,
-											"height": 38,
-											"autoResize": false,
-											"stereotypeLabel": {
-												"$ref": "AAAAAAFjqATelqqtdxw="
-											},
-											"nameLabel": {
-												"$ref": "AAAAAAFjqATel6qupnU="
-											},
-											"namespaceLabel": {
-												"$ref": "AAAAAAFjqATemKqvl8w="
-											},
-											"propertyLabel": {
-												"$ref": "AAAAAAFjqATemKqwuws="
-											}
-										}
-									],
-									"visible": true,
-									"enabled": true,
-									"lineColor": "#000000",
-									"fillColor": "#ffffff",
-									"fontColor": "#000000",
-									"font": "Arial;13;0",
-									"showShadow": true,
-									"containerChangeable": true,
-									"containerExtending": false,
-									"left": 139,
-									"top": 88,
-									"width": 97,
-									"height": 54,
-									"autoResize": false,
-									"stereotypeDisplay": "label",
-									"showVisibility": true,
-									"showNamespace": false,
-									"showProperty": true,
-									"showType": true,
-									"nameCompartment": {
-										"$ref": "AAAAAAFjqATelqqsQwY="
-									},
-									"wordWrap": true
-								},
-								{
-									"_type": "UMLActionView",
-									"_id": "AAAAAAFjqAWrCqrNuOs=",
-									"_parent": {
-										"$ref": "AAAAAAFjqASLIKqg3FE="
-									},
-									"model": {
-										"$ref": "AAAAAAFjqAWrCarLlr0="
-									},
-									"subViews": [
-										{
-											"_type": "UMLNameCompartmentView",
-											"_id": "AAAAAAFjqAWrCqrOxcc=",
-											"_parent": {
-												"$ref": "AAAAAAFjqAWrCqrNuOs="
-											},
-											"model": {
-												"$ref": "AAAAAAFjqAWrCarLlr0="
-											},
-											"subViews": [
-												{
-													"_type": "LabelView",
-													"_id": "AAAAAAFjqAWrC6rPvtY=",
-													"_parent": {
-														"$ref": "AAAAAAFjqAWrCqrOxcc="
-													},
-													"visible": false,
-													"enabled": true,
-													"lineColor": "#000000",
-													"fillColor": "#ffffff",
-													"fontColor": "#000000",
-													"font": "Arial;13;0",
-													"showShadow": true,
-													"containerChangeable": false,
-													"containerExtending": false,
-													"left": -366,
-													"top": 304,
-													"width": 0,
-													"height": 13,
-													"autoResize": false,
-													"underline": false,
-													"horizontalAlignment": 2,
-													"verticalAlignment": 5,
-													"wordWrap": false
-												},
-												{
-													"_type": "LabelView",
-													"_id": "AAAAAAFjqAWrC6rQZmc=",
-													"_parent": {
-														"$ref": "AAAAAAFjqAWrCqrOxcc="
-													},
-													"visible": true,
-													"enabled": true,
-													"lineColor": "#000000",
-													"fillColor": "#ffffff",
-													"fontColor": "#000000",
-													"font": "Arial;13;1",
-													"showShadow": true,
-													"containerChangeable": false,
-													"containerExtending": false,
-													"left": 45,
-													"top": 351,
-													"width": 95,
-													"height": 52,
-													"autoResize": false,
-													"underline": false,
-													"text": "retrieve receipt SMS and email contact",
-													"horizontalAlignment": 2,
-													"verticalAlignment": 5,
-													"wordWrap": true
-												},
-												{
-													"_type": "LabelView",
-													"_id": "AAAAAAFjqAWrC6rRHbU=",
-													"_parent": {
-														"$ref": "AAAAAAFjqAWrCqrOxcc="
-													},
-													"visible": false,
-													"enabled": true,
-													"lineColor": "#000000",
-													"fillColor": "#ffffff",
-													"fontColor": "#000000",
-													"font": "Arial;13;0",
-													"showShadow": true,
-													"containerChangeable": false,
-													"containerExtending": false,
-													"left": -366,
-													"top": 304,
-													"width": 86,
-													"height": 13,
-													"autoResize": false,
-													"underline": false,
-													"text": "(from Activity1)",
-													"horizontalAlignment": 2,
-													"verticalAlignment": 5,
-													"wordWrap": false
-												},
-												{
-													"_type": "LabelView",
-													"_id": "AAAAAAFjqAWrC6rS8Ik=",
-													"_parent": {
-														"$ref": "AAAAAAFjqAWrCqrOxcc="
-													},
-													"visible": false,
-													"enabled": true,
-													"lineColor": "#000000",
-													"fillColor": "#ffffff",
-													"fontColor": "#000000",
-													"font": "Arial;13;0",
-													"showShadow": true,
-													"containerChangeable": false,
-													"containerExtending": false,
-													"left": -366,
-													"top": 304,
-													"width": 0,
-													"height": 13,
-													"autoResize": false,
-													"underline": false,
-													"horizontalAlignment": 1,
-													"verticalAlignment": 5,
-													"wordWrap": false
-												}
-											],
-											"visible": true,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Arial;13;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 40,
-											"top": 344,
-											"width": 105,
-											"height": 64,
-											"autoResize": false,
-											"stereotypeLabel": {
-												"$ref": "AAAAAAFjqAWrC6rPvtY="
-											},
-											"nameLabel": {
-												"$ref": "AAAAAAFjqAWrC6rQZmc="
-											},
-											"namespaceLabel": {
-												"$ref": "AAAAAAFjqAWrC6rRHbU="
-											},
-											"propertyLabel": {
-												"$ref": "AAAAAAFjqAWrC6rS8Ik="
-											}
-										}
-									],
-									"visible": true,
-									"enabled": true,
-									"lineColor": "#000000",
-									"fillColor": "#ffffff",
-									"fontColor": "#000000",
-									"font": "Arial;13;0",
-									"showShadow": true,
-									"containerChangeable": true,
-									"containerExtending": false,
-									"left": 40,
-									"top": 344,
-									"width": 105,
-									"height": 80,
-									"autoResize": false,
-									"stereotypeDisplay": "label",
-									"showVisibility": true,
-									"showNamespace": false,
-									"showProperty": true,
-									"showType": true,
-									"nameCompartment": {
-										"$ref": "AAAAAAFjqAWrCqrOxcc="
-									},
-									"wordWrap": true
-								},
-								{
-									"_type": "UMLActionView",
-									"_id": "AAAAAAFjqAYmKaro5lo=",
-									"_parent": {
-										"$ref": "AAAAAAFjqASLIKqg3FE="
-									},
-									"model": {
-										"$ref": "AAAAAAFjqAYmKKrmL6s="
-									},
-									"subViews": [
-										{
-											"_type": "UMLNameCompartmentView",
-											"_id": "AAAAAAFjqAYmKarpUFk=",
-											"_parent": {
-												"$ref": "AAAAAAFjqAYmKaro5lo="
-											},
-											"model": {
-												"$ref": "AAAAAAFjqAYmKKrmL6s="
-											},
-											"subViews": [
-												{
-													"_type": "LabelView",
-													"_id": "AAAAAAFjqAYmKqrq62s=",
-													"_parent": {
-														"$ref": "AAAAAAFjqAYmKarpUFk="
-													},
-													"visible": false,
-													"enabled": true,
-													"lineColor": "#000000",
-													"fillColor": "#ffffff",
-													"fontColor": "#000000",
-													"font": "Arial;13;0",
-													"showShadow": true,
-													"containerChangeable": false,
-													"containerExtending": false,
-													"left": 322,
-													"top": 224,
-													"width": 0,
-													"height": 13,
-													"autoResize": false,
-													"underline": false,
-													"horizontalAlignment": 2,
-													"verticalAlignment": 5,
-													"wordWrap": false
-												},
-												{
-													"_type": "LabelView",
-													"_id": "AAAAAAFjqAYmKqrr75M=",
-													"_parent": {
-														"$ref": "AAAAAAFjqAYmKarpUFk="
-													},
-													"visible": true,
-													"enabled": true,
-													"lineColor": "#000000",
-													"fillColor": "#ffffff",
-													"fontColor": "#000000",
-													"font": "Arial;13;1",
-													"showShadow": true,
-													"containerChangeable": false,
-													"containerExtending": false,
-													"left": 213,
-													"top": 351,
-													"width": 111,
-													"height": 39,
-													"autoResize": false,
-													"underline": false,
-													"text": "Prepare Message with template created",
-													"horizontalAlignment": 2,
-													"verticalAlignment": 5,
-													"wordWrap": true
-												},
-												{
-													"_type": "LabelView",
-													"_id": "AAAAAAFjqAYmK6rsSQ0=",
-													"_parent": {
-														"$ref": "AAAAAAFjqAYmKarpUFk="
-													},
-													"visible": false,
-													"enabled": true,
-													"lineColor": "#000000",
-													"fillColor": "#ffffff",
-													"fontColor": "#000000",
-													"font": "Arial;13;0",
-													"showShadow": true,
-													"containerChangeable": false,
-													"containerExtending": false,
-													"left": 322,
-													"top": 224,
-													"width": 86,
-													"height": 13,
-													"autoResize": false,
-													"underline": false,
-													"text": "(from Activity1)",
-													"horizontalAlignment": 2,
-													"verticalAlignment": 5,
-													"wordWrap": false
-												},
-												{
-													"_type": "LabelView",
-													"_id": "AAAAAAFjqAYmK6rtvPo=",
-													"_parent": {
-														"$ref": "AAAAAAFjqAYmKarpUFk="
-													},
-													"visible": false,
-													"enabled": true,
-													"lineColor": "#000000",
-													"fillColor": "#ffffff",
-													"fontColor": "#000000",
-													"font": "Arial;13;0",
-													"showShadow": true,
-													"containerChangeable": false,
-													"containerExtending": false,
-													"left": 322,
-													"top": 224,
-													"width": 0,
-													"height": 13,
-													"autoResize": false,
-													"underline": false,
-													"horizontalAlignment": 1,
-													"verticalAlignment": 5,
-													"wordWrap": false
-												}
-											],
-											"visible": true,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Arial;13;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 208,
-											"top": 344,
-											"width": 121,
-											"height": 51,
-											"autoResize": false,
-											"stereotypeLabel": {
-												"$ref": "AAAAAAFjqAYmKqrq62s="
-											},
-											"nameLabel": {
-												"$ref": "AAAAAAFjqAYmKqrr75M="
-											},
-											"namespaceLabel": {
-												"$ref": "AAAAAAFjqAYmK6rsSQ0="
-											},
-											"propertyLabel": {
-												"$ref": "AAAAAAFjqAYmK6rtvPo="
-											}
-										}
-									],
-									"visible": true,
-									"enabled": true,
-									"lineColor": "#000000",
-									"fillColor": "#ffffff",
-									"fontColor": "#000000",
-									"font": "Arial;13;0",
-									"showShadow": true,
-									"containerChangeable": true,
-									"containerExtending": false,
-									"left": 208,
-									"top": 344,
-									"width": 121,
-									"height": 67,
-									"autoResize": false,
-									"stereotypeDisplay": "label",
-									"showVisibility": true,
-									"showNamespace": false,
-									"showProperty": true,
-									"showType": true,
-									"nameCompartment": {
-										"$ref": "AAAAAAFjqAYmKarpUFk="
-									},
-									"wordWrap": true
-								},
-								{
-									"_type": "UMLActionView",
-									"_id": "AAAAAAFjqAZdgqsCYJQ=",
-									"_parent": {
-										"$ref": "AAAAAAFjqASLIKqg3FE="
-									},
-									"model": {
-										"$ref": "AAAAAAFjqAZdgasAyFA="
-									},
-									"subViews": [
-										{
-											"_type": "UMLNameCompartmentView",
-											"_id": "AAAAAAFjqAZdgqsDDao=",
-											"_parent": {
-												"$ref": "AAAAAAFjqAZdgqsCYJQ="
-											},
-											"model": {
-												"$ref": "AAAAAAFjqAZdgasAyFA="
-											},
-											"subViews": [
-												{
-													"_type": "LabelView",
-													"_id": "AAAAAAFjqAZdgqsEhl4=",
-													"_parent": {
-														"$ref": "AAAAAAFjqAZdgqsDDao="
-													},
-													"visible": false,
-													"enabled": true,
-													"lineColor": "#000000",
-													"fillColor": "#ffffff",
-													"fontColor": "#000000",
-													"font": "Arial;13;0",
-													"showShadow": true,
-													"containerChangeable": false,
-													"containerExtending": false,
-													"left": -240,
-													"top": 528,
-													"width": 0,
-													"height": 13,
-													"autoResize": false,
-													"underline": false,
-													"horizontalAlignment": 2,
-													"verticalAlignment": 5,
-													"wordWrap": false
-												},
-												{
-													"_type": "LabelView",
-													"_id": "AAAAAAFjqAZdgqsF8Ko=",
-													"_parent": {
-														"$ref": "AAAAAAFjqAZdgqsDDao="
-													},
-													"visible": true,
-													"enabled": true,
-													"lineColor": "#000000",
-													"fillColor": "#ffffff",
-													"fontColor": "#000000",
-													"font": "Arial;13;1",
-													"showShadow": true,
-													"containerChangeable": false,
-													"containerExtending": false,
-													"left": 136,
-													"top": 591,
-													"width": 103,
-													"height": 39,
-													"autoResize": false,
-													"underline": false,
-													"text": "Senders Objects transmit the data",
-													"horizontalAlignment": 2,
-													"verticalAlignment": 5,
-													"wordWrap": true
-												},
-												{
-													"_type": "LabelView",
-													"_id": "AAAAAAFjqAZdgqsGu+E=",
-													"_parent": {
-														"$ref": "AAAAAAFjqAZdgqsDDao="
-													},
-													"visible": false,
-													"enabled": true,
-													"lineColor": "#000000",
-													"fillColor": "#ffffff",
-													"fontColor": "#000000",
-													"font": "Arial;13;0",
-													"showShadow": true,
-													"containerChangeable": false,
-													"containerExtending": false,
-													"left": -240,
-													"top": 528,
-													"width": 86,
-													"height": 13,
-													"autoResize": false,
-													"underline": false,
-													"text": "(from Activity1)",
-													"horizontalAlignment": 2,
-													"verticalAlignment": 5,
-													"wordWrap": false
-												},
-												{
-													"_type": "LabelView",
-													"_id": "AAAAAAFjqAZdgqsH70w=",
-													"_parent": {
-														"$ref": "AAAAAAFjqAZdgqsDDao="
-													},
-													"visible": false,
-													"enabled": true,
-													"lineColor": "#000000",
-													"fillColor": "#ffffff",
-													"fontColor": "#000000",
-													"font": "Arial;13;0",
-													"showShadow": true,
-													"containerChangeable": false,
-													"containerExtending": false,
-													"left": -240,
-													"top": 528,
-													"width": 0,
-													"height": 13,
-													"autoResize": false,
-													"underline": false,
-													"horizontalAlignment": 1,
-													"verticalAlignment": 5,
-													"wordWrap": false
-												}
-											],
-											"visible": true,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Arial;13;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 131,
-											"top": 584,
-											"width": 113,
-											"height": 51,
-											"autoResize": false,
-											"stereotypeLabel": {
-												"$ref": "AAAAAAFjqAZdgqsEhl4="
-											},
-											"nameLabel": {
-												"$ref": "AAAAAAFjqAZdgqsF8Ko="
-											},
-											"namespaceLabel": {
-												"$ref": "AAAAAAFjqAZdgqsGu+E="
-											},
-											"propertyLabel": {
-												"$ref": "AAAAAAFjqAZdgqsH70w="
-											}
-										}
-									],
-									"visible": true,
-									"enabled": true,
-									"lineColor": "#000000",
-									"fillColor": "#ffffff",
-									"fontColor": "#000000",
-									"font": "Arial;13;0",
-									"showShadow": true,
-									"containerChangeable": true,
-									"containerExtending": false,
-									"left": 131,
-									"top": 584,
-									"width": 113,
-									"height": 67,
-									"autoResize": false,
-									"stereotypeDisplay": "label",
-									"showVisibility": true,
-									"showNamespace": false,
-									"showProperty": true,
-									"showType": true,
-									"nameCompartment": {
-										"$ref": "AAAAAAFjqAZdgqsDDao="
-									},
-									"wordWrap": true
-								},
-								{
-									"_type": "UMLControlNodeView",
-									"_id": "AAAAAAFjqAbQ96sfooI=",
-									"_parent": {
-										"$ref": "AAAAAAFjqASLIKqg3FE="
-									},
-									"model": {
-										"$ref": "AAAAAAFjqAbQ7asd+Ww="
-									},
-									"visible": true,
-									"enabled": true,
-									"lineColor": "#000000",
-									"fillColor": "#ffffff",
-									"fontColor": "#000000",
-									"font": "Arial;13;0",
-									"showShadow": true,
-									"containerChangeable": true,
-									"containerExtending": false,
-									"left": 175,
-									"top": 680,
-									"width": 26,
-									"height": 26,
-									"autoResize": false
-								},
-								{
-									"_type": "UMLActionView",
-									"_id": "AAAAAAFjqA2/Cata4OI=",
-									"_parent": {
-										"$ref": "AAAAAAFjqASLIKqg3FE="
-									},
-									"model": {
-										"$ref": "AAAAAAFjqA2/A6tYai0="
-									},
-									"subViews": [
-										{
-											"_type": "UMLNameCompartmentView",
-											"_id": "AAAAAAFjqA2/C6tbg3o=",
-											"_parent": {
-												"$ref": "AAAAAAFjqA2/Cata4OI="
-											},
-											"model": {
-												"$ref": "AAAAAAFjqA2/A6tYai0="
-											},
-											"subViews": [
-												{
-													"_type": "LabelView",
-													"_id": "AAAAAAFjqA2/C6tcNpM=",
-													"_parent": {
-														"$ref": "AAAAAAFjqA2/C6tbg3o="
-													},
-													"visible": false,
-													"enabled": true,
-													"lineColor": "#000000",
-													"fillColor": "#ffffff",
-													"fontColor": "#000000",
-													"font": "Arial;13;0",
-													"showShadow": true,
-													"containerChangeable": false,
-													"containerExtending": false,
-													"left": 178,
-													"top": 336,
-													"width": 0,
-													"height": 13,
-													"autoResize": false,
-													"underline": false,
-													"horizontalAlignment": 2,
-													"verticalAlignment": 5,
-													"wordWrap": false
-												},
-												{
-													"_type": "LabelView",
-													"_id": "AAAAAAFjqA2/DKtd5Og=",
-													"_parent": {
-														"$ref": "AAAAAAFjqA2/C6tbg3o="
-													},
-													"visible": true,
-													"enabled": true,
-													"lineColor": "#000000",
-													"fillColor": "#ffffff",
-													"fontColor": "#000000",
-													"font": "Arial;13;1",
-													"showShadow": true,
-													"containerChangeable": false,
-													"containerExtending": false,
-													"left": 229,
-													"top": 463,
-													"width": 79,
-													"height": 26,
-													"autoResize": false,
-													"underline": false,
-													"text": "Locatize Template",
-													"horizontalAlignment": 2,
-													"verticalAlignment": 5,
-													"wordWrap": true
-												},
-												{
-													"_type": "LabelView",
-													"_id": "AAAAAAFjqA2/DateYyA=",
-													"_parent": {
-														"$ref": "AAAAAAFjqA2/C6tbg3o="
-													},
-													"visible": false,
-													"enabled": true,
-													"lineColor": "#000000",
-													"fillColor": "#ffffff",
-													"fontColor": "#000000",
-													"font": "Arial;13;0",
-													"showShadow": true,
-													"containerChangeable": false,
-													"containerExtending": false,
-													"left": 178,
-													"top": 336,
-													"width": 86,
-													"height": 13,
-													"autoResize": false,
-													"underline": false,
-													"text": "(from Activity1)",
-													"horizontalAlignment": 2,
-													"verticalAlignment": 5,
-													"wordWrap": false
-												},
-												{
-													"_type": "LabelView",
-													"_id": "AAAAAAFjqA2/Datf4DQ=",
-													"_parent": {
-														"$ref": "AAAAAAFjqA2/C6tbg3o="
-													},
-													"visible": false,
-													"enabled": true,
-													"lineColor": "#000000",
-													"fillColor": "#ffffff",
-													"fontColor": "#000000",
-													"font": "Arial;13;0",
-													"showShadow": true,
-													"containerChangeable": false,
-													"containerExtending": false,
-													"left": 178,
-													"top": 336,
-													"width": 0,
-													"height": 13,
-													"autoResize": false,
-													"underline": false,
-													"horizontalAlignment": 1,
-													"verticalAlignment": 5,
-													"wordWrap": false
-												}
-											],
-											"visible": true,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Arial;13;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 224,
-											"top": 456,
-											"width": 89,
-											"height": 38,
-											"autoResize": false,
-											"stereotypeLabel": {
-												"$ref": "AAAAAAFjqA2/C6tcNpM="
-											},
-											"nameLabel": {
-												"$ref": "AAAAAAFjqA2/DKtd5Og="
-											},
-											"namespaceLabel": {
-												"$ref": "AAAAAAFjqA2/DateYyA="
-											},
-											"propertyLabel": {
-												"$ref": "AAAAAAFjqA2/Datf4DQ="
-											}
-										}
-									],
-									"visible": true,
-									"enabled": true,
-									"lineColor": "#000000",
-									"fillColor": "#ffffff",
-									"fontColor": "#000000",
-									"font": "Arial;13;0",
-									"showShadow": true,
-									"containerChangeable": true,
-									"containerExtending": false,
-									"left": 224,
-									"top": 456,
-									"width": 89,
-									"height": 54,
-									"autoResize": false,
-									"stereotypeDisplay": "label",
-									"showVisibility": true,
-									"showNamespace": false,
-									"showProperty": true,
-									"showType": true,
-									"nameCompartment": {
-										"$ref": "AAAAAAFjqA2/C6tbg3o="
-									},
-									"wordWrap": true
-								},
-								{
-									"_type": "UMLControlNodeView",
-									"_id": "AAAAAAFjqBIJL6ubZ3I=",
-									"_parent": {
-										"$ref": "AAAAAAFjqASLIKqg3FE="
-									},
-									"model": {
-										"$ref": "AAAAAAFjqBIJLquZsRo="
-									},
-									"visible": true,
-									"enabled": true,
-									"lineColor": "#000000",
-									"fillColor": "#ffffff",
-									"fontColor": "#000000",
-									"font": "Helvetica;12;0",
-									"showShadow": true,
-									"containerChangeable": true,
-									"containerExtending": false,
-									"left": 131,
-									"top": 288,
-									"width": 113,
-									"height": 6,
-									"autoResize": false
-								},
-								{
-									"_type": "UMLControlFlowView",
-									"_id": "AAAAAAFjqBIoa6ugHqY=",
-									"_parent": {
-										"$ref": "AAAAAAFjqASLIKqg3FE="
-									},
-									"model": {
-										"$ref": "AAAAAAFjqBIoaquel/4="
-									},
-									"subViews": [
-										{
-											"_type": "EdgeLabelView",
-											"_id": "AAAAAAFjqBIoa6uhY6U=",
-											"_parent": {
-												"$ref": "AAAAAAFjqBIoa6ugHqY="
-											},
-											"model": {
-												"$ref": "AAAAAAFjqBIoaquel/4="
-											},
-											"visible": false,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 201,
-											"top": 151,
-											"width": 0,
-											"height": 12,
-											"autoResize": false,
-											"alpha": 1.5707963267948966,
-											"distance": 15,
-											"hostEdge": {
-												"$ref": "AAAAAAFjqBIoa6ugHqY="
-											},
-											"edgePosition": 1,
-											"underline": false,
-											"horizontalAlignment": 2,
-											"verticalAlignment": 5,
-											"wordWrap": false
-										},
-										{
-											"_type": "EdgeLabelView",
-											"_id": "AAAAAAFjqBIoa6uivk8=",
-											"_parent": {
-												"$ref": "AAAAAAFjqBIoa6ugHqY="
-											},
-											"model": {
-												"$ref": "AAAAAAFjqBIoaquel/4="
-											},
-											"visible": null,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 216,
-											"top": 151,
-											"width": 0,
-											"height": 12,
-											"autoResize": false,
-											"alpha": 1.5707963267948966,
-											"distance": 30,
-											"hostEdge": {
-												"$ref": "AAAAAAFjqBIoa6ugHqY="
-											},
-											"edgePosition": 1,
-											"underline": false,
-											"horizontalAlignment": 2,
-											"verticalAlignment": 5,
-											"wordWrap": false
-										},
-										{
-											"_type": "EdgeLabelView",
-											"_id": "AAAAAAFjqBIobKujWVc=",
-											"_parent": {
-												"$ref": "AAAAAAFjqBIoa6ugHqY="
-											},
-											"model": {
-												"$ref": "AAAAAAFjqBIoaquel/4="
-											},
-											"visible": false,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 172,
-											"top": 152,
-											"width": 0,
-											"height": 12,
-											"autoResize": false,
-											"alpha": -1.5707963267948966,
-											"distance": 15,
-											"hostEdge": {
-												"$ref": "AAAAAAFjqBIoa6ugHqY="
-											},
-											"edgePosition": 1,
-											"underline": false,
-											"horizontalAlignment": 2,
-											"verticalAlignment": 5,
-											"wordWrap": false
-										}
-									],
-									"visible": true,
-									"enabled": true,
-									"lineColor": "#000000",
-									"fillColor": "#ffffff",
-									"fontColor": "#000000",
-									"font": "Helvetica;12;0",
-									"showShadow": true,
-									"containerChangeable": false,
-									"containerExtending": false,
-									"head": {
-										"$ref": "AAAAAAFjqCEih6yTO40="
-									},
-									"tail": {
-										"$ref": "AAAAAAFjqATelaqrA88="
-									},
-									"lineStyle": 1,
-									"points": "187:142;187:175",
-									"stereotypeDisplay": "label",
-									"showVisibility": true,
-									"showProperty": true,
-									"nameLabel": {
-										"$ref": "AAAAAAFjqBIoa6uhY6U="
-									},
-									"stereotypeLabel": {
-										"$ref": "AAAAAAFjqBIoa6uivk8="
-									},
-									"propertyLabel": {
-										"$ref": "AAAAAAFjqBIobKujWVc="
-									}
-								},
-								{
-									"_type": "UMLControlFlowView",
-									"_id": "AAAAAAFjqBKjHquxAW0=",
-									"_parent": {
-										"$ref": "AAAAAAFjqASLIKqg3FE="
-									},
-									"model": {
-										"$ref": "AAAAAAFjqBKjHquv5CM="
-									},
-									"subViews": [
-										{
-											"_type": "EdgeLabelView",
-											"_id": "AAAAAAFjqBKjHquyqKs=",
-											"_parent": {
-												"$ref": "AAAAAAFjqBKjHquxAW0="
-											},
-											"model": {
-												"$ref": "AAAAAAFjqBKjHquv5CM="
-											},
-											"visible": false,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 201,
-											"top": 62,
-											"width": 0,
-											"height": 12,
-											"autoResize": false,
-											"alpha": 1.5707963267948966,
-											"distance": 15,
-											"hostEdge": {
-												"$ref": "AAAAAAFjqBKjHquxAW0="
-											},
-											"edgePosition": 1,
-											"underline": false,
-											"horizontalAlignment": 2,
-											"verticalAlignment": 5,
-											"wordWrap": false
-										},
-										{
-											"_type": "EdgeLabelView",
-											"_id": "AAAAAAFjqBKjHquzayI=",
-											"_parent": {
-												"$ref": "AAAAAAFjqBKjHquxAW0="
-											},
-											"model": {
-												"$ref": "AAAAAAFjqBKjHquv5CM="
-											},
-											"visible": null,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 216,
-											"top": 62,
-											"width": 0,
-											"height": 12,
-											"autoResize": false,
-											"alpha": 1.5707963267948966,
-											"distance": 30,
-											"hostEdge": {
-												"$ref": "AAAAAAFjqBKjHquxAW0="
-											},
-											"edgePosition": 1,
-											"underline": false,
-											"horizontalAlignment": 2,
-											"verticalAlignment": 5,
-											"wordWrap": false
-										},
-										{
-											"_type": "EdgeLabelView",
-											"_id": "AAAAAAFjqBKjHqu0+xU=",
-											"_parent": {
-												"$ref": "AAAAAAFjqBKjHquxAW0="
-											},
-											"model": {
-												"$ref": "AAAAAAFjqBKjHquv5CM="
-											},
-											"visible": false,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 172,
-											"top": 63,
-											"width": 0,
-											"height": 12,
-											"autoResize": false,
-											"alpha": -1.5707963267948966,
-											"distance": 15,
-											"hostEdge": {
-												"$ref": "AAAAAAFjqBKjHquxAW0="
-											},
-											"edgePosition": 1,
-											"underline": false,
-											"horizontalAlignment": 2,
-											"verticalAlignment": 5,
-											"wordWrap": false
-										}
-									],
-									"visible": true,
-									"enabled": true,
-									"lineColor": "#000000",
-									"fillColor": "#ffffff",
-									"fontColor": "#000000",
-									"font": "Helvetica;12;0",
-									"showShadow": true,
-									"containerChangeable": false,
-									"containerExtending": false,
-									"head": {
-										"$ref": "AAAAAAFjqATelaqrA88="
-									},
-									"tail": {
-										"$ref": "AAAAAAFjqASvhqqmFR0="
-									},
-									"lineStyle": 1,
-									"points": "187:52;187:87",
-									"stereotypeDisplay": "label",
-									"showVisibility": true,
-									"showProperty": true,
-									"nameLabel": {
-										"$ref": "AAAAAAFjqBKjHquyqKs="
-									},
-									"stereotypeLabel": {
-										"$ref": "AAAAAAFjqBKjHquzayI="
-									},
-									"propertyLabel": {
-										"$ref": "AAAAAAFjqBKjHqu0+xU="
-									}
-								},
-								{
-									"_type": "UMLControlFlowView",
-									"_id": "AAAAAAFjqBLYAqvEqog=",
-									"_parent": {
-										"$ref": "AAAAAAFjqASLIKqg3FE="
-									},
-									"model": {
-										"$ref": "AAAAAAFjqBLYAqvCSQk="
-									},
-									"subViews": [
-										{
-											"_type": "EdgeLabelView",
-											"_id": "AAAAAAFjqBLYAqvFiZM=",
-											"_parent": {
-												"$ref": "AAAAAAFjqBLYAqvEqog="
-											},
-											"model": {
-												"$ref": "AAAAAAFjqBLYAqvCSQk="
-											},
-											"visible": false,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 282,
-											"top": 426,
-											"width": 0,
-											"height": 12,
-											"autoResize": false,
-											"alpha": 1.5707963267948966,
-											"distance": 15,
-											"hostEdge": {
-												"$ref": "AAAAAAFjqBLYAqvEqog="
-											},
-											"edgePosition": 1,
-											"underline": false,
-											"horizontalAlignment": 2,
-											"verticalAlignment": 5,
-											"wordWrap": false
-										},
-										{
-											"_type": "EdgeLabelView",
-											"_id": "AAAAAAFjqBLYAqvGPAg=",
-											"_parent": {
-												"$ref": "AAAAAAFjqBLYAqvEqog="
-											},
-											"model": {
-												"$ref": "AAAAAAFjqBLYAqvCSQk="
-											},
-											"visible": null,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 297,
-											"top": 426,
-											"width": 0,
-											"height": 12,
-											"autoResize": false,
-											"alpha": 1.5707963267948966,
-											"distance": 30,
-											"hostEdge": {
-												"$ref": "AAAAAAFjqBLYAqvEqog="
-											},
-											"edgePosition": 1,
-											"underline": false,
-											"horizontalAlignment": 2,
-											"verticalAlignment": 5,
-											"wordWrap": false
-										},
-										{
-											"_type": "EdgeLabelView",
-											"_id": "AAAAAAFjqBLYAqvHWRk=",
-											"_parent": {
-												"$ref": "AAAAAAFjqBLYAqvEqog="
-											},
-											"model": {
-												"$ref": "AAAAAAFjqBLYAqvCSQk="
-											},
-											"visible": false,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 253,
-											"top": 427,
-											"width": 0,
-											"height": 12,
-											"autoResize": false,
-											"alpha": -1.5707963267948966,
-											"distance": 15,
-											"hostEdge": {
-												"$ref": "AAAAAAFjqBLYAqvEqog="
-											},
-											"edgePosition": 1,
-											"underline": false,
-											"horizontalAlignment": 2,
-											"verticalAlignment": 5,
-											"wordWrap": false
-										}
-									],
-									"visible": true,
-									"enabled": true,
-									"lineColor": "#000000",
-									"fillColor": "#ffffff",
-									"fontColor": "#000000",
-									"font": "Helvetica;12;0",
-									"showShadow": true,
-									"containerChangeable": false,
-									"containerExtending": false,
-									"head": {
-										"$ref": "AAAAAAFjqA2/Cata4OI="
-									},
-									"tail": {
-										"$ref": "AAAAAAFjqAYmKaro5lo="
-									},
-									"lineStyle": 1,
-									"points": "268:411;268:455",
-									"stereotypeDisplay": "label",
-									"showVisibility": true,
-									"showProperty": true,
-									"nameLabel": {
-										"$ref": "AAAAAAFjqBLYAqvFiZM="
-									},
-									"stereotypeLabel": {
-										"$ref": "AAAAAAFjqBLYAqvGPAg="
-									},
-									"propertyLabel": {
-										"$ref": "AAAAAAFjqBLYAqvHWRk="
-									}
-								},
-								{
-									"_type": "UMLControlFlowView",
-									"_id": "AAAAAAFjqBLqN6vVVDc=",
-									"_parent": {
-										"$ref": "AAAAAAFjqASLIKqg3FE="
-									},
-									"model": {
-										"$ref": "AAAAAAFjqBLqNqvTow0="
-									},
-									"subViews": [
-										{
-											"_type": "EdgeLabelView",
-											"_id": "AAAAAAFjqBLqOKvWpw0=",
-											"_parent": {
-												"$ref": "AAAAAAFjqBLqN6vVVDc="
-											},
-											"model": {
-												"$ref": "AAAAAAFjqBLqNqvTow0="
-											},
-											"visible": false,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 201,
-											"top": 658,
-											"width": 0,
-											"height": 12,
-											"autoResize": false,
-											"alpha": 1.5707963267948966,
-											"distance": 15,
-											"hostEdge": {
-												"$ref": "AAAAAAFjqBLqN6vVVDc="
-											},
-											"edgePosition": 1,
-											"underline": false,
-											"horizontalAlignment": 2,
-											"verticalAlignment": 5,
-											"wordWrap": false
-										},
-										{
-											"_type": "EdgeLabelView",
-											"_id": "AAAAAAFjqBLqOKvX76Y=",
-											"_parent": {
-												"$ref": "AAAAAAFjqBLqN6vVVDc="
-											},
-											"model": {
-												"$ref": "AAAAAAFjqBLqNqvTow0="
-											},
-											"visible": null,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 216,
-											"top": 658,
-											"width": 0,
-											"height": 12,
-											"autoResize": false,
-											"alpha": 1.5707963267948966,
-											"distance": 30,
-											"hostEdge": {
-												"$ref": "AAAAAAFjqBLqN6vVVDc="
-											},
-											"edgePosition": 1,
-											"underline": false,
-											"horizontalAlignment": 2,
-											"verticalAlignment": 5,
-											"wordWrap": false
-										},
-										{
-											"_type": "EdgeLabelView",
-											"_id": "AAAAAAFjqBLqOavYEPE=",
-											"_parent": {
-												"$ref": "AAAAAAFjqBLqN6vVVDc="
-											},
-											"model": {
-												"$ref": "AAAAAAFjqBLqNqvTow0="
-											},
-											"visible": false,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 172,
-											"top": 659,
-											"width": 0,
-											"height": 12,
-											"autoResize": false,
-											"alpha": -1.5707963267948966,
-											"distance": 15,
-											"hostEdge": {
-												"$ref": "AAAAAAFjqBLqN6vVVDc="
-											},
-											"edgePosition": 1,
-											"underline": false,
-											"horizontalAlignment": 2,
-											"verticalAlignment": 5,
-											"wordWrap": false
-										}
-									],
-									"visible": true,
-									"enabled": true,
-									"lineColor": "#000000",
-									"fillColor": "#ffffff",
-									"fontColor": "#000000",
-									"font": "Helvetica;12;0",
-									"showShadow": true,
-									"containerChangeable": false,
-									"containerExtending": false,
-									"head": {
-										"$ref": "AAAAAAFjqAbQ96sfooI="
-									},
-									"tail": {
-										"$ref": "AAAAAAFjqAZdgqsCYJQ="
-									},
-									"lineStyle": 1,
-									"points": "187:651;187:679",
-									"stereotypeDisplay": "label",
-									"showVisibility": true,
-									"showProperty": true,
-									"nameLabel": {
-										"$ref": "AAAAAAFjqBLqOKvWpw0="
-									},
-									"stereotypeLabel": {
-										"$ref": "AAAAAAFjqBLqOKvX76Y="
-									},
-									"propertyLabel": {
-										"$ref": "AAAAAAFjqBLqOavYEPE="
-									}
-								},
-								{
-									"_type": "UMLControlFlowView",
-									"_id": "AAAAAAFjqB0vKqwHDoM=",
-									"_parent": {
-										"$ref": "AAAAAAFjqASLIKqg3FE="
-									},
-									"model": {
-										"$ref": "AAAAAAFjqB0vKawF6iM="
-									},
-									"subViews": [
-										{
-											"_type": "EdgeLabelView",
-											"_id": "AAAAAAFjqB0vKqwIlNc=",
-											"_parent": {
-												"$ref": "AAAAAAFjqB0vKqwHDoM="
-											},
-											"model": {
-												"$ref": "AAAAAAFjqB0vKawF6iM="
-											},
-											"visible": false,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 168,
-											"top": 322,
-											"width": 0,
-											"height": 12,
-											"autoResize": false,
-											"alpha": 1.5707963267948966,
-											"distance": 15,
-											"hostEdge": {
-												"$ref": "AAAAAAFjqB0vKqwHDoM="
-											},
-											"edgePosition": 1,
-											"underline": false,
-											"horizontalAlignment": 2,
-											"verticalAlignment": 5,
-											"wordWrap": false
-										},
-										{
-											"_type": "EdgeLabelView",
-											"_id": "AAAAAAFjqB0vK6wJ+8E=",
-											"_parent": {
-												"$ref": "AAAAAAFjqB0vKqwHDoM="
-											},
-											"model": {
-												"$ref": "AAAAAAFjqB0vKawF6iM="
-											},
-											"visible": null,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 179,
-											"top": 333,
-											"width": 0,
-											"height": 12,
-											"autoResize": false,
-											"alpha": 1.5707963267948966,
-											"distance": 30,
-											"hostEdge": {
-												"$ref": "AAAAAAFjqB0vKqwHDoM="
-											},
-											"edgePosition": 1,
-											"underline": false,
-											"horizontalAlignment": 2,
-											"verticalAlignment": 5,
-											"wordWrap": false
-										},
-										{
-											"_type": "EdgeLabelView",
-											"_id": "AAAAAAFjqB0vK6wKDT8=",
-											"_parent": {
-												"$ref": "AAAAAAFjqB0vKqwHDoM="
-											},
-											"model": {
-												"$ref": "AAAAAAFjqB0vKawF6iM="
-											},
-											"visible": false,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 147,
-											"top": 301,
-											"width": 0,
-											"height": 12,
-											"autoResize": false,
-											"alpha": -1.5707963267948966,
-											"distance": 15,
-											"hostEdge": {
-												"$ref": "AAAAAAFjqB0vKqwHDoM="
-											},
-											"edgePosition": 1,
-											"underline": false,
-											"horizontalAlignment": 2,
-											"verticalAlignment": 5,
-											"wordWrap": false
-										}
-									],
-									"visible": true,
-									"enabled": true,
-									"lineColor": "#000000",
-									"fillColor": "#ffffff",
-									"fontColor": "#000000",
-									"font": "Helvetica;12;0",
-									"showShadow": true,
-									"containerChangeable": false,
-									"containerExtending": false,
-									"head": {
-										"$ref": "AAAAAAFjqAWrCqrNuOs="
-									},
-									"tail": {
-										"$ref": "AAAAAAFjqBIJL6ubZ3I="
-									},
-									"lineStyle": 1,
-									"points": "183:294;133:343",
-									"stereotypeDisplay": "label",
-									"showVisibility": true,
-									"showProperty": true,
-									"nameLabel": {
-										"$ref": "AAAAAAFjqB0vKqwIlNc="
-									},
-									"stereotypeLabel": {
-										"$ref": "AAAAAAFjqB0vK6wJ+8E="
-									},
-									"propertyLabel": {
-										"$ref": "AAAAAAFjqB0vK6wKDT8="
-									}
-								},
-								{
-									"_type": "UMLControlFlowView",
-									"_id": "AAAAAAFjqB14tKwY2QY=",
-									"_parent": {
-										"$ref": "AAAAAAFjqASLIKqg3FE="
-									},
-									"model": {
-										"$ref": "AAAAAAFjqB14s6wWTtM="
-									},
-									"subViews": [
-										{
-											"_type": "EdgeLabelView",
-											"_id": "AAAAAAFjqB14tKwZWVs=",
-											"_parent": {
-												"$ref": "AAAAAAFjqB14tKwY2QY="
-											},
-											"model": {
-												"$ref": "AAAAAAFjqB14s6wWTtM="
-											},
-											"visible": false,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 224,
-											"top": 301,
-											"width": 0,
-											"height": 12,
-											"autoResize": false,
-											"alpha": 1.5707963267948966,
-											"distance": 15,
-											"hostEdge": {
-												"$ref": "AAAAAAFjqB14tKwY2QY="
-											},
-											"edgePosition": 1,
-											"underline": false,
-											"horizontalAlignment": 2,
-											"verticalAlignment": 5,
-											"wordWrap": false
-										},
-										{
-											"_type": "EdgeLabelView",
-											"_id": "AAAAAAFjqB14tKwaFP8=",
-											"_parent": {
-												"$ref": "AAAAAAFjqB14tKwY2QY="
-											},
-											"model": {
-												"$ref": "AAAAAAFjqB14s6wWTtM="
-											},
-											"visible": null,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 235,
-											"top": 291,
-											"width": 0,
-											"height": 12,
-											"autoResize": false,
-											"alpha": 1.5707963267948966,
-											"distance": 30,
-											"hostEdge": {
-												"$ref": "AAAAAAFjqB14tKwY2QY="
-											},
-											"edgePosition": 1,
-											"underline": false,
-											"horizontalAlignment": 2,
-											"verticalAlignment": 5,
-											"wordWrap": false
-										},
-										{
-											"_type": "EdgeLabelView",
-											"_id": "AAAAAAFjqB14tKwbJe8=",
-											"_parent": {
-												"$ref": "AAAAAAFjqB14tKwY2QY="
-											},
-											"model": {
-												"$ref": "AAAAAAFjqB14s6wWTtM="
-											},
-											"visible": false,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 201,
-											"top": 322,
-											"width": 0,
-											"height": 12,
-											"autoResize": false,
-											"alpha": -1.5707963267948966,
-											"distance": 15,
-											"hostEdge": {
-												"$ref": "AAAAAAFjqB14tKwY2QY="
-											},
-											"edgePosition": 1,
-											"underline": false,
-											"horizontalAlignment": 2,
-											"verticalAlignment": 5,
-											"wordWrap": false
-										}
-									],
-									"visible": true,
-									"enabled": true,
-									"lineColor": "#000000",
-									"fillColor": "#ffffff",
-									"fontColor": "#000000",
-									"font": "Helvetica;12;0",
-									"showShadow": true,
-									"containerChangeable": false,
-									"containerExtending": false,
-									"head": {
-										"$ref": "AAAAAAFjqAYmKaro5lo="
-									},
-									"tail": {
-										"$ref": "AAAAAAFjqBIJL6ubZ3I="
-									},
-									"lineStyle": 1,
-									"points": "191:294;236:343",
-									"stereotypeDisplay": "label",
-									"showVisibility": true,
-									"showProperty": true,
-									"nameLabel": {
-										"$ref": "AAAAAAFjqB14tKwZWVs="
-									},
-									"stereotypeLabel": {
-										"$ref": "AAAAAAFjqB14tKwaFP8="
-									},
-									"propertyLabel": {
-										"$ref": "AAAAAAFjqB14tKwbJe8="
-									}
-								},
-								{
-									"_type": "UMLControlNodeView",
-									"_id": "AAAAAAFjqB9/Taw5bl4=",
-									"_parent": {
-										"$ref": "AAAAAAFjqASLIKqg3FE="
-									},
-									"model": {
-										"$ref": "AAAAAAFjqB9/S6w3TKM="
-									},
-									"visible": true,
-									"enabled": true,
-									"lineColor": "#000000",
-									"fillColor": "#ffffff",
-									"fontColor": "#000000",
-									"font": "Helvetica;12;0",
-									"showShadow": true,
-									"containerChangeable": true,
-									"containerExtending": false,
-									"left": 136,
-									"top": 544,
-									"width": 104,
-									"height": 6,
-									"autoResize": false
-								},
-								{
-									"_type": "UMLControlFlowView",
-									"_id": "AAAAAAFjqB+W4qw+0nc=",
-									"_parent": {
-										"$ref": "AAAAAAFjqASLIKqg3FE="
-									},
-									"model": {
-										"$ref": "AAAAAAFjqB+W4qw8vc8="
-									},
-									"subViews": [
-										{
-											"_type": "EdgeLabelView",
-											"_id": "AAAAAAFjqB+W46w/H0c=",
-											"_parent": {
-												"$ref": "AAAAAAFjqB+W4qw+0nc="
-											},
-											"model": {
-												"$ref": "AAAAAAFjqB+W4qw8vc8="
-											},
-											"visible": false,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 201,
-											"top": 559,
-											"width": 0,
-											"height": 12,
-											"autoResize": false,
-											"alpha": 1.5707963267948966,
-											"distance": 15,
-											"hostEdge": {
-												"$ref": "AAAAAAFjqB+W4qw+0nc="
-											},
-											"edgePosition": 1,
-											"underline": false,
-											"horizontalAlignment": 2,
-											"verticalAlignment": 5,
-											"wordWrap": false
-										},
-										{
-											"_type": "EdgeLabelView",
-											"_id": "AAAAAAFjqB+W46xAJPs=",
-											"_parent": {
-												"$ref": "AAAAAAFjqB+W4qw+0nc="
-											},
-											"model": {
-												"$ref": "AAAAAAFjqB+W4qw8vc8="
-											},
-											"visible": null,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 216,
-											"top": 559,
-											"width": 0,
-											"height": 12,
-											"autoResize": false,
-											"alpha": 1.5707963267948966,
-											"distance": 30,
-											"hostEdge": {
-												"$ref": "AAAAAAFjqB+W4qw+0nc="
-											},
-											"edgePosition": 1,
-											"underline": false,
-											"horizontalAlignment": 2,
-											"verticalAlignment": 5,
-											"wordWrap": false
-										},
-										{
-											"_type": "EdgeLabelView",
-											"_id": "AAAAAAFjqB+W46xBhSQ=",
-											"_parent": {
-												"$ref": "AAAAAAFjqB+W4qw+0nc="
-											},
-											"model": {
-												"$ref": "AAAAAAFjqB+W4qw8vc8="
-											},
-											"visible": false,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 172,
-											"top": 560,
-											"width": 0,
-											"height": 12,
-											"autoResize": false,
-											"alpha": -1.5707963267948966,
-											"distance": 15,
-											"hostEdge": {
-												"$ref": "AAAAAAFjqB+W4qw+0nc="
-											},
-											"edgePosition": 1,
-											"underline": false,
-											"horizontalAlignment": 2,
-											"verticalAlignment": 5,
-											"wordWrap": false
-										}
-									],
-									"visible": true,
-									"enabled": true,
-									"lineColor": "#000000",
-									"fillColor": "#ffffff",
-									"fontColor": "#000000",
-									"font": "Helvetica;12;0",
-									"showShadow": true,
-									"containerChangeable": false,
-									"containerExtending": false,
-									"head": {
-										"$ref": "AAAAAAFjqAZdgqsCYJQ="
-									},
-									"tail": {
-										"$ref": "AAAAAAFjqB9/Taw5bl4="
-									},
-									"lineStyle": 1,
-									"points": "187:550;187:583",
-									"stereotypeDisplay": "label",
-									"showVisibility": true,
-									"showProperty": true,
-									"nameLabel": {
-										"$ref": "AAAAAAFjqB+W46w/H0c="
-									},
-									"stereotypeLabel": {
-										"$ref": "AAAAAAFjqB+W46xAJPs="
-									},
-									"propertyLabel": {
-										"$ref": "AAAAAAFjqB+W46xBhSQ="
-									}
-								},
-								{
-									"_type": "UMLControlFlowView",
-									"_id": "AAAAAAFjqB+mdKxPr44=",
-									"_parent": {
-										"$ref": "AAAAAAFjqASLIKqg3FE="
-									},
-									"model": {
-										"$ref": "AAAAAAFjqB+mc6xNTWc="
-									},
-									"subViews": [
-										{
-											"_type": "EdgeLabelView",
-											"_id": "AAAAAAFjqB+mdKxQpVA=",
-											"_parent": {
-												"$ref": "AAAAAAFjqB+mdKxPr44="
-											},
-											"model": {
-												"$ref": "AAAAAAFjqB+mc6xNTWc="
-											},
-											"visible": false,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 221,
-											"top": 531,
-											"width": 0,
-											"height": 12,
-											"autoResize": false,
-											"alpha": 1.5707963267948966,
-											"distance": 15,
-											"hostEdge": {
-												"$ref": "AAAAAAFjqB+mdKxPr44="
-											},
-											"edgePosition": 1,
-											"underline": false,
-											"horizontalAlignment": 2,
-											"verticalAlignment": 5,
-											"wordWrap": false
-										},
-										{
-											"_type": "EdgeLabelView",
-											"_id": "AAAAAAFjqB+mdKxRB1o=",
-											"_parent": {
-												"$ref": "AAAAAAFjqB+mdKxPr44="
-											},
-											"model": {
-												"$ref": "AAAAAAFjqB+mc6xNTWc="
-											},
-											"visible": null,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 230,
-											"top": 543,
-											"width": 0,
-											"height": 12,
-											"autoResize": false,
-											"alpha": 1.5707963267948966,
-											"distance": 30,
-											"hostEdge": {
-												"$ref": "AAAAAAFjqB+mdKxPr44="
-											},
-											"edgePosition": 1,
-											"underline": false,
-											"horizontalAlignment": 2,
-											"verticalAlignment": 5,
-											"wordWrap": false
-										},
-										{
-											"_type": "EdgeLabelView",
-											"_id": "AAAAAAFjqB+mdKxSTJo=",
-											"_parent": {
-												"$ref": "AAAAAAFjqB+mdKxPr44="
-											},
-											"model": {
-												"$ref": "AAAAAAFjqB+mc6xNTWc="
-											},
-											"visible": false,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 202,
-											"top": 508,
-											"width": 0,
-											"height": 12,
-											"autoResize": false,
-											"alpha": -1.5707963267948966,
-											"distance": 15,
-											"hostEdge": {
-												"$ref": "AAAAAAFjqB+mdKxPr44="
-											},
-											"edgePosition": 1,
-											"underline": false,
-											"horizontalAlignment": 2,
-											"verticalAlignment": 5,
-											"wordWrap": false
-										}
-									],
-									"visible": true,
-									"enabled": true,
-									"lineColor": "#000000",
-									"fillColor": "#ffffff",
-									"fontColor": "#000000",
-									"font": "Helvetica;12;0",
-									"showShadow": true,
-									"containerChangeable": false,
-									"containerExtending": false,
-									"head": {
-										"$ref": "AAAAAAFjqB9/Taw5bl4="
-									},
-									"tail": {
-										"$ref": "AAAAAAFjqA2/Cata4OI="
-									},
-									"lineStyle": 1,
-									"points": "233:510;191:543",
-									"stereotypeDisplay": "label",
-									"showVisibility": true,
-									"showProperty": true,
-									"nameLabel": {
-										"$ref": "AAAAAAFjqB+mdKxQpVA="
-									},
-									"stereotypeLabel": {
-										"$ref": "AAAAAAFjqB+mdKxRB1o="
-									},
-									"propertyLabel": {
-										"$ref": "AAAAAAFjqB+mdKxSTJo="
-									}
-								},
-								{
-									"_type": "UMLControlFlowView",
-									"_id": "AAAAAAFjqCBd1Kx5mCs=",
-									"_parent": {
-										"$ref": "AAAAAAFjqASLIKqg3FE="
-									},
-									"model": {
-										"$ref": "AAAAAAFjqCBd06x3DWs="
-									},
-									"subViews": [
-										{
-											"_type": "EdgeLabelView",
-											"_id": "AAAAAAFjqCBd1Kx6qnM=",
-											"_parent": {
-												"$ref": "AAAAAAFjqCBd1Kx5mCs="
-											},
-											"model": {
-												"$ref": "AAAAAAFjqCBd06x3DWs="
-											},
-											"visible": false,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 162,
-											"top": 469,
-											"width": 0,
-											"height": 12,
-											"autoResize": false,
-											"alpha": 1.5707963267948966,
-											"distance": 15,
-											"hostEdge": {
-												"$ref": "AAAAAAFjqCBd1Kx5mCs="
-											},
-											"edgePosition": 1,
-											"underline": false,
-											"horizontalAlignment": 2,
-											"verticalAlignment": 5,
-											"wordWrap": false
-										},
-										{
-											"_type": "EdgeLabelView",
-											"_id": "AAAAAAFjqCBd1ax7Ky4=",
-											"_parent": {
-												"$ref": "AAAAAAFjqCBd1Kx5mCs="
-											},
-											"model": {
-												"$ref": "AAAAAAFjqCBd06x3DWs="
-											},
-											"visible": null,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 175,
-											"top": 461,
-											"width": 0,
-											"height": 12,
-											"autoResize": false,
-											"alpha": 1.5707963267948966,
-											"distance": 30,
-											"hostEdge": {
-												"$ref": "AAAAAAFjqCBd1Kx5mCs="
-											},
-											"edgePosition": 1,
-											"underline": false,
-											"horizontalAlignment": 2,
-											"verticalAlignment": 5,
-											"wordWrap": false
-										},
-										{
-											"_type": "EdgeLabelView",
-											"_id": "AAAAAAFjqCBd1ax8vzU=",
-											"_parent": {
-												"$ref": "AAAAAAFjqCBd1Kx5mCs="
-											},
-											"model": {
-												"$ref": "AAAAAAFjqCBd06x3DWs="
-											},
-											"visible": false,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 137,
-											"top": 484,
-											"width": 0,
-											"height": 12,
-											"autoResize": false,
-											"alpha": -1.5707963267948966,
-											"distance": 15,
-											"hostEdge": {
-												"$ref": "AAAAAAFjqCBd1Kx5mCs="
-											},
-											"edgePosition": 1,
-											"underline": false,
-											"horizontalAlignment": 2,
-											"verticalAlignment": 5,
-											"wordWrap": false
-										}
-									],
-									"visible": true,
-									"enabled": true,
-									"lineColor": "#000000",
-									"fillColor": "#ffffff",
-									"fontColor": "#000000",
-									"font": "Helvetica;12;0",
-									"showShadow": true,
-									"containerChangeable": false,
-									"containerExtending": false,
-									"head": {
-										"$ref": "AAAAAAFjqB9/Taw5bl4="
-									},
-									"tail": {
-										"$ref": "AAAAAAFjqAWrCqrNuOs="
-									},
-									"lineStyle": 1,
-									"points": "116:424;185:543",
-									"stereotypeDisplay": "label",
-									"showVisibility": true,
-									"showProperty": true,
-									"nameLabel": {
-										"$ref": "AAAAAAFjqCBd1Kx6qnM="
-									},
-									"stereotypeLabel": {
-										"$ref": "AAAAAAFjqCBd1ax7Ky4="
-									},
-									"propertyLabel": {
-										"$ref": "AAAAAAFjqCBd1ax8vzU="
-									}
-								},
-								{
-									"_type": "UMLActionView",
-									"_id": "AAAAAAFjqCEih6yTO40=",
-									"_parent": {
-										"$ref": "AAAAAAFjqASLIKqg3FE="
-									},
-									"model": {
-										"$ref": "AAAAAAFjqCEig6yRtTs="
-									},
-									"subViews": [
-										{
-											"_type": "UMLNameCompartmentView",
-											"_id": "AAAAAAFjqCEiiayUplA=",
-											"_parent": {
-												"$ref": "AAAAAAFjqCEih6yTO40="
-											},
-											"model": {
-												"$ref": "AAAAAAFjqCEig6yRtTs="
-											},
-											"subViews": [
-												{
-													"_type": "LabelView",
-													"_id": "AAAAAAFjqCEiiqyV3PI=",
-													"_parent": {
-														"$ref": "AAAAAAFjqCEiiayUplA="
-													},
-													"visible": false,
-													"enabled": true,
-													"lineColor": "#000000",
-													"fillColor": "#ffffff",
-													"fontColor": "#000000",
-													"font": "Helvetica;12;0",
-													"showShadow": true,
-													"containerChangeable": false,
-													"containerExtending": false,
-													"left": -144,
-													"top": -128,
-													"width": 0,
-													"height": 12,
-													"autoResize": false,
-													"underline": false,
-													"horizontalAlignment": 2,
-													"verticalAlignment": 5,
-													"wordWrap": false
-												},
-												{
-													"_type": "LabelView",
-													"_id": "AAAAAAFjqCEii6yWXBY=",
-													"_parent": {
-														"$ref": "AAAAAAFjqCEiiayUplA="
-													},
-													"visible": true,
-													"enabled": true,
-													"lineColor": "#000000",
-													"fillColor": "#ffffff",
-													"fontColor": "#000000",
-													"font": "Helvetica;12;1",
-													"showShadow": true,
-													"containerChangeable": false,
-													"containerExtending": false,
-													"left": 132,
-													"top": 183,
-													"width": 111,
-													"height": 36,
-													"autoResize": false,
-													"underline": false,
-													"text": "Check if Event has been enabled by MFI",
-													"horizontalAlignment": 2,
-													"verticalAlignment": 5,
-													"wordWrap": true
-												},
-												{
-													"_type": "LabelView",
-													"_id": "AAAAAAFjqCEii6yXfwg=",
-													"_parent": {
-														"$ref": "AAAAAAFjqCEiiayUplA="
-													},
-													"visible": false,
-													"enabled": true,
-													"lineColor": "#000000",
-													"fillColor": "#ffffff",
-													"fontColor": "#000000",
-													"font": "Helvetica;12;0",
-													"showShadow": true,
-													"containerChangeable": false,
-													"containerExtending": false,
-													"left": -144,
-													"top": -128,
-													"width": 80,
-													"height": 12,
-													"autoResize": false,
-													"underline": false,
-													"text": "(from Activity1)",
-													"horizontalAlignment": 2,
-													"verticalAlignment": 5,
-													"wordWrap": false
-												},
-												{
-													"_type": "LabelView",
-													"_id": "AAAAAAFjqCEii6yYpPQ=",
-													"_parent": {
-														"$ref": "AAAAAAFjqCEiiayUplA="
-													},
-													"visible": false,
-													"enabled": true,
-													"lineColor": "#000000",
-													"fillColor": "#ffffff",
-													"fontColor": "#000000",
-													"font": "Helvetica;12;0",
-													"showShadow": true,
-													"containerChangeable": false,
-													"containerExtending": false,
-													"left": -144,
-													"top": -128,
-													"width": 0,
-													"height": 12,
-													"autoResize": false,
-													"underline": false,
-													"horizontalAlignment": 1,
-													"verticalAlignment": 5,
-													"wordWrap": false
-												}
-											],
-											"visible": true,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 127,
-											"top": 176,
-											"width": 121,
-											"height": 48,
-											"autoResize": false,
-											"stereotypeLabel": {
-												"$ref": "AAAAAAFjqCEiiqyV3PI="
-											},
-											"nameLabel": {
-												"$ref": "AAAAAAFjqCEii6yWXBY="
-											},
-											"namespaceLabel": {
-												"$ref": "AAAAAAFjqCEii6yXfwg="
-											},
-											"propertyLabel": {
-												"$ref": "AAAAAAFjqCEii6yYpPQ="
-											}
-										}
-									],
-									"visible": true,
-									"enabled": true,
-									"lineColor": "#000000",
-									"fillColor": "#ffffff",
-									"fontColor": "#000000",
-									"font": "Helvetica;12;0",
-									"showShadow": true,
-									"containerChangeable": true,
-									"containerExtending": false,
-									"left": 127,
-									"top": 176,
-									"width": 121,
-									"height": 64,
-									"autoResize": false,
-									"stereotypeDisplay": "label",
-									"showVisibility": true,
-									"showNamespace": false,
-									"showProperty": true,
-									"showType": true,
-									"nameCompartment": {
-										"$ref": "AAAAAAFjqCEiiayUplA="
-									},
-									"wordWrap": true
-								},
-								{
-									"_type": "UMLControlFlowView",
-									"_id": "AAAAAAFjqCJ5HqyxiME=",
-									"_parent": {
-										"$ref": "AAAAAAFjqASLIKqg3FE="
-									},
-									"model": {
-										"$ref": "AAAAAAFjqCJ5HayvTsA="
-									},
-									"subViews": [
-										{
-											"_type": "EdgeLabelView",
-											"_id": "AAAAAAFjqCJ5H6yynz8=",
-											"_parent": {
-												"$ref": "AAAAAAFjqCJ5HqyxiME="
-											},
-											"model": {
-												"$ref": "AAAAAAFjqCJ5HayvTsA="
-											},
-											"visible": false,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 201,
-											"top": 256,
-											"width": 0,
-											"height": 12,
-											"autoResize": false,
-											"alpha": 1.5707963267948966,
-											"distance": 15,
-											"hostEdge": {
-												"$ref": "AAAAAAFjqCJ5HqyxiME="
-											},
-											"edgePosition": 1,
-											"underline": false,
-											"horizontalAlignment": 2,
-											"verticalAlignment": 5,
-											"wordWrap": false
-										},
-										{
-											"_type": "EdgeLabelView",
-											"_id": "AAAAAAFjqCJ5IKyzLqE=",
-											"_parent": {
-												"$ref": "AAAAAAFjqCJ5HqyxiME="
-											},
-											"model": {
-												"$ref": "AAAAAAFjqCJ5HayvTsA="
-											},
-											"visible": null,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 216,
-											"top": 256,
-											"width": 0,
-											"height": 12,
-											"autoResize": false,
-											"alpha": 1.5707963267948966,
-											"distance": 30,
-											"hostEdge": {
-												"$ref": "AAAAAAFjqCJ5HqyxiME="
-											},
-											"edgePosition": 1,
-											"underline": false,
-											"horizontalAlignment": 2,
-											"verticalAlignment": 5,
-											"wordWrap": false
-										},
-										{
-											"_type": "EdgeLabelView",
-											"_id": "AAAAAAFjqCJ5IKy0y/c=",
-											"_parent": {
-												"$ref": "AAAAAAFjqCJ5HqyxiME="
-											},
-											"model": {
-												"$ref": "AAAAAAFjqCJ5HayvTsA="
-											},
-											"visible": false,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 172,
-											"top": 257,
-											"width": 0,
-											"height": 12,
-											"autoResize": false,
-											"alpha": -1.5707963267948966,
-											"distance": 15,
-											"hostEdge": {
-												"$ref": "AAAAAAFjqCJ5HqyxiME="
-											},
-											"edgePosition": 1,
-											"underline": false,
-											"horizontalAlignment": 2,
-											"verticalAlignment": 5,
-											"wordWrap": false
-										}
-									],
-									"visible": true,
-									"enabled": true,
-									"lineColor": "#000000",
-									"fillColor": "#ffffff",
-									"fontColor": "#000000",
-									"font": "Helvetica;12;0",
-									"showShadow": true,
-									"containerChangeable": false,
-									"containerExtending": false,
-									"head": {
-										"$ref": "AAAAAAFjqBIJL6ubZ3I="
-									},
-									"tail": {
-										"$ref": "AAAAAAFjqCEih6yTO40="
-									},
-									"lineStyle": 1,
-									"points": "187:240;187:287",
-									"stereotypeDisplay": "label",
-									"showVisibility": true,
-									"showProperty": true,
-									"nameLabel": {
-										"$ref": "AAAAAAFjqCJ5H6yynz8="
-									},
-									"stereotypeLabel": {
-										"$ref": "AAAAAAFjqCJ5IKyzLqE="
-									},
-									"propertyLabel": {
-										"$ref": "AAAAAAFjqCJ5IKy0y/c="
-									}
-								}
-							]
-						}
-					],
-					"visibility": "public",
-					"isReentrant": true,
-					"isReadOnly": false,
-					"isSingleExecution": false,
-					"nodes": [
-						{
-							"_type": "UMLInitialNode",
-							"_id": "AAAAAAFjqASvhaqkmH0=",
-							"_parent": {
-								"$ref": "AAAAAAFjqASLHqqfH1M="
-							},
-							"name": "InitialNode1",
-							"visibility": "public"
-						},
-						{
-							"_type": "UMLAction",
-							"_id": "AAAAAAFjqATelKqpPIs=",
-							"_parent": {
-								"$ref": "AAAAAAFjqASLHqqfH1M="
-							},
-							"name": "JMSListener injects event",
-							"visibility": "public",
-							"kind": "opaque",
-							"isLocallyReentrant": false,
-							"isSynchronous": true
-						},
-						{
-							"_type": "UMLAction",
-							"_id": "AAAAAAFjqAWrCarLlr0=",
-							"_parent": {
-								"$ref": "AAAAAAFjqASLHqqfH1M="
-							},
-							"name": "retrieve receipt SMS and email contact",
-							"visibility": "public",
-							"kind": "opaque",
-							"isLocallyReentrant": false,
-							"isSynchronous": true
-						},
-						{
-							"_type": "UMLAction",
-							"_id": "AAAAAAFjqAYmKKrmL6s=",
-							"_parent": {
-								"$ref": "AAAAAAFjqASLHqqfH1M="
-							},
-							"name": "Prepare Message with template created",
-							"visibility": "public",
-							"kind": "opaque",
-							"isLocallyReentrant": false,
-							"isSynchronous": true
-						},
-						{
-							"_type": "UMLAction",
-							"_id": "AAAAAAFjqAZdgasAyFA=",
-							"_parent": {
-								"$ref": "AAAAAAFjqASLHqqfH1M="
-							},
-							"name": "Senders Objects transmit the data",
-							"visibility": "public",
-							"kind": "opaque",
-							"isLocallyReentrant": false,
-							"isSynchronous": true
-						},
-						{
-							"_type": "UMLActivityFinalNode",
-							"_id": "AAAAAAFjqAbQ7asd+Ww=",
-							"_parent": {
-								"$ref": "AAAAAAFjqASLHqqfH1M="
-							},
-							"name": "ActivityFinalNode1",
-							"visibility": "public"
-						},
-						{
-							"_type": "UMLAction",
-							"_id": "AAAAAAFjqA2/A6tYai0=",
-							"_parent": {
-								"$ref": "AAAAAAFjqASLHqqfH1M="
-							},
-							"name": "Locatize Template",
-							"visibility": "public",
-							"kind": "opaque",
-							"isLocallyReentrant": false,
-							"isSynchronous": true
-						},
-						{
-							"_type": "UMLForkNode",
-							"_id": "AAAAAAFjqBHP9auQV5g=",
-							"_parent": {
-								"$ref": "AAAAAAFjqASLHqqfH1M="
-							},
-							"name": "ForkNode1",
-							"visibility": "public"
-						},
-						{
-							"_type": "UMLForkNode",
-							"_id": "AAAAAAFjqBIJLquZsRo=",
-							"_parent": {
-								"$ref": "AAAAAAFjqASLHqqfH1M="
-							},
-							"name": "ForkNode2",
-							"visibility": "public"
-						},
-						{
-							"_type": "UMLJoinNode",
-							"_id": "AAAAAAFjqB9/S6w3TKM=",
-							"_parent": {
-								"$ref": "AAAAAAFjqASLHqqfH1M="
-							},
-							"name": "JoinNode1",
-							"visibility": "public"
-						},
-						{
-							"_type": "UMLAction",
-							"_id": "AAAAAAFjqCEig6yRtTs=",
-							"_parent": {
-								"$ref": "AAAAAAFjqASLHqqfH1M="
-							},
-							"name": "Check if Event has been enabled by MFI",
-							"visibility": "public",
-							"kind": "opaque",
-							"isLocallyReentrant": false,
-							"isSynchronous": true
-						}
-					],
-					"edges": [
-						{
-							"_type": "UMLControlFlow",
-							"_id": "AAAAAAFjqBEKGKt1+H8=",
-							"_parent": {
-								"$ref": "AAAAAAFjqASLHqqfH1M="
-							},
-							"source": {
-								"$ref": "AAAAAAFjqATelKqpPIs="
-							},
-							"target": {
-								"$ref": "AAAAAAFjqAWrCarLlr0="
-							},
-							"visibility": "public"
-						},
-						{
-							"_type": "UMLControlFlow",
-							"_id": "AAAAAAFjqBIoaquel/4=",
-							"_parent": {
-								"$ref": "AAAAAAFjqASLHqqfH1M="
-							},
-							"source": {
-								"$ref": "AAAAAAFjqATelKqpPIs="
-							},
-							"target": {
-								"$ref": "AAAAAAFjqCEig6yRtTs="
-							},
-							"visibility": "public"
-						},
-						{
-							"_type": "UMLControlFlow",
-							"_id": "AAAAAAFjqBKjHquv5CM=",
-							"_parent": {
-								"$ref": "AAAAAAFjqASLHqqfH1M="
-							},
-							"source": {
-								"$ref": "AAAAAAFjqASvhaqkmH0="
-							},
-							"target": {
-								"$ref": "AAAAAAFjqATelKqpPIs="
-							},
-							"visibility": "public"
-						},
-						{
-							"_type": "UMLControlFlow",
-							"_id": "AAAAAAFjqBLYAqvCSQk=",
-							"_parent": {
-								"$ref": "AAAAAAFjqASLHqqfH1M="
-							},
-							"source": {
-								"$ref": "AAAAAAFjqAYmKKrmL6s="
-							},
-							"target": {
-								"$ref": "AAAAAAFjqA2/A6tYai0="
-							},
-							"visibility": "public"
-						},
-						{
-							"_type": "UMLControlFlow",
-							"_id": "AAAAAAFjqBLqNqvTow0=",
-							"_parent": {
-								"$ref": "AAAAAAFjqASLHqqfH1M="
-							},
-							"source": {
-								"$ref": "AAAAAAFjqAZdgasAyFA="
-							},
-							"target": {
-								"$ref": "AAAAAAFjqAbQ7asd+Ww="
-							},
-							"visibility": "public"
-						},
-						{
-							"_type": "UMLControlFlow",
-							"_id": "AAAAAAFjqByuGavpb+Q=",
-							"_parent": {
-								"$ref": "AAAAAAFjqASLHqqfH1M="
-							},
-							"source": {
-								"$ref": "AAAAAAFjqATelKqpPIs="
-							},
-							"target": {
-								"$ref": "AAAAAAFjqAWrCarLlr0="
-							},
-							"visibility": "public"
-						},
-						{
-							"_type": "UMLControlFlow",
-							"_id": "AAAAAAFjqB0vKawF6iM=",
-							"_parent": {
-								"$ref": "AAAAAAFjqASLHqqfH1M="
-							},
-							"source": {
-								"$ref": "AAAAAAFjqBIJLquZsRo="
-							},
-							"target": {
-								"$ref": "AAAAAAFjqAWrCarLlr0="
-							},
-							"visibility": "public"
-						},
-						{
-							"_type": "UMLControlFlow",
-							"_id": "AAAAAAFjqB14s6wWTtM=",
-							"_parent": {
-								"$ref": "AAAAAAFjqASLHqqfH1M="
-							},
-							"source": {
-								"$ref": "AAAAAAFjqBIJLquZsRo="
-							},
-							"target": {
-								"$ref": "AAAAAAFjqAYmKKrmL6s="
-							},
-							"visibility": "public"
-						},
-						{
-							"_type": "UMLControlFlow",
-							"_id": "AAAAAAFjqB+W4qw8vc8=",
-							"_parent": {
-								"$ref": "AAAAAAFjqASLHqqfH1M="
-							},
-							"source": {
-								"$ref": "AAAAAAFjqB9/S6w3TKM="
-							},
-							"target": {
-								"$ref": "AAAAAAFjqAZdgasAyFA="
-							},
-							"visibility": "public"
-						},
-						{
-							"_type": "UMLControlFlow",
-							"_id": "AAAAAAFjqB+mc6xNTWc=",
-							"_parent": {
-								"$ref": "AAAAAAFjqASLHqqfH1M="
-							},
-							"source": {
-								"$ref": "AAAAAAFjqA2/A6tYai0="
-							},
-							"target": {
-								"$ref": "AAAAAAFjqB9/S6w3TKM="
-							},
-							"visibility": "public"
-						},
-						{
-							"_type": "UMLControlFlow",
-							"_id": "AAAAAAFjqCBd06x3DWs=",
-							"_parent": {
-								"$ref": "AAAAAAFjqASLHqqfH1M="
-							},
-							"source": {
-								"$ref": "AAAAAAFjqAWrCarLlr0="
-							},
-							"target": {
-								"$ref": "AAAAAAFjqB9/S6w3TKM="
-							},
-							"visibility": "public"
-						},
-						{
-							"_type": "UMLControlFlow",
-							"_id": "AAAAAAFjqCJ5HayvTsA=",
-							"_parent": {
-								"$ref": "AAAAAAFjqASLHqqfH1M="
-							},
-							"source": {
-								"$ref": "AAAAAAFjqCEig6yRtTs="
-							},
-							"target": {
-								"$ref": "AAAAAAFjqBIJLquZsRo="
-							},
-							"visibility": "public"
-						}
-					]
-				},
-				{
-					"_type": "UMLCollaboration",
-					"_id": "AAAAAAFjqCY2j5u3ys8=",
-					"_parent": {
-						"$ref": "AAAAAAFF+qBWK6M3Z8Y="
-					},
-					"name": "Collaboration1",
-					"ownedElements": [
-						{
-							"_type": "UMLInteraction",
-							"_id": "AAAAAAFjqCY2kpu4n0I=",
-							"_parent": {
-								"$ref": "AAAAAAFjqCY2j5u3ys8="
-							},
-							"name": "Interaction1",
-							"ownedElements": [
-								{
-									"_type": "UMLSequenceDiagram",
-									"_id": "AAAAAAFjqCY2kpu5KQk=",
-									"_parent": {
-										"$ref": "AAAAAAFjqCY2kpu4n0I="
-									},
-									"name": "SequenceDiagram1",
-									"visible": true,
-									"defaultDiagram": false,
-									"ownedViews": [
-										{
-											"_type": "UMLFrameView",
-											"_id": "AAAAAAFjqCY2k5u6GlA=",
-											"_parent": {
-												"$ref": "AAAAAAFjqCY2kpu5KQk="
-											},
-											"model": {
-												"$ref": "AAAAAAFjqCY2kpu5KQk="
-											},
-											"subViews": [
-												{
-													"_type": "LabelView",
-													"_id": "AAAAAAFjqCY2lJu7Oe8=",
-													"_parent": {
-														"$ref": "AAAAAAFjqCY2k5u6GlA="
-													},
-													"visible": true,
-													"enabled": true,
-													"lineColor": "#000000",
-													"fillColor": "#ffffff",
-													"fontColor": "#000000",
-													"font": "Helvetica;12;0",
-													"showShadow": true,
-													"containerChangeable": false,
-													"containerExtending": false,
-													"left": 73,
-													"top": 10,
-													"width": 111,
-													"height": 12,
-													"autoResize": false,
-													"underline": false,
-													"text": "SequenceDiagram1",
-													"horizontalAlignment": 2,
-													"verticalAlignment": 5,
-													"wordWrap": false
-												},
-												{
-													"_type": "LabelView",
-													"_id": "AAAAAAFjqCY2lZu8kXQ=",
-													"_parent": {
-														"$ref": "AAAAAAFjqCY2k5u6GlA="
-													},
-													"visible": true,
-													"enabled": true,
-													"lineColor": "#000000",
-													"fillColor": "#ffffff",
-													"fontColor": "#000000",
-													"font": "Helvetica;12;1",
-													"showShadow": true,
-													"containerChangeable": false,
-													"containerExtending": false,
-													"left": 10,
-													"top": 10,
-													"width": 58,
-													"height": 12,
-													"autoResize": false,
-													"underline": false,
-													"text": "interaction",
-													"horizontalAlignment": 2,
-													"verticalAlignment": 5,
-													"wordWrap": false
-												}
-											],
-											"visible": true,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 5,
-											"top": 5,
-											"width": 695,
-											"height": 595,
-											"autoResize": false,
-											"nameLabel": {
-												"$ref": "AAAAAAFjqCY2lJu7Oe8="
-											},
-											"frameTypeLabel": {
-												"$ref": "AAAAAAFjqCY2lZu8kXQ="
-											}
-										},
-										{
-											"_type": "UMLSeqLifelineView",
-											"_id": "AAAAAAFjqCbCSJvIsEM=",
-											"_parent": {
-												"$ref": "AAAAAAFjqCY2kpu5KQk="
-											},
-											"model": {
-												"$ref": "AAAAAAFjqCbCSJvHDpo="
-											},
-											"subViews": [
-												{
-													"_type": "UMLNameCompartmentView",
-													"_id": "AAAAAAFjqCbCSZvJ4ng=",
-													"_parent": {
-														"$ref": "AAAAAAFjqCbCSJvIsEM="
-													},
-													"model": {
-														"$ref": "AAAAAAFjqCbCSJvHDpo="
-													},
-													"subViews": [
-														{
-															"_type": "LabelView",
-															"_id": "AAAAAAFjqCbCSpvKaxs=",
-															"_parent": {
-																"$ref": "AAAAAAFjqCbCSZvJ4ng="
-															},
-															"visible": false,
-															"enabled": true,
-															"lineColor": "#000000",
-															"fillColor": "#ffffff",
-															"fontColor": "#000000",
-															"font": "Helvetica;12;0",
-															"showShadow": true,
-															"containerChangeable": false,
-															"containerExtending": false,
-															"left": 0,
-															"top": 0,
-															"width": 0,
-															"height": 12,
-															"autoResize": false,
-															"underline": false,
-															"horizontalAlignment": 2,
-															"verticalAlignment": 5,
-															"wordWrap": false
-														},
-														{
-															"_type": "LabelView",
-															"_id": "AAAAAAFjqCbCSpvLXu8=",
-															"_parent": {
-																"$ref": "AAAAAAFjqCbCSZvJ4ng="
-															},
-															"visible": true,
-															"enabled": true,
-															"lineColor": "#000000",
-															"fillColor": "#ffffff",
-															"fontColor": "#000000",
-															"font": "Helvetica;12;1",
-															"showShadow": true,
-															"containerChangeable": false,
-															"containerExtending": false,
-															"left": 37,
-															"top": 47,
-															"width": 90,
-															"height": 12,
-															"autoResize": false,
-															"underline": false,
-															"text": "EventListener",
-															"horizontalAlignment": 2,
-															"verticalAlignment": 5,
-															"wordWrap": false
-														},
-														{
-															"_type": "LabelView",
-															"_id": "AAAAAAFjqCbCSpvMWyQ=",
-															"_parent": {
-																"$ref": "AAAAAAFjqCbCSZvJ4ng="
-															},
-															"visible": false,
-															"enabled": true,
-															"lineColor": "#000000",
-															"fillColor": "#ffffff",
-															"fontColor": "#000000",
-															"font": "Helvetica;12;0",
-															"showShadow": true,
-															"containerChangeable": false,
-															"containerExtending": false,
-															"left": 0,
-															"top": 0,
-															"width": 99,
-															"height": 12,
-															"autoResize": false,
-															"underline": false,
-															"text": "(from Interaction1)",
-															"horizontalAlignment": 2,
-															"verticalAlignment": 5,
-															"wordWrap": false
-														},
-														{
-															"_type": "LabelView",
-															"_id": "AAAAAAFjqCbCS5vNZUs=",
-															"_parent": {
-																"$ref": "AAAAAAFjqCbCSZvJ4ng="
-															},
-															"visible": false,
-															"enabled": true,
-															"lineColor": "#000000",
-															"fillColor": "#ffffff",
-															"fontColor": "#000000",
-															"font": "Helvetica;12;0",
-															"showShadow": true,
-															"containerChangeable": false,
-															"containerExtending": false,
-															"left": 0,
-															"top": 0,
-															"width": 0,
-															"height": 12,
-															"autoResize": false,
-															"underline": false,
-															"horizontalAlignment": 1,
-															"verticalAlignment": 5,
-															"wordWrap": false
-														}
-													],
-													"visible": true,
-													"enabled": true,
-													"lineColor": "#000000",
-													"fillColor": "#ffffff",
-													"fontColor": "#000000",
-													"font": "Helvetica;12;0",
-													"showShadow": true,
-													"containerChangeable": false,
-													"containerExtending": false,
-													"left": 32,
-													"top": 40,
-													"width": 100,
-													"height": 40,
-													"autoResize": false,
-													"stereotypeLabel": {
-														"$ref": "AAAAAAFjqCbCSpvKaxs="
-													},
-													"nameLabel": {
-														"$ref": "AAAAAAFjqCbCSpvLXu8="
-													},
-													"namespaceLabel": {
-														"$ref": "AAAAAAFjqCbCSpvMWyQ="
-													},
-													"propertyLabel": {
-														"$ref": "AAAAAAFjqCbCS5vNZUs="
-													}
-												},
-												{
-													"_type": "UMLLinePartView",
-													"_id": "AAAAAAFjqCbCS5vOH9k=",
-													"_parent": {
-														"$ref": "AAAAAAFjqCbCSJvIsEM="
-													},
-													"model": {
-														"$ref": "AAAAAAFjqCbCSJvHDpo="
-													},
-													"visible": true,
-													"enabled": true,
-													"lineColor": "#000000",
-													"fillColor": "#ffffff",
-													"fontColor": "#000000",
-													"font": "Helvetica;12;0",
-													"showShadow": true,
-													"containerChangeable": false,
-													"containerExtending": false,
-													"left": 82,
-													"top": 80,
-													"width": 1,
-													"height": 160,
-													"autoResize": false
-												}
-											],
-											"visible": true,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 32,
-											"top": 40,
-											"width": 100,
-											"height": 200,
-											"autoResize": false,
-											"stereotypeDisplay": "label",
-											"showVisibility": true,
-											"showNamespace": false,
-											"showProperty": true,
-											"showType": true,
-											"nameCompartment": {
-												"$ref": "AAAAAAFjqCbCSZvJ4ng="
-											},
-											"wordWrap": false,
-											"linePart": {
-												"$ref": "AAAAAAFjqCbCS5vOH9k="
-											}
-										}
-									],
-									"showSequenceNumber": true,
-									"showSignature": true,
-									"showActivation": true
-								}
-							],
-							"visibility": "public",
-							"isReentrant": true,
-							"participants": [
-								{
-									"_type": "UMLLifeline",
-									"_id": "AAAAAAFjqCbCSJvHDpo=",
-									"_parent": {
-										"$ref": "AAAAAAFjqCY2kpu4n0I="
-									},
-									"name": "EventListener",
-									"visibility": "public",
-									"represent": {
-										"$ref": "AAAAAAFjqCbCR5vGwmU="
-									},
-									"isMultiInstance": false
-								}
-							]
-						}
-					],
-					"visibility": "public",
-					"attributes": [
-						{
-							"_type": "UMLAttribute",
-							"_id": "AAAAAAFjqCbCR5vGwmU=",
-							"_parent": {
-								"$ref": "AAAAAAFjqCY2j5u3ys8="
-							},
-							"name": "Role1",
-							"visibility": "public",
-							"isStatic": false,
-							"isLeaf": false,
-							"type": "",
-							"isReadOnly": false,
-							"isOrdered": false,
-							"isUnique": false,
-							"isDerived": false,
-							"aggregation": "none",
-							"isID": false
-						}
-					],
-					"isAbstract": false,
-					"isFinalSpecialization": false,
-					"isLeaf": false
-				},
-				{
-					"_type": "UMLUseCaseDiagram",
-					"_id": "AAAAAAFjuvxSC6RUg4A=",
-					"_parent": {
-						"$ref": "AAAAAAFF+qBWK6M3Z8Y="
-					},
-					"name": "CustomerUseCase",
-					"visible": true,
-					"defaultDiagram": false,
-					"ownedViews": [
-						{
-							"_type": "UMLUseCaseSubjectView",
-							"_id": "AAAAAAFjuv4gOKRa+jQ=",
-							"_parent": {
-								"$ref": "AAAAAAFjuvxSC6RUg4A="
-							},
-							"model": {
-								"$ref": "AAAAAAFjuv4gOKRYAw8="
-							},
-							"subViews": [
-								{
-									"_type": "UMLNameCompartmentView",
-									"_id": "AAAAAAFjuv4gOaRbEkE=",
-									"_parent": {
-										"$ref": "AAAAAAFjuv4gOKRa+jQ="
-									},
-									"model": {
-										"$ref": "AAAAAAFjuv4gOKRYAw8="
-									},
-									"subViews": [
-										{
-											"_type": "LabelView",
-											"_id": "AAAAAAFjuv4gOaRczFQ=",
-											"_parent": {
-												"$ref": "AAAAAAFjuv4gOaRbEkE="
-											},
-											"visible": false,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 0,
-											"top": 0,
-											"width": 0,
-											"height": 12,
-											"autoResize": false,
-											"underline": false,
-											"horizontalAlignment": 2,
-											"verticalAlignment": 5,
-											"wordWrap": false
-										},
-										{
-											"_type": "LabelView",
-											"_id": "AAAAAAFjuv4gOaRdgAQ=",
-											"_parent": {
-												"$ref": "AAAAAAFjuv4gOaRbEkE="
-											},
-											"visible": true,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;1",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 213,
-											"top": 39,
-											"width": 478,
-											"height": 12,
-											"autoResize": false,
-											"underline": false,
-											"text": "Notification Microservice",
-											"horizontalAlignment": 2,
-											"verticalAlignment": 5,
-											"wordWrap": false
-										},
-										{
-											"_type": "LabelView",
-											"_id": "AAAAAAFjuv4gOaReStM=",
-											"_parent": {
-												"$ref": "AAAAAAFjuv4gOaRbEkE="
-											},
-											"visible": false,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 0,
-											"top": 0,
-											"width": 69,
-											"height": 12,
-											"autoResize": false,
-											"underline": false,
-											"text": "(from Model)",
-											"horizontalAlignment": 2,
-											"verticalAlignment": 5,
-											"wordWrap": false
-										},
-										{
-											"_type": "LabelView",
-											"_id": "AAAAAAFjuv4gOaRf7IE=",
-											"_parent": {
-												"$ref": "AAAAAAFjuv4gOaRbEkE="
-											},
-											"visible": false,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 0,
-											"top": 0,
-											"width": 0,
-											"height": 12,
-											"autoResize": false,
-											"underline": false,
-											"horizontalAlignment": 1,
-											"verticalAlignment": 5,
-											"wordWrap": false
-										}
-									],
-									"visible": true,
-									"enabled": true,
-									"lineColor": "#000000",
-									"fillColor": "#ffffff",
-									"fontColor": "#000000",
-									"font": "Helvetica;12;0",
-									"showShadow": true,
-									"containerChangeable": false,
-									"containerExtending": false,
-									"left": 208,
-									"top": 32,
-									"width": 488,
-									"height": 24,
-									"autoResize": false,
-									"stereotypeLabel": {
-										"$ref": "AAAAAAFjuv4gOaRczFQ="
-									},
-									"nameLabel": {
-										"$ref": "AAAAAAFjuv4gOaRdgAQ="
-									},
-									"namespaceLabel": {
-										"$ref": "AAAAAAFjuv4gOaReStM="
-									},
-									"propertyLabel": {
-										"$ref": "AAAAAAFjuv4gOaRf7IE="
-									}
-								}
-							],
-							"visible": true,
-							"enabled": true,
-							"lineColor": "#000000",
-							"fillColor": "#ffffff",
-							"fontColor": "#000000",
-							"font": "Helvetica;12;0",
-							"showShadow": true,
-							"containerChangeable": false,
-							"containerExtending": false,
-							"left": 208,
-							"top": 32,
-							"width": 488,
-							"height": 608,
-							"autoResize": false,
-							"stereotypeDisplay": "label",
-							"showVisibility": true,
-							"showNamespace": false,
-							"showProperty": true,
-							"showType": true,
-							"nameCompartment": {
-								"$ref": "AAAAAAFjuv4gOaRbEkE="
-							},
-							"wordWrap": false
-						},
-						{
-							"_type": "UMLActorView",
-							"_id": "AAAAAAFjuv6kb6R0A6g=",
-							"_parent": {
-								"$ref": "AAAAAAFjuvxSC6RUg4A="
-							},
-							"model": {
-								"$ref": "AAAAAAFjuv6kbaRyZy0="
-							},
-							"subViews": [
-								{
-									"_type": "UMLNameCompartmentView",
-									"_id": "AAAAAAFjuv6kcKR1JNo=",
-									"_parent": {
-										"$ref": "AAAAAAFjuv6kb6R0A6g="
-									},
-									"model": {
-										"$ref": "AAAAAAFjuv6kbaRyZy0="
-									},
-									"subViews": [
-										{
-											"_type": "LabelView",
-											"_id": "AAAAAAFjuv6kcKR2baE=",
-											"_parent": {
-												"$ref": "AAAAAAFjuv6kcKR1JNo="
-											},
-											"visible": false,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": -112,
-											"top": 352,
-											"width": 0,
-											"height": 12,
-											"autoResize": false,
-											"underline": false,
-											"horizontalAlignment": 2,
-											"verticalAlignment": 5,
-											"wordWrap": false
-										},
-										{
-											"_type": "LabelView",
-											"_id": "AAAAAAFjuv6kcaR3JSY=",
-											"_parent": {
-												"$ref": "AAAAAAFjuv6kcKR1JNo="
-											},
-											"visible": true,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;1",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 61,
-											"top": 341,
-											"width": 134,
-											"height": 12,
-											"autoResize": false,
-											"underline": false,
-											"text": "customer microservice",
-											"horizontalAlignment": 2,
-											"verticalAlignment": 5,
-											"wordWrap": false
-										},
-										{
-											"_type": "LabelView",
-											"_id": "AAAAAAFjuv6kcaR4LTc=",
-											"_parent": {
-												"$ref": "AAAAAAFjuv6kcKR1JNo="
-											},
-											"visible": false,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": -112,
-											"top": 352,
-											"width": 69,
-											"height": 12,
-											"autoResize": false,
-											"underline": false,
-											"text": "(from Model)",
-											"horizontalAlignment": 2,
-											"verticalAlignment": 5,
-											"wordWrap": false
-										},
-										{
-											"_type": "LabelView",
-											"_id": "AAAAAAFjuv6kcaR5qOc=",
-											"_parent": {
-												"$ref": "AAAAAAFjuv6kcKR1JNo="
-											},
-											"visible": false,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": -112,
-											"top": 352,
-											"width": 0,
-											"height": 12,
-											"autoResize": false,
-											"underline": false,
-											"horizontalAlignment": 1,
-											"verticalAlignment": 5,
-											"wordWrap": false
-										}
-									],
-									"visible": true,
-									"enabled": true,
-									"lineColor": "#000000",
-									"fillColor": "#ffffff",
-									"fontColor": "#000000",
-									"font": "Helvetica;12;0",
-									"showShadow": true,
-									"containerChangeable": false,
-									"containerExtending": false,
-									"left": 56,
-									"top": 334,
-									"width": 144,
-									"height": 24,
-									"autoResize": false,
-									"stereotypeLabel": {
-										"$ref": "AAAAAAFjuv6kcKR2baE="
-									},
-									"nameLabel": {
-										"$ref": "AAAAAAFjuv6kcaR3JSY="
-									},
-									"namespaceLabel": {
-										"$ref": "AAAAAAFjuv6kcaR4LTc="
-									},
-									"propertyLabel": {
-										"$ref": "AAAAAAFjuv6kcaR5qOc="
-									}
-								},
-								{
-									"_type": "UMLAttributeCompartmentView",
-									"_id": "AAAAAAFjuv6kcqR6rvs=",
-									"_parent": {
-										"$ref": "AAAAAAFjuv6kb6R0A6g="
-									},
-									"model": {
-										"$ref": "AAAAAAFjuv6kbaRyZy0="
-									},
-									"visible": false,
-									"enabled": true,
-									"lineColor": "#000000",
-									"fillColor": "#ffffff",
-									"fontColor": "#000000",
-									"font": "Helvetica;12;0",
-									"showShadow": true,
-									"containerChangeable": false,
-									"containerExtending": false,
-									"left": -56,
-									"top": 176,
-									"width": 10,
-									"height": 10,
-									"autoResize": false
-								},
-								{
-									"_type": "UMLOperationCompartmentView",
-									"_id": "AAAAAAFjuv6kcqR7HEk=",
-									"_parent": {
-										"$ref": "AAAAAAFjuv6kb6R0A6g="
-									},
-									"model": {
-										"$ref": "AAAAAAFjuv6kbaRyZy0="
-									},
-									"visible": false,
-									"enabled": true,
-									"lineColor": "#000000",
-									"fillColor": "#ffffff",
-									"fontColor": "#000000",
-									"font": "Helvetica;12;0",
-									"showShadow": true,
-									"containerChangeable": false,
-									"containerExtending": false,
-									"left": -56,
-									"top": 176,
-									"width": 10,
-									"height": 10,
-									"autoResize": false
-								},
-								{
-									"_type": "UMLReceptionCompartmentView",
-									"_id": "AAAAAAFjuv6kc6R8FZ0=",
-									"_parent": {
-										"$ref": "AAAAAAFjuv6kb6R0A6g="
-									},
-									"model": {
-										"$ref": "AAAAAAFjuv6kbaRyZy0="
-									},
-									"visible": false,
-									"enabled": true,
-									"lineColor": "#000000",
-									"fillColor": "#ffffff",
-									"fontColor": "#000000",
-									"font": "Helvetica;12;0",
-									"showShadow": true,
-									"containerChangeable": false,
-									"containerExtending": false,
-									"left": -56,
-									"top": 176,
-									"width": 10,
-									"height": 10,
-									"autoResize": false
-								},
-								{
-									"_type": "UMLTemplateParameterCompartmentView",
-									"_id": "AAAAAAFjuv6kdKR9/xc=",
-									"_parent": {
-										"$ref": "AAAAAAFjuv6kb6R0A6g="
-									},
-									"model": {
-										"$ref": "AAAAAAFjuv6kbaRyZy0="
-									},
-									"visible": false,
-									"enabled": true,
-									"lineColor": "#000000",
-									"fillColor": "#ffffff",
-									"fontColor": "#000000",
-									"font": "Helvetica;12;0",
-									"showShadow": true,
-									"containerChangeable": false,
-									"containerExtending": false,
-									"left": -56,
-									"top": 176,
-									"width": 10,
-									"height": 10,
-									"autoResize": false
-								}
-							],
-							"visible": true,
-							"enabled": true,
-							"lineColor": "#000000",
-							"fillColor": "#ffffff",
-							"fontColor": "#000000",
-							"font": "Helvetica;12;0",
-							"showShadow": true,
-							"containerChangeable": true,
-							"containerExtending": false,
-							"left": 56,
-							"top": 280,
-							"width": 144,
-							"height": 79,
-							"autoResize": false,
-							"stereotypeDisplay": "label",
-							"showVisibility": true,
-							"showNamespace": false,
-							"showProperty": true,
-							"showType": true,
-							"nameCompartment": {
-								"$ref": "AAAAAAFjuv6kcKR1JNo="
-							},
-							"wordWrap": false,
-							"suppressAttributes": true,
-							"suppressOperations": true,
-							"suppressReceptions": true,
-							"showMultiplicity": true,
-							"showOperationSignature": true,
-							"attributeCompartment": {
-								"$ref": "AAAAAAFjuv6kcqR6rvs="
-							},
-							"operationCompartment": {
-								"$ref": "AAAAAAFjuv6kcqR7HEk="
-							},
-							"receptionCompartment": {
-								"$ref": "AAAAAAFjuv6kc6R8FZ0="
-							},
-							"templateParameterCompartment": {
-								"$ref": "AAAAAAFjuv6kdKR9/xc="
-							}
-						},
-						{
-							"_type": "UMLUseCaseView",
-							"_id": "AAAAAAFjuv/XzaSib0Y=",
-							"_parent": {
-								"$ref": "AAAAAAFjuvxSC6RUg4A="
-							},
-							"model": {
-								"$ref": "AAAAAAFjuv/XzKSgDcQ="
-							},
-							"subViews": [
-								{
-									"_type": "UMLNameCompartmentView",
-									"_id": "AAAAAAFjuv/XzqSjIc4=",
-									"_parent": {
-										"$ref": "AAAAAAFjuv/XzaSib0Y="
-									},
-									"model": {
-										"$ref": "AAAAAAFjuv/XzKSgDcQ="
-									},
-									"subViews": [
-										{
-											"_type": "LabelView",
-											"_id": "AAAAAAFjuv/Xz6SkS8o=",
-											"_parent": {
-												"$ref": "AAAAAAFjuv/XzqSjIc4="
-											},
-											"visible": false,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": -80,
-											"top": -96,
-											"width": 0,
-											"height": 12,
-											"autoResize": false,
-											"underline": false,
-											"horizontalAlignment": 2,
-											"verticalAlignment": 5,
-											"wordWrap": false
-										},
-										{
-											"_type": "LabelView",
-											"_id": "AAAAAAFjuv/X0KSlY0g=",
-											"_parent": {
-												"$ref": "AAAAAAFjuv/XzqSjIc4="
-											},
-											"visible": true,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;1",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": 330.5,
-											"top": 104,
-											"width": 92,
-											"height": 36,
-											"autoResize": false,
-											"underline": false,
-											"text": "Account Created Notification",
-											"horizontalAlignment": 2,
-											"verticalAlignment": 5,
-											"wordWrap": true
-										},
-										{
-											"_type": "LabelView",
-											"_id": "AAAAAAFjuv/X0KSmuPo=",
-											"_parent": {
-												"$ref": "AAAAAAFjuv/XzqSjIc4="
-											},
-											"visible": false,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": -80,
-											"top": -96,
-											"width": 69,
-											"height": 12,
-											"autoResize": false,
-											"underline": false,
-											"text": "(from Model)",
-											"horizontalAlignment": 2,
-											"verticalAlignment": 5,
-											"wordWrap": false
-										},
-										{
-											"_type": "LabelView",
-											"_id": "AAAAAAFjuv/X0KSnIG4=",
-											"_parent": {
-												"$ref": "AAAAAAFjuv/XzqSjIc4="
-											},
-											"visible": false,
-											"enabled": true,
-											"lineColor": "#000000",
-											"fillColor": "#ffffff",
-											"fontColor": "#000000",
-											"font": "Helvetica;12;0",
-											"showShadow": true,
-											"containerChangeable": false,
-											"containerExtending": false,
-											"left": -80,
-											"top": -96,
-											"width": 0,
-											"height": 12,
-											"autoResize": false,
-											"underline": false,
-											"horizontalAlignment": 1,
-											"verticalAlignment": 5,
-											"wordWrap": false
-										}
-									],
-									"visible": true,
-									"enabled": true,
-									"lineColor": "#000000",
-									"fillColor": "#ffffff",
-									"fontColor": "#000000",
-									"font": "Helvetica;12;0",
-									"showShadow": true,
-									"containerChangeable": false,
-									"containerExtending": false,
-									"left": 325.5,
-									"top": 97,
-									"width": 102,
-									"height": 48,
-									"autoResize": false,
-									"stereotypeLabel": {
-										"$ref": "AAAAAAFjuv/Xz6SkS8o="
-									},
-									"nameLabel": {
-										"$ref": "AAAAAAFjuv/X0KSlY0g="
-									},
-									"namespaceLabel": {
-										"$ref": "AAAAAAFjuv/X0KSmuPo="
-									},
-									"propertyLabel": {
-										"$ref": "AAAAAAFjuv/X0KSnIG4="
-									}
-								},
-								{
-									"_type": "UMLAttributeCompartmentView",
-									"_id": "AAAAAAFjuv/X0aSocII=",
-									"_parent": {
-										"$ref": "AAAAAAFjuv/XzaSib0Y="
-									},
-									"model": {
-										"$ref": "AAAAAAFjuv/XzKSgDcQ="
-									},
-									"visible": false,
-									"enabled": true,
-									"lineColor": "#000000",
-									"fillColor": "#ffffff",
-									"fontColor": "#000000",
-									"font": "Helvetica;12;0",
-									"showShadow": true,
-									"containerChangeable": false,
-									"containerExtending": false,
-									"left": -40,
-									"top": -48,
-									"width": 10,
-									"height": 10,
-									"autoResize": false
-								},
-								{
-									"_type": "UMLOperationCompartmentView",
-									"_id": "AAAAAAFjuv/X0qSpfns=",
-									"_parent": {
-										"$ref": "AAAAAAFjuv/XzaSib0Y="
-									},
-									"model": {
-										"$ref": "AAAAAAFjuv/XzKSgDcQ="
-									},
-									"visible": false,
-									"enabled": true,
-									"lineColor": "#000000",
-									"fillColor": "#ffffff",
-									"fontColor": "#000000",
-									"font": "Helvetica;12;0",
-									"showShadow": true,
-									"containerChangeable": false,
-									"containerExtending": false,
-									"left": -40,
-									"top": -48,
-									"width": 10,
-									"height": 10,
-									"autoResize": false
-								},
-								{
-									"_type": "UMLReceptionCompartmentView",
-									"_id": "AAAAAAFjuv/X0qSqNoc=",
-									"_parent": {
-										"$ref": "AAAAAAFjuv/XzaSib0Y="
-									},
-									"model": {
-										"$ref": "AAAAAAFjuv/XzKSgDcQ="
-									},
-									"visible": false,
-									"enabled": true,
-									"lineColor": "#000000",
-									"fillColor": "#ffffff",
-									"fontColor": "#000000",
-									"font": "Helvetica;12;0",
-									"showShadow": true,
-									"containerChangeable": false,
-									"containerExtending": false,
-									"left": -40,
-									"top": -48,
-									"width": 10,
-									"height": 10,
-									"autoResize": false
-								},
-								{
-									"_type": "UMLTemplateParameterCompartmentView",
-									"_id": "AAAAAAFjuv/X06Sr5DM=",
-									"_parent": {
-										"$ref": "AAAAAAFjuv/XzaSib0Y="
-									},
-									"model": {
-										"$ref": "AAAAAAFjuv/XzKSgDcQ="
-									},
-									"visible": false,
-									"enabled": true,
-									"lineColor": "#000000",
-									"fillColor": "#ffffff",
-									"fontColor": "#000000",
-									"font": "Helvetica;12;0",
-									"showShadow": true,
-									"containerChangeable": false,
-									"containerExtending": false,
-									"left": -40,
-									"top": -48,
-									"width": 10,
-									"height": 10,
-									"autoResize": false
-								},
-								{
-									"_type": "UMLExtensionPointCompartmentView",
-									"_id": "AAAAAAFjuv/X1KSsXMU=",
-									"_parent": {
-										"$ref": "AAAAAAFjuv/XzaSib0Y="
-									},
-									"model": {
-										"$ref": "AAAAAAFjuv/XzKSgDcQ="
-									},
-									"visible": false,
-									"enabled": true,
-									"lineColor": "#000000",
-									"fillColor": "#ffffff",
-									"fontColor": "#000000",
-									"font": "Helvetica;12;0",
-									"showShadow": true,
-									"containerChangeable": false,
-									"containerExtending": false,
-									"left": -40,
-									"top": -48,
-									"width": 10,
-									"height": 10,
-									"autoResize": false
-								}
-							],
-							"visible": true,
-							"enabled": true,
-							"lineColor": "#000000",
-							"fillColor": "#ffffff",
-							"fontColor": "#000000",
-							"font": "Helvetica;12;0",
-							"showShadow": true,
-							"containerChangeable": true,
-							"containerExtending": false,
-							"left": 304,
-							"top": 88,
-							"width": 145,
-							"height": 67,
-							"autoResize": false,
-							"stereotypeDisplay": "label",
-							"showVisibility": true,
-							"showNamespace": false,
-							"showProperty": true,
-							"showType": true,
-							"nameCompartment": {
-								"$ref": "AAAAAAFjuv/XzqSjIc4="
-							},
-							"wordWrap": true,
-							"suppressAttributes": true,
-							"suppressOperations": true,
-							"suppressReceptions": true,
-							"showMultiplicity": true,
-							"showOperationSignature": true,
-							"attributeCompartment": {
-								"$ref": "AAAAAAFjuv/X0aSocII="
-							},
-							"operationCompartment": {
-								"$ref": "AAAAAAFjuv/X0qSpfns="
-							},
-							"receptionCompartment": {
-								"$ref": "AAAAAAFjuv/X0qSqNoc="
-							},
-							"templateParameterCompartment": {
-								"$ref": "AAAAAAFjuv/X06Sr5DM="
-							},
-							"extensionPointCompartment": {
-								"$ref": "AAAAAAFjuv/X1KSsXMU="
-							}
-						}
-					]
-				},
-				{
-					"_type": "UMLUseCaseSubject",
-					"_id": "AAAAAAFjuv4gOKRYAw8=",
-					"_parent": {
-						"$ref": "AAAAAAFF+qBWK6M3Z8Y="
-					},
-					"name": "Notification Microservice",
-					"visibility": "public"
-				},
-				{
-					"_type": "UMLActor",
-					"_id": "AAAAAAFjuv6kbaRyZy0=",
-					"_parent": {
-						"$ref": "AAAAAAFF+qBWK6M3Z8Y="
-					},
-					"name": "customer microservice",
-					"visibility": "public",
-					"isAbstract": false,
-					"isFinalSpecialization": false,
-					"isLeaf": false
-				},
-				{
-					"_type": "UMLUseCase",
-					"_id": "AAAAAAFjuv/XzKSgDcQ=",
-					"_parent": {
-						"$ref": "AAAAAAFF+qBWK6M3Z8Y="
-					},
-					"name": "Account Created Notification",
-					"visibility": "public",
-					"isAbstract": false,
-					"isFinalSpecialization": false,
-					"isLeaf": false
-				}
-			],
-			"visibility": "public"
-		}
-	]
-}
\ No newline at end of file


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services