diff --git a/src/main/java/com/tarento/retail/dao/impl/UserDaoImpl.java b/src/main/java/com/tarento/retail/dao/impl/UserDaoImpl.java
index 76fe4f55e9b6f7f70e1721d8b81a547e6999e4bd..230a1e62331efa001fb75aef51361fd8c7c55392 100644
--- a/src/main/java/com/tarento/retail/dao/impl/UserDaoImpl.java
+++ b/src/main/java/com/tarento/retail/dao/impl/UserDaoImpl.java
@@ -909,7 +909,29 @@ public class UserDaoImpl implements UserDao {
 			paramMap.put(Constants.Parameters.LAST_NAME, keyword);
 			paramMap.put(Constants.Parameters.COUNTRY, keyword);
 		}
-
+		// dynamic key value search
+		if (searchRequest.getSearch() != null && searchRequest.getSearch().size() > 0) {
+			for (Map.Entry<String, Object> entry : searchRequest.getSearch().entrySet()) {
+				condition = addQueryCondition(builder, condition);
+				if (entry.getValue() instanceof List) {
+					if (Constants.UserSearchFields.MAPPING.containsKey(entry.getKey())) {
+						builder.append(Constants.UserSearchFields.MAPPING.get(entry.getKey()));
+					} else {
+						builder.append(entry.getKey());
+					}
+					builder.append(NamedUserQueries.IN_CLAUSE);
+					paramMap.put(Constants.Parameters.IN_VALUE, entry.getValue());
+				} else {
+					if (Constants.UserSearchFields.MAPPING.containsKey(entry.getKey())) {
+						builder.append(Constants.UserSearchFields.MAPPING.get(entry.getKey()));
+					} else {
+						builder.append(entry.getKey());
+					}
+					builder.append(NamedUserQueries.APPEND_VALUE);
+					paramMap.put(Constants.Parameters.VALUE, entry.getValue());
+				}
+			}
+		}
 		// limit & offset
 		if (searchRequest.getLimit() > 0) {
 			builder.append(NamedUserQueries.LIMIT);
diff --git a/src/main/java/com/tarento/retail/service/impl/UserServiceImpl.java b/src/main/java/com/tarento/retail/service/impl/UserServiceImpl.java
index 02e75ebcce00112fc995d53b6438eb3a94691056..cba7d19b492b443e4b272a9c8f9bd5919af07cfa 100644
--- a/src/main/java/com/tarento/retail/service/impl/UserServiceImpl.java
+++ b/src/main/java/com/tarento/retail/service/impl/UserServiceImpl.java
@@ -156,10 +156,11 @@ public class UserServiceImpl implements UserDetailsService, UserService {
 
 	@Override
 	public User save(User user) {
-		if (StringUtils.isNotBlank(user.getPassword())) {
-			String encryptedPassword = bcryptEncoder.encode(user.getPassword());
-			user.setPassword(encryptedPassword);
+		if (StringUtils.isBlank(user.getPassword())) {
+			user.setPassword("UP-SMF#User");
 		}
+		String encryptedPassword = bcryptEncoder.encode(user.getPassword());
+		user.setPassword(encryptedPassword);
 		return userDao.save(user);
 	}
 
diff --git a/src/main/java/com/tarento/retail/util/Constants.java b/src/main/java/com/tarento/retail/util/Constants.java
index 6cb7401f0a81cf40f4a7b96835016622a0e88538..d0ced0575fed19870caece83a497616e88ffb502 100644
--- a/src/main/java/com/tarento/retail/util/Constants.java
+++ b/src/main/java/com/tarento/retail/util/Constants.java
@@ -1,5 +1,8 @@
 package com.tarento.retail.util;
 
+import java.util.HashMap;
+import java.util.Map;
+
 public class Constants {
 
 	/**
@@ -96,6 +99,8 @@ public class Constants {
 		public static final String COUNTRY = "country";
 		public static final String LIMIT = "limit";
 		public static final String OFFSET = "offset";
+		public static final String IN_VALUE = "inValues";
+		public static final String VALUE = "value";
 	}
 
 	public interface EmailTemplate {
@@ -177,4 +182,12 @@ public class Constants {
 		}
 
 	}
+
+	public interface UserSearchFields {
+		public static final Map<String, String> MAPPING = new HashMap<String, String>() {
+			{
+				put("userId", "usr.id");
+			}
+		};
+	}
 }
diff --git a/src/main/java/com/tarento/retail/util/Sql.java b/src/main/java/com/tarento/retail/util/Sql.java
index 2ff66195b51aa86d2d0d06547f53aec66b406a85..d3336962df43a487788db9c3c6f927f55a877765 100644
--- a/src/main/java/com/tarento/retail/util/Sql.java
+++ b/src/main/java/com/tarento/retail/util/Sql.java
@@ -190,6 +190,9 @@ public interface Sql {
 				Constants.Parameters.COUNTRY);
 		final String LIMIT = String.format(" limit :%s ", Constants.Parameters.LIMIT);
 		final String OFFSET = String.format(" offset :%s ", Constants.Parameters.OFFSET);
+
+		final String IN_CLAUSE = String.format(" IN (:%s)", Constants.Parameters.IN_VALUE);
+		final String APPEND_VALUE = String.format(" = :%s ", Constants.Parameters.VALUE);
 	}
 
 }