diff --git a/falcon-ambari-view/Gruntfile.js b/falcon-ambari-view/Gruntfile.js
new file mode 100644
index 0000000..06ae4ea
--- /dev/null
+++ b/falcon-ambari-view/Gruntfile.js
@@ -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.
+ */
+(function () {
+  "use strict";
+
+  module.exports = function (grunt) {
+
+    grunt.initConfig({
+
+      scp: {
+        options: {
+          host: 'sandbox.hortonworks.com',
+          username: 'root',
+          password: 'hadoop'
+        },
+
+        sandbox: {
+          files: [
+            {
+              cwd: 'target',
+              src: '*.jar',
+              filter: 'isFile',
+              // path on the server
+              dest: '/var/lib/ambari-server/resources/views'
+            }
+          ]
+        }
+      }
+
+    });
+
+    grunt.registerTask('deploy', [
+      'scp'
+    ]);
+
+    grunt.loadNpmTasks('grunt-scp');
+
+  };
+
+}());
\ No newline at end of file
diff --git a/falcon-ambari-view/README b/falcon-ambari-view/README
new file mode 100644
index 0000000..07cb13b
--- /dev/null
+++ b/falcon-ambari-view/README
@@ -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.
+ */
+
+Falcon-Ambari-UI
+=========
+Web UI inside ambari for the Falcon-UI
+
+To clone the repository
+===============================
+- git clone https://github.com/hortonworks/falcon.git
+- git checkout dal
+
+
+Before starting
+===============
+NodeJs , npm, Grunt must be installed in the local pc.
+
+- From git root cd to /falcon-ui
+- npm install (this will install all the app related node modules)
+
+
+To deploy to the sandbox (v2-2)
+===============================
+- Deploy ambari view in order to generate falcon-ambari-view-0.7-incubating-SNAPSHOT.jar:
+ 1. cd falcon-ui
+ 2. grunt ambariview
+ 3. cd ..
+ 4. cd falcon-ambari-view
+ 5. mvn clean install
+ 6. falcon-ambari-view-0.7-incubating-SNAPSHOT.jar will be generated inside the taget directory
+
+- Upload falcon-ambari-view-0.7-incubating-SNAPSHOT.jar to /var/lib/ambari-server/resources/views/
+- Restart ambari server
+- Go to ambari admin -> Manage Ambari -> Falcon Ambari View -> Create Instance
+- Enter the API URL in the falcon.service.uri property
+
+Important!
+Security/Kerberos must be enabled, otherwise the services will ask for user.name param
diff --git a/falcon-ambari-view/package.json b/falcon-ambari-view/package.json
new file mode 100644
index 0000000..1aa99d4
--- /dev/null
+++ b/falcon-ambari-view/package.json
@@ -0,0 +1,38 @@
+/*
+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.
+*/
+
+{
+  "name": "falcon-ambari-view",
+  "version": "1.0.0",
+  "description": "UI to communicate with the ambari views",
+  "author": "Apache Foundation",
+  "license": "ISC",
+  "devDependencies": {
+    "grunt": "~0.4.4",
+    "grunt-concurrent": "^1.0.0",
+    "grunt-contrib-clean": "^0.6.0",
+    "grunt-contrib-concat": "^0.5.0",
+    "grunt-contrib-copy": "~0.5.0",
+    "grunt-contrib-csslint": "~0.2.0",
+    "grunt-contrib-jshint": "~0.10.0",
+    "grunt-contrib-less": "~0.11.0",
+    "grunt-contrib-uglify": "~0.4.0",
+    "grunt-contrib-watch": "~0.6.1",
+    "grunt-scp": "^0.1.7"
+  }
+}
diff --git a/falcon-ambari-view/pom.xml b/falcon-ambari-view/pom.xml
new file mode 100644
index 0000000..00176b5
--- /dev/null
+++ b/falcon-ambari-view/pom.xml
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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. -->
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<groupId>org.apache.falcon</groupId>
+		<artifactId>falcon-main</artifactId>
+		<version>0.10</version>
+	</parent>
+
+	<artifactId>falcon-ambari-view</artifactId>
+	<packaging>jar</packaging>
+	<name>Apache Falcon Ambari Views Integration</name>
+	<description>Apache Falcon UI Application</description>
+
+
+
+	<dependencies>
+		<dependency>
+			<groupId>javax.servlet</groupId>
+			<artifactId>servlet-api</artifactId>
+			<version>2.5</version>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>com.sun.jersey</groupId>
+			<artifactId>jersey-client</artifactId>
+			<version>${jersey.version}</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+            <groupId>com.sun.jersey</groupId>
+            <artifactId>jersey-json</artifactId>
+        </dependency>
+		<dependency>
+			<groupId>javax.inject</groupId>
+			<artifactId>javax.inject</artifactId>
+			<version>1</version>
+		</dependency>
+
+		<!-- Unit testing ====================================================== -->
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>4.11</version>
+			<scope>test</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>org.mockito</groupId>
+			<artifactId>mockito-core</artifactId>
+			<version>1.9.0</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.slf4j</groupId>
+			<artifactId>slf4j-log4j12</artifactId>
+		</dependency>
+		<dependency>
+		    <groupId>com.google.inject</groupId>
+		    <artifactId>guice</artifactId>
+		    <version>4.1.0</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.ambari.contrib.views</groupId>
+			<artifactId>ambari-views</artifactId>
+			<version>2.4.0.0.1019</version>
+			<scope>system</scope>
+			<systemPath>${basedir}/src/main/lib/ambari-views-2.4.0.0.1019.jar</systemPath>
+		</dependency>
+	</dependencies>
+
+	<build>
+
+		<plugins>
+
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-surefire-plugin</artifactId>
+				<version>2.12</version>
+			</plugin>
+
+            <plugin>
+                <groupId>org.apache.rat</groupId>
+                <artifactId>apache-rat-plugin</artifactId>
+                <configuration>
+                    <excludes>
+                        <exclude>package.json</exclude>
+						<exclude>src/main/resources/ui/css/**</exclude>
+						<exclude>src/main/resources/ui/js/**</exclude>
+						<exclude>src/main/resources/ui/config/**</exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
+			<plugin>
+				<artifactId>maven-dependency-plugin</artifactId>
+				<executions>
+					<execution>
+						<phase>generate-resources</phase>
+						<goals>
+							<goal>copy-dependencies</goal>
+						</goals>
+						<configuration>
+							<outputDirectory>${project.build.directory}/lib</outputDirectory>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+
+		</plugins>
+
+		<resources>
+			<resource>
+				<directory>src/main/resources/ui/</directory>
+				<filtering>false</filtering>
+			</resource>
+			<resource>
+				<directory>src/main/resources/</directory>
+				<filtering>false</filtering>
+				<includes>
+					<include>view.xml</include>
+				</includes>
+			</resource>
+			<resource>
+				<targetPath>WEB-INF/lib</targetPath>
+				<filtering>false</filtering>
+				<directory>target/lib</directory>
+			</resource>
+		</resources>
+	</build>
+
+</project>
diff --git a/falcon-ambari-view/src/build/findbugs-exclude.xml b/falcon-ambari-view/src/build/findbugs-exclude.xml
new file mode 100644
index 0000000..d548c0e
--- /dev/null
+++ b/falcon-ambari-view/src/build/findbugs-exclude.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   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.
+ -->
+<FindBugsFilter>
+
+    <!--
+    Disable encoding as this might give an impression that Falcon code base is
+    "Internationalization" ready, but we haven't done anything consciously to guarantee that.
+    -->
+    <Match>
+        <Bug pattern="DM_DEFAULT_ENCODING" />
+    </Match>
+
+    <Match>
+        <Bug pattern="RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT" />
+    </Match>
+</FindBugsFilter>
diff --git a/falcon-ambari-view/src/main/java/org/apache/falcon/ambari/view/FalconProxyImpersonator.java b/falcon-ambari-view/src/main/java/org/apache/falcon/ambari/view/FalconProxyImpersonator.java
new file mode 100644
index 0000000..15b0997
--- /dev/null
+++ b/falcon-ambari-view/src/main/java/org/apache/falcon/ambari/view/FalconProxyImpersonator.java
@@ -0,0 +1,346 @@
+/**
+ * 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.falcon.ambari.view;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import com.google.inject.Singleton;
+
+import javax.inject.Inject;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.UriInfo;
+
+import org.apache.ambari.view.URLStreamProvider;
+import org.apache.ambari.view.ViewContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * This is a class used to bridge the communication between the falcon-ui and
+ * the falcon API executing inside ambari.
+ */
+
+@Singleton
+public class FalconProxyImpersonator {
+    private static final Logger LOG = LoggerFactory
+            .getLogger(FalconProxyImpersonator.class);
+    private static final String GET_METHOD = "GET";
+    private static final String POST_METHOD = "POST";
+    private static final String DELETE_METHOD = "DELETE";
+
+    private static final String FALCON_ERROR = "<result><status>FAILED</status>";
+    private static final String[] FORCE_JSON_RESPONSE = { "/entities/list/", "admin/version", };
+
+    public static final String VIEW_KERBEROS_PRINCIPAL = "view.kerberos.principal";
+    public static final String VIEW_KERBEROS_PRINCIPAL_KEYTAB = "view.kerberos.principal.keytab";
+
+    private ViewContext viewContext;
+
+    /**
+     * Constructor to get the default viewcontext.
+     * @param viewContext
+     */
+    @Inject
+    public FalconProxyImpersonator(ViewContext viewContext) {
+        this.viewContext = viewContext;
+    }
+
+    /**
+     * Method to set the ambari user.
+     * @param headers
+     * @param ui
+     * @return
+     */
+    @GET
+    @Path("/")
+    public Response setUser(@Context HttpHeaders headers, @Context UriInfo ui) {
+        try {
+            String userName = viewContext.getUsername();
+            return Response.ok(userName).type(getResponseType(userName))
+                    .build();
+        } catch (Exception ex) {
+            LOG.error(ex.getMessage(), ex);
+            return Response.status(Response.Status.BAD_REQUEST)
+                    .entity(ex.toString()).build();
+        }
+    }
+
+    /**
+     * Method to attend all the GET calls.
+     * @param headers
+     * @param ui
+     * @return
+     */
+    @GET
+    @Path("/{path: .*}")
+    public Response getUsage(@Context HttpHeaders headers, @Context UriInfo ui) {
+        try {
+            String serviceURI = buildURI(ui);
+            return consumeService(headers, serviceURI, GET_METHOD, null);
+        } catch (Exception ex) {
+            LOG.error(ex.getMessage(), ex);
+            return Response.status(Response.Status.BAD_REQUEST)
+                    .entity(ex.toString()).build();
+        }
+    }
+
+    /**
+     * Method to attend all the POST calls.
+     * @param xml
+     * @param headers
+     * @param ui
+     * @return
+     * @throws IOException
+     */
+    @POST
+    @Path("/{path: .*}")
+    public Response handlePost(String xml, @Context HttpHeaders headers,
+            @Context UriInfo ui) throws IOException {
+        try {
+            String serviceURI = buildURI(ui);
+            return consumeService(headers, serviceURI, POST_METHOD, xml);
+        } catch (Exception ex) {
+            LOG.error(ex.getMessage(), ex);
+            return Response.status(Response.Status.BAD_REQUEST)
+                    .entity(ex.toString()).build();
+        }
+    }
+
+    /**
+     * Method to attend all the DELETE calls.
+     * @param headers
+     * @param ui
+     * @return
+     * @throws IOException
+     */
+    @DELETE
+    @Path("/{path: .*}")
+    public Response handleDelete(@Context HttpHeaders headers,
+            @Context UriInfo ui) throws IOException {
+        try {
+            String serviceURI = buildURI(ui);
+            return consumeService(headers, serviceURI, DELETE_METHOD, null);
+        } catch (Exception ex) {
+            LOG.error(ex.getMessage(), ex);
+            return Response.status(Response.Status.BAD_REQUEST)
+                    .entity(ex.toString()).build();
+        }
+    }
+
+    /**
+     * Method set the parametters and cast them to a String.
+     * @param ui
+     * @return
+     */
+    private String buildURI(UriInfo ui) {
+        String serviceURI = getFalconURL();
+        serviceURI += getUIURI(ui);
+        StringBuilder urlBuilder = new StringBuilder(serviceURI);
+        MultivaluedMap<String, String> parameters = ui.getQueryParameters();
+        boolean firstEntry = true;
+        for (Map.Entry<String, List<String>> entry : parameters.entrySet()) {
+            if (firstEntry) {
+                urlBuilder.append("?");
+            } else {
+                urlBuilder.append("&");
+            }
+            boolean firstVal = true;
+            for (String val : entry.getValue()) {
+                urlBuilder.append(firstVal ? "" : "&").append(entry.getKey())
+                        .append("=").append(val);
+                firstVal = false;
+            }
+            firstEntry = false;
+        }
+        return urlBuilder.toString();
+    }
+
+    private String getUIURI(UriInfo uriInfo) {
+        String uriPath = uriInfo.getAbsolutePath().getPath();
+        int index = uriPath.indexOf("proxy/") + 5;
+        return uriPath.substring(index);
+    }
+
+    /**
+     * Method to consume the API from the URLStreamProvider.
+     * @param headers
+     * @param urlToRead
+     * @param method
+     * @param xml
+     * @return
+     * @throws Exception
+     */
+    private Response consumeService(HttpHeaders headers, String urlToRead,
+            String method, String xml) throws Exception {
+        Response response;
+        URLStreamProvider streamProvider = viewContext.getURLStreamProvider();
+        Map<String, String> newHeaders = getHeaders(headers);
+        newHeaders.put("user.name", viewContext.getUsername());
+
+        if (checkForceJsonRepsonse(urlToRead, newHeaders)) {
+            newHeaders.put("Accept", MediaType.APPLICATION_JSON);
+        }
+        LOG.info(String.format("Falcon Url[%s]", urlToRead));
+        InputStream stream = null;
+        if (isSecurityEnabled()) {
+            stream = streamProvider.readAsCurrent(urlToRead, method, xml,
+                    newHeaders);
+        } else {
+            stream = streamProvider
+                    .readFrom(urlToRead, method, xml, newHeaders);
+        }
+
+        String sresponse = getStringFromInputStream(stream);
+
+        if (sresponse.contains(FALCON_ERROR)
+                || sresponse.contains(Response.Status.BAD_REQUEST.name())) {
+            response = Response.status(Response.Status.BAD_REQUEST)
+                    .entity(sresponse).type(MediaType.TEXT_PLAIN).build();
+        } else {
+            return Response.status(Response.Status.OK).entity(sresponse)
+                    .type(getResponseType(sresponse)).build();
+        }
+
+        return response;
+    }
+
+    private boolean isSecurityEnabled() {
+        return !"simple".equals(viewContext.getProperties().get(
+                "falcon.authentication.type"));
+    }
+
+    private String getFalconURL() {
+        String falconUri = "";
+        if (viewContext.getCluster() != null) {
+            String tlsEnabled = viewContext.getCluster().getConfigurationValue(
+                    "falcon_startup.properties", "falcon.enableTLS");
+            String scheme = Boolean.parseBoolean(tlsEnabled) ? "https" : "http";
+            String falconHost = viewContext.getCluster()
+                    .getHostsForServiceComponent("FALCON", "FALCON_SERVER")
+                    .get(0);
+            String falconPort = viewContext.getCluster().getConfigurationValue(
+                    "falcon-env", "falcon_port");
+            falconUri = scheme + "://" + falconHost + ":" + falconPort;
+
+        } else {
+            falconUri = viewContext.getProperties().get("falcon.service.uri");
+        }
+        LOG.info("Falcon URI==" + falconUri);
+        return falconUri;
+
+    }
+
+    /**
+     * Method to read the response and send it to the front.
+     * @param is
+     * @return
+     */
+    private String getStringFromInputStream(InputStream is) {
+
+        BufferedReader br = null;
+        StringBuilder sb = new StringBuilder();
+
+        String line;
+        try {
+            br = new BufferedReader(new InputStreamReader(is));
+            while ((line = br.readLine()) != null) {
+                sb.append(line);
+            }
+        } catch (IOException e) {
+            LOG.error(e.getMessage(), e);
+        } finally {
+            if (br != null) {
+                try {
+                    br.close();
+                } catch (IOException e) {
+                    LOG.error(e.getMessage(), e);
+                }
+            }
+        }
+        return sb.toString();
+    }
+
+    /**
+     * Method to cast the response type.
+     * @param response
+     * @return
+     */
+    private String getResponseType(String response) {
+        if (response.startsWith("{")) {
+            return MediaType.TEXT_PLAIN;
+        } else if (response.startsWith("<")) {
+            return MediaType.TEXT_XML;
+        } else {
+            return MediaType.TEXT_PLAIN;
+        }
+    }
+
+    private boolean checkForceJsonRepsonse(String urlToRead,
+            Map<String, String> headers) throws Exception {
+        for (int i = 0; i < FORCE_JSON_RESPONSE.length; i++) {
+            if (urlToRead.contains(FORCE_JSON_RESPONSE[i])) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private Map<String, String> getHeaders(HttpHeaders headers) {
+        MultivaluedMap<String, String> requestHeaders = headers
+                .getRequestHeaders();
+        Set<Entry<String, List<String>>> headerEntrySet = requestHeaders
+                .entrySet();
+        HashMap<String, String> headersMap = new HashMap<String, String>();
+        for (Entry<String, List<String>> headerEntry : headerEntrySet) {
+            String key = headerEntry.getKey();
+            List<String> values = headerEntry.getValue();
+            headersMap.put(key, strJoin(values, ","));
+        }
+        return headersMap;
+    }
+
+    // TODO use one of libraries.
+    private String strJoin(List<String> strings, String separator) {
+
+        StringBuilder stringBuilder = new StringBuilder();
+        for (int i = 0, il = strings.size(); i < il; i++) {
+            if (i > 0) {
+                stringBuilder.append(separator);
+            }
+            stringBuilder.append(strings.get(i));
+        }
+        return stringBuilder.toString();
+    }
+
+}
diff --git a/falcon-ambari-view/src/main/lib/ambari-views-2.4.0.0.1019.jar b/falcon-ambari-view/src/main/lib/ambari-views-2.4.0.0.1019.jar
new file mode 100644
index 0000000..6865744
--- /dev/null
+++ b/falcon-ambari-view/src/main/lib/ambari-views-2.4.0.0.1019.jar
Binary files differ
diff --git a/falcon-ambari-view/src/main/resources/WEB-INF/web.xml b/falcon-ambari-view/src/main/resources/WEB-INF/web.xml
new file mode 100644
index 0000000..aad4c20
--- /dev/null
+++ b/falcon-ambari-view/src/main/resources/WEB-INF/web.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+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. Kerberos, LDAP, Custom. Binary/Htt
+-->
+<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
+         version="3.1">
+</web-app>
\ No newline at end of file
diff --git a/falcon-ambari-view/src/main/resources/view.xml b/falcon-ambari-view/src/main/resources/view.xml
new file mode 100644
index 0000000..1a8d914
--- /dev/null
+++ b/falcon-ambari-view/src/main/resources/view.xml
@@ -0,0 +1,39 @@
+<!--
+   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.
+-->
+<view>
+  <name>Falcon</name>
+  <label>Falcon View</label>
+  <version>1.1.0</version>
+  <build>${env.BUILD_NUMBER}</build>
+  <resource>
+    <name>proxy</name>
+    <service-class>org.apache.falcon.ambari.view.FalconProxyImpersonator</service-class>
+  </resource>
+  <parameter>
+    <name>falcon.service.uri</name>
+    <description>The URI to which the falcon services will route. Default: "http://sandbox.hortonworks.com:15000"</description>
+    <required>false</required>
+    <cluster-config>fake</cluster-config>
+  </parameter>
+    <parameter>
+    <name>falcon.authentication.type</name>
+    <description>Authentication Type(simple|kerberos)</description>
+    <required>false</required>
+    <default-value>simple</default-value>
+    <cluster-config>falcon_startup.properties/falcon.authentication.type</cluster-config>
+  </parameter>
+</view>
diff --git a/falcon-ambari-view/src/test/java/org/apache/falcon/ambari/view/FalconProxyImpersonatorTest.java b/falcon-ambari-view/src/test/java/org/apache/falcon/ambari/view/FalconProxyImpersonatorTest.java
new file mode 100644
index 0000000..e01fed5
--- /dev/null
+++ b/falcon-ambari-view/src/test/java/org/apache/falcon/ambari/view/FalconProxyImpersonatorTest.java
@@ -0,0 +1,59 @@
+/**
+ * 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.falcon.ambari.view;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.mock;
+
+import org.apache.ambari.view.ViewContext;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.UriInfo;
+
+/**
+ * This is a class used to test FalconProxyImpersonator to bridge the communication between the falcon-ui
+ * and the falcon API executing inside ambari.
+ */
+public class FalconProxyImpersonatorTest {
+
+    private ViewContext viewContext;
+    private HttpHeaders headers;
+    private UriInfo ui;
+
+    private FalconProxyImpersonator impersonator;
+
+    @Before
+    public void setUp() throws Exception {
+        viewContext = mock(ViewContext.class);
+        headers = mock(HttpHeaders.class);
+        ui = mock(UriInfo.class);
+        impersonator = new FalconProxyImpersonator(viewContext);
+    }
+
+    @Test
+    public void testSetUser(){
+        Mockito.when(viewContext.getUsername()).thenReturn("ambari-qa");
+        Response response = impersonator.setUser(headers, ui);
+        assertEquals(200, response.getStatus());
+    }
+
+}
diff --git a/falcon-ui/Gruntfile.js b/falcon-ui/Gruntfile.js
index 112ad49..2ba3343 100644
--- a/falcon-ui/Gruntfile.js
+++ b/falcon-ui/Gruntfile.js
@@ -24,7 +24,7 @@
       copy: {
         resources: {
           cwd: 'app',
-          src: ['html/**/*.html', 'index.html', 'config/*'],
+          src: ['html/**/*.html', 'index.html', 'config/*', 'css/jquery-ui.css'],
           dest: 'dist/',
           expand: true
         },
@@ -34,6 +34,12 @@
           dest: 'dist/',
           expand: true
         },
+        webapp : {
+          cwd: 'dist',
+          src: ['**/*.*'],
+          dest: '../webapp/src/main/webapp/',
+          expand: true
+        },
 	ambariview : {
           cwd: 'dist',
           src: ['**/*.*'],
@@ -54,6 +60,7 @@
             'app/js/lib/jquery-1.11.1.min.js',
             'app/js/lib/angular.min.js',
             'app/js/lib/angular-cookies.min.js',
+            'app/js/lib/angular-ngStorage.js',
             'app/js/lib/uirouter.min.js',
             'app/js/lib/ui-bootstrap-tpls-0.11.0.min.js',
             'app/js/lib/d3.min.js',
@@ -65,7 +72,10 @@
             'app/js/lib/ng-tags-input.js',
             'app/js/lib/popover.js',
             'app/js/lib/ng-mask.min.js',
-            'app/js/lib/dagre.min.js'
+            'app/js/lib/dagre.min.js',
+			'app/js/lib/focusIf.min.js',
+            'app/js/lib/jquery.mask.min.js',
+			'app/js/lib/jquery-ui.min.js'
             //'app/js/lib/bootstrap.notify.js'
           ],
           dest: 'dist/js/vendor.min.js'
@@ -151,7 +161,10 @@
             ieCompat: false
           },
           files: {
-            'dist/css/main.css': 'app/css/main.less'
+            'dist/css/dark-theme.css': 'app/css/main.less',
+            'dist/css/white-theme.css': 'app/css/white-theme.less',
+            'dist/css/gray-theme.css': 'app/css/gray-theme.less',
+			'dist/css/default-theme.css': 'app/css/default-theme.less'
           }
         }
       },
diff --git a/falcon-ui/Installation-steps.txt b/falcon-ui/Installation-steps.txt
index 3f9968d..d4d3fb5 100644
--- a/falcon-ui/Installation-steps.txt
+++ b/falcon-ui/Installation-steps.txt
@@ -44,4 +44,8 @@
 -------------------
 - grunt dev
 This will launch an express server with the falcon-ui to localhost:3000
-(You can test there all UI related behaviours and express will mock all falcon REST calls)
\ No newline at end of file
+(You can test there all UI related behaviours and express will mock all falcon REST calls)
+
+
+## Font/Icons
+http://web.archive.org/web/20140912210715/http://entypo.com/characters/
\ No newline at end of file
diff --git a/falcon-ui/app/css/bootstrap/less/dropdowns.less b/falcon-ui/app/css/bootstrap/less/dropdowns.less
index 3eb7fc0..aed4d90 100644
--- a/falcon-ui/app/css/bootstrap/less/dropdowns.less
+++ b/falcon-ui/app/css/bootstrap/less/dropdowns.less
@@ -33,8 +33,8 @@
   z-index: @zindex-dropdown;
   display: none; // none by default, but block on "open" of the menu
   float: left;
-  min-width: 160px;
-  padding: 5px 0;
+  min-width: 60px;
+  padding: 0px 0;
   margin: 2px 0 0; // override default ul
   list-style: none;
   font-size: @font-size-base;
@@ -213,3 +213,7 @@
   }
 }
 
+.dropdown-submenu {
+  list-style: none;
+  padding: 0 0 0 10px;
+}
diff --git a/falcon-ui/app/css/bootstrap/less/forms.less b/falcon-ui/app/css/bootstrap/less/forms.less
index 2c5e9bf..6c4c6bb 100644
--- a/falcon-ui/app/css/bootstrap/less/forms.less
+++ b/falcon-ui/app/css/bootstrap/less/forms.less
@@ -51,8 +51,7 @@
 // Position radios and checkboxes better
 input[type="radio"],
 input[type="checkbox"] {
-  margin: 4px 0 0;
-  margin-top: 1px \9; // IE8-9
+  vertical-align: middle;
   line-height: normal;
 }
 
diff --git a/falcon-ui/app/css/bootstrap/less/pagination.less b/falcon-ui/app/css/bootstrap/less/pagination.less
index b2856ae..9bcd05b 100644
--- a/falcon-ui/app/css/bootstrap/less/pagination.less
+++ b/falcon-ui/app/css/bootstrap/less/pagination.less
@@ -4,7 +4,7 @@
 .pagination {
   display: inline-block;
   padding-left: 0;
-  margin: @line-height-computed 0;
+  margin-bottom: -5px;
   border-radius: @border-radius-base;
 
   > li {
diff --git a/falcon-ui/app/css/bootstrap/less/responsive-utilities.less b/falcon-ui/app/css/bootstrap/less/responsive-utilities.less
index b1db31d..1862e71 100644
--- a/falcon-ui/app/css/bootstrap/less/responsive-utilities.less
+++ b/falcon-ui/app/css/bootstrap/less/responsive-utilities.less
@@ -126,7 +126,7 @@
   }
 }
 .visible-lg-inline-block {
-  @media (min-width: @screen-lg-min) {
+  @media (min-width: @screen-xs-min) {
     display: inline-block !important;
   }
 }
diff --git a/falcon-ui/app/css/bootstrap/less/tables.less b/falcon-ui/app/css/bootstrap/less/tables.less
index 2e1ef33..76b51de 100644
--- a/falcon-ui/app/css/bootstrap/less/tables.less
+++ b/falcon-ui/app/css/bootstrap/less/tables.less
@@ -26,7 +26,7 @@
       > td {
         padding: @table-cell-padding;
         line-height: @line-height-base;
-        vertical-align: top;
+        vertical-align: middle;
         border-top: 1px solid @table-border-color;
       }
     }
@@ -231,3 +231,11 @@
     }
   }
 }
+
+.evenRow {
+  background: #fff;
+}
+
+.oddRow {
+  background: #F9F9F9;
+}
diff --git a/falcon-ui/app/css/bootstrap/less/variables.less b/falcon-ui/app/css/bootstrap/less/variables.less
index 582f0f8..6298c5f 100644
--- a/falcon-ui/app/css/bootstrap/less/variables.less
+++ b/falcon-ui/app/css/bootstrap/less/variables.less
@@ -119,7 +119,7 @@
 //## Customizes the `.table` component with basic values, each used across all table variations.
 
 //** Padding for `<th>`s and `<td>`s.
-@table-cell-padding:            8px;
+@table-cell-padding:            5px;
 //** Padding for cells in `.table-condensed`.
 @table-condensed-cell-padding:  5px;
 
@@ -842,5 +842,3 @@
 @dl-horizontal-offset:        @component-offset-horizontal;
 //** Horizontal line color.
 @hr-border:                   @gray-lighter;
-
-
diff --git a/falcon-ui/app/css/default-theme.less b/falcon-ui/app/css/default-theme.less
new file mode 100644
index 0000000..e2e3117
--- /dev/null
+++ b/falcon-ui/app/css/default-theme.less
@@ -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.
+ */
+// Core variables and mixins
+@import "main.less";
+@import "styles/default.less";
diff --git a/falcon-ui/app/css/fonts/entypo.less b/falcon-ui/app/css/fonts/entypo.less
index 3b90398..cd67f6a 100644
--- a/falcon-ui/app/css/fonts/entypo.less
+++ b/falcon-ui/app/css/fonts/entypo.less
@@ -46,6 +46,10 @@
   line-height: 0;
 }
 
+.entypo-align-sub {
+  vertical-align: sub;
+}
+
 .entypo-social {
   font-family: 'EntypoSocialRegular';
   font-size: 2em;
@@ -1187,4 +1191,4 @@
 
 .entypo-social.smashing:before {
   content: '\F357';
-}
\ No newline at end of file
+}
diff --git a/falcon-ui/app/css/gray-theme.less b/falcon-ui/app/css/gray-theme.less
new file mode 100644
index 0000000..5f6ec7e
--- /dev/null
+++ b/falcon-ui/app/css/gray-theme.less
@@ -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.
+ */
+// Core variables and mixins
+@import "main.less";
+@import "styles/gray.less";
diff --git a/falcon-ui/app/css/img/32x32_create-entity-hover.png b/falcon-ui/app/css/img/32x32_create-entity-hover.png
new file mode 100755
index 0000000..32361ae
--- /dev/null
+++ b/falcon-ui/app/css/img/32x32_create-entity-hover.png
Binary files differ
diff --git a/falcon-ui/app/css/img/32x32_create-entity.png b/falcon-ui/app/css/img/32x32_create-entity.png
new file mode 100755
index 0000000..30e6f65
--- /dev/null
+++ b/falcon-ui/app/css/img/32x32_create-entity.png
Binary files differ
diff --git a/falcon-ui/app/css/img/32x32_upload.png b/falcon-ui/app/css/img/32x32_upload.png
new file mode 100755
index 0000000..d18c2df
--- /dev/null
+++ b/falcon-ui/app/css/img/32x32_upload.png
Binary files differ
diff --git a/falcon-ui/app/css/img/cloud.png b/falcon-ui/app/css/img/cloud.png
new file mode 100644
index 0000000..1cb0075
--- /dev/null
+++ b/falcon-ui/app/css/img/cloud.png
Binary files differ
diff --git a/falcon-ui/app/css/img/falcon-logo.jpg b/falcon-ui/app/css/img/falcon-logo.jpg
new file mode 100755
index 0000000..3eadaa6
--- /dev/null
+++ b/falcon-ui/app/css/img/falcon-logo.jpg
Binary files differ
diff --git a/falcon-ui/app/css/img/falcon.png b/falcon-ui/app/css/img/falcon.png
deleted file mode 100644
index f0e6934..0000000
--- a/falcon-ui/app/css/img/falcon.png
+++ /dev/null
Binary files differ
diff --git a/falcon-ui/app/css/img/feed.png b/falcon-ui/app/css/img/feed.png
new file mode 100644
index 0000000..b6e9836
--- /dev/null
+++ b/falcon-ui/app/css/img/feed.png
Binary files differ
diff --git a/falcon-ui/app/css/img/ui-bg_glass_55_fbf9ee_1x400.png b/falcon-ui/app/css/img/ui-bg_glass_55_fbf9ee_1x400.png
new file mode 100644
index 0000000..f2811e5
--- /dev/null
+++ b/falcon-ui/app/css/img/ui-bg_glass_55_fbf9ee_1x400.png
Binary files differ
diff --git a/falcon-ui/app/css/img/ui-bg_glass_65_ffffff_1x400.png b/falcon-ui/app/css/img/ui-bg_glass_65_ffffff_1x400.png
new file mode 100644
index 0000000..c2c7126
--- /dev/null
+++ b/falcon-ui/app/css/img/ui-bg_glass_65_ffffff_1x400.png
Binary files differ
diff --git a/falcon-ui/app/css/img/ui-bg_glass_75_dadada_1x400.png b/falcon-ui/app/css/img/ui-bg_glass_75_dadada_1x400.png
new file mode 100644
index 0000000..a1d1e14
--- /dev/null
+++ b/falcon-ui/app/css/img/ui-bg_glass_75_dadada_1x400.png
Binary files differ
diff --git a/falcon-ui/app/css/img/ui-bg_glass_75_e6e6e6_1x400.png b/falcon-ui/app/css/img/ui-bg_glass_75_e6e6e6_1x400.png
new file mode 100644
index 0000000..af8a90c
--- /dev/null
+++ b/falcon-ui/app/css/img/ui-bg_glass_75_e6e6e6_1x400.png
Binary files differ
diff --git a/falcon-ui/app/css/img/ui-bg_glass_95_fef1ec_1x400.png b/falcon-ui/app/css/img/ui-bg_glass_95_fef1ec_1x400.png
new file mode 100644
index 0000000..078e793
--- /dev/null
+++ b/falcon-ui/app/css/img/ui-bg_glass_95_fef1ec_1x400.png
Binary files differ
diff --git a/falcon-ui/app/css/img/ui-bg_highlight-soft_75_cccccc_1x100.png b/falcon-ui/app/css/img/ui-bg_highlight-soft_75_cccccc_1x100.png
new file mode 100644
index 0000000..88d1855
--- /dev/null
+++ b/falcon-ui/app/css/img/ui-bg_highlight-soft_75_cccccc_1x100.png
Binary files differ
diff --git a/falcon-ui/app/css/img/ui-icons_222222_256x240.png b/falcon-ui/app/css/img/ui-icons_222222_256x240.png
new file mode 100644
index 0000000..e9c8e16
--- /dev/null
+++ b/falcon-ui/app/css/img/ui-icons_222222_256x240.png
Binary files differ
diff --git a/falcon-ui/app/css/img/ui-icons_2e83ff_256x240.png b/falcon-ui/app/css/img/ui-icons_2e83ff_256x240.png
new file mode 100644
index 0000000..f2bf838
--- /dev/null
+++ b/falcon-ui/app/css/img/ui-icons_2e83ff_256x240.png
Binary files differ
diff --git a/falcon-ui/app/css/img/ui-icons_454545_256x240.png b/falcon-ui/app/css/img/ui-icons_454545_256x240.png
new file mode 100644
index 0000000..d6169e8
--- /dev/null
+++ b/falcon-ui/app/css/img/ui-icons_454545_256x240.png
Binary files differ
diff --git a/falcon-ui/app/css/img/ui-icons_888888_256x240.png b/falcon-ui/app/css/img/ui-icons_888888_256x240.png
new file mode 100644
index 0000000..d3e6e02
--- /dev/null
+++ b/falcon-ui/app/css/img/ui-icons_888888_256x240.png
Binary files differ
diff --git a/falcon-ui/app/css/img/ui-icons_cd0a0a_256x240.png b/falcon-ui/app/css/img/ui-icons_cd0a0a_256x240.png
new file mode 100644
index 0000000..4937018
--- /dev/null
+++ b/falcon-ui/app/css/img/ui-icons_cd0a0a_256x240.png
Binary files differ
diff --git a/falcon-ui/app/css/img/user.svg b/falcon-ui/app/css/img/user.svg
index fb534c2..60ac6c5 100644
--- a/falcon-ui/app/css/img/user.svg
+++ b/falcon-ui/app/css/img/user.svg
@@ -1,20 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!--
-   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.
-  -->
 <!-- Generator: Adobe Illustrator 16.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 <svg version="1.1" id="User" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
diff --git a/falcon-ui/app/css/jquery-ui.css b/falcon-ui/app/css/jquery-ui.css
new file mode 100644
index 0000000..826c967
--- /dev/null
+++ b/falcon-ui/app/css/jquery-ui.css
@@ -0,0 +1,1225 @@
+/*! jQuery UI - v1.11.4 - 2015-03-11
+* http://jqueryui.com
+* Includes: core.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, draggable.css, menu.css, progressbar.css, resizable.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
+* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden {
+	display: none;
+}
+.ui-helper-hidden-accessible {
+	border: 0;
+	clip: rect(0 0 0 0);
+	height: 1px;
+	margin: -1px;
+	overflow: hidden;
+	padding: 0;
+	position: absolute;
+	width: 1px;
+}
+.ui-helper-reset {
+	margin: 0;
+	padding: 0;
+	border: 0;
+	outline: 0;
+	line-height: 1.3;
+	text-decoration: none;
+	font-size: 100%;
+	list-style: none;
+}
+.ui-helper-clearfix:before,
+.ui-helper-clearfix:after {
+	content: "";
+	display: table;
+	border-collapse: collapse;
+}
+.ui-helper-clearfix:after {
+	clear: both;
+}
+.ui-helper-clearfix {
+	min-height: 0; /* support: IE7 */
+}
+.ui-helper-zfix {
+	width: 100%;
+	height: 100%;
+	top: 0;
+	left: 0;
+	position: absolute;
+	opacity: 0;
+	filter:Alpha(Opacity=0); /* support: IE8 */
+}
+
+.ui-front {
+	z-index: 100;
+}
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled {
+	cursor: default !important;
+}
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+	display: block;
+	text-indent: -99999px;
+	overflow: hidden;
+	background-repeat: no-repeat;
+}
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay {
+	position: fixed;
+	top: 0;
+	left: 0;
+	width: 100%;
+	height: 100%;
+}
+.ui-accordion .ui-accordion-header {
+	display: block;
+	cursor: pointer;
+	position: relative;
+	margin: 2px 0 0 0;
+	padding: .5em .5em .5em .7em;
+	min-height: 0; /* support: IE7 */
+	font-size: 100%;
+}
+.ui-accordion .ui-accordion-icons {
+	padding-left: 2.2em;
+}
+.ui-accordion .ui-accordion-icons .ui-accordion-icons {
+	padding-left: 2.2em;
+}
+.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
+	position: absolute;
+	left: .5em;
+	top: 50%;
+	margin-top: -8px;
+}
+.ui-accordion .ui-accordion-content {
+	padding: 1em 2.2em;
+	border-top: 0;
+	overflow: auto;
+}
+.ui-autocomplete {
+	position: absolute;
+	top: 0;
+	left: 0;
+	cursor: default;
+}
+.ui-button {
+	display: inline-block;
+	position: relative;
+	padding: 0;
+	line-height: normal;
+	margin-right: .1em;
+	cursor: pointer;
+	vertical-align: middle;
+	text-align: center;
+	overflow: visible; /* removes extra width in IE */
+}
+.ui-button,
+.ui-button:link,
+.ui-button:visited,
+.ui-button:hover,
+.ui-button:active {
+	text-decoration: none;
+}
+/* to make room for the icon, a width needs to be set here */
+.ui-button-icon-only {
+	width: 2.2em;
+}
+/* button elements seem to need a little more width */
+button.ui-button-icon-only {
+	width: 2.4em;
+}
+.ui-button-icons-only {
+	width: 3.4em;
+}
+button.ui-button-icons-only {
+	width: 3.7em;
+}
+
+/* button text element */
+.ui-button .ui-button-text {
+	display: block;
+	line-height: normal;
+}
+.ui-button-text-only .ui-button-text {
+	padding: .4em 1em;
+}
+.ui-button-icon-only .ui-button-text,
+.ui-button-icons-only .ui-button-text {
+	padding: .4em;
+	text-indent: -9999999px;
+}
+.ui-button-text-icon-primary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+	padding: .4em 1em .4em 2.1em;
+}
+.ui-button-text-icon-secondary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+	padding: .4em 2.1em .4em 1em;
+}
+.ui-button-text-icons .ui-button-text {
+	padding-left: 2.1em;
+	padding-right: 2.1em;
+}
+/* no icon support for input elements, provide padding by default */
+input.ui-button {
+	padding: .4em 1em;
+}
+
+/* button icon element(s) */
+.ui-button-icon-only .ui-icon,
+.ui-button-text-icon-primary .ui-icon,
+.ui-button-text-icon-secondary .ui-icon,
+.ui-button-text-icons .ui-icon,
+.ui-button-icons-only .ui-icon {
+	position: absolute;
+	top: 50%;
+	margin-top: -8px;
+}
+.ui-button-icon-only .ui-icon {
+	left: 50%;
+	margin-left: -8px;
+}
+.ui-button-text-icon-primary .ui-button-icon-primary,
+.ui-button-text-icons .ui-button-icon-primary,
+.ui-button-icons-only .ui-button-icon-primary {
+	left: .5em;
+}
+.ui-button-text-icon-secondary .ui-button-icon-secondary,
+.ui-button-text-icons .ui-button-icon-secondary,
+.ui-button-icons-only .ui-button-icon-secondary {
+	right: .5em;
+}
+
+/* button sets */
+.ui-buttonset {
+	margin-right: 7px;
+}
+.ui-buttonset .ui-button {
+	margin-left: 0;
+	margin-right: -.3em;
+}
+
+/* workarounds */
+/* reset extra padding in Firefox, see h5bp.com/l */
+input.ui-button::-moz-focus-inner,
+button.ui-button::-moz-focus-inner {
+	border: 0;
+	padding: 0;
+}
+.ui-datepicker {
+	width: 17em;
+	padding: .2em .2em 0;
+	display: none;
+}
+.ui-datepicker .ui-datepicker-header {
+	position: relative;
+	padding: .2em 0;
+}
+.ui-datepicker .ui-datepicker-prev,
+.ui-datepicker .ui-datepicker-next {
+	position: absolute;
+	top: 2px;
+	width: 1.8em;
+	height: 1.8em;
+}
+.ui-datepicker .ui-datepicker-prev-hover,
+.ui-datepicker .ui-datepicker-next-hover {
+	top: 1px;
+}
+.ui-datepicker .ui-datepicker-prev {
+	left: 2px;
+}
+.ui-datepicker .ui-datepicker-next {
+	right: 2px;
+}
+.ui-datepicker .ui-datepicker-prev-hover {
+	left: 1px;
+}
+.ui-datepicker .ui-datepicker-next-hover {
+	right: 1px;
+}
+.ui-datepicker .ui-datepicker-prev span,
+.ui-datepicker .ui-datepicker-next span {
+	display: block;
+	position: absolute;
+	left: 50%;
+	margin-left: -8px;
+	top: 50%;
+	margin-top: -8px;
+}
+.ui-datepicker .ui-datepicker-title {
+	margin: 0 2.3em;
+	line-height: 1.8em;
+	text-align: center;
+}
+.ui-datepicker .ui-datepicker-title select {
+	font-size: 1em;
+	margin: 1px 0;
+}
+.ui-datepicker select.ui-datepicker-month,
+.ui-datepicker select.ui-datepicker-year {
+	width: 45%;
+}
+.ui-datepicker table {
+	width: 100%;
+	font-size: .9em;
+	border-collapse: collapse;
+	margin: 0 0 .4em;
+}
+.ui-datepicker th {
+	padding: .7em .3em;
+	text-align: center;
+	font-weight: bold;
+	border: 0;
+}
+.ui-datepicker td {
+	border: 0;
+	padding: 1px;
+}
+.ui-datepicker td span,
+.ui-datepicker td a {
+	display: block;
+	padding: .2em;
+	text-align: right;
+	text-decoration: none;
+}
+.ui-datepicker .ui-datepicker-buttonpane {
+	background-image: none;
+	margin: .7em 0 0 0;
+	padding: 0 .2em;
+	border-left: 0;
+	border-right: 0;
+	border-bottom: 0;
+}
+.ui-datepicker .ui-datepicker-buttonpane button {
+	float: right;
+	margin: .5em .2em .4em;
+	cursor: pointer;
+	padding: .2em .6em .3em .6em;
+	width: auto;
+	overflow: visible;
+}
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
+	float: left;
+}
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi {
+	width: auto;
+}
+.ui-datepicker-multi .ui-datepicker-group {
+	float: left;
+}
+.ui-datepicker-multi .ui-datepicker-group table {
+	width: 95%;
+	margin: 0 auto .4em;
+}
+.ui-datepicker-multi-2 .ui-datepicker-group {
+	width: 50%;
+}
+.ui-datepicker-multi-3 .ui-datepicker-group {
+	width: 33.3%;
+}
+.ui-datepicker-multi-4 .ui-datepicker-group {
+	width: 25%;
+}
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
+	border-left-width: 0;
+}
+.ui-datepicker-multi .ui-datepicker-buttonpane {
+	clear: left;
+}
+.ui-datepicker-row-break {
+	clear: both;
+	width: 100%;
+	font-size: 0;
+}
+
+/* RTL support */
+.ui-datepicker-rtl {
+	direction: rtl;
+}
+.ui-datepicker-rtl .ui-datepicker-prev {
+	right: 2px;
+	left: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-next {
+	left: 2px;
+	right: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-prev:hover {
+	right: 1px;
+	left: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-next:hover {
+	left: 1px;
+	right: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane {
+	clear: right;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane button {
+	float: left;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
+.ui-datepicker-rtl .ui-datepicker-group {
+	float: right;
+}
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
+	border-right-width: 0;
+	border-left-width: 1px;
+}
+.ui-dialog {
+	overflow: hidden;
+	position: absolute;
+	top: 0;
+	left: 0;
+	padding: .2em;
+	outline: 0;
+}
+.ui-dialog .ui-dialog-titlebar {
+	padding: .4em 1em;
+	position: relative;
+}
+.ui-dialog .ui-dialog-title {
+	float: left;
+	margin: .1em 0;
+	white-space: nowrap;
+	width: 90%;
+	overflow: hidden;
+	text-overflow: ellipsis;
+}
+.ui-dialog .ui-dialog-titlebar-close {
+	position: absolute;
+	right: .3em;
+	top: 50%;
+	width: 20px;
+	margin: -10px 0 0 0;
+	padding: 1px;
+	height: 20px;
+}
+.ui-dialog .ui-dialog-content {
+	position: relative;
+	border: 0;
+	padding: .5em 1em;
+	background: none;
+	overflow: auto;
+}
+.ui-dialog .ui-dialog-buttonpane {
+	text-align: left;
+	border-width: 1px 0 0 0;
+	background-image: none;
+	margin-top: .5em;
+	padding: .3em 1em .5em .4em;
+}
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
+	float: right;
+}
+.ui-dialog .ui-dialog-buttonpane button {
+	margin: .5em .4em .5em 0;
+	cursor: pointer;
+}
+.ui-dialog .ui-resizable-se {
+	width: 12px;
+	height: 12px;
+	right: -5px;
+	bottom: -5px;
+	background-position: 16px 16px;
+}
+.ui-draggable .ui-dialog-titlebar {
+	cursor: move;
+}
+.ui-draggable-handle {
+	-ms-touch-action: none;
+	touch-action: none;
+}
+.ui-menu {
+	list-style: none;
+	padding: 0;
+	margin: 0;
+	display: block;
+	outline: none;
+}
+.ui-menu .ui-menu {
+	position: absolute;
+}
+.ui-menu .ui-menu-item {
+	position: relative;
+	margin: 0;
+	padding: 3px 1em 3px .4em;
+	cursor: pointer;
+	min-height: 0; /* support: IE7 */
+	/* support: IE10, see #8844 */
+	list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
+}
+.ui-menu .ui-menu-divider {
+	margin: 5px 0;
+	height: 0;
+	font-size: 0;
+	line-height: 0;
+	border-width: 1px 0 0 0;
+}
+.ui-menu .ui-state-focus,
+.ui-menu .ui-state-active {
+	margin: -1px;
+}
+
+/* icon support */
+.ui-menu-icons {
+	position: relative;
+}
+.ui-menu-icons .ui-menu-item {
+	padding-left: 2em;
+}
+
+/* left-aligned */
+.ui-menu .ui-icon {
+	position: absolute;
+	top: 0;
+	bottom: 0;
+	left: .2em;
+	margin: auto 0;
+}
+
+/* right-aligned */
+.ui-menu .ui-menu-icon {
+	left: auto;
+	right: 0;
+}
+.ui-progressbar {
+	height: 2em;
+	text-align: left;
+	overflow: hidden;
+}
+.ui-progressbar .ui-progressbar-value {
+	margin: -1px;
+	height: 100%;
+}
+.ui-progressbar .ui-progressbar-overlay {
+	background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
+	height: 100%;
+	filter: alpha(opacity=25); /* support: IE8 */
+	opacity: 0.25;
+}
+.ui-progressbar-indeterminate .ui-progressbar-value {
+	background-image: none;
+}
+.ui-resizable {
+	position: relative;
+}
+.ui-resizable-handle {
+	position: absolute;
+	font-size: 0.1px;
+	display: block;
+	-ms-touch-action: none;
+	touch-action: none;
+}
+.ui-resizable-disabled .ui-resizable-handle,
+.ui-resizable-autohide .ui-resizable-handle {
+	display: none;
+}
+.ui-resizable-n {
+	cursor: n-resize;
+	height: 7px;
+	width: 100%;
+	top: -5px;
+	left: 0;
+}
+.ui-resizable-s {
+	cursor: s-resize;
+	height: 7px;
+	width: 100%;
+	bottom: -5px;
+	left: 0;
+}
+.ui-resizable-e {
+	cursor: e-resize;
+	width: 7px;
+	right: -5px;
+	top: 0;
+	height: 100%;
+}
+.ui-resizable-w {
+	cursor: w-resize;
+	width: 7px;
+	left: -5px;
+	top: 0;
+	height: 100%;
+}
+.ui-resizable-se {
+	cursor: se-resize;
+	width: 12px;
+	height: 12px;
+	right: 1px;
+	bottom: 1px;
+}
+.ui-resizable-sw {
+	cursor: sw-resize;
+	width: 9px;
+	height: 9px;
+	left: -5px;
+	bottom: -5px;
+}
+.ui-resizable-nw {
+	cursor: nw-resize;
+	width: 9px;
+	height: 9px;
+	left: -5px;
+	top: -5px;
+}
+.ui-resizable-ne {
+	cursor: ne-resize;
+	width: 9px;
+	height: 9px;
+	right: -5px;
+	top: -5px;
+}
+.ui-selectable {
+	-ms-touch-action: none;
+	touch-action: none;
+}
+.ui-selectable-helper {
+	position: absolute;
+	z-index: 100;
+	border: 1px dotted black;
+}
+.ui-selectmenu-menu {
+	padding: 0;
+	margin: 0;
+	position: absolute;
+	top: 0;
+	left: 0;
+	display: none;
+}
+.ui-selectmenu-menu .ui-menu {
+	overflow: auto;
+	/* Support: IE7 */
+	overflow-x: hidden;
+	padding-bottom: 1px;
+}
+.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
+	font-size: 1em;
+	font-weight: bold;
+	line-height: 1.5;
+	padding: 2px 0.4em;
+	margin: 0.5em 0 0 0;
+	height: auto;
+	border: 0;
+}
+.ui-selectmenu-open {
+	display: block;
+}
+.ui-selectmenu-button {
+	display: inline-block;
+	overflow: hidden;
+	position: relative;
+	text-decoration: none;
+	cursor: pointer;
+}
+.ui-selectmenu-button span.ui-icon {
+	right: 0.5em;
+	left: auto;
+	margin-top: -8px;
+	position: absolute;
+	top: 50%;
+}
+.ui-selectmenu-button span.ui-selectmenu-text {
+	text-align: left;
+	padding: 0.4em 2.1em 0.4em 1em;
+	display: block;
+	line-height: 1.4;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	white-space: nowrap;
+}
+.ui-slider {
+	position: relative;
+	text-align: left;
+}
+.ui-slider .ui-slider-handle {
+	position: absolute;
+	z-index: 2;
+	width: 1.2em;
+	height: 1.2em;
+	cursor: default;
+	-ms-touch-action: none;
+	touch-action: none;
+}
+.ui-slider .ui-slider-range {
+	position: absolute;
+	z-index: 1;
+	font-size: .7em;
+	display: block;
+	border: 0;
+	background-position: 0 0;
+}
+
+/* support: IE8 - See #6727 */
+.ui-slider.ui-state-disabled .ui-slider-handle,
+.ui-slider.ui-state-disabled .ui-slider-range {
+	filter: inherit;
+}
+
+.ui-slider-horizontal {
+	height: .8em;
+}
+.ui-slider-horizontal .ui-slider-handle {
+	top: -.3em;
+	margin-left: -.6em;
+}
+.ui-slider-horizontal .ui-slider-range {
+	top: 0;
+	height: 100%;
+}
+.ui-slider-horizontal .ui-slider-range-min {
+	left: 0;
+}
+.ui-slider-horizontal .ui-slider-range-max {
+	right: 0;
+}
+
+.ui-slider-vertical {
+	width: .8em;
+	height: 100px;
+}
+.ui-slider-vertical .ui-slider-handle {
+	left: -.3em;
+	margin-left: 0;
+	margin-bottom: -.6em;
+}
+.ui-slider-vertical .ui-slider-range {
+	left: 0;
+	width: 100%;
+}
+.ui-slider-vertical .ui-slider-range-min {
+	bottom: 0;
+}
+.ui-slider-vertical .ui-slider-range-max {
+	top: 0;
+}
+.ui-sortable-handle {
+	-ms-touch-action: none;
+	touch-action: none;
+}
+.ui-spinner {
+	position: relative;
+	display: inline-block;
+	overflow: hidden;
+	padding: 0;
+	vertical-align: middle;
+}
+.ui-spinner-input {
+	border: none;
+	background: none;
+	color: inherit;
+	padding: 0;
+	margin: .2em 0;
+	vertical-align: middle;
+	margin-left: .4em;
+	margin-right: 22px;
+}
+.ui-spinner-button {
+	width: 16px;
+	height: 50%;
+	font-size: .5em;
+	padding: 0;
+	margin: 0;
+	text-align: center;
+	position: absolute;
+	cursor: default;
+	display: block;
+	overflow: hidden;
+	right: 0;
+}
+/* more specificity required here to override default borders */
+.ui-spinner a.ui-spinner-button {
+	border-top: none;
+	border-bottom: none;
+	border-right: none;
+}
+/* vertically center icon */
+.ui-spinner .ui-icon {
+	position: absolute;
+	margin-top: -8px;
+	top: 50%;
+	left: 0;
+}
+.ui-spinner-up {
+	top: 0;
+}
+.ui-spinner-down {
+	bottom: 0;
+}
+
+/* TR overrides */
+.ui-spinner .ui-icon-triangle-1-s {
+	/* need to fix icons sprite */
+	background-position: -65px -16px;
+}
+.ui-tabs {
+	position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+	padding: .2em;
+}
+.ui-tabs .ui-tabs-nav {
+	margin: 0;
+	padding: .2em .2em 0;
+}
+.ui-tabs .ui-tabs-nav li {
+	list-style: none;
+	float: left;
+	position: relative;
+	top: 0;
+	margin: 1px .2em 0 0;
+	border-bottom-width: 0;
+	padding: 0;
+	white-space: nowrap;
+}
+.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
+	float: left;
+	padding: .5em 1em;
+	text-decoration: none;
+}
+.ui-tabs .ui-tabs-nav li.ui-tabs-active {
+	margin-bottom: -1px;
+	padding-bottom: 1px;
+}
+.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
+	cursor: text;
+}
+.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
+	cursor: pointer;
+}
+.ui-tabs .ui-tabs-panel {
+	display: block;
+	border-width: 0;
+	padding: 1em 1.4em;
+	background: none;
+}
+.ui-tooltip {
+	padding: 8px;
+	position: absolute;
+	z-index: 9999;
+	max-width: 300px;
+	-webkit-box-shadow: 0 0 5px #aaa;
+	box-shadow: 0 0 5px #aaa;
+}
+body .ui-tooltip {
+	border-width: 2px;
+}
+
+/* Component containers
+----------------------------------*/
+.ui-widget {
+	font-family: Verdana,Arial,sans-serif;
+	font-size: 1.1em;
+}
+.ui-widget .ui-widget {
+	font-size: 1em;
+}
+.ui-widget input,
+.ui-widget select,
+.ui-widget textarea,
+.ui-widget button {
+	font-family: Verdana,Arial,sans-serif;
+	font-size: 1em;
+}
+.ui-widget-content {
+	border: 1px solid #aaaaaa;
+	background: #ffffff url("img/ui-bg_flat_75_ffffff_40x100.png") 50% 50% repeat-x;
+	color: #222222;
+}
+.ui-widget-content a {
+	color: #222222;
+}
+.ui-widget-header {
+	border: 1px solid #aaaaaa;
+	background: #cccccc url("img/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x;
+	color: #222222;
+	font-weight: bold;
+}
+.ui-widget-header a {
+	color: #222222;
+}
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default,
+.ui-widget-content .ui-state-default,
+.ui-widget-header .ui-state-default {
+	border: 1px solid #d3d3d3;
+	background: #e6e6e6 url("img/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x;
+	font-weight: normal;
+	color: #555555;
+}
+.ui-state-default a,
+.ui-state-default a:link,
+.ui-state-default a:visited {
+	color: #555555;
+	text-decoration: none;
+}
+.ui-state-hover,
+.ui-widget-content .ui-state-hover,
+.ui-widget-header .ui-state-hover,
+.ui-state-focus,
+.ui-widget-content .ui-state-focus,
+.ui-widget-header .ui-state-focus {
+	border: 1px solid #999999;
+	background: #dadada url("img/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x;
+	font-weight: normal;
+	color: #212121;
+}
+.ui-state-hover a,
+.ui-state-hover a:hover,
+.ui-state-hover a:link,
+.ui-state-hover a:visited,
+.ui-state-focus a,
+.ui-state-focus a:hover,
+.ui-state-focus a:link,
+.ui-state-focus a:visited {
+	color: #212121;
+	text-decoration: none;
+}
+.ui-state-active,
+.ui-widget-content .ui-state-active,
+.ui-widget-header .ui-state-active {
+	border: 1px solid #aaaaaa;
+	background: #ffffff url("img/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;
+	font-weight: normal;
+	color: #212121;
+}
+.ui-state-active a,
+.ui-state-active a:link,
+.ui-state-active a:visited {
+	color: #212121;
+	text-decoration: none;
+}
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight,
+.ui-widget-content .ui-state-highlight,
+.ui-widget-header .ui-state-highlight {
+	border: 1px solid #fcefa1;
+	background: #fbf9ee url("img/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x;
+	color: #363636;
+}
+.ui-state-highlight a,
+.ui-widget-content .ui-state-highlight a,
+.ui-widget-header .ui-state-highlight a {
+	color: #363636;
+}
+.ui-state-error,
+.ui-widget-content .ui-state-error,
+.ui-widget-header .ui-state-error {
+	border: 1px solid #cd0a0a;
+	background: #fef1ec url("img/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x;
+	color: #cd0a0a;
+}
+.ui-state-error a,
+.ui-widget-content .ui-state-error a,
+.ui-widget-header .ui-state-error a {
+	color: #cd0a0a;
+}
+.ui-state-error-text,
+.ui-widget-content .ui-state-error-text,
+.ui-widget-header .ui-state-error-text {
+	color: #cd0a0a;
+}
+.ui-priority-primary,
+.ui-widget-content .ui-priority-primary,
+.ui-widget-header .ui-priority-primary {
+	font-weight: bold;
+}
+.ui-priority-secondary,
+.ui-widget-content .ui-priority-secondary,
+.ui-widget-header .ui-priority-secondary {
+	opacity: .7;
+	filter:Alpha(Opacity=70); /* support: IE8 */
+	font-weight: normal;
+}
+.ui-state-disabled,
+.ui-widget-content .ui-state-disabled,
+.ui-widget-header .ui-state-disabled {
+	opacity: .35;
+	filter:Alpha(Opacity=35); /* support: IE8 */
+	background-image: none;
+}
+.ui-state-disabled .ui-icon {
+	filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
+}
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+	width: 16px;
+	height: 16px;
+}
+.ui-icon,
+.ui-widget-content .ui-icon {
+	background-image: url("img/ui-icons_222222_256x240.png");
+}
+.ui-widget-header .ui-icon {
+	background-image: url("img/ui-icons_222222_256x240.png");
+}
+.ui-state-default .ui-icon {
+	background-image: url("img/ui-icons_888888_256x240.png");
+}
+.ui-state-hover .ui-icon,
+.ui-state-focus .ui-icon {
+	background-image: url("img/ui-icons_454545_256x240.png");
+}
+.ui-state-active .ui-icon {
+	background-image: url("img/ui-icons_454545_256x240.png");
+}
+.ui-state-highlight .ui-icon {
+	background-image: url("img/ui-icons_2e83ff_256x240.png");
+}
+.ui-state-error .ui-icon,
+.ui-state-error-text .ui-icon {
+	background-image: url("img/ui-icons_cd0a0a_256x240.png");
+}
+
+/* positioning */
+.ui-icon-blank { background-position: 16px 16px; }
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-on { background-position: -96px -144px; }
+.ui-icon-radio-off { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-left,
+.ui-corner-tl {
+	border-top-left-radius: 4px;
+}
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-right,
+.ui-corner-tr {
+	border-top-right-radius: 4px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-left,
+.ui-corner-bl {
+	border-bottom-left-radius: 4px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-right,
+.ui-corner-br {
+	border-bottom-right-radius: 4px;
+}
+
+/* Overlays */
+.ui-widget-overlay {
+	background: #aaaaaa url("img/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
+	opacity: .3;
+	filter: Alpha(Opacity=30); /* support: IE8 */
+}
+.ui-widget-shadow {
+	margin: -8px 0 0 -8px;
+	padding: 8px;
+	background: #aaaaaa url("img/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
+	opacity: .3;
+	filter: Alpha(Opacity=30); /* support: IE8 */
+	border-radius: 8px;
+}
diff --git a/falcon-ui/app/css/main.less b/falcon-ui/app/css/main.less
index 3bb7393..8ccfbad 100644
--- a/falcon-ui/app/css/main.less
+++ b/falcon-ui/app/css/main.less
@@ -73,6 +73,8 @@
 //custom styles for the page
 @import "styles/mixins.less";
 @import "styles/common.less";
+@import "styles/ng-tags-input.less";
+//@import "styles/ng-tags-input.bootstrap.less";
 @import "styles/nav-header.less";
 @import "styles/entity-summary.less";
 @import "styles/entities-list.less";
@@ -81,6 +83,10 @@
 @import "styles/server-messages.less";
 @import "styles/chart.less";
 @import "styles/dataset-form.less";
+@import "styles/snapshot-form.less";
+@import "styles/feed-form.less";
+@import "styles/datasource-form.less";
 @import "styles/popover.less";
 @import "styles/animate.less";
+@import "styles/lineage.less";
 @import "styles/autocomplete-tags.less";
\ No newline at end of file
diff --git a/falcon-ui/app/css/styles/autocomplete-tags.less b/falcon-ui/app/css/styles/autocomplete-tags.less
index 4c6fc96..c2f5dc2 100644
--- a/falcon-ui/app/css/styles/autocomplete-tags.less
+++ b/falcon-ui/app/css/styles/autocomplete-tags.less
@@ -1,21 +1,3 @@
-/**
- * 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.
- */
-
 .top-buffer{
   padding-top:20px;
 }
@@ -85,4 +67,4 @@
 }
 .suggestions-list:focus{
   outline:none;
-}
+}
\ No newline at end of file
diff --git a/falcon-ui/app/css/styles/common.less b/falcon-ui/app/css/styles/common.less
index 1ce62f7..17552a8 100644
--- a/falcon-ui/app/css/styles/common.less
+++ b/falcon-ui/app/css/styles/common.less
@@ -20,7 +20,7 @@
   display: none !important;
 }
 html, body { height: 100%; }
-body { background-color: rgba(246, 246, 246, 1); }
+body { background-color: @body-bg; }
 
 .color-success{
   color: #3c763d !important;
@@ -34,9 +34,6 @@
 .color-danger{
   color: #a94442 !important;
 }
-.error{
-  color: #ff3333 !important;
-}
 
 //--------------------VALIDATION---------------------//
 @shadow-valid: rgba(0, 255, 0, .6);
@@ -125,7 +122,7 @@
     input[type="radio"] {
       border-width: 0;
       box-shadow: unset!important;
-      vertical-align: bottom;
+      vertical-align: middle;
     }
   }
   .validationMessageGral {
@@ -154,9 +151,7 @@
 }
 //------nameCheck ------------------//
 .nameInputDisplay {
-  position: absolute;
-  top:27px;
-  right:10px;
+  /*position: absolute;*/
   z-index:2;
 }
 //----------------mozilla outline hack-------------------//
@@ -167,24 +162,24 @@
 //-------------------------------------------------------//
 .mainUIView {
   //padding: 10px 0 30px 0;
-  padding-top: 10px;
+  /*padding-top: 10px;*/
   padding-bottom: 30px;
 }
 //-----------------------------------------//
 //----------------FILE UPLOAD---------------------//
 .btn-file {
   cursor: pointer;
-  position: relative;
-  overflow: hidden;
+  /*position: relative;
+  overflow: hidden;*/
   // margin: 40px 0 40px 30px;
 }
 .btn-file input[type=file] {
   position: absolute;
   top: 0;
-  right: 0;
-  min-width: 100%;
-  min-height: 100%;
-  font-size: 100px;
+  /*right: 0;*/
+  width: 32px;
+  height: 32px;
+  /*font-size: 100px;*/
   text-align: right;
   filter: alpha(opacity=0);
   opacity: 0;
@@ -220,7 +215,7 @@
   padding: 0;
 }
 .dynamic-table-spacer {
-  margin-top: 5px;
+  margin-bottom: 5px;
 }
 .buttonsWrapper {
   text-align: center;
@@ -269,7 +264,7 @@
   }
 }
 
-@keyframes blink-success {
+/*@keyframes blink-success {
   0% { color: @summarySuccess; }
   100% { color: black; }
 }
@@ -323,6 +318,22 @@
   -webkit-animation: blink-notification 1s linear infinite;
   -moz-animation: blink-notification 1s linear infinite;
   animation: blink-notification 1s linear infinite;
+}*/
+
+.blink-success {
+  color: @green-light;
+}
+
+.blink-warning {
+  color: @summaryWarning;
+}
+
+.blink-danger {
+  color: @summaryWarning;
+}
+
+.blink-notification {
+  color: #ffff00;
 }
 
 .text-success {
@@ -342,16 +353,26 @@
 .border-right{
   border-right: 2px solid @gray-lighter;
 }
-
+.pt15px {
+	padding-top:15px;
+}
+.border0px {
+	border: 0px;
+}
+.border1px {
+	border: 1px solid #666666;
+}
+.p10px {
+	padding : 10px;
+}
 .summaryBox {
-  border-radius: 5px;
-  border: 1px solid @gray-light2;
-  margin: 5px 0;
-  padding: 15px 5px;
+  border: 1px solid @detail-border-color;
+  padding: 15px 5px 8px;
   font-size: 12px;
-  background-color: #ffffff;
+  color: @detail-color;
+  background-color: transparent;
   h4 {
-    font-weight: bold;
+    /*font-weight: bold;*/
     margin:5px 0;
   }
   h5 {
@@ -370,7 +391,7 @@
   textarea {
     width: 100%;
   }
-  &.processCluster {
+  /*&.processCluster {
     padding: 15px 4%;
     margin: 5px auto;
     h5 {
@@ -379,13 +400,19 @@
         margin-top:0;
       }
     }
-  }
+  }*/
   .detailsBox{
     margin-left: 10px;
   }
+  .light {
+    font-weight: normal;
+  }
 }
 
 /*************************************** SEARCH **************************************/
+@searchIconTop:  8px;
+@searchFontSize:  13px;
+
 .search {
   height: 45px;
   font-weight: 400;
@@ -395,7 +422,8 @@
 }
 
 .searchBoxContainer{
-  margin: 25px 0;
+  padding-top: 4px;
+  /*margin: 10px -5px;*/
   .popover{
     right: 5px !important;
     width: 400px;
@@ -408,55 +436,56 @@
 .search-icon {
   cursor: pointer;
   position: absolute;
-  top: 13px;
-  left: 13px;
-  z-index: 2;
+  top: @searchIconTop;
+  right: 44px;
+  /*z-index: 2;*/
   display: block;
   line-height: 23px;
   text-align: center;
-  font-size: 26px;
-  color: #777;
+  font-size: @searchFontSize;
+  color: @search-icon-color;
 }
 
 .search-loading-icon {
   cursor: pointer;
   position: absolute;
-  top: 15px;
-  left: 15px;
+  background: transparent;
+  top: @searchIconTop;
+  right: 48px;
   z-index: 2;
   display: block;
   line-height: 23px;
   text-align: center;
-  font-size: 26px;
-  color: #777;
-  margin-right: 40px;
+  font-size: @searchFontSize;
+  color: @search-icon-color;
+  width: 23px;
 }
 
 .remove-icon {
   cursor: pointer;
   position: absolute;
-  top: 13px;
-  right: 14px;
+  top: @searchIconTop;
+  right: 64px;
 //  z-index: 2;
   display: block;
   line-height: 23px;
   text-align: center;
-  font-size: 26px;
-  color: #777;
+  font-size: @searchFontSize;
+  color: @search-icon-color;
 }
 
 .question-icon {
   cursor: pointer;
   position: absolute;
-  top: 13px;
-  right: 40px;
+  top: @searchIconTop;
+  right: 9px;
 //  z-index: 2;
   display: block;
   line-height: 23px;
   text-align: center;
-  font-size: 26px;
-  color: #777;
-  margin-right: 5px;
+  font-size: @searchFontSize;
+  color: @search-icon-color;
+  margin-right: 15px;
 }
 
 .searchBox {
@@ -491,150 +520,15 @@
   }
 }
 
-tags-input {
-  display: block;
-  height: 40px;
-}
-tags-input *, tags-input *:before, tags-input *:after {
-  -moz-box-sizing: border-box;
-  -webkit-box-sizing: border-box;
-  box-sizing: border-box;
-}
-tags-input .host {
-  position: relative;
-  margin-top: 5px;
-  margin-bottom: 5px;
-  height: 100%;
-}
-tags-input .host:active {
-  outline: none;
-}
-
-tags-input .tags {
-  -moz-appearance: textfield;
-  -webkit-appearance: textfield;
-  padding: 1px;
-  overflow: hidden;
-  word-wrap: break-word;
-  cursor: text;
-  background-color: white;
-//  border: 1px solid darkgray;
-//  box-shadow: 1px 1px 1px 0 lightgray inset;
-  height: 100%;
-  padding-left: 40px;
-}
-tags-input .tags.focused {
-  outline: none;
-  -webkit-box-shadow: 0 0 3px 1px rgba(5, 139, 242, 0.6);
-  -moz-box-shadow: 0 0 3px 1px rgba(5, 139, 242, 0.6);
-  box-shadow: 0 0 3px 1px rgba(5, 139, 242, 0.6);
-}
-tags-input .tags .tag-list {
-  margin: 0;
-  padding: 0;
-  list-style-type: none;
-}
-tags-input .tags .tag-item {
-  margin: 3px;
-  padding: 3px;
-  display: inline-block;
-  float: left;
-  font: 18px cabin, Arial, sans-serif;
-  height: 32px;
-  line-height: 25px;
-  border: 1px solid #acacac;
-  border-radius: 3px;
-  background: -webkit-linear-gradient(top, #ede4e4 0%, #d5cccc 47%, #bcb2b2 100%);
-  background: linear-gradient(to bottom, #ede4e4 0%, #d5cccc 47%, #bcb2b2 100%);
-}
-tags-input .tags .tag-item.selected {
-  background: -webkit-linear-gradient(top, #febbbb 0%, #fe9090 45%, #ff5c5c 100%);
-  background: linear-gradient(to bottom, #febbbb 0%, #fe9090 45%, #ff5c5c 100%);
-}
-tags-input .tags .tag-item .remove-button {
-  margin: 0 0 0 5px;
-  padding: 0;
-  border: none;
-  background: none;
-  cursor: pointer;
-  vertical-align: middle;
-  font: bold 18px cabin, Arial, sans-serif;
-  color: #585858;
-}
-tags-input .tags .tag-item .remove-button:active {
-  color: red;
-}
-tags-input .tags .input {
-  border: 0;
-  outline: none;
-  margin: 2px;
-  padding: 0;
-  padding-left: 5px;
-  float: left;
-  height: 32px;
-  font: 18px cabin, Arial, sans-serif;
-}
-tags-input .tags .input.invalid-tag {
-  color: red;
-}
-tags-input .tags .input::-ms-clear {
-  display: none;
-}
-tags-input.ng-invalid .tags {
-  -webkit-box-shadow: 0 0 3px 1px rgba(255, 0, 0, 0.6);
-  -moz-box-shadow: 0 0 3px 1px rgba(255, 0, 0, 0.6);
-  box-shadow: 0 0 3px 1px rgba(255, 0, 0, 0.6);
-}
-
-tags-input .autocomplete {
-  margin-top: 5px;
-  position: absolute;
-  padding: 5px 0;
-  z-index: 999;
-  width: 100%;
-  background-color: white;
-  border: 1px solid rgba(0, 0, 0, 0.2);
-  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
-  -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
-  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
-}
-tags-input .autocomplete .suggestion-list {
-  margin: 0;
-  padding: 0;
-  list-style-type: none;
-}
-tags-input .autocomplete .suggestion-item {
-  padding: 5px 10px;
-  cursor: pointer;
-  white-space: nowrap;
-  overflow: hidden;
-  text-overflow: ellipsis;
-  font: 16px cabin, Arial, sans-serif;
-  color: black;
-  background-color: white;
-}
-tags-input .autocomplete .suggestion-item.selected {
-  color: white;
-  background-color: #0097cf;
-}
-tags-input .autocomplete .suggestion-item.selected em {
-  color: white;
-  background-color: #0097cf;
-}
-tags-input .autocomplete .suggestion-item em {
-  font: normal bold 16px cabin, Arial, sans-serif;
-  color: black;
-  background-color: white;
+.searchResultContainer {
+  background-color: @body-bg;
+  margin-top: 25px;
 }
 
 .tag-striked{
   text-decoration: line-through;
 }
 
-.pagination {
-  margin: 10px 0 5px 0;
-}
-
 .pagDisabled{
   cursor: default !important;
   background-color: #eee !important;
@@ -647,8 +541,10 @@
 .buttonsRow {
   height: 43px;
   td {
-    border-top: none;
-    border-bottom: 1px solid @gray-lighter;
+    /*border-top: none !important;*/
+    border-width: @table-header-border-width;
+    border-style: solid;
+    border-color: @table-header-border-color;
   }
   margin-bottom: 8px;
 }
@@ -670,9 +566,12 @@
 }
 
 .btn-gray {
-  color: #333;
-  background-color: #ccc;
-  border-color: #ccc;
+  color: #FFFFFF;
+  background-color: transparent;
+  border-color: transparent;
+  &:hover {
+    color: #FFFFFF;
+  }
 }
 
 .btn-big {
@@ -710,6 +609,10 @@
   padding: 0 10px;
 }
 
+.filtersSearchBox {
+  line-height: 2.3em;
+}
+
 .vertical-align {
   min-height: 5vh;
   display: -webkit-box;
@@ -727,18 +630,17 @@
 
 .dependencies-graph{
   text-align: center;
+  padding: 10px 0;
+  /*border: 1px solid @detail-border-color;*/
+  svg {
+    padding: 8px;
+  }
 }
 
 /**
   DEPENDENCIES & LINEAGE GRAPHS
 **/
 
-.node {
-  .foreignObject {
-    padding: 5px;
-  }
-}
-
 .node-name:before {
   font-family: 'Glyphicons Halflings';
   -webkit-font-smoothing: antialiased;
@@ -764,31 +666,34 @@
 }
 
 .node rect {
-  stroke-width: 0.5px;
-  stroke: #999;
-  fill: @gray-dark;
-  fill-opacity: 5%;
-  &:hover {
-    fill-opacity: 10%;
-  }
+  stroke-width: 1px;
+  stroke: @lineage-rect-stroke-color;
+  fill: @lineage-rect-fill-color;
+  fill-opacity: 20%;
 }
 
 .edge path {
   fill: none;
-  stroke: #333;
-  stroke-width: 1px;
+  stroke: @lineage-path-stroke-color;
+  stroke-width: 2px;
+}
+
+marker {
+  fill: @lineage-marker-fill-color;
 }
 
 .node-name {
-  font-size: 12px;
   vertical-align: middle;
   margin: 10px;
+  font-size: 15px;
+  padding-top: 18px;
+  color: @lineage-node-text-color;
 }
 
 .lineage-link {
   fill: none;
-  stroke: #eee;
-  stroke-width: 1.5px;
+  stroke: @lineage-path-stroke-color;
+  stroke-width: 2px;
 }
 
 .lineage-node, .lineage-href {
@@ -811,6 +716,7 @@
   font-size: 8pt;
   fill: #fff;
   word-wrap: break-word;
+  color: @lineage-node-text-color;
 }
 
 .lineage-node-feed-instance {
@@ -877,4 +783,81 @@
 
 .prettyXml{
   min-height: 800px;
-}
\ No newline at end of file
+}
+
+
+.auth
+{
+  color:#69be28;
+}
+
+.entities-tooltip-theme {
+  display: none;
+  position: absolute;
+  z-index: 100;
+  margin-top: -3px;
+}
+
+.entities-tooltip {
+  -webkit-box-shadow: 0 0.3125rem 0.625rem rgba(0,0,0,0.2);
+  -moz-box-shadow: 0 0.3125rem 0.625rem rgba(0,0,0,0.2);
+  box-shadow: 0 0.3125rem 0.625rem rgba(0,0,0,0.2);
+  border: solid 1px #d2d2d2;
+  border-radius: 3px;
+  box-sizing: border-box;
+  background-color: #fff;
+  padding: 5px 7px;
+  margin-left: -3px;
+  margin-top: 6px;
+  font-weight: normal;
+}
+
+.arrow-up {
+  content: "";
+  display: block;
+  width: 0;
+  height: 0;
+  border: solid 5px;
+  border-color: transparent;
+  position: absolute;
+  border-bottom-color: #d2d2d2;
+  top: -3px;
+  margin-left: 4px;
+}
+
+.arrow-up::after {
+  top: -9px;
+  margin-left: -10px;
+  content: " ";
+  position: absolute;
+  display: block;
+  width: 0;
+  height: 0;
+  border: solid 10px;
+  border-color: transparent;
+  border-bottom-color: #fff;
+}
+
+.accordion-toggle {
+  text-decoration: none !important;
+}
+
+.advancedOption {
+  cursor: pointer;
+  .glyphicon {
+    top : 3px;
+  }
+}
+
+.align-top {
+  vertical-align: top !important;
+}
+
+.no-entity {
+  position: absolute;
+  margin-top:25px;
+  left:15%;
+  padding: 10px;
+  overflow: auto;
+  border: 1px solid @green-light;
+}
diff --git a/falcon-ui/app/css/styles/dataset-form.less b/falcon-ui/app/css/styles/dataset-form.less
index 1416dba..3774e1c 100644
--- a/falcon-ui/app/css/styles/dataset-form.less
+++ b/falcon-ui/app/css/styles/dataset-form.less
@@ -50,7 +50,7 @@
 .tr { text-align: right; }
 
 .pointer{ cursor: pointer; }
-.db { display: block; }
+/*.db { display: block; }*/
 
 //-----------------------------------------//
 
@@ -59,28 +59,27 @@
 
 #sourceClusterSelect, #targetClusterSelect {
   display: block;
-  margin-bottom: 8px;
 }
 #formBox {
   padding: 0 2%;
   .dateInput {
     padding-right:0!important;
   }
-  .formBoxWrapper {
+  /*.formBoxWrapper {
     width: 500px;
     margin:0 auto;
-  }
-  .locationBox {
+  }*/
+  /*.locationBox {
     label { margin:0 0 10px 0 };
-  }
+  }*/
 
-  label {
+  /*label {
     font-weight: normal;
     font-size: 11px;
     max-width: none;
 
-  }
-  input[type="text"], select {
+  }*/
+  /*input[type="text"], select {
     .p0;
     padding-left: 1px;
     font-size: 13px;
@@ -92,7 +91,7 @@
     padding-left: 1px;
     font-size: 13px;
     line-height: 15px;
-  }
+  }*/
   .tablesTextArea {
     height: 50px;
   }
@@ -100,7 +99,7 @@
     height: 97px;
   }
 
-  a {
+  /*a {
     line-height: 30px;
     cursor: pointer;
     margin: 5px 15px;
@@ -109,13 +108,13 @@
     &:focus {
       color: red;
     }
-  }
+  }*/
   h4 {
     font-size: 14px;
     font-weight: 700;
   }
 
-  .formTitol {
+  /*.formTitol {
     width: 500px;
     margin:0 auto;
     padding-top: 10px;
@@ -131,12 +130,10 @@
       margin:0;
       letter-spacing: 0.5px;
     }
-  }
+  }*/
   .tagsBox, .alertsBox {
     .btn {
-      border-radius: 5px;
       padding: 1px;
-      border-color: @gray;
       height: 25px;
       width: 65px;
       line-height: 23px;
@@ -149,7 +146,7 @@
     }
   }
 
-  .typeButtonsBox {
+  /*.typeButtonsBox {
     background-color: @gray-lighter;
     width: 264px;
     padding:5px;
@@ -164,7 +161,7 @@
         color: white;
       }
     }
-  }
+  }*/
 
   .formBoxWrapper {
     border: 1px solid @gray-lighter;
@@ -173,32 +170,36 @@
   }
 
   .clusterBox {
-    border: 1px solid @gray-light;
-    border-radius: 5px;
-    .mt20;
-    .mb10;
-    padding-top: 15px;
-    padding-bottom: 15px;
+    border-top: 1px solid #aaa;
+    padding: 10px 0px 15px;
+    margin-left: 5px;
+    margin: 35px 10px 10px 0px;
+    border-radius: 0px;
 
     h3, .runJobOnBox {
       .pa;
-      background-color: white;
-      padding: 0 5px;
+      color: inherit;
+      background-color: #FFFFFF;
+      border: 1px solid #aaa;
+      border-radius: 0px;
+      padding: 6px 6px;
     }
 
     h3 {
-      font-size: 16px;
-      font-weight: 700;
       display: inline-block;
-      top: -30px;
-
+      border: none;
+      top: -47px;
+      font-size: 13px;
     }
     .runJobOnBox {
-      width: 110px;
+      width: 111px;
       right: 5px;
-      top: -13px;
+      top: -17px;
+      input[type=radio] {
+        margin-right: 5px;
+      }
     }
-    .hiveDatabasesTitol {
+    /*.hiveDatabasesTitol {
       font-size: 12px;
       padding-left: 5px;
     }
@@ -207,9 +208,9 @@
       input {
         margin-left: 5px;
       }
-    }
+    }*/
   }
-  .alertsBox {
+  /*.alertsBox {
     .mt10;
     h4 {
       margin: 0;
@@ -245,21 +246,22 @@
         margin-right: 4px;
       }
     }
-  }
+  }*/
 
 }
 .advancedOptionsButton {
-  cursor: pointer;
-  hr {
+  /*cursor: pointer;*/
+  /*hr {
     width: 67%;
     margin-top: -7px;
     margin-bottom:0;
     margin-left: 128px;
     border-top: 1px solid @gray-dark;
-  }
+  }*/
   span.entypo {
-    float: right;
-    margin: 7px 5px;
+    color: #FFFFFF;
+    /*float: right;
+    margin: 7px 5px;*/
     font-size: 50px;
   }
 }
@@ -270,6 +272,9 @@
   &.expanded {
     max-height: 850px;
   }
+  h4 {
+    margin: 15px 0px;
+  }
   .frequencyBox {
     width: 36%;
     display: inline-block;
@@ -277,12 +282,6 @@
     input, select {
       display: inline-block;
     }
-    input {
-      width: 20px;
-    }
-    select {
-      width: 80px;
-    }
     label {
       margin:0;
     }
@@ -290,12 +289,11 @@
 
   .allocationBox {
     >div>div {
-      width: 24%;
       display: inline-block;
     }
-
   }
-  .retryBox {
+
+  /*.retryBox {
     .policyBox {
       width: 45%;
       select {
@@ -324,11 +322,37 @@
         padding-right: 20px;
       }
     }
+  }*/
+
+
+  .retryBox {
+    .policyBox {
+      select {
+        position: inherit;
+      }
+    }
+    > div {
+      label {
+        margin-top: 0px;
+        font-weight: normal;
+        width: 95%;
+        input {
+          margin-right: 10px;
+        }
+        select {
+          position: relative;
+          left: 50px;
+        }
+      }
+      display: inline-block;
+      vertical-align: top;
+    }
   }
 
   .hiveOptBox {
     label {
       display: block;
+      margin-top: 10px;
     }
   }
 }
@@ -338,18 +362,18 @@
 
 #formSummaryBox {
   font-size: 12px;
+  padding: 0 5px;
   h4 {
     margin-bottom:0;
-    font-size: 12px;
+  }
+  .locationBox {
+    margin-top: 5px !important;
   }
   h5 {
     font-size: 12px;
     font-weight: bold;
     display: inline-block;
   }
-  span {
-    font-weight: bold;
-  }
   .lightSubtitle {
     color: @gray-light;
     font-weight: bold;
@@ -363,13 +387,14 @@
     margin-top: 15px;
 
     h3 {
-      font-size: 18px;
+      font-size: 14px;
       margin-top: -25px;
       margin-left: -10px;
       padding: 0 5px;
       background-color: white;
       display: inline-block;
       position: absolute;
+      color: #777;
     }
     h4 {
       margin-top:0;
@@ -394,6 +419,7 @@
 
 //////////////////////////////
 
+/*
 #formBox {
   .progressBox {
     height: 75px;
@@ -491,4 +517,4 @@
       h6 { font-weight: bold; }
     }
   }
-}
\ No newline at end of file
+}*/
diff --git a/falcon-ui/app/css/styles/datasource-form.less b/falcon-ui/app/css/styles/datasource-form.less
new file mode 100644
index 0000000..9122855
--- /dev/null
+++ b/falcon-ui/app/css/styles/datasource-form.less
@@ -0,0 +1,90 @@
+/**
+ * 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.
+ */
+//----------------mozilla outline hack-------------------//
+.datasourceConnectionBox {
+  border: 1px solid #d2d2d2;
+  border-radius: 5px;
+  padding: 15px 10px 41px;
+  color: @gray-light;
+  margin-top: 25px;
+
+  h3 {
+    font-size: 14px;
+    display: inline-block;
+    top: -7px;
+    position: absolute;
+    border-radius: 2px;
+    padding: 5px 9px;
+    background-color: #fff;
+  }
+
+  span {
+    padding-left: 10px;
+  }
+}
+
+#datasourceFormGeneralStep {
+  input[type="radio"], input[type="checkbox"] {
+    margin-left: 20px;
+  }
+}
+
+.datasourceForm {
+  .btn-browse {
+    padding: 0px 12px;
+    background: #f5f5f5;
+    color: #777;
+  }
+}
+.btn-sharp {
+  border-radius: 0;
+}
+
+.datasource-link {
+  margin: 0px !important;
+  color: @green-light !important;
+  font-style: italic;
+  line-height: 26px !important;
+}
+.driver-jar-link {
+    margin: 0px !important;
+    color: @green-light !important;
+    font-style: italic;
+    line-height: 26px !important;
+}
+
+.btn-datasource {
+  font-size: 12px;
+  line-height: 25px;
+  width: 100px;
+  padding: 0px;
+  border-radius: 4px;
+}
+
+.interface-endpoint {
+  margin: 0 10px;
+}
+
+.ml0 {
+  margin-left: 0 !important;
+}
+
+.mt5 {
+  margin-top: 5px !important;
+}
+//---------------SUMMARY------------------//
diff --git a/falcon-ui/app/css/styles/default.less b/falcon-ui/app/css/styles/default.less
new file mode 100644
index 0000000..324ebaf
--- /dev/null
+++ b/falcon-ui/app/css/styles/default.less
@@ -0,0 +1,72 @@
+@body-bg: @white;
+@header1Border: @gray-light;
+@header2NavBG: @gray-lighter;
+@header3NavBG: @white;
+@header2Border:@gray-light;
+/** Menu */
+/*
+@header-menu-color: @green-light;
+*/
+
+/** Search */
+@search-box-border: @gray-light;
+@search-input-color: @gray-light;
+@search-icon-color: @gray-light;
+
+/** Search:Popover */
+@popover-text-color: @gray-light;
+@popover-header-color: @gray-light;
+
+/* Entity Detail Screen */
+@entity-detail-background-color: @white;
+
+/* Detail Screen */
+@detail-header-color: @gray-light;
+@detail-header-button-background-color: @gray-lighter;
+@detail-background-color: @white;
+@detail-border-color: @gray-light;
+@detail-color: @gray-light;
+
+/* Lineage Graph*/
+@lineage-path-stroke-color: @gray-light;
+@lineage-rect-fill-color: @gray-lighter;
+@lineage-rect-stroke-color: @gray-light;
+@lineage-node-text-color: @gray-light;
+@lineage-marker-fill-color: @gray-light;
+
+/* Controls */
+@input-background-color:@gray-light; /* light gray for table instance  */
+@input-color: @cool-gray;
+@form-input-background-color: @white;
+@details-box-dt-bg : @white;
+@form-box-clusterBox-runJobOnBox : @cool-gray;
+@form-table-color :@gray-light;
+@details-form-border :@gray-light;
+@form-nxt-btn: @gray-lightest;
+
+@progress-div-active-bg:@gray-light;
+@progress-div-active-color: @white;
+@progress-div-completed-bg :@cool-gray;
+@progress-div-completed-color: @gray-lightest;
+@progress-div-border : @cool-gray;
+@progress-div-color : @cool-gray;
+@progress-div-bottom-border: transparent;
+
+/** Table */
+@table-header-color: @gray-light;
+@table-header-background-color: @gray-lighter;
+@table-border-color: @gray-light;
+@table-header-border-color: @gray-light;
+@table-header-border-width: 0px 0px 1px;
+@table-header-button-color: @gray-dark;
+@table-header-button-hover-color: @gray-light;
+@table-cell-color:              #000;
+@table-cell-hover-color:        @gray-dark;
+@table-row-selected-background-color: @gray-lighter;
+@table-inactive-bg: @gray-lighter;
+
+/** Pagination */
+@pagination-active-bg:                 @white;
+@pagination-active-color:              @gray-light;
+@pagination-disabled-bg:               @gray-light;
+@pagination-disabled-color:            @white;
diff --git a/falcon-ui/app/css/styles/entities-list.less b/falcon-ui/app/css/styles/entities-list.less
index 6ea757f..e442c67 100644
--- a/falcon-ui/app/css/styles/entities-list.less
+++ b/falcon-ui/app/css/styles/entities-list.less
@@ -22,15 +22,30 @@
   }
 }
 
+@listTbodyBackground: transparent;
+
 .listTable {
   margin-top: 5px;
   border-collapse: separate;
-  border-radius: 4px;
-  //border: 1px solid @gray;
+  /*border-radius: 4px;*/
+  border: 1px solid @table-border-color;
   width: 100%;
   min-height: 140px;
   overflow: hidden;
   position: relative;
+  font-size: 12px;
+  .ptb5px {
+	padding: 5px 0;
+  }
+  input , select {
+	background-color: @input-background-color;
+	padding-left: 4px;
+	color: @input-color;
+    font-weight: normal;
+  }
+  .border0px {
+	border: 0px;
+  }
   .spinner {
     .transition (all, 1s, linear);
     display: none;
@@ -46,7 +61,7 @@
       display: block;
       position: absolute;
       z-index: 2;
-      .background-opacity(black, 0.8);
+      .background-opacity(@table-inactive-bg, 0.8);
       width: 100%;
       height: 100%;
       top: 0;
@@ -70,17 +85,22 @@
   thead {
     padding: 5px;
     text-align: left;
-    background-color: @gray-dark;
-    color: white;
-    tr > th { border-bottom: none; }
+    background-color: @table-header-background-color;
+    color: @table-header-color;
+    tr > th { border: none; }
   }
   tbody {
     padding: 5px;
     display: table-row-group;
-    background-color: white;
+    background-color: @listTbodyBackground;
+	tr > th { border: none; }
+  }
+  tbody:nth-child(2) {
+    border-bottom: 20px solid transparent;
   }
   tr {
     width: 100%;
+    height: 24px;
   }
   .filtersBox {
     font-weight: normal;
@@ -107,28 +127,47 @@
 
   .entityRow {
     &:hover, &.rowSelected {
-      background: #F2F2F2;
+      background: @table-row-selected-background-color;
+	  color: @table-cell-hover-color;
       td {
-        border-color: #E2E2E2;
+        color: @table-cell-hover-color;
       }
     }
 
     td {
-      padding: 3px 3px;
+      padding: 0;
       line-height: 22px;
-      border-top: 1px solid transparent;
-      border-bottom: 1px solid transparent;
+      border-top: 0;
+      border-bottom: 0;
       vertical-align: middle;
+      color: @table-cell-color;
     }
-    &.firstEntityRow {
-      td { padding-top: 6px; }
-    }
+
     &.lastEntityRow {
       td {
         padding-bottom: 6px;
       }
     }
   }
+  .paginationRow td {
+    background-color: @table-header-background-color;
+    .pagination {
+      border-radius: 0px;
+      li {
+        a {
+          background-color: @pagination-active-bg;
+          color: @pagination-active-color;
+          border: none;
+          border-radius: inherit;
+          &.pagDisabled {
+            background-color: @pagination-disabled-bg !important;
+            text-decoration: underline;
+            color: @pagination-disabled-color;
+          }
+        }
+      }
+    }
+  }
   label {
     font-weight: normal;
     font-size: 10px;
@@ -136,6 +175,9 @@
   .checkboxCell {
     width: 20px;
     text-align: center;
+	  input[type="radio"], input[type="checkbox"] {
+	    vertical-align: middle;
+	  }
   }
   .stateCell {
     width: 120px;
@@ -148,13 +190,27 @@
 
   .nameCell {
     cursor: pointer;
+	.entypo {
+	  font-size: 1.4em;
+	}
     &:hover {
       text-decoration: underline;
     }
+    button {
+      color: @green-light;
+	  padding: 0 6px;
+      border: none;
+      background-color: transparent;
+      font-size: 12px;
+    }
   }
 }
 .buttons-to-show {
   margin:2px 0;
+  color: @table-header-button-color;
+  &:hover {
+    color: @table-header-button-hover-color;
+  }
 }
 /* LOGIN */
 .login {
@@ -188,11 +244,14 @@
   }
 }
 
-.tag:hover {
-  cursor: pointer;
-  color: #fff;
-  background-color: #5fa33e;
-  font-weight: bold;
+.tag {
+  padding: 0px 3px;
+  &:hover {
+    cursor: pointer;
+    color: #fff;
+    background-color: #5fa33e;
+    /*font-weight: bold;*/
+  }
 }
 
 
diff --git a/falcon-ui/app/css/styles/feed-form.less b/falcon-ui/app/css/styles/feed-form.less
new file mode 100644
index 0000000..356d3e6
--- /dev/null
+++ b/falcon-ui/app/css/styles/feed-form.less
@@ -0,0 +1,40 @@
+/**
+ * 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.
+ */
+#feedFormGeneralStep {
+  .clusterBox {
+      border-top: 1px solid #aaa;
+      padding: 0px 0px 15px;
+      margin-left: 5px;
+      margin: 35px 10px 10px 0px;
+      border-radius: 0px;
+
+      h3 {
+        color: inherit;
+        background-color: #FFFFFF;
+        border: none;
+        border-radius: 0px;
+        padding: 6px 6px;
+        top: -47px;
+        font-size: 13px;
+      }
+  }
+
+  .advancedOtptions {
+    margin-top: -30px;
+  }
+}
diff --git a/falcon-ui/app/css/styles/form-pages.less b/falcon-ui/app/css/styles/form-pages.less
index 957e148..4cbe178 100644
--- a/falcon-ui/app/css/styles/form-pages.less
+++ b/falcon-ui/app/css/styles/form-pages.less
@@ -20,46 +20,138 @@
 .mt1 {
   margin-top: 1px;
 }
+.mt3 {
+  margin-top: 3px;
+}
 .mt5 {
   margin-top: 5px;
 }
+.mt8 {
+  margin-top: 8px;
+}
 .mt10 {
   margin-top: 10px;
 }
+.mt15 {
+  margin-top: 15px !important;
+}
 .mt20 {
   margin-top: 20px;
 }
+.mt25 {
+  margin-top: 25px;
+}
+.mt30 {
+  margin-top: 30px;
+}
+.mt35 {
+  margin-top: 35px;
+}
+.mb0 {
+  margin-bottom: 0px !important;
+}
+.mb5 {
+  margin-bottom: 5px;
+}
+.mb7 {
+  margin-bottom: 7px;
+}
 .mb10 {
   margin-bottom: 10px;
 }
-.formViewContainer {
-  .mt10;
-
+.mr20 {
+  margin-right: 20px;
 }
+.ml20{
+  margin-left: 20px;
+}
+.pt15px{
+  padding-top:15px;
+}
+.pt35px{
+  padding-top:35px;
+}
+.pt5px{
+  padding-top:5px;
+}
+.pt3px{
+  padding-top:3px;
+}
+.pb5px{
+  padding-bottom:5px;
+}
+.pl0px{
+  padding-left: 8px;
+}
+.p0px{
+  padding: 0px;
+}
+.plr0px{
+  padding-left: 0px;
+  padding-right: 0px;
+}
+
+.pl5 {
+  padding-left: 5px;
+}
+
 //-----------------next and previous buttons----------//
-@nextBtnBackground: #666666;
+@nextBtnBackground: #69be28;
 @prevBtnBackground: #CCCCCC;
-.nextBtn, .prevBtn {
+.nextBtn, .prevBtn ,.cnclBtn {
   .transition(background, 0.3s, ease);
   border: 0px none;
-  width: 90px;
-  border-radius: 7px!important;
-  padding: 10px;
+  width: 100px;
+  font-size: 12px;
+  line-height: 1.3em;
 }
-.nextBtn {
-  background: @nextBtnBackground;
-  color: white;
+.advancedSaveBtn {
+  .transition(background, 0.3s, ease);
+  border: 0px none;
+  font-size: 12px;
+  line-height: 1.3em;
+  width: 180px;
+}
+.datasourceBtn {
+  .transition(background, 0.3s, ease);
+  border: 0px none;
+  width: 120px;
+  font-size: 12px;
+  line-height: 1.3em;
+}
+a.cnclBtn {
+	height:24px;
+	background-color:#cccccc;
+	/*border-radius:7px;*/
+	margin:0px;
+	line-height: 1.3em;
   &:hover {
-    background: darken(@nextBtnBackground, 10%);
-    color: white;
+    background: darken(#cccccc, 10%);
+    color: #232323;
     outline: hidden;
-    border-radius: 7px!important;
+    /*border-radius: 7px!important;*/
   }
   &:focus, &:active, &:visited {
-    background: darken(@nextBtnBackground, 10%);
-    color: white;
+    background: darken(#cccccc, 10%);
+    color: #232323;
     outline: hidden;
-    border-radius: 10px!important;
+	/*border-radius: 7px!important;*/
+  }
+}
+.nextBtn {
+  background: @form-nxt-btn;
+  color: @progress-div-active-color;
+  /*line-height: 1.3em;*/
+  &:hover {
+    background: darken(@form-nxt-btn, 10%);
+    color: @progress-div-active-color;
+    outline: hidden;
+    /*border-radius: 7px!important;*/
+  }
+  &:focus, &:active, &:visited {
+    background: darken(@form-nxt-btn, 10%);
+    color: @progress-div-active-color;
+    outline: hidden;
   }
 }
 .prevBtn {
@@ -67,17 +159,46 @@
   &:hover {
     background: darken(@prevBtnBackground, 10%);
     outline: hidden;
-    border-radius: 7px!important;
+    /*border-radius: 7px!important;*/
   }
   &:focus, &:active, &:visited {
     background: darken(@prevBtnBackground, 10%);
     outline: hidden;
-    border-radius: 10px!important;
+    /*border-radius: 10px!important;*/
+  }
+}
+.advancedSaveBtn {
+  background: @form-nxt-btn;
+  color: @progress-div-active-color;
+  &:hover {
+    background: darken(@form-nxt-btn, 10%);
+    color: @progress-div-active-color;
+    outline: hidden;
+  }
+  &:focus, &:active, &:visited {
+    background: darken(@form-nxt-btn, 10%);
+    color: @progress-div-active-color;
+    outline: hidden;
+  }
+}
+.datasourceBtn {
+  background: @form-nxt-btn;
+  color: @progress-div-active-color;
+  /*line-height: 1.3em;*/
+  &:hover {
+    background: darken(@form-nxt-btn, 10%);
+    color: @progress-div-active-color;
+    outline: hidden;
+    /*border-radius: 7px!important;*/
+  }
+  &:focus, &:active, &:visited {
+    background: darken(@form-nxt-btn, 10%);
+    color: @progress-div-active-color;
+    outline: hidden;
   }
 }
 //-----------------------------------------------------//
 .aclBox {
-  .mt10;
 
   > div {
     label {
@@ -90,9 +211,23 @@
     vertical-align: top;
   }
 }
+.formBoxContainer {
+  .customContainer{
+	overflow:auto;
+	border:1px solid @details-form-border;
+	margin-left:0px;
+	margin-right:0px;
+  }
+}
 .dt {
   //display: table;
 }
+/*.xmlPreviewContainer {
+  position: absolute;
+  left: 530px;
+  top: 55px;
+  right: 0;
+}
 @media screen and (max-width: @grid-float-breakpoint) {
   .xmlPreviewContainer {
     position: relative;
@@ -100,18 +235,43 @@
     top:0;
     width: 500px;
   }
-}
+}*/
 .formPage {
 
   h3 {
     font-weight: bold;
   }
+  a.cnclBtn {
+	height:24px;
+	background-color:#cccccc;
+	/*border-radius:7px;*/
+	margin:0px;
+	text-decoration: none;
+	text-align: center;
+	line-height: 1.3em;
+	&:hover {
+		background: darken(#cccccc, 10%);
+		color: #232323;
+		outline: hidden;
+		/*border-radius: 7px!important;*/
+	  }
+	  &:focus, &:active, &:visited {
+		background: darken(#cccccc, 10%);
+		color: #232323;
+		outline: hidden;
+		/*border-radius: 7px!important;*/
+	  }
+	}
   .entypo {
     font-size: 22px;
+	color: #000;
    /* line-height: 14px;*/
     /*vertical-align: top;
     display: inline-table;*/
   }
+  .addTag {
+	background-color:#cccccc;
+  }
   h4 {
     font-size: 14px;
     font-weight: bold;
@@ -130,6 +290,9 @@
     line-height: 12px;
     margin: 10px 0 2px 0;
   }
+  .font11px {
+    font-size: 11px;
+  }
   .light {
     font-weight: normal;
   }
@@ -165,7 +328,7 @@
     &:last-child { margin-right:0;}
   }
   input[type="text"] {
-    width: 20px;
+    width: 43px;
     //height: 18px;
     //line-height: 18px;
     vertical-align: top;
@@ -178,7 +341,6 @@
     margin:0;
     vertical-align: middle;
   }
-  div { margin-bottom: 5px;}
   #availInput {
     width: 60px;
   }
@@ -196,16 +358,43 @@
   }
 
 }
-.clusterSummaryRow {
+
+#clusterSummaryStep, #feedSummaryStep, #processSummaryStep, #formSummaryBox, #datasourceSummaryStep {
   padding: 0 10px;
+  h4 {
+    margin-top: 25px;
+    margin-bottom: 0px;
+  }
 }
-.clusterForm, .feedForm, .entityForm {
-  input {
+
+.clusterForm, .feedForm, .entityForm, .datasetForm, .snapshotForm, .datasourceForm {
+  input, input[disabled],textarea, textarea[disabled] {
     padding-left: 1px;
     border-width: 1px;
+    background-color:@form-input-background-color;
+    color:#333333;
+    &.form-control {
+      background-color:@form-input-background-color;
+    }
+    &[disabled] {
+      background-color:@input-bg-disabled;
+    }
+  }
+  input:active,input:focus,input:visited,
+  select:active,select:focus,select:visited,
+  textarea:active,textarea:focus,textarea:visited {
+    background-color:#ffffff;
+    color:#333333;
   }
   select {
-    background-color: white;
+    background-color: @form-input-background-color;
+    color:#333333;
+  }
+  select[disabled] {
+    background-color:@input-bg-disabled;
+  }
+  .p0px{
+	padding:0px;
   }
   > div {
     &:first-child {
@@ -226,16 +415,41 @@
     margin-top: 10px;
   }
   label {
-    font-size: 12px;
     margin:0;
   }
   input[type="checkbox"] {
-    vertical-align: sub;
+    vertical-align: middle;
+  }
+}
+#clusterLocationBox {
+  label {
+    margin:0;
   }
 }
 //---------------------------------//
-.feedForm, .entityForm {
+.clusterForm, .feedForm, .entityForm, .datasetForm, .snapshotForm, .datasourceForm {
+  .pullOver {
 
+    button {
+      transform: rotate(90deg);
+      height:auto!important;
+      position: absolute;
+      right: -61px;
+      top: 57px;
+
+    }
+  }
+  .pullOverXml {
+
+
+    button {
+      transform: rotate(90deg);
+      height:auto!important;
+      position: absolute;
+      right: -88px;
+      top: 57px;
+    }
+  }
   .small {
     display: inline-block;
     width: 30px;
@@ -250,6 +464,30 @@
   .freqTitle {
     margin: 0 0 5px 0;
   }
+  .title {
+	font-size: 14px;
+	color: @form-label-color;
+    .mb0;
+  }
+  .pb15px {
+	padding-bottom:15px;
+  }
+  .pb30px {
+	padding-bottom:30px;
+  }
+  .bb1pxw {
+	border-bottom: 1px solid #666666;
+  }
+  input,select,button,textarea {
+	height:24px;
+	border-color:#cccccc;
+  }
+  .labelCheckBox  {
+    height:17px;
+  }
+  input[type="radio"] {
+    height: auto
+  }
   .top-buffer {
     margin-top: 8px;
   }
@@ -361,9 +599,9 @@
       margin-top: 0;
     }
   }
-  .TZSelect {
+  /*.TZSelect {
     margin: 5px 0;
-  }
+  }*/
   .addProperty {
     margin: 12px 5px;
     display: inline-block;
@@ -373,16 +611,21 @@
 
 //----old entity details------------------//
 .detailsHeaders {
-  h3 { display: inline-block;}
-  small{
+  /*h3 { display: inline-block;}
+  small {
     color: @gray-light;
     display: block;
     margin-bottom: -2px;
-  }
+  }*/
   .btn {
     margin-top: -2px;
-    background-color: @gray;
-    color: white;
+    background-color: @detail-header-button-background-color;
+    color: @detail-header-color;
+  }
+  .entityName {
+    color: @detail-header-color;
+    font-size: 15px;
+    padding-left: 5px;
   }
 }
 
@@ -391,34 +634,106 @@
     float:none!important;
   }
 }
+.entityDetailsBox {
+	background-color: @entity-detail-background-color;
+	color: @detail-color;
+    border: 1px solid @detail-border-color;
+}
+
+.instanceDetails {
+  .detailsBox {
+    border: 1px solid @detail-border-color;
+    margin: 5px;
+    padding: 15px;
+  }
+}
+
 .detailsBox {
-  border-radius: 5px;
-  border: 1px solid @gray-light2;
-  margin: 5px 0;
-  padding: 15px 5px;
+  /*border-radius: 5px;
+  border: 1px solid @gray-light2;*/
+  margin: 0px;
+  padding: 0px;
   font-size: 12px;
-  background-color: #ffffff;
+  background-color: @detail-background-color;
   h4 {
     font-weight: bold;
     margin:5px 0;
+    color: @form-label-color;
   }
   h5 {
     font-weight: bold;
     margin-top:2px;
+	color:  @form-label-color;
   }
   table {
     width: 100%;
     border-spacing: 5px;
     border-collapse: separate;
   }
+  .blink-success {
+	color: #69be28;
+  }
+  .blink-warning {
+	color: #E6DD00;
+  }
+  .blink-danger {
+    color: #E6DD00;
+  }
+  .blink-notification {
+	color: #ffff00;
+  }
+  .text-success {
+	color: #3c763d;
+  }
+  table.properties {
+	color: @form-table-color;
+	border-collapse: collapse;
+    .mb0;
+  }
+  .no-border-top {
+	border-top:0px;
+  }
+  .no-border-bottom {
+	border-bottom:0px;
+  }
+
+  .editXMLBtn {
+	backgorund-color:#cccccc;
+	color:#232323;
+	font-size:12px;
+  }
   .tableHeader {
     width: 70px;
     font-weight: bold;
   }
-  textarea {
-    width: 100%;
+  label, span {
+    color: @form-label-color;
   }
-  &.processCluster {
+  label {
+    margin-top: 15px;
+  }
+  label.custom-danger {
+	color: #f33;
+  }
+  textarea.form-control {
+    width: 100%;
+	/*background-color:#232323;
+	color:#ffffff;
+	border:0px;
+	font-size:12px;*/
+  }
+  .dt {
+	background-color: @details-box-dt-bg;
+	border:1px solid #666666;
+  }
+
+  .processCluster {
+    border-radius: 5px;
+    border: 1px solid #a6a6a6;
+    padding: 15px 4%;
+    margin: 10px auto;
+  }
+  /*&.processCluster {
     padding: 15px 4%;
     margin: 5px auto;
     h5 {
@@ -427,6 +742,14 @@
         margin-top:0;
       }
     }
+  }*/
+  &.xmlPreviewContainer {
+    margin-left: 25px;
+    margin-right: -25px;
+    textarea[disabled] {
+      border: none;
+      background-color: transparent;
+    }
   }
 }
 
@@ -449,35 +772,36 @@
 ///////VALIDITY BOXES//////////////////////////
 ///////////////////////////////////////////////
 .validityBox {
-  label, input, button {
+  /*label, input, button {
     font-weight: normal;
-  }
+  }*/
 
-  > div {
+  /*> div {
     display: inline-block;
     margin: 0 2px;
-  }
+  }*/
 
   h4 {
     margin-top: 5px;
     margin-bottom: 0;
   }
   .startDateBox, .endDateBox {
-    width: 20%;
+    /*width: 20%;*/
     vertical-align: top;
+    margin-right: 5px;
   }
   .startTimeBox, .endTimeBox {
-    width: 15%;
+    /*width: 15%;*/
     vertical-align: top;
-    padding-left:0;
     input {
-      //width: 20px;
-      //margin:0;
+      width: 45px;
+      margin-right: 5px;
+      /*margin:0 auto;*/
     }
     button {
       border-radius: 0;
       width: 25px;
-      height: 25px;
+      /*height: 25px;*/
       padding:0;
       margin-left: 1px;
     }
@@ -504,17 +828,90 @@
   .endTimeBox {
 
   }
-  .tzBox {
+  /* Date-picker */
+  ul.dropdown-menu {
+    color: @gray-dark;
+    span, label {
+      color: @gray-dark;
+    }
+    button {
+      height: auto;
+    }
+  }
+  /*.tzBox {
     width: 22%;
     //padding-top: 20px;
-  }
+  }*/
 }
 
-.feedForm, .entityForm {
-  .validityBox {
+.clusterForm, .feedForm, .entityForm, .datasetForm, .snapshotForm, .datasourceForm {
+  margin-top: 25px;
+  /*.validityBox {
     .startDateBox, .endDateBox { width: 27%;}
     .startTimeBox, .endTimeBox {width: 17%;}
     .endDateBox { margin-left: 20px;}
-    .error_input { border:1px solid red !important;}
-  }
-}
\ No newline at end of file
+  }*/
+}
+
+.feedFormClusters {
+  padding-top: 50px;
+}
+
+.feedForm .clusterSelect {
+  display: inline;
+  width: auto;
+}
+
+.feedForm .clusterAddBtn {
+  margin: 0px 0px 1px 8px;
+}
+
+.feedForm .sourceClusterList, .feedForm .targetClusterList {
+  padding-top: 7px;
+}
+
+.feedForm .clusterListLabel {
+  font-size: 13px;
+  margin-bottom: 7px;
+}
+
+.feedForm .panel-heading {
+  padding: 1px;
+}
+
+.feedForm .panel-group .panel {
+  border-radius: 0px;
+  margin-top: -1px;
+}
+
+.feedForm .panel-group .panel .panel-collapse {
+  padding: 0px;
+}
+
+.feedFormInputBorder {
+  border: 1px solid @input-border;
+}
+
+.feedForm .partition-panel-body {
+  padding: 5px 5px 30px 5px;
+}
+
+.aclPermission {
+  min-width: 250px;
+}
+
+.endpointDefault {
+  color : @form-label-color !important;
+}
+
+.endpointChanged {
+  color: @gray-darker !important;
+}
+
+.clusterBoxEndLine {
+  border-top: 1px solid #aaa;
+}
+
+.disabledEditBtn {
+  pointer-events: auto !important;
+}
diff --git a/falcon-ui/app/css/styles/gray.less b/falcon-ui/app/css/styles/gray.less
new file mode 100644
index 0000000..b48affa
--- /dev/null
+++ b/falcon-ui/app/css/styles/gray.less
@@ -0,0 +1,65 @@
+@body-bg: @white;
+@header1Border: @gray-light;
+@header2NavBG: @gray-lighter;
+@header3NavBG: @white;
+@header2Border:@gray-light;
+/** Menu */
+/*
+@header-menu-color: @green-light;
+*/
+
+/** Search */
+@search-box-border: @gray-light;
+@search-input-color: @gray-light;
+@search-icon-color: @gray-light;
+
+/** Search:Popover */
+@popover-text-color: @gray-light;
+@popover-header-color: @gray-light;
+
+/* Entity Detail Screen */
+@entity-detail-background-color: @white;
+
+/* Detail Screen */
+@detail-header-color: @gray-light;
+@detail-header-button-background-color: @gray-lighter;
+@detail-background-color: @white;
+@detail-border-color: @gray-light;
+@detail-color: @gray-light;
+
+/* Lineage Graph*/
+@lineage-path-stroke-color: @gray-light;
+@lineage-rect-fill-color: @gray-lighter;
+@lineage-rect-stroke-color: @gray-light;
+@lineage-node-text-color: @gray-light;
+@lineage-marker-fill-color: @gray-light;
+
+/* Controls */
+@input-background-color:@gray-light; /* light gray for table instance  */
+@input-color: @white;
+@form-input-background-color: @green-light;
+@details-box-dt-bg : @green-light;
+@form-box-clusterBox-runJobOnBox : @cool-gray;
+@form-table-color :@green-light;
+@details-form-border :@gray-light;
+@progress-div-bottom-border : transparent;
+@progress-div-completed-bg: @gray-lighter;
+
+/** Table */
+@table-header-color: @gray-light;
+@table-header-background-color: @gray-lighter;
+@table-border-color: @gray-light;
+@table-header-border-color: @gray-light;
+@table-header-border-width: 0px 0px 1px;
+@table-header-button-color: @gray-dark;
+@table-header-button-hover-color: @gray-light;
+@table-cell-color:              #000;
+@table-cell-hover-color:        @gray-dark;
+@table-row-selected-background-color: @gray-lighter;
+@table-inactive-bg: @gray-lighter;
+
+/** Pagination */
+@pagination-active-bg:                 @white;
+@pagination-active-color:              @gray-light;
+@pagination-disabled-bg:               @gray-light;
+@pagination-disabled-color:            @white;
diff --git a/falcon-ui/app/css/styles/lineage.less b/falcon-ui/app/css/styles/lineage.less
new file mode 100644
index 0000000..e3225d2
--- /dev/null
+++ b/falcon-ui/app/css/styles/lineage.less
@@ -0,0 +1,50 @@
+/**
+ * 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.
+ */
+
+.link {
+  fill: none;
+  stroke: green;
+  stroke-width: 2px;
+}
+g {
+  text {
+    pointer-events: none;
+    text-shadow: 0 1px 0 #fff, 1px 0 0 #fff, 0 -1px 0 #fff, -1px 0 0 #fff;
+    text-align: center;
+    font-size: 15px !important;
+  }
+}
+.d3-tip {
+  pre {
+    max-width: 400px;
+  }
+}
+div.lineage {
+  border-bottom: 2px solid #006600;
+}
+.edgePath {
+  path {
+    stroke: #333;
+    fill: #333;
+    stroke-width: 1.5px;
+  }
+}
+.lineage-viz {
+  margin: 0 auto;
+  overflow: auto;
+}
diff --git a/falcon-ui/app/css/styles/nav-header.less b/falcon-ui/app/css/styles/nav-header.less
index 2be45af..5f5c197 100644
--- a/falcon-ui/app/css/styles/nav-header.less
+++ b/falcon-ui/app/css/styles/nav-header.less
@@ -19,17 +19,41 @@
 //---------navHeader----------------------//
 
 .navbar {
-  z-index: 2;
-  background-color: @headerNavBG;
+  /*z-index: 2;*/
   margin: 0;
   color: white;
-  padding: 5px 0;
+  /*padding: 5px 0;*/
   border-width: 0;
   border-radius: 0;
-  position: relative;
+  /*position: relative;*/
   &:hover{
     cursor: default;
   }
+  &.header1 {
+    background-color: @headerNavBG;
+    .loginHeaderBox {
+      /*position: relative;
+      top: 50%;*/
+      /*transform: translateY(80%);*/
+      .btn-link {
+        color: @green-light !important;
+        padding-top: 12px;
+        text-align: left;
+        /*height: 40px;*/
+        &:hover {
+          color: @green-light;
+        }
+      }
+    }
+  }
+  &.header2 {
+    min-height: 42px;
+    background-color: @header2NavBG;
+  }
+  &.header3 {
+    min-height: 32px;
+    background-color: @header3NavBG;
+  }
 }
 .logoTitle {
   background: transparent;
@@ -40,14 +64,14 @@
     display: inline-block;
   }
   .falconLogo{
-    background: url(img/falcon.png) no-repeat center center;
+    background: url(img/falcon-logo.jpg) no-repeat center center;
     background-size: 100%;
-    width: 30px;
-    height: 44px;
+    width: 100px;
+    height: 72px;
   }
 }
 .navbar-header {
-  margin: 5px 15px 5px 5px;
+  margin: 6px;
   font-size: 30px;
   cursor: pointer;
   font-weight: bolder;
@@ -58,23 +82,35 @@
 
 .createNavWrapper, .uploadNavWrapper {
   float: left;
-  margin: 0 10px;
-  > h4 {
+  padding-top:9px;
+  /*margin: 0 10px;*/
+  /*> h4 {
     font-size: 14px;
     font-weight: bold;
     margin: 2px 0;
-  }
-  > button {
-    padding: 5px 10px;
-    border: 1px solid white;
-    border-radius: 3px;
+  }*/
+  button {
+    border: none;
+    /*border: 1px solid white;*/
+    /*border-radius: 3px;*/
     display: inline-block;
     cursor: pointer;
     background-color: transparent;
+    color: @green-light;
+    &:hover {
+      color: #FFFFFF;
+    }
+    &.btn-link {
+      text-decoration: none;
+      color: @green-light;
+      height: 24px;
+      padding-top: 1px;
+    }
   }
   span {
     vertical-align: middle;
-    margin-right: 6px;
+    /*margin-right: 6px;*/
+    font-size: 13px;
     &.entypo, &.glyphicon{
       vertical-align: sub;
       &.up{
@@ -82,56 +118,111 @@
       }
     }
   }
-  .disabled {
-    //color: lighten(@headerNavBG, 30%);
-    //border-color: lighten(@headerNavBG, 10%);
-    cursor: default;
-    .background-opacity(black, 0.2);
+  ul.dropdown-menu {
+    border:none;
+    margin: 0px;
+    border-radius: inherit;
+    color: @green-light;
   }
 }
+
+/*.createNavWrapper {
+  position: relative;
+  left: -80px;
+  top: 25px;
+  height: 60px;
+  margin: 10px 0px 5px;
+}*/
+
+/** Deprecated */
 .uploadNavWrapper {
+  /*height: 35px;*/
   > div {
-    min-width:183px;
-    padding: 5px 10px;
-    border: 1px solid white;
+    width: 120px;
+    height: 20px;
+    float: left;
+    margin-right: 5px;
+    /*padding: 5px 10px;*/
     border-radius: 3px;
-    display: inline-block;
+    /*display: inline-block;*/
     cursor: pointer;
-    &.fakeFocus {
+    background-size: 100%;
+    background: 50% no-repeat;
+    /*&.fakeFocus {
       .box-shadow(0 0 2px white);
+    }*/
+    .btn-upload, .btn-create {
+      width: 120px;
+      color: @white;
+      background-color: @green-light;
+      height: 27px;
     }
   }
 }
-.loginHeaderBox {
-  margin: 0;
-  display: inline-block;
-  //width: 100%;
-  text-align: right;
-  margin-top: 10px;
 
-  .pull-right;
-  >*{
+.loginHeaderBox {
+  /*margin: 0;
+  display: inline-block;*/
+  //width: 100%;
+  /*float: right;*/
+  /*margin-top: 20px;*/
+  color: @green-light;
+  position: absolute;
+  right: 1%;
+  top: 25px;
+  font-size: 18px;
+
+  /*.pull-right;*/
+  /*>* {
     vertical-align: middle;
     display: inline-block;
-    margin-right: 10px;
+    margin-right: 3px;
     >*{
       display: inline-block;
       vertical-align: middle;
     }
+  }*/
+  .dropdown-toggle {
+    padding-left: 6px;
+  }
+
+  .btn-link {
+    padding: 6px 3px;
+    color: @green-light;
+    text-decoration: none;
+    &:hover {
+      color: #FFFFFF;
+    }
+    .glyphicon {
+      font-size: 1.1em;
+    }
   }
   span.entypo{
     vertical-align: sub;
   }
-  span.user{
+  /*span.user {
     background: url(img/user.svg) no-repeat center center;
     background-size: 35px 35px;
     height: 35px;
     width: 35px;
-  }
-  button {
+  }*/
+  /*button {
     border: none;
     cursor: pointer;
     background-color: transparent;
+  }*/
+  button {
+    padding: 5px 10px;
+    border: none;
+    /*border: 1px solid white;*/
+    /*border-radius: 3px;*/
+    display: inline-block;
+    cursor: pointer;
+    background-color: transparent;
+    color: @green-light;
+    &:hover {
+      color: #FFFFFF;
+    }
   }
   a {
     color: white;
@@ -145,6 +236,14 @@
       text-decoration: none;
     }
   }
+  ul.dropdown-menu {
+    border:none;
+    margin: 0px;
+    border-radius: inherit;
+    color: @green-light;
+    text-align: center;
+
+  }
 }
 
 /* NOTIFICATIONS */
@@ -152,26 +251,29 @@
 .notifications .messages {
   display:none;
   position: absolute;
-  top:50px;
-  right:0px;
-  width:280px;
-  max-width:280px;
+  top:35px;
+  right:7%;
+  width:400px;
+  max-width:400px;
   max-height:300px;
   overflow: auto;
+  border: 1px solid @green-light;
+  background-color: white;
+  z-index: 1000;
 }
 
 .messagesArrow {
   content:'.';
   display:none;
   position:absolute;
-  margin-left:-10px;
-  top:30px;
-  right:130px;
+  margin-left:49px;
+  top: 17px;
+  /*right: 166px;*/
   width:0;
   height:0;
-  color:transparent;
+  color:@green-light;
   border:10px solid black;
-  border-color:transparent transparent white;
+  border-color:transparent transparent @green-light;
 }
 
 .notifications .messages:before {
@@ -201,6 +303,16 @@
   padding:10px;
   background-color:white;
   text-decoration:none;
+  font-size:14px;
+  // white-space:nowrap;
+  white-space: -moz-pre-wrap !important;  /* Mozilla, since 1999 */
+  white-space: -webkit-pre-wrap; /*Chrome & Safari */
+  white-space: -pre-wrap;      /* Opera 4-6 */
+  white-space: -o-pre-wrap;    /* Opera 7 */
+  white-space: pre-wrap;       /* css-3 */
+  word-wrap: break-word;       /* Internet Explorer 5.5+ */
+  word-break: break-all;
+  white-space: normal;
   a {
     font-weight: bold;
     text-decoration: underline;
@@ -236,5 +348,17 @@
 }
 
 .unreaded-notif {
-  background-color: #EDEDED !important;
-}
\ No newline at end of file
+  background-color: #e6ece1 !important;
+}
+
+.notification-icon {
+  top: 0px;
+}
+
+.listing-icon {
+  top: -1px;
+}
+
+.settings-icon {
+  top: 0px;
+}
diff --git a/falcon-ui/app/css/styles/ng-tags-input.bootstrap.less b/falcon-ui/app/css/styles/ng-tags-input.bootstrap.less
new file mode 100755
index 0000000..0e9de7a
--- /dev/null
+++ b/falcon-ui/app/css/styles/ng-tags-input.bootstrap.less
@@ -0,0 +1,167 @@
+tags-input {
+  box-shadow: none;
+  border: none;
+  padding: 0;
+  min-height: 34px;
+}
+tags-input .host {
+  margin: 0;
+}
+tags-input .tags {
+  -moz-appearance: none;
+  -webkit-appearance: none;
+  border: 1px solid #cccccc;
+  border-radius: 4px;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+  -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
+  -moz-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
+  transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
+}
+tags-input .tags .tag-item {
+  margin-right: 3px;
+  color: white;
+  background: #428bca;
+  border: 1px solid #357ebd;
+  border-radius: 4px;
+}
+tags-input .tags .tag-item.selected {
+  color: white;
+  background: #d9534f;
+  border: 1px solid #d43f3a;
+}
+tags-input .tags .tag-item .remove-button:hover {
+  text-decoration: none;
+}
+tags-input .tags.focused {
+  border: 1px solid #66afe9;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);
+  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);
+  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);
+}
+tags-input .autocomplete {
+  border-radius: 4px;
+}
+tags-input .autocomplete .suggestion-item.selected {
+  color: #262626;
+  background-color: whitesmoke;
+}
+tags-input .autocomplete .suggestion-item.selected em {
+  color: #262626;
+  background-color: whitesmoke;
+}
+tags-input .autocomplete .suggestion-item em {
+  color: black;
+  background-color: white;
+}
+tags-input.ng-invalid .tags {
+  border-color: #843534;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
+  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
+  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
+}
+
+.input-group tags-input {
+  padding: 0;
+  display: table-cell;
+}
+.input-group tags-input:not(:first-child) .tags {
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+.input-group tags-input:not(:last-child) .tags {
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+
+.input-group-lg tags-input:first-child .tags {
+  border-top-left-radius: 6px;
+  border-bottom-left-radius: 6px;
+}
+.input-group-lg tags-input:last-child .tags {
+  border-top-right-radius: 6px;
+  border-bottom-right-radius: 6px;
+}
+
+.input-group-sm tags-input:first-child .tags {
+  border-top-left-radius: 3px;
+  border-bottom-left-radius: 3px;
+}
+.input-group-sm tags-input:last-child .tags {
+  border-top-right-radius: 3px;
+  border-bottom-right-radius: 3px;
+}
+
+tags-input.ti-input-lg, .input-group-lg tags-input {
+  min-height: 46px;
+}
+tags-input.ti-input-lg .tags, .input-group-lg tags-input .tags {
+  border-radius: 6px;
+}
+tags-input.ti-input-lg .tags .tag-item, .input-group-lg tags-input .tags .tag-item {
+  height: 38px;
+  line-height: 37px;
+  font-size: 18px;
+  border-radius: 6px;
+}
+tags-input.ti-input-lg .tags .tag-item .remove-button, .input-group-lg tags-input .tags .tag-item .remove-button {
+  font-size: 20px;
+}
+tags-input.ti-input-lg .tags .input, .input-group-lg tags-input .tags .input {
+  height: 38px;
+  font-size: 18px;
+}
+tags-input.ti-input-sm, .input-group-sm tags-input {
+  min-height: 30px;
+}
+tags-input.ti-input-sm .tags, .input-group-sm tags-input .tags {
+  border-radius: 3px;
+}
+tags-input.ti-input-sm .tags .tag-item, .input-group-sm tags-input .tags .tag-item {
+  height: 22px;
+  line-height: 21px;
+  font-size: 12px;
+  border-radius: 3px;
+}
+tags-input.ti-input-sm .tags .tag-item .remove-button, .input-group-sm tags-input .tags .tag-item .remove-button {
+  font-size: 16px;
+}
+tags-input.ti-input-sm .tags .input, .input-group-sm tags-input .tags .input {
+  height: 22px;
+  font-size: 12px;
+}
+
+.has-feedback tags-input .tags {
+  padding-right: 30px;
+}
+
+.has-success tags-input .tags {
+  border-color: #3c763d;
+}
+.has-success tags-input .tags.focused {
+  border-color: #2b542c;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
+  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
+  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
+}
+
+.has-error tags-input .tags {
+  border-color: #a94442;
+}
+.has-error tags-input .tags.focused {
+  border-color: #843534;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
+  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
+  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
+}
+
+.has-warning tags-input .tags {
+  border-color: #8a6d3b;
+}
+.has-warning tags-input .tags.focused {
+  border-color: #66512c;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
+  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
+  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
+}
diff --git a/falcon-ui/app/css/styles/ng-tags-input.less b/falcon-ui/app/css/styles/ng-tags-input.less
new file mode 100644
index 0000000..69b1480
--- /dev/null
+++ b/falcon-ui/app/css/styles/ng-tags-input.less
@@ -0,0 +1,134 @@
+tags-input {
+  display: block;
+  height: 35px;
+}
+tags-input *, tags-input *:before, tags-input *:after {
+  -moz-box-sizing: border-box;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+}
+tags-input .host {
+  position: relative;
+  margin-top: 5px;
+  margin-bottom: 5px;
+  height: 100%;
+}
+tags-input .host:active {
+  outline: none;
+}
+
+tags-input .tags {
+  -moz-appearance: textfield;
+  -webkit-appearance: textfield;
+  padding: 3px 1px 1px 1px;
+  overflow: hidden;
+  word-wrap: break-word;
+  cursor: text;
+  background-color: transparent;
+  border: 1px solid @search-box-border;
+  //  box-shadow: 1px 1px 1px 0 lightgray inset;
+  height: 80%;
+  padding-left: 10px;
+  overflow-y: auto;
+}
+//tags-input .tags.focused {
+tags-input .tags {
+  outline: none;
+  background-color: #fff;
+}
+tags-input .tags .tag-list {
+  margin: 0;
+  padding: 0;
+  list-style-type: none;
+}
+tags-input .tags .tag-item {
+  margin-right: 3px;
+  padding: 0px 5px;
+  margin-right : 3px;
+  margin-bottom: 3px;
+  display: inline-block;
+  float: left;
+  font: 13px Arial, sans-serif;
+  height: 19px;
+  background: -webkit-linear-gradient(top, #F89406 0%, #F89406 47%, #F89406 100%);
+  background: linear-gradient(to bottom, #F89406 0%, #F89406 47%, #F89406 100%);
+}
+tags-input .tags .tag-item.selected {
+  background: -webkit-linear-gradient(top, #febbbb 0%, #fe9090 45%, #ff5c5c 100%);
+  background: linear-gradient(to bottom, #febbbb 0%, #fe9090 45%, #ff5c5c 100%);
+}
+tags-input .tags .tag-item .remove-button {
+  margin: 0 0 0 5px;
+  padding: 0;
+  border: none;
+  background: none;
+  cursor: pointer;
+  vertical-align: middle;
+  font: bold 18px Arial, sans-serif;
+  color: #585858;
+}
+tags-input .tags .tag-item .remove-button:active {
+  color: red;
+}
+tags-input .tags .input {
+  border: 0;
+  outline: none;
+  padding: 0;
+  padding-left: 5px;
+  float: left;
+  min-width: 65px !important;
+  background: transparent;
+  color: @search-input-color;
+}
+tags-input .tags .input.invalid-tag {
+  color: red;
+}
+tags-input .tags .input::-ms-clear {
+  display: none;
+}
+tags-input.ng-invalid .tags {
+  -webkit-box-shadow: 0 0 3px 1px rgba(255, 0, 0, 0.6);
+  -moz-box-shadow: 0 0 3px 1px rgba(255, 0, 0, 0.6);
+  box-shadow: 0 0 3px 1px rgba(255, 0, 0, 0.6);
+}
+
+tags-input .autocomplete {
+  margin-top: 5px;
+  position: absolute;
+  padding: 5px 0;
+  z-index: 999;
+  width: 100%;
+  background-color: white;
+  border: 1px solid rgba(0, 0, 0, 0.2);
+  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+  -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+}
+tags-input .autocomplete .suggestion-list {
+  margin: 0;
+  padding: 0;
+  list-style-type: none;
+}
+tags-input .autocomplete .suggestion-item {
+  padding: 5px 10px;
+  cursor: pointer;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  font: 16px Arial, sans-serif;
+  color: black;
+  background-color: white;
+}
+tags-input .autocomplete .suggestion-item.selected {
+  color: white;
+  background-color: #0097cf;
+}
+tags-input .autocomplete .suggestion-item.selected em {
+  color: white;
+  background-color: #0097cf;
+}
+tags-input .autocomplete .suggestion-item em {
+  font: normal bold 16px Arial, sans-serif;
+  color: black;
+  background-color: white;
+}
\ No newline at end of file
diff --git a/falcon-ui/app/css/styles/popover.less b/falcon-ui/app/css/styles/popover.less
index 4218bc2..1de56c4 100644
--- a/falcon-ui/app/css/styles/popover.less
+++ b/falcon-ui/app/css/styles/popover.less
@@ -16,6 +16,8 @@
  * limitations under the License.
  */
 @popover-bg-color: #fff;
+@popover-text-color: #000;
+@popover-header-color: #777;
 @popover-border-color: #d2d2d2;
 
 @popover-triangle-size: 11px;
@@ -141,7 +143,7 @@
   box-sizing: border-box;
   z-index: 100;
   background-color: transparent;
-
+  color: @popover-text-color;
   .ns-popover-tooltip {
     box-sizing: border-box;
     border: solid 1px @popover-border-color;
@@ -157,7 +159,7 @@
     h5 {
       font-weight: bold;
       font-size: 16px;
-      color: #777;
+      color: @popover-header-color;
     }
 
     ul {
diff --git a/falcon-ui/app/css/styles/progress-bar.less b/falcon-ui/app/css/styles/progress-bar.less
index 5f0ad01..c20eaf9 100644
--- a/falcon-ui/app/css/styles/progress-bar.less
+++ b/falcon-ui/app/css/styles/progress-bar.less
@@ -19,18 +19,19 @@
 //---------------------------------//
 //---------progress Bar------------//
 //---------------------------------//
+/*
 .progressBar {
   overflow: hidden;
   padding: 10px 35px;
   .entypo {
-    /*float: none!important;
+    /!*float: none!important;
     position: absolute;
     margin: 0!important;
     top:0;
-    left:0;*/
-   /* line-height: 36px;
+    left:0;*!/
+   /!* line-height: 36px;
     height: 36px;
-    width: 36px;*/
+    width: 36px;*!/
 
     color: white;
     z-index:2;
@@ -310,4 +311,35 @@
       background-color: @gray-dark;
     }
   }
-}
\ No newline at end of file
+}*/
+.feedProgressBox, .clusterProgressBox, .processProgressBox, .datasetProgressBox,
+.snapshotProgressBox, .datasourceProgressBox {
+  .progressBar {
+    padding: 0px;
+    > div {
+      width: 19%;
+      margin-left: 1%;
+      float: left;
+      height: 32px;
+      border: 1px solid @progress-div-border;
+      border-bottom:1px solid @progress-div-bottom-border;
+      line-height: 32px;
+      font-size: 110%;
+      border-radius: 5px 5px 0px 0px;
+      color: @progress-div-color;
+      &.completed {
+        background-color: @progress-div-completed-bg;
+        color: @progress-div-completed-color;
+        border-color: @gray-lightest;
+        border-bottom: @progress-div-bottom-border;
+      }
+      &.active {
+        background-color: @progress-div-active-bg;
+        color: @progress-div-active-color;
+      }
+      &.fir {
+        margin-left: 0.5%;
+      }
+    }
+  }
+}
diff --git a/falcon-ui/app/css/styles/server-messages.less b/falcon-ui/app/css/styles/server-messages.less
index 0ab7d13..9737597 100644
--- a/falcon-ui/app/css/styles/server-messages.less
+++ b/falcon-ui/app/css/styles/server-messages.less
@@ -79,3 +79,16 @@
   text-align: center;
   margin: 10px 0;
 }
+
+.notif-close {
+  height: 15px;
+}
+
+.notif-close .close{
+  padding: 0px;
+  padding-right: 5px;
+}
+
+.notif-close .close:hover, .close:focus {
+  color: #4c8c1b;
+}
diff --git a/falcon-ui/app/css/styles/snapshot-form.less b/falcon-ui/app/css/styles/snapshot-form.less
new file mode 100644
index 0000000..a2532a8
--- /dev/null
+++ b/falcon-ui/app/css/styles/snapshot-form.less
@@ -0,0 +1,52 @@
+/**
+ * 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.
+ */
+
+#snapshotFormGeneralStep {
+  .clusterBox {
+      border: 1px solid #aaa;
+      border-left: 0;
+      border-right: 0;
+      padding: 10px 0px 15px;
+      margin-left: 5px;
+      margin: 35px 10px 10px 0px;
+      border-radius: 0px;
+
+      h3, .runJobOnBox {
+        color: inherit;
+        background-color: #FFFFFF;
+        border: 1px solid #aaa;
+        border-radius: 0px;
+        padding: 6px 6px;
+      }
+
+      h3 {
+        border: none;
+        top: -47px;
+        font-size: 13px;
+      }
+  }
+}
+
+.bandwidth-label {
+  margin-top: 5px !important;
+}
+
+.snapshotForm hr {
+  margin-top: 10px;
+  margin-bottom: 0;
+}
diff --git a/falcon-ui/app/css/styles/white.less b/falcon-ui/app/css/styles/white.less
new file mode 100644
index 0000000..c4e34cc
--- /dev/null
+++ b/falcon-ui/app/css/styles/white.less
@@ -0,0 +1,65 @@
+@body-bg: @white;
+@header1Border: @green-light;
+@header2NavBG: @green-lighter;
+@header3NavBG: @white;
+
+/** Menu */
+/*
+@header-menu-color: @green-light;
+*/
+
+/** Search */
+@search-box-border: @green-light;
+@search-input-color: @green-light;
+@search-icon-color: @green-light;
+
+/** Search:Popover */
+@popover-text-color: @green-light;
+@popover-header-color: @green-lighter;
+
+/* Entity Detail Screen */
+@entity-detail-background-color: @white;
+
+/* Detail Screen */
+@detail-header-color: @green-light;
+@detail-header-button-background-color: @green-lighter;
+@detail-background-color: @white;
+@detail-border-color: @green-light;
+@detail-color: @green-light;
+
+/* Lineage Graph*/
+@lineage-path-stroke-color: @green-light;
+@lineage-rect-fill-color: @green-lighter;
+@lineage-rect-stroke-color: @green-light;
+@lineage-node-text-color: @green-light;
+@lineage-marker-fill-color: @green-light;
+
+/* Controls */
+@input-background-color:@gray-light; /* light gray for table instance  */
+@input-color: @white;
+@form-input-background-color: @cool-gray;
+@details-box-dt-bg : @cool-gray;
+@form-box-clusterBox-runJobOnBox : @cool-gray;
+@form-table-color :@green-light;
+@details-form-border :@green-light;
+@progress-div-bottom-border : transparent;
+@progress-div-completed-bg: @green-lighter;
+
+/** Table */
+@table-header-color: @green-light;
+@table-header-background-color: @green-lighter;
+@table-border-color: @green-light;
+@table-header-border-color: @green-light;
+@table-header-border-width: 0px 0px 1px;
+@table-header-button-color: @gray-dark;
+@table-header-button-hover-color: @green-light;
+@table-cell-color:              #000;
+@table-cell-hover-color:        @gray-dark;
+@table-row-selected-background-color: @green-lighter;
+@table-inactive-bg: @green-lighter;
+
+/** Pagination */
+@pagination-active-bg:                 @white;
+@pagination-active-color:              @green-light;
+@pagination-disabled-bg:               @green-light;
+@pagination-disabled-color:            @white;
diff --git a/falcon-ui/app/css/variables.less b/falcon-ui/app/css/variables.less
index f1c81ab..ccec3c7 100644
--- a/falcon-ui/app/css/variables.less
+++ b/falcon-ui/app/css/variables.less
@@ -23,13 +23,20 @@
 //== Colors
 //
 //## Gray and brand colors for use across Bootstrap.
+@white: #FFFFFF;
 
 @gray-darker:            lighten(#000, 13.5%); // #222
 @gray-dark:              lighten(#000, 20%);   // #333
 @gray:                   lighten(#000, 33.5%); // #555
+@gray-lightest:           lighten(#000, 40%); // #666
 @gray-light:             lighten(#000, 46.7%); // #777
-@gray-light2:             lighten(#000, 65%); 
+@gray-light2:            lighten(#000, 65%);
 @gray-lighter:           lighten(#000, 93.5%); // #eee
+@gray-darken:           #232323;
+@cool-gray :			#aaaaaa;
+
+@green-light:           #69BE28;
+@green-lighter:         lighten(#69BE28, 40%);
 
 @brand-primary:         #428bca;
 @brand-success:         #5cb85c;
@@ -37,13 +44,64 @@
 @brand-warning:         #f0ad4e;
 @brand-danger:          #d9534f;
 
-@headerNavBG: #69BE28;
+
+@headerNavBG: @white;
+@header1Border: @white;
+@header2Border: @green-light;
+@header2NavBG: @green-light;
+@header3NavBG: @gray-dark;
+
+@search-box-border: @white;
+@search-input-color: @white;
+@search-icon-color: @white;
+/*@search-bar-background: #676567;*/
+
+/*
+@header-menu-color: #000;
+@header-menu-background-color: transparent;
+*/
+
+/* Entity Detail Screen */
+@entity-detail-background-color: @gray-darken;
+
+/* Detail Screen */
+@detail-header-color: @white;
+@detail-header-button-background-color: @gray;
+@detail-background-color: @gray-dark;
+@detail-border-color: @gray-lightest;
+@detail-color: @white;
+
+/* Lineage Graph*/
+@lineage-path-stroke-color: @white;
+@lineage-rect-fill-color: @gray-light;
+@lineage-rect-stroke-color: @white;
+@lineage-node-text-color: @white;
+@lineage-marker-fill-color: @white;
+
+/* Controls */
+@input-color: @white;
+@input-background-color: @gray-dark;
+
+@form-input-background-color: @gray-dark;
+@details-box-dt-bg : @gray-darken;
+@progress-div-active-bg:@green-light;
+@progress-div-active-color: @gray-darken;
+@progress-div-completed-bg :@gray-dark;
+@progress-div-completed-color: @gray-lightest;
+@progress-div-border : @green-light;
+@progress-div-color : @green-light;
+@form-label-color: @detail-color;
+@form-nxt-btn: @green-light;
+@form-box-clusterBox-runJobOnBox:@gray-dark;
+@form-table-color: @white;
+@details-form-border: transparent;
+@progress-div-bottom-border: @progress-div-border;
 //== Scaffolding
 //
 //## Settings for some of the most global styles.
 
 //** Background color for `<body>`.
-@body-bg:               #fff;
+@body-bg:               @gray-darken;
 //** Global text color on `<body>`.
 @text-color:            @gray-dark;
 
@@ -57,7 +115,7 @@
 //
 //## Font, line-height, and color for body text, headings, and more.
 
-@font-family-sans-serif:  cabin, Arial, sans-serif;
+@font-family-sans-serif:  Arial, sans-serif;
 @font-family-serif:       Georgia, "Times New Roman", Times, serif;
 //** Default monospace fonts for `<code>`, `<kbd>`, and `<pre>`.
 @font-family-monospace:   Menlo, Monaco, Consolas, "Courier New", monospace;
@@ -93,7 +151,7 @@
 //** Load fonts from this directory.
 @icon-font-path:          "fonts/";
 //** File name for all font files.
-@icon-font-name:          "glyphicons-halflings-regular"; 
+@icon-font-name:          "glyphicons-halflings-regular";
 //** Element ID within SVG icon file.
 @icon-font-svg-id:        "glyphicons_halflingsregular";
 
@@ -137,12 +195,17 @@
 //## Customizes the `.table` component with basic values, each used across all table variations.
 
 //** Padding for `<th>`s and `<td>`s.
-@table-cell-padding:            8px;
+@table-cell-padding:            5px;
+@table-cell-color:              @white;
+@table-cell-hover-color:        @white;
+
+@table-row-selected-background-color: @gray-dark;
 //** Padding for cells in `.table-condensed`.
 @table-condensed-cell-padding:  5px;
 
 //** Default background color used for all tables.
 @table-bg:                      transparent;
+@table-inactive-bg:             #000;
 //** Background color used for `.table-striped`.
 @table-bg-accent:               #f9f9f9;
 //** Background color used for `.table-hover`.
@@ -150,8 +213,14 @@
 @table-bg-active:               @table-bg-hover;
 
 //** Border color for table and cell borders.
-@table-border-color:            #ddd;
+@table-border-color:            transparent;
 
+@table-header-border-width: 0px 1px 1px;
+@table-header-border-color: @gray-dark;
+@table-header-color: @white;
+@table-header-background-color: @gray-dark;
+@table-header-button-color: @white;
+@table-header-button-hover-color: @white;
 
 //== Buttons
 //
@@ -453,12 +522,12 @@
 @pagination-hover-bg:                  @gray-lighter;
 @pagination-hover-border:              #ddd;
 
-@pagination-active-color:              #fff;
-@pagination-active-bg:                 @brand-primary;
+@pagination-active-color:              @white;
+@pagination-active-bg:                 @gray-dark;
 @pagination-active-border:             @brand-primary;
 
 @pagination-disabled-color:            @gray-light;
-@pagination-disabled-bg:               #fff;
+@pagination-disabled-bg:               @gray-dark;
 @pagination-disabled-border:           #ddd;
 
 
@@ -617,7 +686,7 @@
 //
 //## Define alert colors, border radius, and padding.
 
-@alert-padding:               5px; 
+@alert-padding:               5px;
 @alert-border-radius:         @border-radius-base;
 @alert-link-font-weight:      bold;
 
@@ -860,5 +929,3 @@
 @dl-horizontal-offset:        @component-offset-horizontal;
 //** Horizontal line color.
 @hr-border:                   @gray-lighter;
-
-
diff --git a/falcon-ui/app/css/white-theme.less b/falcon-ui/app/css/white-theme.less
new file mode 100644
index 0000000..4dbfbd9
--- /dev/null
+++ b/falcon-ui/app/css/white-theme.less
@@ -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.
+ */
+// Core variables and mixins
+@import "main.less";
+@import "styles/white.less";
diff --git a/falcon-ui/app/html/authenticating.html b/falcon-ui/app/html/authenticating.html
index 8706322..9599249 100644
--- a/falcon-ui/app/html/authenticating.html
+++ b/falcon-ui/app/html/authenticating.html
@@ -26,7 +26,7 @@
       <div class="col-sm-12">
 
         <div class="col-sm-15 detailsBox centered">
-          <h3>Authenticating...</h3>
+          <h3 class="auth">Authenticating...</h3>
         </div>
 
       </div>
diff --git a/falcon-ui/app/html/cluster/clusterFormGeneralStepTpl.html b/falcon-ui/app/html/cluster/clusterFormGeneralStepTpl.html
index 8d76c90..cc592b2 100644
--- a/falcon-ui/app/html/cluster/clusterFormGeneralStepTpl.html
+++ b/falcon-ui/app/html/cluster/clusterFormGeneralStepTpl.html
@@ -18,29 +18,30 @@
  */
 -->
 <form novalidate name="clusterForm" id="clusterGeneralStep">
-  <div class="col-xs-24">
-    <label class="light">Name</label>
-    <input type="text" class="form-control nameInput"
+  <div class="col-xs-8">
+    <label class="light" tooltip="cluster.name">Cluster Name<mandatory-field></mandatory-field></label>
+    <input type="text" class="form-control nameInput" ng-disabled="editingMode"
 	ng-pattern="validations.patterns.name"
         ng-model="clusterEntity.clusterModel.cluster._name" ng-required="true"
         ng-keydown="validations.acceptNoSpaces($event)"
-        check-name="{type:'cluster', check:true}" ng-class="{fakeInvalid:!validations.nameAvailable}"
-        ng-disabled="xmlPreview.edit" />
+        check-name="{type:'cluster', check:!editingMode}"
+        ng-class="{fakeInvalid:!validations.nameAvailable}"
+        ng-disabled="xmlPreview.edit"/>
         <!--check-type="cluster" check-name-flag="nameValid" check="true"-->
 
   </div>
-  <div class="col-xs-12">
-    <label class="light">Colo</label>
+  <div class="col-xs-16">
+    <label class="light" tooltip="cluster.colo">Data Center or Colo Name<mandatory-field></mandatory-field></label>
     <input type="text" class="form-control"
-	ng-pattern="validations.patterns.freeText"
+	ng-pattern="validations.patterns.name"
         ng-required="true" ng-disabled="xmlPreview.edit"
         ng-model="clusterEntity.clusterModel.cluster._colo" validation-message="{{validations.messages.colo}}"/>
   </div>
-  <div class="col-xs-12">
+  <div class="col-xs-24">
     <label class="light">Description</label>
     <input type="text" class="form-control"
-	ng-pattern="validations.patterns.freeText"
-        ng-required="true" ng-disabled="xmlPreview.edit" validation-message="{{validations.messages.description}}"
+        ng-disabled="xmlPreview.edit"
+        ng-pattern="validations.patterns.freeText"
         ng-model="clusterEntity.clusterModel.cluster._description" />
   </div>
 
@@ -50,166 +51,207 @@
 
   <div class="col-xs-24">
     <div ng-repeat="tag in tagsArray" class="row dynamic-table-spacer">
-      <div class="col-xs-10">
+      <div class="col-xs-8">
         <input type="text" class="form-control" ng-model="tag.key" ng-disabled="xmlPreview.edit" placeholder="key"
                ng-pattern="validations.patterns.alpha" ng-required="tag.value" validation-optional-message="{{validations.messages.key}}"/>
       </div>
-      <div class="col-xs-11">
+      <div class="col-xs-8">
         <input type="text" class="form-control" ng-disabled="xmlPreview.edit" placeholder="value"
                ng-model="tag.value" ng-pattern="validations.patterns.alpha" ng-required="tag.key" validation-optional-message="{{validations.messages.value}}"/>
       </div>
-      <div class="col-xs-3">
-        <button type="button" class="btn btn-default btn-xs" ng-click="removeTag($index)" ng-disabled="xmlPreview.edit" ng-if="$index>0">
+      <div class="col-xs-8">
+        <button type="button" class="btn btn-default btn-xs" ng-click="removeTag($index)" ng-disabled="xmlPreview.edit" ng-if="!$first || !$last">
           <span class="entypo minus"></span> delete
         </button>
+        <button type="button" class="btn btn-default btn-xs" ng-click="addTag()" ng-disabled="xmlPreview.edit" ng-if="$last">
+          <span class="entypo plus"></span> add tag
+        </button>
       </div>
     </div>
   </div>
 
-  <div class="col-xs-24 mt5">
-    <button type="button" class="btn btn-default btn-xs" ng-click="addTag()" ng-disabled="xmlPreview.edit">
-      <span class="entypo plus"></span> add tag
-    </button>
-  </div>
-  <h4 class="col-xs-24"> Access Control List </h4>
-  <div class="col-xs-8">
-    <label class="light">Owner</label>
-    <input type="text" class="form-control" ng-disabled="xmlPreview.edit" validation-message="{{validations.messages.acl.owner}}"
-           ng-required="true"
-           ng-pattern="validations.patterns.unixId"
-           ng-model="clusterEntity.clusterModel.cluster.ACL._owner"/>
-  </div>
-  <div class="col-xs-8">
-    <label class="light">Group</label>
-    <input type="text" class="form-control" ng-disabled="xmlPreview.edit" validation-message="{{validations.messages.acl.group}}"
-           ng-required="true"
-           ng-pattern="validations.patterns.unixId"
-           ng-model="clusterEntity.clusterModel.cluster.ACL._group"/>
-  </div>
-  <div class="col-xs-8">
-    <label class="light">Permissions</label>
-    <input type="text" class="form-control" ng-disabled="xmlPreview.edit" validation-message="{{validations.messages.acl.permission}}"
-           ng-required="true"
-           ng-pattern="validations.patterns.unixPermissions"
-           ng-model="clusterEntity.clusterModel.cluster.ACL._permission"/>
-  </div>
-
-  <h4 class="col-xs-24"> Interfaces </h4>
-  <label class="col-xs-4">
+  <div class="col-xs-24"><label class="mt15">INTERFACES</label></div>
+  <div class="col-xs-24 plr0px">
+    <label class="col-xs-6">
     Type
-  </label>
-  <label class="col-xs-16">
+    </label>
+    <label class="col-xs-10">
     Endpoint
-  </label>
-  <label class="col-xs-4">
-    Version
-  </label>
-  <div id="interfaces-detail" class="col-xs-24"
+    </label>
+    <div id="interfaces-detail" class="col-xs-24"
        ng-repeat="_interface in clusterEntity.clusterModel.cluster.interfaces.interface">
     <div class="row">
-      <div class="col-xs-4">
+      <div class="col-xs-6">
 
           <input type="checkbox" ng-checked="registry.check" ng-model="registry.check"
-                 ng-if="_interface._type === 'registry'" ng-disabled="xmlPreview.edit"/> {{_interface._type}}
+                 ng-if="_interface._type === 'registry'" ng-disabled="xmlPreview.edit"/>
+         <input type="checkbox" ng-checked="spark.check" ng-model="spark.check"
+                ng-if="_interface._type === 'spark'" ng-disabled="xmlPreview.edit"/>
+          <label class="light font11px pt5px" tooltip="cluster.interfaces.{{_interface._type}}">{{clusterInterfaceLabels(_interface._type)}}</label>
 
       </div>
-      <div class="col-xs-16">
-        <input type="text" class="form-control" ng-pattern="validations.patterns.osPath"
+      <div class="col-xs-10">
+        <input id="interface.{{_interface._type}}" type="text" class="form-control" ng-pattern="validations.patterns.interfaceEndpoints"
                ng-model="_interface._endpoint"
-               ng-disabled="_interface._type === 'registry' && !registry.check || xmlPreview.edit"/>
+               ng-required="true"
+               validation-optional-message="{{validations.messages.interfaceEndpoints}}"
+               ng-disabled="xmlPreview.edit" interface-endpoint
+               ng-if="_interface._type !== 'registry' && _interface._type !== 'spark'"/>
+        <input id="interface.{{upperCase(_interface._type)}}" type="text" class="form-control" ng-pattern="validations.patterns.interfaceEndpoints"
+               ng-model="_interface._endpoint" ng-required="registry.check" validation-optional-message="{{validations.messages.interfaceEndpoints}}"
+               ng-disabled="_interface._type === 'registry' && !registry.check || xmlPreview.edit" interface-endpoint
+               ng-if="_interface._type === 'registry'"/>
+
+        <div class="col-xs-24 plr0px" ng-if="_interface._type === 'spark'">
+          <input type="radio" name="sparkInterface" value="yarn-cluster" ng-model="_interface._endpoint"
+              ng-disabled="(_interface._type === 'spark' && !spark.check) || xmlPreview.edit"/>
+          Yarn Cluster
+          <input type="radio" name="sparkInterface" class="ml20" value="yarn-client" ng-model="_interface._endpoint"
+              ng-disabled="(_interface._type === 'spark' && !spark.check) || xmlPreview.edit"/>
+          Yarn Client
+          <input type="radio" name="sparkInterface" class="ml20" value="local" ng-model="_interface._endpoint"
+              ng-disabled="(_interface._type === 'spark' && !spark.check) || xmlPreview.edit"/>
+          Local
+
+          <input type="radio" name="sparkInterface" class="ml20"
+              value="local[*]" ng-model="_interface._endpoint"
+              ng-disabled="(_interface._type === 'spark' && !spark.check) || xmlPreview.edit"/>
+          Custom
+          <input id="interface.{{_interface._type}}" type="text"
+                ng-model="_interface._endpoint"
+                ng-required="spark.check"
+                ng-if="!(_interface._endpoint==='yarn-cluster' || _interface._endpoint==='yarn-client' || _interface._endpoint==='local')"
+                validation-optional-message="{{validations.messages.interfaceEndpoints}}"
+                ng-disabled="(_interface._type === 'spark' && !spark.check) || xmlPreview.edit" interface-endpoint
+                title="Custom spark url like local[*],local[1] etc."/>
+        </div>
       </div>
-      <div class="col-xs-4">
-        <input type="text" class="form-control" ng-pattern="validations.patterns.versionNumbers"
-               ng-disabled="(_interface._type === 'registry' && !registry.check) || xmlPreview.edit"
-               ng-model="_interface._version">
-      </div>
+    </div>
+    </div>
+  </div>
+  <div class="col-xs-24"><label class="mt15">PROPERTIES</label></div>
+  <div class="col-xs-24 plr0px">
+    <div class="row m0">
+      <label class="col-xs-8">Property Name</label><label class="col-xs-16">Value</label>
+    </div>
+    <div ng-repeat="property in clusterEntity.clusterModel.cluster.properties.property" class="row m0">
+        <div class="col-xs-8 dynamic-table-spacer">
+          <input type="text" class="form-control" ng-model="property._name"
+                 ng-pattern="validations.patterns.propertyName"
+                 validation-optional-message="{{validations.messages.name}}"
+                 ng-disabled="xmlPreview.edit"
+                 ng-required="property._value" placeholder="name" />
+        </div>
+        <div class="col-xs-8 dynamic-table-spacer">
+          <input type="text" class="form-control" ng-model="property._value"
+                 validation-optional-message="{{validations.messages.value}}"
+                 ng-disabled="xmlPreview.edit"
+                 ng-required="property._name" placeholder="value" />
+        </div>
+        <div class="dynamic-table-spacer">
+          <button type="button" class="btn btn-default btn-xs" ng-click="removeProperty($index)" ng-if="!$first || !$last"
+               ng-disabled="xmlPreview.edit">
+            <span class="entypo minus"></span> delete
+          </button>
+          <button type="button" class="btn btn-default btn-xs" ng-click="addProperty()" ng-disabled="xmlPreview.edit" ng-if="$last">
+              <span class="entypo plus"></span> add property
+          </button>
+        </div>
     </div>
   </div>
 
-  <h4 class="col-xs-24"> Properties </h4>
-  <label class="col-xs-7">name</label><label class="col-xs-17">value</label>
-  <div ng-repeat="property in clusterEntity.clusterModel.cluster.properties.property">
-    <div class="col-xs-7 dynamic-table-spacer">
-      <input type="text" class="form-control" ng-model="property._name"
-             validation-optional-message="{{validations.messages.name}}"
-             ng-disabled="xmlPreview.edit"
-             ng-required="property._value" placeholder="name" />
+  <div class="col-xs-24"><label class="mt15">LOCATION</label></div>
+  <div class="col-xs-24 plr0px">
+    <div class="col-xs-24 mb5 plr0px">
+      <label class="col-xs-6">Location Name</label><label class="col-xs-10">Path</label>
     </div>
-    <div class="col-xs-15 dynamic-table-spacer">
-      <input type="text" class="form-control" ng-model="property._value"
-             validation-optional-message="{{validations.messages.value}}"
-             ng-disabled="xmlPreview.edit"
-             ng-required="property._name" placeholder="value" />
+    <div ng-repeat="location in clusterEntity.clusterModel.cluster.locations.location" class="col-xs-24 mt5">
+        <div id="clusterLocationBox" class="row" ng-if="location._name === 'staging' || location._name === 'working' || location._name === 'temp'">
+          <div class="col-xs-6 dynamic-table-spacer">
+              <label class="light font11px pt5px" tooltip="cluster.locations.{{location._name}}">
+                {{capitalize(location._name)}}<mandatory-field></mandatory-field>
+              </label>
+          </div>
+          <div class="col-xs-10 dynamic-table-spacer">
+            <input id="location.{{location._name}}" type="text" class="form-control" ng-model="location._path" ng-pattern="validations.patterns.path"
+                   ng-disabled="xmlPreview.edit" ng-required="location._name===staging" validation-optional-message="{{validations.messages.location}}"/>
+            <span class="error" ng-show="locationsEqualError">Staging and Working location should be different</span>
+          </div>
+          <div class="dynamic-table-spacer">
+            <button class="btn btn-default btn-xs" ng-click="removeLocation($index)" ng-if="$index>2 && !$last"
+                 ng-disabled="xmlPreview.edit" >
+              <span class="entypo minus"></span> delete
+            </button>
+            <button type="button" class="btn btn-default btn-xs" ng-click="addLocation()" ng-disabled="xmlPreview.edit" ng-if="$last">
+                <span class="entypo plus"></span> add location
+            </button>
+          </div>
+        </div>
+
+        <!-- <div class="row" ng-if="location._name !== 'staging' && location._name !== 'working' && location._name !== 'temp'">
+          <div class="col-xs-6 dynamic-table-spacer">
+            <input type="text" class="form-control" ng-model="location._name"
+                   validation-optional-message="{{validations.messages.name}}"
+                   ng-pattern="validations.patterns.name"
+                   ng-disabled="xmlPreview.edit" ng-required="location._path" placeholder="name" />
+          </div>
+          <div class="col-xs-10 dynamic-table-spacer">
+            <input type="text" class="form-control" ng-model="location._path"
+                   validation-optional-message="{{validations.messages.path}}"
+                   ng-pattern="validations.patterns.path"
+                   ng-disabled="xmlPreview.edit" ng-required="location._name" placeholder="path" />
+          </div>
+          <div class="dynamic-table-spacer">
+            <button class="btn btn-default btn-xs" ng-click="removeLocation($index)" ng-if="$index>3"
+                 ng-disabled="xmlPreview.edit" >
+              <span class="entypo minus"></span> delete
+            </button>
+            <button type="button" class="btn btn-default btn-xs" ng-click="addLocation()" ng-disabled="xmlPreview.edit" ng-if="$last">
+                <span class="entypo plus"></span> add location
+            </button>
+          </div>
+        </div> -->
     </div>
-    <div class="col-xs-2 dynamic-table-spacer">
-      <button type="button" class="btn btn-default btn-xs" ng-click="removeProperty($index)" ng-if="$index > 0"
-           ng-disabled="xmlPreview.edit">
-        <span class="entypo minus"></span> delete
+  </div>
+  <div class="col-xs-24 advancedOption" ng-click="expandOptions = !expandOptions" id="clusterAdvancedOption">
+    <label class="mt15 pointer blink-success">ADVANCED OPTIONS</label>
+    <i class="glyphicon glyphicon-chevron-down mt15" ng-if="!expandOptions"></i>
+    <i class="glyphicon glyphicon-chevron-up mt15" ng-if="expandOptions"></i>
+  </div>
+
+  <div id="advancedOptionsBox" class="col-xs-24 plr0px" ng-class="{expanded:expandOptions}">
+    <div class="col-xs-24"><label class="mt15">ACCESS CONTROL LIST</label></div>
+    <div class="col-xs-24 plr0px">
+      <div class="col-xs-12">
+          <label class="light">Owner<mandatory-field></mandatory-field></label>
+          <input type="text" class="form-control" ng-disabled="xmlPreview.edit" validation-message="{{validations.messages.acl.owner}}"
+                 ng-required="true"
+                 ng-pattern="validations.patterns.unixId"
+                 ng-model="clusterEntity.clusterModel.cluster.ACL._owner"/>
+      </div>
+      <div class="col-xs-12">
+          <label class="light">Group<mandatory-field></mandatory-field></label>
+          <input type="text" class="form-control" ng-disabled="xmlPreview.edit" validation-message="{{validations.messages.acl.group}}"
+                 ng-required="true"
+                 ng-pattern="validations.patterns.unixId"
+                 ng-model="clusterEntity.clusterModel.cluster.ACL._group"/>
+      </div>
+      <div class="col-xs-12">
+          <label class="light">Permissions<mandatory-field></mandatory-field></label>
+          <acl-permissions acl-model="clusterEntity.clusterModel.cluster.ACL._permission"></acl-permissions>
+      </div>
+    </div>
+  </div>
+  <div class="col-xs-24 pb15px mt35">
+    <div class="pull-right">
+      <a class="btn cnclBtn" ui-sref="main">
+        CANCEL
+      </a>
+      <button id="cluster.step1" class="btn nextBtn" ng-disabled="xmlPreview.edit || buttonSpinners.show"
+           ng-click="goSummaryStep(clusterForm.$invalid)" scroll-to-error>
+        NEXT <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
       </button>
     </div>
-    <div class="clearfix hidden-md"></div>
-  </div>
-  <div class="col-xs-24 dynamic-table-spacer">
-    <button type="button" class="btn btn-default btn-xs" ng-click="addProperty()" ng-disabled="xmlPreview.edit">
-      <span class="entypo plus"></span> add property
-    </button>
   </div>
 
-  <h4 class="col-xs-24"> Location </h4>
-  <label class="col-xs-7">name</label><label class="col-xs-17">path</label>
-  <div ng-repeat="location in clusterEntity.clusterModel.cluster.locations.location" class="col-xs-24">
-
-    <div class="row" ng-if="location._name === 'staging' || location._name === 'working' || location._name === 'temp'">
-      <div class="col-xs-7 dynamic-table-spacer">
-        {{location._name}}
-      </div>
-      <div class="col-xs-15 dynamic-table-spacer">
-        <input id="location.{{location._name}}" type="text" class="form-control" ng-model="location._path" ng-pattern="validations.patterns.osPath"
-               ng-disabled="xmlPreview.edit" ng-required="true" validation-message="{{validations.messages.location}}"/>
-      </div>
-      <div class="col-xs-2 dynamic-table-spacer"></div>
-      <div class="clearfix hidden-md"></div>
-    </div>
-
-    <div class="row" ng-if="location._name !== 'staging' && location._name !== 'working' && location._name !== 'temp'">
-      <div class="col-xs-7 dynamic-table-spacer">
-        <input type="text" class="form-control" ng-model="location._name"
-               validation-optional-message="{{validations.messages.name}}"
-               ng-pattern="validations.patterns.alpha"
-               ng-disabled="xmlPreview.edit" ng-required="location._path" placeholder="name" />
-      </div>
-      <div class="col-xs-15 dynamic-table-spacer">
-        <input type="text" class="form-control" ng-model="location._path"
-               validation-optional-message="{{validations.messages.path}}"
-               ng-pattern="validations.patterns.osPath"
-               ng-disabled="xmlPreview.edit" ng-required="location._name" placeholder="path" />
-      </div>
-      <div class="col-xs-2 dynamic-table-spacer">
-        <button class="btn btn-default btn-xs" ng-click="removeLocation($index)" ng-if="$index>3"
-             ng-disabled="xmlPreview.edit" >
-          <span class="entypo minus"></span> delete
-        </button>
-      </div>
-      <div class="clearfix hidden-md"></div>
-    </div>
-
-  </div>
-
-  <div class="col-xs-24 dynamic-table-spacer">
-    <button type="button" class="btn btn-default btn-xs" ng-click="addLocation()" ng-disabled="xmlPreview.edit">
-      <span class="entypo plus"></span> add location
-    </button>
-  </div>
-  <div class="col-xs-24 mt20">
-
-    <button id="cluster.step1" class="btn nextBtn pull-right" ng-disabled="xmlPreview.edit || buttonSpinners.show"
-         ng-click="goSummaryStep(clusterForm.$invalid)">
-      Next <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
-    </button>
-    <a class="pull-right" ui-sref="main">
-      Cancel
-    </a>
-
-  </div>
-
-</form>
\ No newline at end of file
+</form>
diff --git a/falcon-ui/app/html/cluster/clusterFormSummaryStepTpl.html b/falcon-ui/app/html/cluster/clusterFormSummaryStepTpl.html
index a7caad9..2c9c34d 100644
--- a/falcon-ui/app/html/cluster/clusterFormSummaryStepTpl.html
+++ b/falcon-ui/app/html/cluster/clusterFormSummaryStepTpl.html
@@ -18,70 +18,75 @@
  */
 -->
 <div class="row clusterSummaryRow" id="clusterSummaryStep">
+  <h4 class="col-sm-24">
+    General
+  </h4>
   <div class="col-sm-24">
-    <label>Name</label>: {{clusterEntity.clusterModel.cluster._name}}
+    <label>Cluster Name</label>:<span data-qe-id="clusterName"> {{clusterEntity.clusterModel.cluster._name}}</span>
   </div>
   <div class="col-sm-24">
-    <label>Colo</label>: {{clusterEntity.clusterModel.cluster._colo}}
+    <label>Data Center or Colo Name</label>:<span data-qe-id="clusterColo"> {{clusterEntity.clusterModel.cluster._colo}}</span>
   </div>
   <div class="col-sm-24">
-    <label>Description</label>: {{clusterEntity.clusterModel.cluster._description}}
+    <label>Description</label>:<span data-qe-id="clusterDescription"> {{clusterEntity.clusterModel.cluster._description}}</span>
   </div>
   <div class="col-sm-24" ng-if="clusterEntity.clusterModel.cluster.tags">
-    <label>Tags</label>: {{clusterEntity.clusterModel.cluster.tags}}
+    <label>Tags</label>:<span data-qe-id="clusterTags"> {{clusterEntity.clusterModel.cluster.tags}}</span>
   </div>
   <h4 class="col-sm-24" ng-if="clusterEntity.clusterModel.cluster.ACL">
-    ACL
+    Access Control List
   </h4>
   <div class="col-sm-24" ng-if="clusterEntity.clusterModel.cluster.ACL" >
-    <label>Owner</label>: {{clusterEntity.clusterModel.cluster.ACL._owner}}
-    <label>Group</label>: {{clusterEntity.clusterModel.cluster.ACL._group}}
-    <label>Permission</label>: {{clusterEntity.clusterModel.cluster.ACL._permission}}
+    <label>Owner</label>:<span data-qe-id="clusterACLOwner"> {{clusterEntity.clusterModel.cluster.ACL._owner}}</span>
+    <label>Group</label>:<span data-qe-id="clusterACLGroup"> {{clusterEntity.clusterModel.cluster.ACL._group}}</span>
+    <label>Permission</label>:<span data-qe-id="clusterACLPermission"> {{clusterEntity.clusterModel.cluster.ACL._permission}}</span>
   </div>
   <h4 class="col-sm-24">
     Interfaces
   </h4>
 
   <div class="col-sm-24" ng-repeat="_interface in clusterEntity.clusterModel.cluster.interfaces.interface">
-    <label>{{_interface._type}}</label>: {{_interface._endpoint}} - {{ _interface._version }}
+    <label>{{clusterInterfaceLabels(_interface._type)}}</label>:
+    <span data-qe-id="clusterInterface{{_interface._type}}">{{_interface._endpoint}}</span>
+     <!-- - <span data-qe-id="clusterInterface{{_interface._type}}Version">{{ _interface._version }}</span> -->
   </div>
 
   <h4 class="col-sm-24" ng-if="clusterEntity.clusterModel.cluster.properties">
     Properties
   </h4>
 
-  <div class="col-sm-24" ng-if="clusterEntity.clusterModel.cluster.properties.property.length > 0"
+  <div data-qe-id="clusterProps" class="col-sm-24" ng-if="clusterEntity.clusterModel.cluster.properties.property.length > 0"
     ng-repeat="property in clusterEntity.clusterModel.cluster.properties.property">
-    <label>{{property._name}}</label>: {{property._value}}
+    <label>{{property._name}}</label>:<span data-qe-id="clusterProp{{property._name}}"> {{property._value}}</span>
   </div>
 
   <h4 class="col-sm-24">
     Locations
   </h4>
 
-  <div class="col-sm-24" ng-repeat="location in clusterEntity.clusterModel.cluster.locations.location">
-    <label>{{location._name}}</label>: {{location._path}}
+  <div data-qe-id="clusterLocations" class="col-sm-24" ng-repeat="location in clusterEntity.clusterModel.cluster.locations.location">
+    <label data-qe-id="{{location._name}}">{{capitalize(location._name)}}</label>:<span data-qe-id="clusterLocation{{capitalize(location._name)}}"> {{location._path}}</span>
   </div>
 </div>
 
 
-<div class="row clusterSummaryRow">
-  <div class="col-xs-24 mt20">
-    <button id="cluster.backToStep1"
-         class="btn prevBtn"
-         ui-sref="forms.cluster.general"
-         ng-click="goGeneralStep()"
-         ng-disabled="buttonSpinners.backShow">
-      Previous <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.backShow" />
-    </button>
+<div class="col-xs-24 mt35 pb15px pl0px">
+  <button id="cluster.backToStep1"
+       class="btn prevBtn"
+       ui-sref="forms.cluster.general"
+       ng-click="goGeneralStep()"
+       ng-disabled="buttonSpinners.backShow">
+    PREVIOUS <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.backShow" />
+  </button>
 
-    <button id="cluster.step2" class="btn btn-default nextBtn pull-right"
-         ng-click="saveCluster()" ng-disabled="xmlPreview.edit || buttonSpinners.show">
-      Save <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
-    </button>
-
-    <a class="pull-right" ui-sref="main">
-      Cancel
+  <div class="pull-right">
+    <a class="btn cnclBtn" ui-sref="main">
+      CANCEL
     </a>
+    <button id="cluster.step2" class="btn nextBtn"
+         ng-click="saveCluster()" ng-disabled="xmlPreview.edit || buttonSpinners.show">
+      SAVE <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
+    </button>
   </div>
-</div>
\ No newline at end of file
+
+</div>
diff --git a/falcon-ui/app/html/cluster/clusterFormTpl.html b/falcon-ui/app/html/cluster/clusterFormTpl.html
index 1a65172..7b7af5e 100644
--- a/falcon-ui/app/html/cluster/clusterFormTpl.html
+++ b/falcon-ui/app/html/cluster/clusterFormTpl.html
@@ -17,67 +17,72 @@
  * limitations under the License.
  */
 -->
-<div class="col-xs-22 col-xs-offset-1 clusterForm" id="clusterForm">
-  <div class="col-xs-24">
-    <div class="row">
-
-      <h3 id="cluster.title" class="col-xs-24">
-        <span class="entypo archive icon-lg"></span> New Cluster
-      </h3>
-
-      <div ng-class="{'col-xs-12' : propsOpen, 'col-xs-20' : !propsOpen}">
-        <div class="detailsBox">
-          <div class="clusterProgressBox" ng-class="{summary:secondStep===true}">
-            <div class="progressBar col-xs-24">
-              <div>
-              <span>
-                <div>1<span class="entypo check"></span></div>
-                <h6>General</h6>
-              </span>
-              <span>
-                <div>2</div>
-                <h6>Summary</h6>
-              </span>
-              </div>
-            </div>
-          </div>
-          <div class="row">
-            <div class="col-xs-offset-1 col-xs-22" ui-view></div>
-          </div>
+<div class="clusterForm">
+    <div class="col-xs-22">
+        <div class="preview pullOver">
+            <button id="previewXMLBtn" type="button" class="btn btn-default btn-md pull-right nextBtn"
+              ng-disabled="invalidXml && xmlPreview.edit" ng-click="toggleclick()" >Preview XML</button>
         </div>
-      </div>
-
-      <div ng-class="{'col-xs-12' : propsOpen, 'col-xs-4' : !propsOpen}">
-        <div class="detailsBox">
-          <div class="row">
-
-            <div class="col-xs-13 col-xs-offset-1 noSpecial">
-              <h5><i class="pointer glyphicon" ng-click="propsOpen = !propsOpen" ng-class="propsOpen ? 'glyphicon-minus-sign':'glyphicon-plus-sign'"></i> XML Preview</h5>
-            </div>
-
-            <div ng-if="propsOpen" class="col-xs-9">
-              <button type="button"
-                      id="cluster.editXML"
-                      class="btn btn-default btn-xs pull-right"
-                      ng-click="xmlPreview.editXML()"
-                      ng-class="{'btn-warning':xmlPreview.edit}">
-                <div ng-if="!xmlPreview.edit">Edit XML</div>
-                <div ng-if="xmlPreview.edit">Finish</div>
-              </button>
-            </div>
-
-            <div ng-show="propsOpen" class="col-xs-24">
-              <div class="row">
-                <div class="col-xs-22 col-xs-offset-1">
-                  <textarea ng-model="prettyXml" elastic class="form-control prettyXml" ng-disabled="!xmlPreview.edit"></textarea>
+        <br/>
+        <div class="formBoxContainer detailsBox">
+            <div class="row clusterProgressBox" ng-class="{summary:secondStep===true}">
+                <div class="progressBar col-xs-24">
+                    <div class="text-center" ng-class="{
+                active:isActive('forms.cluster.general'),
+                completed:isCompleted('forms.cluster.general')}">General</div>
+                    <div class="text-center" ng-class="{
+                active:isActive('forms.cluster.summary'),
+                completed:isCompleted('forms.cluster.summary')}">Summary</div>
                 </div>
-              </div>
             </div>
-
-          </div>
+            <div class="row customContainer">
+                <div class="col-xs-offset-1 col-xs-22">
+                    <div class="col-xs-24">
+                        <label class="title"><span class="entypo archive icon-lg entypo-align-sub"></span> NEW CLUSTER</label>
+                    </div>
+                    <div ui-view></div>
+                </div>
+            </div>
         </div>
-      </div>
 
+        <div class="hide xmlPreviewContainer detailsBox" >
+            <div class="row dt">
+                <div class="col-xs-24 pt15px">
+                    <div class="col-xs-13 noSpecial">
+                        <h5>XML Preview</h5>
+                        <label style="margin-top: -10px;margin-bottom: -2px;" ng-if="invalidXml" class="custom-danger">Invalid Xml</label>
+                    </div>
+
+                    <div class="pull-right">
+                        <button type="button"
+                                id="cluster.editXML"
+                                class="btn btn-default btn-xs"
+                                ng-click="xmlPreview.editXML()"
+                                ng-class="{'btn-warning':xmlPreview.edit}"
+                                ng-disabled="invalidXml">
+                            <div ng-if="!xmlPreview.edit">Edit XML</div>
+                            <div ng-if="xmlPreview.edit">Finish</div>
+                        </button>
+
+                        <button type="button"
+                                id="revertXMLBtn"
+                                class="btn btn-default btn-xs"
+                                ng-if="invalidXml"
+                                ng-click="revertXml()">
+                            <div>Revert</div>
+                        </button>
+                    </div>
+                </div>
+                <div class="col-xs-24 showValidationStyle">
+                    <textarea ng-model="prettyXml"
+                              elastic
+                              class="form-control"
+                              ng-disabled="!xmlPreview.edit"
+                              ng-class="{fakeInvalid:invalidXml}">
+                    </textarea>
+                </div>
+            </div>
+        </div>
     </div>
-  </div>
-</div>
\ No newline at end of file
+</div>
+</div>
diff --git a/falcon-ui/app/html/cluster/clusterSummary.html b/falcon-ui/app/html/cluster/clusterSummary.html
new file mode 100644
index 0000000..abad09a
--- /dev/null
+++ b/falcon-ui/app/html/cluster/clusterSummary.html
@@ -0,0 +1,77 @@
+<!--
+/**
+ * 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.
+ */
+-->
+<div class="row clusterSummaryRow summaryBox" id="clusterSummaryStep">
+  <h5 class="col-sm-24">
+    General
+  </h5>
+  <div class="col-sm-24">
+    <label>Cluster Name</label>:<span> {{cluster.name}}</span>
+  </div>
+  <div class="col-sm-24">
+    <label>Data Center or Colo Name</label>:<span> {{cluster.colo}}</span>
+  </div>
+  <div class="col-sm-24">
+    <label>Description</label>:<span> {{cluster.description}}</span>
+  </div>
+
+  <div class="col-sm-24" ng-if="cluster.tags.length != 0">
+    <label>Tags</label>:
+  </div>
+
+  <div class="col-sm-24">
+    <div ng-repeat="tag in cluster.tags | filter:{key: '!!'}">
+      {{tag.key}} = {{tag.value}}
+    </div>
+  </div>
+
+  <h5 class="col-sm-24" ng-if="cluster.ACL">
+    Access Control List
+  </h5>
+  <div class="col-sm-24" ng-if="cluster.ACL" >
+    <label>Owner</label>:<span> {{cluster.ACL.owner}}</span>
+    <label>Group</label>:<span> {{cluster.ACL.group}}</span>
+    <label>Permission</label>:<span> {{cluster.ACL.permission}}</span>
+  </div>
+
+  <h5 class="col-sm-24">
+    Interfaces
+  </h5>
+
+  <div class="col-sm-24" ng-repeat="interface in cluster.interfaces">
+    <label>{{clusterInterfaceLabels(interface.type)}}</label>:<span> {{interface.endpoint}} - {{ interface.version }}<span>
+  </div>
+
+  <h5 class="col-sm-24" ng-if="cluster.properties">
+    Properties
+  </h5>
+
+  <div class="col-sm-24" ng-if="cluster.properties.length > 0"
+    ng-repeat="property in cluster.properties">
+    <label>{{property.key}}</label>:<span> {{property.value}}</span>
+  </div>
+
+  <h5 class="col-sm-24">
+    Locations
+  </h5>
+
+  <div class="col-sm-24" ng-repeat="location in cluster.locations">
+    <label>{{capitalize(location.name)}}</label>:<span> {{location.path}}</span>
+  </div>
+</div>
diff --git a/falcon-ui/app/html/dataset/datasetFormGeneralStepTpl.html b/falcon-ui/app/html/dataset/datasetFormGeneralStepTpl.html
index 458a25b..bb0d7a7 100644
--- a/falcon-ui/app/html/dataset/datasetFormGeneralStepTpl.html
+++ b/falcon-ui/app/html/dataset/datasetFormGeneralStepTpl.html
@@ -19,700 +19,774 @@
 -->
 <form id="formGeneralBox"
       name="datasetForm"
-      class="col-xs-24"
       novalidate>
 
-  <div class="row">
-    <div class="col-xs-24">
-      <label class="db"> Mirror Name
-        <input type="text"
-               name="nameInput"
-               class="form-control"
-               ng-model="UIModel.name"
-               placeholder=""
-               ng-disabled="!cloningMode"
-               ng-pattern="validations.patterns.name"
-               ng-required="true"
-               check-name="{type:'process', check:clone}"/>
-      </label>
-    </div>
+  <div class="col-xs-8">
+    <label class="light" tooltip="dataset.name">Mirror Name<mandatory-field></mandatory-field></label>
+    <input type="text"
+           name="nameInput"
+           class="form-control"
+           ng-model="UIModel.name"
+           placeholder=""
+           ng-disabled="editingMode"
+           ng-pattern="validations.patterns.name"
+           ng-required="true"
+           check-name="{type:'process', check:!editingMode}"/>
+    </label>
+  </div>
 
-    <div class="col-xs-24 tagsBox mt10">
-      <label class="db">Tags
-
-        <div class="row mb10">
-          <div class="col-xs-10">
-            <input type="text"
-                   name="newTagKeyInput"
-                   class="form-control"
-                   ng-model="UIModel.tags.newTag.key"
-                   placeholder="key"
-                   ng-pattern="validations.patterns.alpha"
-                   ng-required="UIModel.tags.newTag.value"
-                   validation-optional-message="{{validations.messages.key}}"/>
+  <div class="col-xs-24 tagsBox plr0px">
+    <label class="col-xs-24 light">Tags</label>
+    <div class="col-xs-12">
+      <div ng-repeat="tag in UIModel.tags">
+        <div class="row dynamic-table-spacer">
+          <div class="col-xs-8">
+            <input type="text" class="form-control" ng-model="tag.key"
+              validation-optional-message="{{validations.messages.key}}"
+                ng-pattern="validations.patterns.alpha" ng-required="tag.value" placeholder="key"/>
           </div>
-          <div class="col-xs-10">
-            <input type="text"
-                   name="newTagValueInput"
-                   class="form-control"
-                   ng-model="UIModel.tags.newTag.value"
-                   placeholder="value"
-                   ng-pattern="validations.patterns.alpha"
-                   ng-required="UIModel.tags.newTag.key"
-                   validation-optional-message="{{validations.messages.value}}"/>
+          <div class="col-xs-8">
+            <input type="text" class="form-control" validation-optional-message="{{validations.messages.value}}"
+                ng-model="tag.value" ng-pattern="validations.patterns.alpha"
+                ng-required="tag.key" placeholder="value"/>
           </div>
-          <div class="col-xs-4">
-            <button type="button"
-                    class="btn btn-default btn-xs"
-                    ng-click="addTag()"
-                    ng-disabled="!UIModel.tags.newTag.key || !UIModel.tags.newTag.value"
-                    ng-disabled="false">
-              <span class="glyphicon glyphicon-plus"></span> add tag
+          <div class="col-xs-8">
+            <button type="button" class="btn btn-default btn-xs" ng-click="removeTag($index)" ng-if="!$first || !$last">
+              <span class="entypo minus"></span> delete
+            </button>
+            <button type="button" class="btn btn-default btn-xs" ng-click="addTag()" ng-if="$last">
+              <span class="entypo plus"></span> add tag
             </button>
           </div>
         </div>
-
-        <div ng-repeat="tag in UIModel.tags.tagsArray" class="row">
-          <div class="col-xs-10">
-            <h6>{{tag.key}}</h6>
-          </div>
-          <div class="col-xs-10">
-            <h6>{{tag.value}}</h6>
-          </div>
-          <div class="col-xs-4" ng-if="tag.key !== '_falcon_mirroring_type'">
-            <button type="button"
-                    class="btn btn-default btn-xs"
-                    ng-click="removeTag($index)"
-                    ng-disabled="false">
-              <span class="glyphicon glyphicon-minus"></span> delete
-            </button>
-          </div>
-        </div>
-
-      </label>
-    </div>
-  </div>
-  <div class="row">
-    <div class="col-xs-24 mt10">
-      <label class="db">Mirror type
-        <div class="typeButtonsBox">
-          <button type="button"
-                  ng-class="{active:UIModel.formType === 'HDFS'}"
-                  class="btn btn-default btn-xs"
-                  ng-click="switchModel('HDFS')">
-            File System
-          </button>
-          <button type="button"
-                  ng-class="{active:UIModel.formType === 'HIVE'}"
-                  class="btn btn-default btn-xs"
-                  ng-click="switchModel('HIVE')">
-            HIVE(catalog Storage)
-          </button>
-        </div>
-      </label>
+      </div>
     </div>
   </div>
 
-  <div class="row">
-    <div class="col-xs-24 clusterBox">
-      <h3>Source</h3>
-      <div class="runJobOnBox">
-        <input type="radio"
-               id="runJobOnSourceRadio"
-               ng-model="UIModel.runOn",
-               value="source"
-               ng-required="true"
-               ng-disabled="UIModel.source.location !== 'HDFS'"/>
-        Run job here
-      </div>
-
-      <div class="locationBox" ng-if="UIModel.formType === 'HDFS'">
-        <label class="db">Location:
-          <span>
-            <input type="radio"
-                   ng-change="checkFromSource()"
-                   id="sourceHDFSRadio"
-                   ng-model="UIModel.source.location"
-                   value="HDFS"
-                   ng-required="!UIModel.source.location"/> HDFS
-          </span>
-          <span ng-if="UIModel.target.location === 'HDFS'">
-            <input type="radio"
-                   ng-change="checkFromSource()"
-                   id="sourceAzureRadio"
-                   ng-model="UIModel.source.location"
-                   value="azure"
-                   ng-required="!UIModel.source.location"/> Azure
-          </span>
-          <span ng-if="UIModel.target.location === 'HDFS'">
-            <input type="radio"
-                   ng-change="checkFromSource()"
-                   id="sourceS3Radio"
-                   ng-model="UIModel.source.location"
-                   value="s3"
-                   ng-required="!UIModel.source.location"/> S3
-          </span>
-
-        </label>
-      </div>
-
-      <div>
-        <select ng-if="UIModel.source.location === 'HDFS' || UIModel.formType === 'HIVE'"
-                ng-model="UIModel.source.cluster"
-                name="sourceClusterSelect"
-                ng-change="getSourceDefinition()"
-                ng-required="UIModel.source.location === 'HDFS' || UIModel.formType === 'HIVE'"
-                class="col-xs-24 form-control"
-                id="sourceClusterSelect">
-
-          <option value="" disabled style='display:none;'>-Select cluster-</option>
-          <option ng-selected="UIModel.source.cluster === cluster.name"
-                  ng-repeat="cluster in clustersList"
-                  value="{{cluster.name}}">
-            {{cluster.name}}
-          </option>
-        </select>
-      </div>
-
-      <div ng-if="UIModel.source.location === 'azure' && UIModel.formType === 'HDFS'">
-        <label class="db">Base URL
-          <input type="text"
-                 name="sourceClusterUrlInput"
-                 class="form-control"
-                 ng-model="UIModel.source.url"
-                 placeholder="URL"
-                 ng-pattern="validations.patterns.azure"
-                 ng-required="UIModel.source.location === 'azure'"
-                 validation-message="{{validations.messages.azure}}" />
-        </label>
-      </div>
-      <div ng-if="UIModel.source.location === 's3' && UIModel.formType === 'HDFS'">
-        <label class="db">Base URL
-          <input type="text"
-                 name="sourceClusterUrlInput"
-                 class="form-control"
-                 ng-model="UIModel.source.url"
-                 placeholder="URL"
-                 ng-pattern="validations.patterns.s3"
-                 ng-required="UIModel.source.location === 's3'"
-                 validation-message="{{validations.messages.s3}}" />
-        </label>
-      </div>
-
-      <div ng-if="UIModel.formType === 'HDFS'">
-        <label class="db">Path
-          <input type="text"
-                 name="sourceClusterPathInput"
-                 class="form-control"
-                 ng-model="UIModel.source.path"
-                 placeholder="Path"
-                 ng-pattern="validations.patterns.osPath"
-                 ng-required="UIModel.source.location === 'HDFS' || UIModel.formType === 'HIVE'"
-                 validation-message="{{validations.messages.path}}"/>
-        </label>
-      </div>
-
-      <div ng-if="UIModel.formType === 'HIVE'">
-        <h5 class="hiveDatabasesTitol">I want to copy</h5>
-        <div class="databaseRadioBox">
+  <div class="col-xs-24 plr0px">
+    <div class="col-xs-12 plr0px">
+      <div class="col-xs-24 clusterBox plr0px">
+        <h3>Source</h3>
+        <div class="runJobOnBox">
           <input type="radio"
-                 id="targetHIVEDatabaseRadio"
-                 ng-model="UIModel.source.hiveDatabaseType"
-                 value="databases"
-                 ng-required="!UIModel.source.location"/> Entire databases
-          <input type="radio"
-                 id="targetHIVETablesRadio"
-                 ng-model="UIModel.source.hiveDatabaseType"
-                 value="tables"
-                 ng-required="!UIModel.source.hiveDatabaseType"/> Tables in a single database
+                 id="runJobOnSourceRadio"
+                 ng-model="UIModel.runOn"
+                 value="source"
+                 ng-required="true"
+                 ng-disabled="UIModel.source.location !== 'HDFS'"/>
+          Run job here
         </div>
 
-        <div ng-if="UIModel.source.hiveDatabaseType === 'databases'">
-          <label class="db">Databases (comma separated)
-            <textarea name="sourceDatabasesInput"
-                      class="form-control databasesTextArea"
-                      ng-model="UIModel.source.hiveDatabases"
-                      ng-pattern="validations.patterns.textarea"
-                      ng-required="UIModel.target.location === 'HDFS'"
-                      validation-message="{{validations.messages.databases}}"
-                      ng-keydown="validations.acceptNoSpaces($event)">
-            </textarea>
-          </label>
+        <div class="locationBox" ng-if="UIModel.type === 'HDFS'">
+          <div class="col-xs-5"><label class="light">Location</label></div>
+          <div class="col-xs-3"><label class="mt15 radio-inline">
+              <input type="radio"
+                     ng-change="checkFromSource()"
+                     id="sourceHDFSRadio"
+                     ng-model="UIModel.source.location"
+                     value="HDFS"
+                     ng-required="!UIModel.source.location"/> HDFS
+              </label>
+          </div>
+          <div class="col-xs-3"><label class="mt15 radio-inline">
+              <input type="radio"
+                     ng-change="checkFromSource()"
+                     id="sourceAzureRadio"
+                     ng-model="UIModel.source.location"
+                     value="azure"
+                     ng-required="!UIModel.source.location"/> Azure
+              </label>
+          </div>
+          <div class="col-xs-1"><label class="mt15 radio-inline">
+              <input type="radio"
+                     ng-change="checkFromSource()"
+                     id="sourceS3Radio"
+                     ng-model="UIModel.source.location"
+                     value="s3"
+                     ng-required="!UIModel.source.location"/> S3
+              </label>
+          </div>
         </div>
-        <div ng-if="UIModel.source.hiveDatabaseType === 'tables'">
-          <label class="db">Database
+
+        <div class="col-xs-24" ng-if="UIModel.source.location === 'HDFS' || UIModel.type === 'HIVE'">
+          <div class="col-xs-5 p0"><label class="light">Cluster<mandatory-field></mandatory-field></label></div>
+          <div class="col-xs-13 mt10">
+              <select ng-model="UIModel.source.cluster"
+                  name="sourceClusterSelect"
+                  ng-change="getSourceDefinition()"
+                  ng-required="UIModel.source.location === 'HDFS' || UIModel.type === 'HIVE'"
+                  class="form-control padding0"
+                  id="sourceClusterSelect">
+
+                <option value="" disabled style='display:none;'>-Select cluster-</option>
+                <option ng-selected="UIModel.source.cluster === cluster.name"
+                        ng-repeat="cluster in clustersList"
+                        value="{{cluster.name}}">
+                  {{cluster.name}}
+                </option>
+              </select>
+          </div>
+        </div>
+
+        <div class="col-xs-24" ng-if="UIModel.source.location === 'azure' && UIModel.type === 'HDFS'">
+          <div class="col-xs-5 p0"><label class="light">Base URL<mandatory-field></mandatory-field></label></div>
+          <div class="col-xs-13 mt10">
             <input type="text"
-                   name="sourceDatabaseInput"
+                   name="sourceClusterUrlInput"
                    class="form-control"
-                   ng-model="UIModel.source.hiveDatabase"
-                   ng-pattern="validations.patterns.textarea"
+                   ng-model="UIModel.source.url"
+                   placeholder="URL"
+                   ng-pattern="validations.patterns.azure"
+                   ng-required="UIModel.source.location === 'azure'"
+                   validation-message="{{validations.messages.azure}}" />
+          </div>
+        </div>
+        <div class="col-xs-24" ng-if="UIModel.source.location === 's3' && UIModel.type === 'HDFS'">
+          <div class="col-xs-5 p0"><label class="light">Base URL<mandatory-field></mandatory-field></label></div>
+          <div class="col-xs-13 mt10">
+            <input type="text"
+                   name="sourceClusterUrlInput"
+                   class="form-control"
+                   ng-model="UIModel.source.url"
+                   placeholder="URL"
+                   ng-pattern="validations.patterns.s3"
+                   ng-required="UIModel.source.location === 's3'"
+                   validation-message="{{validations.messages.s3}}" />
+          </div>
+        </div>
+
+        <div class="col-xs-24" ng-if="UIModel.type === 'HDFS'">
+          <div class="col-xs-5 p0"><label class="light">Path<mandatory-field></mandatory-field></label></div>
+          <div class="col-xs-13 mt10">
+            <input type="text"
+                   name="sourceClusterPathInput"
+                   class="form-control"
+                   ng-model="UIModel.source.path"
+                   placeholder="Path"
+                   ng-pattern="validations.patterns.osPath"
+                   ng-required="UIModel.source.location === 'HDFS' || UIModel.type === 'HIVE'"
+                   validation-message="{{validations.messages.path}}"/>
+          </div>
+        </div>
+
+        <div class="col-xs-24" ng-if="UIModel.type === 'HIVE'">
+          <div class="col-xs-5 p0">
+            <label class="light" tooltip="dataset.sourceHiveServer2Uri">HiveServer2 endpoint</label>
+          </div>
+          <div class="col-xs-13 mt10">
+            <input type="text"
+                   name="sourceHiveServerInput"
+                   ng-model="UIModel.hiveOptions.source.hiveServerToEndpoint"
+                   class="form-control"
+                   validation-optional-message="{{validations.messages.path}}" />
+          </div>
+        </div>
+
+        <div class="col-xs-24 mt5" ng-if="UIModel.type === 'HIVE'">
+          <div class="col-xs-5 p0">
+            <label class="light">I want to copy<mandatory-field></mandatory-field></label>
+          </div>
+          <div class="col-xs-4"><label class="mt15 radio-inline">
+              <input type="radio"
+                   id="targetHIVEDatabaseRadio"
+                   ng-model="UIModel.source.hiveDatabaseType"
+                   value="databases"
+                   ng-required="!UIModel.source.location"/>Entire databases
+            </label>
+          </div>
+          <div><label class="mt15 radio-inline">
+              <input type="radio"
+                   id="targetHIVETablesRadio"
+                   ng-model="UIModel.source.hiveDatabaseType"
+                   value="tables"
+                   ng-required="!UIModel.source.hiveDatabaseType"/>
+              Tables in a single database
+            </label>
+          </div>
+
+          <div class="col-xs-24 mt5 plr0px">
+              <div class="col-xs-13 col-xs-offset-5" ng-if="UIModel.source.hiveDatabaseType === 'databases'">
+                <label class="col-xs-24 p0 light" tooltip="dataset.sourceDatabases">Databases (comma separated)<mandatory-field></mandatory-field></label>
+                <textarea name="sourceDatabasesInput"
+                          class="form-control databasesTextArea"
+                          ng-model="UIModel.source.hiveDatabases"
+                          ng-pattern="validations.patterns.hiveDatabases"
+                          ng-required="UIModel.target.location === 'HDFS'"
+                          validation-message="{{validations.messages.databases}}"
+                          ng-keydown="validations.acceptNoSpaces($event)">
+                </textarea>
+              </div>
+              <div class="col-xs-13 col-xs-offset-5" ng-if="UIModel.source.hiveDatabaseType === 'tables'">
+                <label class="col-xs-24 p0 light">Database<mandatory-field></mandatory-field></label>
+                <input type="text"
+                       name="sourceDatabaseInput"
+                       class="form-control"
+                       ng-model="UIModel.source.hiveDatabases"
+                       ng-pattern="validations.patterns.hiveDatabase"
+                       ng-required="UIModel.target.location === 'HDFS'"
+                       validation-message="{{validations.messages.database}}"
+                       ng-keydown="validations.acceptNoSpaces($event)"/>
+                <label class="col-xs-24 p0 light" tooltip="dataset.sourceTables">Tables (comma separated)<mandatory-field></mandatory-field></label>
+                <textarea name="sourceTablesInput"
+                          class="form-control tablesTextArea"
+                          ng-model="UIModel.source.hiveTables"
+                          ng-pattern="validations.patterns.hiveTables"
+                          ng-required="UIModel.target.location === 'HDFS'"
+                          validation-message="{{validations.messages.tables}}"
+                          ng-keydown="validations.acceptNoSpaces($event)">
+                  </textarea>
+              </div>
+          </div>
+        </div>
+
+        <div class="col-xs-24" ng-if="UIModel.type === 'HIVE' && secureMode === true">
+          <div class="col-xs-5 p0">
+            <label class="light" tooltip="dataset.sourceHive2KerberosPrincipal">Hive2 Kerberos Principal<mandatory-field></mandatory-field></label>
+          </div>
+          <div class="col-xs-13 mt10">
+            <input type="text"
+                   name="sourceHive2KerberosPrincipal"
+                   class="form-control"
+                   ng-model="UIModel.source.hive2KerberosPrincipal"
+                   placeholder="Source Metastore URI"
+                   ng-pattern="validations.patterns.kerberosPrincipal"
+                   ng-required="UIModel.type === 'HIVE'"
+                   validation-message="{{validations.messages.kerberosPrincipal}}" />
+          </div>
+        </div>
+        <div class="col-xs-24" ng-if="UIModel.type === 'HIVE' && secureMode === true">
+          <div class="col-xs-5 p0">
+            <label class="light">Meta Store URI<mandatory-field></mandatory-field></label>
+          </div>
+          <div class="col-xs-13 mt10">
+            <input type="text"
+                   name="sourceMetastoreUri"
+                   class="form-control"
+                   ng-model="UIModel.source.hiveMetastoreUri"
+                   placeholder="Source Metastore URI"
+                   ng-pattern="validations.patterns.metastoreUri"
+                   ng-required="UIModel.type === 'HIVE'"
+                   validation-message="{{validations.messages.metastoreUri}}" />
+          </div>
+        </div>
+        <div class="col-xs-24" ng-if="UIModel.type === 'HIVE' && secureMode === true">
+          <div class="col-xs-5 p0">
+            <label class="light">Kerberos Principal<mandatory-field></mandatory-field></label>
+          </div>
+          <div class="col-xs-13 mt10">
+            <input type="text"
+                   name="sourceMetastoreKerberosPrincipal"
+                   class="form-control"
+                   ng-model="UIModel.source.hiveMetastoreKerberosPrincipal"
+                   placeholder="Kerberos Principal"
+                   ng-pattern="validations.patterns.kerberosPrincipal"
+                   ng-required="UIModel.type === 'HIVE'"
+                   validation-message="{{validations.messages.kerberosPrincipal}}" />
+          </div>
+        </div>
+
+      </div>
+    </div>
+
+    <div class="col-xs-12 plr0px pl5">
+      <div class="col-xs-24 plr0px clusterBox">
+        <h3>Target</h3>
+        <div class="runJobOnBox">
+          <input type="radio"
+                 id="runJobOnTargetRadio"
+                 ng-model="UIModel.runOn"
+                 value="target"
+                 ng-required="true"
+                 ng-disabled="UIModel.target.location !== 'HDFS'"/>
+          Run job here
+        </div>
+        <div class="locationBox" ng-if="UIModel.type === 'HDFS'">
+          <div class="col-xs-5"><label class="light">Location</label></div>
+          <div class="col-xs-3"><label class="mt15 radio-inline">
+              <input type="radio"
+                     ng-change="checkFromTarget()"
+                     id="targetHDFSRadio"
+                     ng-model="UIModel.target.location"
+                     value="HDFS"
+                     ng-required="!UIModel.target.location"/> HDFS
+                </label>
+          </div>
+          <div class="col-xs-3"><label class="mt15 radio-inline">
+              <input type="radio"
+                     ng-change="checkFromTarget()"
+                     id="targetAzureRadio"
+                     ng-model="UIModel.target.location"
+                     value="azure"
+                     ng-required="!UIModel.target.location"/> Azure
+                </label>
+          </div>
+          <div class="col-xs-1"><label class="mt15 radio-inline">
+              <input type="radio"
+                     ng-change="checkFromTarget()"
+                     id="targetS3Radio"
+                     ng-model="UIModel.target.location"
+                     value="S3"
+                     ng-required="!UIModel.target.location"/> S3
+                </label>
+          </div>
+        </div>
+
+        <div class="col-xs-24" ng-if="UIModel.target.location === 'HDFS' || UIModel.type === 'HIVE'">
+          <div class="col-xs-5 p0">
+            <label class="light">Cluster<mandatory-field></mandatory-field></label>
+          </div>
+          <div class="col-xs-13 mt10">
+              <select ng-model="UIModel.target.cluster"
+                  ng-change="getTargetDefinition()"
+                  name="targetClusterSelect"
+                  ng-required="UIModel.target.location === 'HDFS' || UIModel.type === 'HIVE'"
+                  class="col-xs-24 form-control padding0"
+                  id="targetClusterSelect">
+                <option value="" disabled selected style='display:none;'>-Select cluster-</option>
+                <option ng-selected="UIModel.target.cluster === clusterItem.name"
+                        ng-repeat="clusterItem in clustersList"
+                        value="{{clusterItem.name}}">
+                  {{clusterItem.name}}
+                </option>
+              </select>
+              <div class="custom-danger" ng-show="clusterErrorMessage != ''">
+                {{clusterErrorMessage}}
+              </div>
+          </div>
+        </div>
+
+        <div class="col-xs-24" ng-if="UIModel.type === 'HIVE'">
+          <div class="col-xs-5 p0">
+            <label class="light" tooltip="dataset.targetHiveServer2Uri">HiveServer2 endpoint</label>
+          </div>
+          <div class="col-xs-13 mt10">
+            <input type="text"
+                   name="targetHiveServerInput"
+                   ng-model="UIModel.hiveOptions.target.hiveServerToEndpoint"
+                   class="form-control"
+                   validation-optional-message="{{validations.messages.path}}" />
+          </div>
+        </div>
+
+        <div class="col-xs-24" ng-if="UIModel.type === 'HIVE'&& secureMode === true">
+          <div class="col-xs-5 p0">
+            <label class="light" tooltip="dataset.targetHive2KerberosPrincipal">Hive2 Kerberos Principal<mandatory-field></mandatory-field></label>
+          </div>
+          <div class="col-xs-13 mt10">
+            <input type="text"
+                   name="targetHive2KerberosPrincipal"
+                   class="form-control"
+                   ng-model="UIModel.target.hive2KerberosPrincipal"
+                   placeholder="Hive2 Kerberos Principal"
+                   ng-pattern="validations.patterns.kerberosPrincipal"
+                   ng-required="UIModel.type === 'HIVE'"
+                   validation-message="{{validations.messages.kerberosPrincipal}}" />
+          </div>
+        </div>
+        <div class="col-xs-24" ng-if="UIModel.type === 'HIVE'&& secureMode === true">
+          <div class="col-xs-5 p0"><label class="light">Meta Store URI<mandatory-field></mandatory-field></label></div>
+          <div class="col-xs-13 mt10">
+            <input type="text"
+                   name="targetMetastoreUri"
+                   class="form-control"
+                   ng-model="UIModel.target.hiveMetastoreUri"
+                   placeholder="Target Metastore URI"
+                   ng-pattern="validations.patterns.metastoreUri"
+                   ng-required="UIModel.type === 'HIVE'"
+                   validation-message="{{validations.messages.metastoreUri}}" />
+          </div>
+        </div>
+        <div class="col-xs-24" ng-if="UIModel.type === 'HIVE' && secureMode === true">
+          <div class="col-xs-5 p0">
+            <label class="light">Kerberos Principal<mandatory-field></mandatory-field></label>
+          </div>
+          <div class="col-xs-13 mt10">
+            <input type="text"
+                   name="targetMetastoreKerberosPrincipal"
+                   class="form-control"
+                   ng-model="UIModel.target.hiveMetastoreKerberosPrincipal"
+                   placeholder="Kerberos Principal"
+                   ng-pattern="validations.patterns.kerberosPrincipal"
+                   ng-required="UIModel.type === 'HIVE'"
+                   validation-message="{{validations.messages.kerberosPrincipal}}" />
+          </div>
+        </div>
+
+        <div class="col-xs-24" ng-if="UIModel.target.location === 'azure' && UIModel.type === 'HDFS'">
+          <div class="col-xs-5 p0"><label class="light">Base URL<mandatory-field></mandatory-field></label></div>
+          <div class="col-xs-13 mt10">
+            <input type="text"
+                   name="targetClusterUrlInput"
+                   class="form-control"
+                   ng-model="UIModel.target.url"
+                   placeholder="URL"
+                   ng-pattern="validations.patterns.azure"
+                   ng-required="UIModel.target.location === 'azure'"
+                   validation-message="{{validations.messages.azure}}"/>
+          </div>
+        </div>
+        <div class="col-xs-24" ng-if="UIModel.target.location === 'S3' && UIModel.type === 'HDFS'">
+          <div class="col-xs-5 p0"><label class="light">Base URL<mandatory-field></mandatory-field></label></div>
+          <div class="col-xs-13 mt10">
+            <input type="text"
+                   name="targetClusterUrlInput"
+                   class="form-control"
+                   ng-model="UIModel.target.url"
+                   placeholder="URL"
+                   ng-pattern="validations.patterns.s3"
+                   ng-required="UIModel.target.location === 'S3'"
+                   validation-message="{{validations.messages.s3}}"/>
+          </div>
+        </div>
+
+        <div class="col-xs-24" ng-if="UIModel.type === 'HDFS'">
+          <div class="col-xs-5 p0"><label class="light">Path<mandatory-field></mandatory-field></label></div>
+          <div class="col-xs-13 mt10">
+            <input type="text"
+                   name="targetClusterPathInput"
+                   class="form-control"
+                   ng-model="UIModel.target.path"
+                   placeholder="Path"
+                   ng-pattern="validations.patterns.osPath"
                    ng-required="UIModel.target.location === 'HDFS'"
-                   validation-message="{{validations.messages.database}}"
-                   ng-keydown="validations.acceptNoSpaces($event)"/>
-          </label>
-          <label class="db">Tables (comma separated)
-            <textarea name="sourceTablesInput"
-                      class="form-control tablesTextArea"
-                      ng-model="UIModel.source.hiveTables"
-                      ng-pattern="validations.patterns.textarea"
-                      ng-required="UIModel.target.location === 'HDFS'"
-                      validation-message="{{validations.messages.tables}}"
-                      ng-keydown="validations.acceptNoSpaces($event)">
-            </textarea>
-          </label>
+                   validation-message="{{validations.messages.path}}"/>
+          </div>
         </div>
       </div>
-
-    </div>
-
-    <div class="col-xs-24 clusterBox">
-      <h3>Target</h3>
-      <div class="runJobOnBox">
-        <input type="radio"
-               id="runJobOnTargetRadio"
-               ng-model="UIModel.runOn"
-               value="target"
-               ng-required="true"
-               ng-disabled="UIModel.target.location !== 'HDFS'"/>
-        Run job here
-      </div>
-
-      <div class="locationBox" ng-if="UIModel.formType === 'HDFS'">
-        <label class="db">Location:
-
-          <input type="radio"
-                 ng-change="checkFromTarget()"
-                 id="targetHDFSRadio"
-                 ng-model="UIModel.target.location"
-                 value="HDFS"
-                 ng-required="!UIModel.target.location"/> HDFS
-          <span ng-if="UIModel.source.location === 'HDFS'">
-            <input type="radio"
-                   ng-change="checkFromTarget()"
-                   id="targetAzureRadio"
-                   ng-model="UIModel.target.location"
-                   value="azure"
-                   ng-required="!UIModel.target.location"/> Azure
-          </span>
-          <span ng-if="UIModel.source.location === 'HDFS'">
-            <input type="radio"
-                   ng-change="checkFromTarget()"
-                   id="targetS3Radio"
-                   ng-model="UIModel.target.location"
-                   value="S3"
-                   ng-required="!UIModel.target.location"/> S3
-          </span>
-        </label>
-      </div>
-
-      <div>
-        <select ng-if="UIModel.target.location === 'HDFS' || UIModel.formType === 'HIVE'"
-                ng-model="UIModel.target.cluster"
-                ng-change="getTargetDefinition()"
-                name="targetClusterSelect"
-                ng-required="UIModel.target.location === 'HDFS' || UIModel.formType === 'HIVE'"
-                class="col-xs-24 form-control"
-                id="targetClusterSelect">
-          <option value="" disabled selected style='display:none;'>-Select cluster-</option>
-          <option ng-selected="UIModel.target.cluster === clusterItem.name"
-                  ng-repeat="clusterItem in clustersList"
-                  value="{{clusterItem.name}}">
-            {{clusterItem.name}}
-          </option>
-        </select>
-      </div>
-
-      <div ng-if="UIModel.target.location === 'azure' && UIModel.formType === 'HDFS'">
-        <label class="db">Base URL
-          <input type="text"
-                 name="targetClusterUrlInput"
-                 class="form-control"
-                 ng-model="UIModel.target.url"
-                 placeholder="URL"
-                 ng-pattern="validations.patterns.azure"
-                 ng-required="UIModel.target.location === 'azure'"
-                 validation-message="{{validations.messages.azure}}"/>
-        </label>
-      </div>
-      <div ng-if="UIModel.target.location === 'S3' && UIModel.formType === 'HDFS'">
-        <label class="db">Base URL
-          <input type="text"
-                 name="targetClusterUrlInput"
-                 class="form-control"
-                 ng-model="UIModel.target.url"
-                 placeholder="URL"
-                 ng-pattern="validations.patterns.s3"
-                 ng-required="UIModel.target.location === 'S3'"
-                 validation-message="{{validations.messages.s3}}"/>
-        </label>
-      </div>
-
-      <div ng-if="UIModel.formType === 'HDFS'">
-        <label class="db">Path
-          <input type="text"
-                 name="targetClusterPathInput"
-                 class="form-control"
-                 ng-model="UIModel.target.path"
-                 placeholder="Path"
-                 ng-pattern="validations.patterns.osPath"
-                 ng-required="UIModel.target.location === 'HDFS'"
-                 validation-message="{{validations.messages.path}}"/>
-        </label>
-      </div>
-
     </div>
   </div>
 
-  <div class="row">
-    <div class="col-xs-24 validityBox">
-      <h4>Validity </h4>
-      <div class="startDateBox">
-        <label>Start
-          <input type="text"
-                 name="startDateInput"
-                 class="form-control dateInput"
-                 placeholder="mm/dd/yyyy"
-                 datepicker-popup="{{dateFormat}}"
-                 ng-model="UIModel.validity.start"
-                 is-open="$parent.startOpened"
-                 ng-click="openStartDatePicker($event)"
-                 ng-change="constructDate()"
-                 ng-required="true"
-                 simple-date>
-        </label>
-      </div>
-      <div class="startTimeBox">
-        <label>Time
-          <timepicker ng-change="constructDate()"
-                      ng-model="UIModel.validity.startTime"
-                      hour-step="1"
-                      minute-step="1"
-                      show-meridian="true">
-          </timepicker>
-        </label>
-      </div>
-      <div class="endDateBox">
-        <label>End
-          <input type="text"
-                 name="startDateInput"
-                 class="form-control dateInput"
-                 placeholder="mm/dd/yyyy"
-                 datepicker-popup="{{dateFormat}}"
-                 ng-model="UIModel.validity.end"
-                 is-open="$parent.endOpened"
-                 ng-click="openEndDatePicker($event)"
-                 ng-change="constructDate()"
-                 min-date="UIModel.validity.start"
-                 ng-required="true"
-                 simple-date>
-        </label>
-      </div>
-      <div class="endTimeBox">
-        <label>Time
-          <timepicker ng-change="constructDate()"
-                      ng-model="UIModel.validity.endTime"
-                      hour-step="1"
-                      minute-step="1"
-                      show-meridian="true">
-          </timepicker>
-        </label>
-      </div>
-      <div class="tzBox">
-        <label> &nbsp;
-          <time-zone-select
-                  ng-model="UIModel.validity.tz"
-                  class="">
-          </time-zone-select>
-          </label>
+  <div class="col-xs-24 plr0px">
+    <div class="col-xs-12 plr0px clusterBoxEndLine">
+    </div>
+    <div class="col-xs-12 plr0px pl5">
+      <div class="col-xs-24 plr0px clusterBoxEndLine">
       </div>
     </div>
   </div>
 
-  <div class="row">
-    <div class="col-xs-24 alertsBox">
+    <div class="col-xs-24"><label class="mt15">Validity</label></div>
+    <div class="col-xs-24 validityBox plr0px">
+      <div class="col-xs-24 plr0px">
+        <div class="startDateBox col-xs-4">
+          <label class="light">Start<mandatory-field></mandatory-field></label>
+          <input type="text"
+            name="startDateInput"
+            class="form-control dateInput"
+            placeholder="{{dateFormat | lowercase}}"
+            ng-model="UIModel.validity.start.date"
+            ng-required="true"
+            simple-date-picker />
+        </div>
+        <div class="startTimeBox col-xs-4">
+          <label class="light">Begin Time<mandatory-field></mandatory-field></label>
+          <timepicker ng-change="constructDate()"
+                      ng-model="UIModel.validity.start.time"
+                      ng-required="true"
+                      hour-step="1"
+                      minute-step="1"
+                      show-meridian="true">
+          </timepicker>
+        </div>
+      </div>
+      <div class="col-xs-24 plr0px">
+        <div class="endDateBox col-xs-4">
+          <label class="light">End<mandatory-field></mandatory-field></label>
+          <input type="text"
+            name="startDateInput"
+            class="form-control dateInput"
+            placeholder="{{dateFormat | lowercase}}"
+            ng-model="UIModel.validity.end.date"
+            ng-required="true"
+            simple-date-picker />
+        </div>
+        <div class="endTimeBox col-xs-4">
+          <label class="light">End Time<mandatory-field></mandatory-field></label>
+          <timepicker ng-change="constructDate()"
+                      ng-model="UIModel.validity.end.time"
+                      ng-required="true"
+                      hour-step="1"
+                      minute-step="1"
+                      show-meridian="true">
+          </timepicker>
+        </div>
+      </div>
+    </div>
+
+    <div class="frequencyBox">
+      <div class="col-xs-24">
+        <label>Frequency</label>
+      </div>
+      <div class="col-xs-24 plr0px">
+        <div class="col-xs-24">
+          <label class="light">Repeat Every</label>
+        </div>
+        <div class="col-xs-2">
+          <input type="text"
+                 name="frequencyQuantity"
+                 ng-model="UIModel.frequency.quantity"
+                 ng-pattern="validations.patterns.twoDigits"
+                 ng-keydown="validations.acceptOnlyNumber($event)"
+                 ng-keyup="checkMininumFrequency(UIModel.frequency.quantity, UIModel.frequency.unit, datasetForm.frequencyQuantity)"
+                 class="form-control"
+                 ng-required="true"
+                 validation-optional-message="{{validations.messages.number}}" />
+        </div>
+        <div class="col-xs-6">
+          <select ng-model="UIModel.frequency.unit" class="form-control padding0" ng-required="true"
+            ng-change="checkMininumFrequency(UIModel.frequency.quantity, UIModel.frequency.unit, datasetForm.frequencyQuantity)">
+            <option selected value="minutes">minutes</option>
+            <option value="hours">hours</option>
+            <option value="days">days</option>
+            <option value="months">months</option>
+          </select>
+        </div>
+        <div class="col-xs-24 custom-danger" ng-if="!isFrequencyValid">{{validations.messages.frequency.minimum}}</div>
+      </div>
+    </div>
+
+    <div class="tzBox col-xs-8">
+      <label class="light">Timezone<mandatory-field></mandatory-field></label>
+      <time-zone-select ng-model="UIModel.validity.timezone"></time-zone-select>
+    </div>
+
+    <div class="col-xs-24">
+      <label class="light" tooltip="dataset.jobNotificationReceivers">Send alerts to</label>
+    </div>
+    <div class="col-xs-24 alertsBox plr0px">
       <div class="emailBox">
-        <label>
-          <h4>Send alerts to </h4>
+        <div class="col-xs-8">
           <input class="form-control"
                  name="emailAlertInput"
-                 ng-model="UIModel.alerts.alert.email"
+                 ng-model="UIModel.alert.email"
                  type="text"
                  placeholder="Email"
                  ng-pattern="validations.patterns.email"
-                 validation-optional-message="{{validations.messages.email}}">
-        </label>
+                 validation-message="{{validations.messages.email}}">
+        </div>
       </div>
-      <div class="addAlertBox">
+      <div class="addAlertBox col-xs-3">
         <button class="btn btn-default btn-xs"
-                ng-disabled="!UIModel.alerts.alert.email"
+                ng-disabled="!UIModel.alert.email"
                 type="button"
                 ng-click="addAlert()">
           <span class="glyphicon glyphicon-plus"></span>add alert
         </button>
       </div>
-
-      <div class="emailArrayRow" ng-repeat="email in UIModel.alerts.alertsArray">
-        <span>{{email}}</span>
-        <button class="btn btn-default btn-xs"
-                type="button"
-                ng-click="removeAlert()">
-          <span class="glyphicon glyphicon-minus"></span> delete
-        </button>
-      </div>
-
-    </div>
   </div>
 
-  <div class="row advancedOptionsButton" ng-click="expandOptions = !expandOptions">
-    <h4>Advanced options
-      <span class="entypo chevron-down" ng-if="!expandOptions"></span>
-      <span class="entypo chevron-up" ng-if="expandOptions"></span>
-      <hr />
-    </h4>
+  <div class="col-xs-24 emailArrayRow mt10 plr0px" ng-repeat="email in UIModel.alerts">
+    <span class="col-xs-8">{{email}}</span>
+    <div class="col-xs-3"><button class="btn btn-default btn-xs"
+            type="button"
+            ng-click="removeAlert()">
+      <span class="glyphicon glyphicon-minus"></span> delete
+    </button></div>
   </div>
 
-  <div id="advancedOptionsBox" ng-class="{expanded:expandOptions}">
-    <div class="frequencyBox">
-      <h4>Frequency</h4>
-      <label>Every</label>
-      <input type="text"
-             name="frequencyEveryInput"
-             ng-model="UIModel.frequency.number"
-             ng-pattern="validations.patterns.twoDigits"
-             ng-keydown="validations.acceptOnlyNumber($event)"
-             class="form-control"
-             validation-optional-message="{{validations.messages.number}}" />
+  <div class="col-xs-24 advancedOption" ng-click="expandOptions = !expandOptions">
+    <label class="pointer blink-success">Advanced Options</label>
+    <i class="glyphicon glyphicon-chevron-down mt15" ng-if="!expandOptions"></i>
+    <i class="glyphicon glyphicon-chevron-up mt15" ng-if="expandOptions"></i>
+  </div>
 
-      <select ng-model="UIModel.frequency.unit" class="form-control">
-        <option selected value="minutes">minutes</option>
-        <option value="hours">hours</option>
-        <option value="days">days</option>
-        <option value="months">months</option>
-      </select>
-    </div>
+  <div id="advancedOptionsBox" class="col-xs-24 plr0px" ng-class="{expanded:expandOptions}">
+    <div class="col-xs-24" ng-if="UIModel.type === 'HIVE'">
+		<label tooltip="dataset.tdeEncryptionEnabled">TDE Encryption</label>
+		<input type="checkbox" ng-model="UIModel.tdeEncryptionEnabled" ng-checked="UIModel.tdeEncryptionEnabled"/>
+	</div>
 
     <div class="allocationBox">
-      <h4>Allocation</h4>
-
-      <div ng-if="UIModel.formType === 'HDFS'">
-        <div>
-          <label>Max Maps for Distcp
-            <input type="text"
-                   name="maxMapsInput"
-                   ng-model="UIModel.allocation.hdfs.maxMaps"
-                   ng-pattern="validations.patterns.number"
-                   ng-keydown="validations.acceptOnlyNumber($event)"
-                   class="form-control"
-                   validation-optional-message="{{validations.messages.allocationNumber}}"/>
-          </label>
+      <div class="col-xs-24">
+        <label>Allocation</label>
+      </div>
+      <div class="col-xs-24 plr0px" ng-if="UIModel.type === 'HDFS'">
+        <div class="col-xs-6">
+          <label class="light" tooltip="dataset.distcpMaxMaps">Max Maps for Distcp</label>
+          <input type="text"
+                 name="maxMapsInput"
+                 ng-model="UIModel.allocation.hdfs.distcpMaxMaps"
+                 ng-pattern="validations.patterns.number"
+                 ng-keydown="validations.acceptOnlyNumber($event)"
+                 class="form-control"
+                 validation-optional-message="{{validations.messages.allocationNumber}}"/>
         </div>
-        <div>
-          <label>Max bandwidth (MB)
-            <input type="text"
-                   name="maxBandwidthInput"
-                   ng-model="UIModel.allocation.hdfs.maxBandwidth"
-                   ng-pattern="validations.patterns.number"
-                   ng-keydown="validations.acceptOnlyNumber($event)"
-                   class="form-control"
-                   validation-optional-message="{{validations.messages.allocationNumber}}" />
-          </label>
+        <div class="col-xs-6">
+          <label class="light" tooltip="dataset.distcpMapBandwidth">Max bandwidth (MB)</label>
+          <input type="text"
+                 name="maxBandwidthInput"
+                 ng-model="UIModel.allocation.hdfs.distcpMapBandwidth"
+                 ng-pattern="validations.patterns.number"
+                 ng-keydown="validations.acceptOnlyNumber($event)"
+                 class="form-control"
+                 validation-optional-message="{{validations.messages.allocationNumber}}" />
         </div>
       </div>
 
-      <div ng-if="UIModel.formType === 'HIVE'">
-        <div>
-          <label>Max Maps for Distcp
-            <input type="text"
-                   name="hiveMaxMapsInput"
-                   ng-model="UIModel.allocation.hive.maxMapsDistcp"
-                   ng-pattern="validations.patterns.number"
-                   ng-keydown="validations.acceptOnlyNumber($event)"
-                   class="form-control"
-                   validation-optional-message="{{validations.messages.allocationNumber}}"/>
-          </label>
+      <div class="col-xs-24 plr0px" ng-if="UIModel.type === 'HIVE'">
+        <div class="col-xs-6">
+          <label class="light" tooltip="dataset.distcpMaxMaps">Max Maps for Distcp</label>
+          <input type="text"
+                 name="hiveMaxMapsInput"
+                 ng-model="UIModel.allocation.hive.distcpMaxMaps"
+                 ng-pattern="validations.patterns.number"
+                 ng-keydown="validations.acceptOnlyNumber($event)"
+                 class="form-control"
+                 validation-optional-message="{{validations.messages.allocationNumber}}"/>
         </div>
-        <div>
-          <label>Max Maps for Mirror
-            <input type="text"
-                   name="maxBandwidthInput"
-                   ng-model="UIModel.allocation.hive.maxMapsMirror"
-                   ng-pattern="validations.patterns.number"
-                   ng-keydown="validations.acceptOnlyNumber($event)"
-                   class="form-control"
-                   validation-optional-message="{{validations.messages.allocationNumber}}" />
-          </label>
+        <div class="col-xs-6">
+          <label class="light" tooltip="dataset.replicationMaxMaps">Max Maps for Mirror</label>
+          <input type="text"
+                 name="maxMapsInput"
+                 ng-model="UIModel.allocation.hive.replicationMaxMaps"
+                 ng-pattern="validations.patterns.number"
+                 ng-keydown="validations.acceptOnlyNumber($event)"
+                 class="form-control"
+                 validation-optional-message="{{validations.messages.allocationNumber}}" />
         </div>
-        <div>
-          <label>Max Events
-            <input type="text"
-                   name="maxMapsEventsInput"
-                   ng-model="UIModel.allocation.hive.maxMapsEvents"
-                   ng-pattern="validations.patterns.number"
-                   ng-keydown="validations.acceptOnlyNumber($event)"
-                   class="form-control"
-                   validation-optional-message="{{validations.messages.allocationNumber}}" />
-          </label>
+        <div class="col-xs-6">
+          <label class="light" tooltip="dataset.maxEvents">Max Events</label>
+          <input type="text"
+                 name="maxEventsInput"
+                 ng-model="UIModel.allocation.hive.maxEvents"
+                 ng-pattern="validations.patterns.number"
+                 ng-keydown="validations.acceptOnlyNumber($event)"
+                 class="form-control"
+                 validation-optional-message="{{validations.messages.allocationNumber}}" />
         </div>
-        <div>
-          <label>Max bandwidth (MB)
-            <input type="text"
-                   name="maxBandwidthInput"
-                   ng-model="UIModel.allocation.hive.maxBandwidth"
-                   ng-pattern="validations.patterns.number"
-                   ng-keydown="validations.acceptOnlyNumber($event)"
-                   class="form-control"
-                   validation-optional-message="{{validations.messages.allocationNumber}}" />
-          </label>
+        <div class="col-xs-6">
+          <label class="light" tooltip="dataset.distcpMapBandwidth">Max bandwidth (MB)</label>
+          <input type="text"
+                 name="maxBandwidthInput"
+                 ng-model="UIModel.allocation.hive.distcpMapBandwidth"
+                 ng-pattern="validations.patterns.number"
+                 ng-keydown="validations.acceptOnlyNumber($event)"
+                 class="form-control"
+                 validation-optional-message="{{validations.messages.allocationNumber}}" />
         </div>
       </div>
-
     </div>
 
-    <div class="hiveOptBox" ng-if="UIModel.formType === 'HIVE'">
-      <h4>Source</h4>
+    <div class="hiveOptBox mt10 col-xs-24 plr0px" ng-if="UIModel.type === 'HIVE'">
+      <label class="col-xs-24">Source</label>
 
-      <label>Staging path
+      <label class="col-xs-24 light mt10">Staging path</label>
+      <div class="col-xs-8">
         <input type="text"
                name="sourceStagingPathInput"
                ng-model="UIModel.hiveOptions.source.stagingPath"
                ng-pattern="validations.patterns.path"
                class="form-control"
                validation-optional-message="{{validations.messages.path}}" />
-      </label>
-      <label>HiveServer2 endpoint
-        <input type="text"
-               name="sourceHiveServerInput"
-               ng-model="UIModel.hiveOptions.source.hiveServerToEndpoint"
-               ng-pattern="validations.patterns.path"
-               class="form-control"
-               validation-optional-message="{{validations.messages.path}}" />
-      </label>
+      </div>
 
-      <h4>Target</h4>
-      <label>Staging path
+      <label class="col-xs-24 mt15">Target</label>
+
+      <label class="col-xs-24 light mt10">Staging path</label>
+      <div class="col-xs-8">
         <input type="text"
                name="targetStagingPathInput"
                ng-model="UIModel.hiveOptions.target.stagingPath"
                ng-pattern="validations.patterns.path"
                class="form-control"
                validation-optional-message="{{validations.messages.path}}" />
-      </label>
-      <label>HiveServer2 endpoint
-        <input type="text"
-               name="targetHiveServerInput"
-               ng-model="UIModel.hiveOptions.target.hiveServerToEndpoint"
-               ng-pattern="validations.patterns.path"
-               class="form-control"
-               validation-optional-message="{{validations.messages.path}}" />
-      </label>
-    </div>
-
-    <div class="retryBox">
-      <h4>Retry</h4>
-
-      <div class="policyBox">
-        <label>Policy</label>
-        <select ng-model="UIModel.retry.policy"
-                class="form-control">
-          <option selected value="periodic">PERIODIC</option>
-          <option value="exp-backoff">EXPONENTIAL_BACKOFF</option>
-          <option value="final">FINAL</option>
-        </select>
-      </div>
-
-      <div>
-        <label>Delay</label>
-        <input type="text"
-               name="frequencyEveryInput"
-               ng-model="UIModel.retry.delay.number"
-               ng-pattern="validations.patterns.twoDigits"
-               ng-keydown="validations.acceptOnlyNumber($event)"
-               class="form-control"
-               validation-optional-message="{{validations.messages.number}}" />
-
-        <select ng-model="UIModel.retry.delay.unit"
-                class="form-control">
-          <option selected value="minutes">minutes</option>
-          <option value="hours">hours</option>
-          <option value="days">days</option>
-          <option value="months">months</option>
-        </select>
-      </div>
-
-      <div>
-        <label>Attempts</label>
-        <input type="text"
-               name="frequencyEveryInput"
-               ng-model="UIModel.retry.attempts"
-               ng-pattern="validations.patterns.twoDigits"
-               ng-keydown="validations.acceptOnlyNumber($event)"
-               class="form-control"
-               validation-optional-message="{{validations.messages.number}}" />
       </div>
     </div>
 
-    <div class="aclBox col-xs-24">
-      <h4>Access Control List</h4>
-      <div class="col-xs-8">
-        <label>Owner
+    <div class="col-xs-24 plr0px retryBox">
+      <label class="col-xs-24">Retry</label>
+
+      <div class="col-xs-6 policyBox pt5px mt5">
+        <label class="light">Policy</label>
+        <select ng-model="UIModel.retry.policy" ng-required="true"
+                class="form-control padding0" ng-change="policyChange()">
+              <option selected value="periodic">PERIODIC</option>
+              <option value="exp-backoff">EXPONENTIAL_BACKOFF</option>
+              <option value="final">FINAL</option>
+        </select>
+      </div>
+
+      <div class="col-xs-6 pt5px mt8">
+        <label class="col-xs-6 light plr0px">Delay</label>
+        <div class="col-xs-8 plr0px">
+          <input type="text"
+                 name="frequencyEveryInput"
+                 ng-model="UIModel.retry.delay.quantity"
+                 ng-pattern="validations.patterns.twoDigits"
+                 ng-keydown="validations.acceptOnlyNumber($event)"
+                 class="form-control"
+                 ng-disabled = "UIModel.retry.policy === 'final'"
+                 validation-optional-message="{{validations.messages.number}}" />
+        </div>
+        <div class="col-xs-16">
+          <select ng-model="UIModel.retry.delay.unit"
+                  class="form-control padding0" ng-disabled = "UIModel.retry.policy === 'final'">
+            <option selected value="minutes">minutes</option>
+            <option value="hours">hours</option>
+            <option value="days">days</option>
+            <option value="months">months</option>
+          </select>
+        </div>
+      </div>
+
+      <div class="col-xs-6 pt5px mt5">
+        <label class="light">Attempts</label>
+        <input type="text"
+           name="frequencyEveryInput"
+           ng-model="UIModel.retry.attempts"
+           ng-pattern="validations.patterns.twoDigits"
+           ng-keydown="validations.acceptOnlyNumber($event)"
+           class="form-control"
+           ng-disabled = "UIModel.retry.policy === 'final'"
+           validation-optional-message="{{validations.messages.number}}" />
+      </div>
+    </div>
+
+    <div class="col-xs-24 plr0px">
+      <label class="col-xs-24">Access Control List</label>
+      <div class="col-xs-24 plr0px">
+        <div class="col-xs-8">
+          <label class="light">Owner<mandatory-field></mandatory-field></label>
           <input type="text"
                  name="aclOwnerInput"
-                 ng-model="UIModel.acl.owner"
+                 ng-model="UIModel.ACL.owner"
                  ng-pattern="validations.patterns.unixId"
                  class="form-control"
                  ng-required="true"
                  validation-message="{{validations.messages.acl.owner}}"/>
-        </label>
-      </div>
-      <div class="col-xs-8">
-        <label>Group
+        </div>
+        <div class="col-xs-8 pl0px">
+          <label class="light">Group<mandatory-field></mandatory-field></label>
           <input type="text"
                  name="aclGroupInput"
-                 ng-model="UIModel.acl.group"
+                 ng-model="UIModel.ACL.group"
                  ng-pattern="validations.patterns.unixId"
                  class="form-control"
                  ng-required="true"
                  validation-message="{{validations.messages.acl.group}}" />
-        </label>
+        </div>
       </div>
-      <div class="col-xs-8">
-        <label>Permissions
-          <input type="text"
-                 name="aclPermissionsInput"
-                 ng-model="UIModel.acl.permissions"
-                 ng-pattern="validations.patterns.unixPermissions"
-                 class="form-control"
-                 ng-required="true"
-                 validation-message="{{validations.messages.acl.permission}}" />
-        </label>
+      <div class="col-xs-24">
+        <div class="col-xs-8 plr0px">
+          <label class="light">Permissions<mandatory-field></mandatory-field></label>
+          <acl-permissions acl-model="UIModel.ACL.permission"></acl-permissions>
+        </div>
       </div>
     </div>
 
-
-
-
-
   </div>
 
-
-  <div class="row">
-    <div class="col-xs-24 mt20">
-
-      <button class="btn nextBtn pull-right"
-              ng-disabled="buttonSpinners.show"
-              ng-click="goNext(datasetForm.$invalid, 'forms.dataset.summary')" >
-        Next <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
-      </button>
-      <a class="pull-right" ui-sref="main">
-        Cancel
+  <div class="col-xs-24 pb15px mt35">
+    <div class="pull-right">
+      <a class="btn cnclBtn" ui-sref="main">
+        CANCEL
       </a>
-
+      <button class="btn nextBtn"
+            ng-disabled="buttonSpinners.show"
+            ng-click="goNext(datasetForm.$invalid)" scroll-to-error>
+      NEXT <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
+      </button>
     </div>
   </div>
 
-
-
-
-
-
 </form>
diff --git a/falcon-ui/app/html/dataset/datasetFormSummaryStepTpl.html b/falcon-ui/app/html/dataset/datasetFormSummaryStepTpl.html
index 6d73af5..2b192cf 100644
--- a/falcon-ui/app/html/dataset/datasetFormSummaryStepTpl.html
+++ b/falcon-ui/app/html/dataset/datasetFormSummaryStepTpl.html
@@ -18,128 +18,215 @@
  */
 -->
 <div id="formSummaryBox" class="col-xs-24">
+  <h4>General</h4>
   <div>
-    <h4 class="lightSubtitle">Name</h4>
-    {{UIModel.name}}
+    <label>Name</label>:
+    <span>{{UIModel.name}}</span>
   </div>
   <div>
-    <h4 class="lightSubtitle">Type</h4>
-    {{UIModel.formType}}
-  </div>
-  <div>
-    <h4 class="lightSubtitle">Tags</h4>
-    <div ng-repeat="tag in UIModel.tags.tagsArray"><span>{{tag.key}}</span> - {{tag.value}}</div>
+    <label>Tags</label>:
+    <div ng-repeat="tag in UIModel.tags"><span>{{tag.key}}</span> - <span>{{tag.value}}</span></div>
   </div>
 
   <div>
-    <h4 class="lightSubtitle">Source</h4>
+    <h4>Source</h4>
   </div>
   <div class="box">
-    <h3 ng-if="UIModel.formType === 'HIVE' || UIModel.source.location === 'HDFS'">{{UIModel.source.cluster}}</h3>
+    <h3 ng-if="UIModel.type === 'HIVE' || UIModel.source.location === 'HDFS'">{{UIModel.source.cluster}}</h3>
+    <div ng-if="UIModel.type === 'HDFS'">
+      <label class="locationBox">Location</label>:
+      <span>{{UIModel.source.location}}</span>
+    </div>
+    <div ng-if="UIModel.type === 'HDFS'">
+      <label>Path</label>:
+      <span>{{UIModel.source.path}}</span></div>
+    <div ng-if="UIModel.type === 'HDFS' && UIModel.source.location !== 'HDFS'">
+      <label>URL</label>:
+      <span>{{UIModel.source.url}}</span>
+    </div>
 
-    <h4 ng-if="UIModel.formType === 'HDFS'">Location</h4>
-    <div ng-if="UIModel.formType === 'HDFS'">{{UIModel.source.location}}</div>
-    <div ng-if="UIModel.formType === 'HDFS'"><span>Path:</span> {{UIModel.source.path}}</div>
-    <div ng-if="UIModel.formType === 'HDFS' && UIModel.source.location !== 'HDFS'"><span>URL:</span>{{UIModel.source.url}}</div>
+    <div ng-if="UIModel.type === 'HIVE'">I want to copy <span>{{UIModel.source.hiveDatabaseType}}</span></div>
+    <div ng-if="UIModel.type === 'HIVE' && UIModel.source.hiveDatabaseType === 'databases'">
+      <label>Databases</label>:
+      <span>{{UIModel.source.hiveDatabases}}</span>
+    </div>
+    <div ng-if="UIModel.type === 'HIVE' && UIModel.source.hiveDatabaseType === 'tables'">
+      <label>From Database </label>
+      <span>{{UIModel.source.hiveDatabases}}</span>
+    </div>
+    <div ng-if="UIModel.type === 'HIVE' && UIModel.source.hiveDatabaseType === 'tables'">
+      <label>Tables</label>:
+      <span>{{UIModel.source.hiveTables}}</span>
+    </div>
 
+    <div ng-if="UIModel.type === 'HIVE'">
+      <label>HiveServer2 endpoint</label>:
+      <span>{{UIModel.hiveOptions.source.hiveServerToEndpoint}}</span>
+    </div>
 
+    <div ng-if="UIModel.type === 'HIVE'">
+      <label>Staging path</label>:
+      <span>{{UIModel.hiveOptions.source.stagingPath}}</span>
+    </div>
 
+    <div ng-if="UIModel.type === 'HIVE' && secureMode === true">
+      <label>Hive2 Kerberos Principal</label>:
+      <span>{{UIModel.source.hive2KerberosPrincipal}}</span>
+    </div>
 
+    <div ng-if="UIModel.type === 'HIVE' && secureMode === true">
+      <label>Meta Store URI</label>:
+      <span>{{UIModel.source.hiveMetastoreUri}}</span>
+    </div>
 
-    <div ng-if="UIModel.formType === 'HIVE'">I want to copy <span>{{UIModel.source.hiveDatabaseType}}</span></div>
-    <div ng-if="UIModel.formType === 'HIVE' && UIModel.source.hiveDatabaseType === 'databases'"><span>Databases:</span> {{UIModel.source.hiveDatabases}}</div>
-    <div ng-if="UIModel.formType === 'HIVE' && UIModel.source.hiveDatabaseType === 'tables'"><span>From Database </span>{{UIModel.source.hiveDatabase}}</div>
-    <div ng-if="UIModel.formType === 'HIVE' && UIModel.source.hiveDatabaseType === 'tables'"><span>Tables:</span> {{UIModel.source.hiveTables}}</div>
-
-
-
-
+    <div ng-if="UIModel.type === 'HIVE' && secureMode === true">
+      <label>Kerberos Principal</label>:
+      <span>{{UIModel.source.hiveMetastoreKerberosPrincipal}}</span>
+    </div>
   </div>
+
   <div>
-    <h4 class="lightSubtitle">Target</h4>
+    <h4>Target</h4>
   </div>
   <div class="box">
-    <h3 ng-if="(UIModel.formType === 'HDFS' && UIModel.target.location === 'HDFS') || UIModel.formType === 'HIVE'">{{UIModel.target.cluster}}</h3>
+    <h3 ng-if="(UIModel.type === 'HDFS' && UIModel.target.location === 'HDFS') || UIModel.type === 'HIVE'">
+      {{UIModel.target.cluster}}
+    </h3>
 
-    <h4 ng-if="UIModel.formType === 'HDFS'">Location</h4>
-    <div ng-if="UIModel.formType === 'HDFS'">{{UIModel.target.location}}</div>
-    <div ng-if="UIModel.formType === 'HDFS'"><span>Path:</span> {{UIModel.target.path}}</div>
-    <div ng-if="UIModel.formType === 'HDFS' && UIModel.target.location !== 'HDFS'"><span>URL:</span> {{UIModel.target.url}}</div>
+    <div ng-if="UIModel.type === 'HDFS'">
+      <label class="locationBox">Location</label>:
+      <span>{{UIModel.target.location}}</span>
+    </div>
+    <div ng-if="UIModel.type === 'HDFS'">
+      <label>Path</label>:
+      <span>{{UIModel.target.path}}</span>
+    </div>
+    <div ng-if="UIModel.type === 'HDFS' && UIModel.target.location !== 'HDFS'">
+      <label>URL:</label>:
+      <span>{{UIModel.target.url}}</span>
+    </div>
 
+    <div ng-if="UIModel.type === 'HIVE'">
+      <label>HiveServer2 endpoint</label>:
+      <span>{{UIModel.hiveOptions.target.hiveServerToEndpoint}}</span>
+    </div>
+
+    <div ng-if="UIModel.type === 'HIVE'">
+      <label>Staging path</label>:
+      <span>{{UIModel.hiveOptions.target.stagingPath}}</span>
+    </div>
+
+    <div ng-if="UIModel.type === 'HIVE' && secureMode === true">
+      <label>Hive2 Kerberos Principal</label>:
+      <span>{{UIModel.target.hive2KerberosPrincipal}}</span>
+    </div>
+
+    <div ng-if="UIModel.type === 'HIVE' && secureMode === true">
+      <label>Meta Store URI</label>:
+      <span>{{UIModel.target.hiveMetastoreUri}}</span>
+    </div>
+
+    <div ng-if="UIModel.type === 'HIVE' && secureMode === true">
+      <label>Kerberos Principal</label>:
+      <span>{{UIModel.target.hiveMetastoreKerberosPrincipal}}</span>
+    </div>
   </div>
 
   <div>
     <h4 class="lightSubtitle">Run On</h4>
-    <div ng-if="UIModel.runOn === 'source'">{{UIModel.source.cluster}}</div>
-    <div ng-if="UIModel.runOn === 'target'">{{UIModel.target.cluster}}</div>
+    <div ng-if="UIModel.runOn === 'source'"><span>{{UIModel.source.cluster}}</span></div>
+    <div ng-if="UIModel.runOn === 'target'"><span>{{UIModel.target.cluster}}</span></div>
   </div>
 
   <hr />
 
   <div>
     <h4 class="lightSubtitle">Schedule</h4>
-    <span>Start on: </span>{{UIModel.validity.startISO}} <br />
-    <span>End on: </span>{{UIModel.validity.endISO}}
-  </div>
-
-  <div ng-if="UIModel.formType === 'HDFS'">
-    <h4 class="lightSubtitle">Max Maps</h4>
-    {{UIModel.allocation.hdfs.maxMaps}}
-
-    <h4 class="lightSubtitle">Max Bandwidth</h4>
-    {{UIModel.allocation.hdfs.maxBandwidth}}
-  </div>
-  <div ng-if="UIModel.formType === 'HIVE'">
-
-    <h4 class="lightSubtitle">Max Maps for Distcp</h4>
-    {{UIModel.allocation.hive.maxMapsDistcp}}
-
-    <h4 class="lightSubtitle">Max Bandwidth</h4>
-    {{UIModel.allocation.hive.maxBandwidth}}
-
-    <h4 class="lightSubtitle">Max Events</h4>
-    {{UIModel.allocation.hive.maxMapsEvents}}
-
-    <h4 class="lightSubtitle">Max Maps for mirror</h4>
-    {{UIModel.allocation.hive.maxMapsMirror}}
+    <div><label>Start on</label>: <span>{{UIModel.validity.start.date|date:'yyyy-MM-dd'}} {{UIModel.validity.start.time|date:'HH:mm'|date:'HH:mm'}}</span></div>
+    <div><label>End on</label>: <span>{{UIModel.validity.end.date|date:'yyyy-MM-dd'}} {{UIModel.validity.end.time|date:'HH:mm'}}</span></div>
   </div>
 
   <div>
-    <h4 ng-if="UIModel.alerts.alertsArray.length > 0" class="lightSubtitle">Alerts</h4>
-    {{ UIModel.alerts.alertsArray.join() }}
+    <h4 class="lightSubtitle">Frequency</h4>
+    <span>{{UIModel.frequency.quantity}} {{UIModel.frequency.unit}}</span>
   </div>
 
+  <div>
+    <h4 class="lightSubtitle">Timezone</h4>
+    <span>{{UIModel.validity.timezone}}</span>
+  </div>
+
+  <div>
+    <h4 ng-if="UIModel.alerts.length > 0" class="lightSubtitle">Alerts</h4>
+    <span>{{ UIModel.alerts.join() }}</span>
+  </div>
+
+  <div ng-if="UIModel.type === 'HIVE'">
+    <h4 class="lightSubtitle">TDE Encryption</h4>
+    <span>{{UIModel.tdeEncryptionEnabled}}</span>
+  </div>
   <hr />
-  <h4 class="lightSubtitle">ACL</h4>
-  <div><span>Owner:</span> {{UIModel.acl.owner}}</div>
-  <div><span>Group:</span> {{UIModel.acl.group}}</div>
-  <div><span>Permissions:</span> {{UIModel.acl.permissions}}</div>
+
+  <h4 class="lightSubtitle">Allocation</h4>
+  <div ng-if="UIModel.type === 'HDFS'">
+    <div>
+      <label>Max Maps</label>:
+      <span>{{UIModel.allocation.hdfs.distcpMaxMaps}}</span>
+    </div>
+    <div>
+      <label>Max Bandwidth</label>:
+      <span>{{UIModel.allocation.hdfs.distcpMapBandwidth}}</span>
+    </div>
+  </div>
+  <div ng-if="UIModel.type === 'HIVE'">
+    <div>
+      <label>Max Maps for Distcp</label>:
+      <span>{{UIModel.allocation.hive.distcpMaxMaps}}</span>
+    </div>
+    <div>
+      <label>Max Bandwidth</label>:
+      <span>{{UIModel.allocation.hive.distcpMapBandwidth}}</span>
+    </div>
+    <div>
+      <label>Max Events</label>:
+      <span>{{UIModel.allocation.hive.maxEvents}}</span>
+    </div>
+    <div>
+      <label>Max Maps for mirror</label>:
+      <span>{{UIModel.allocation.hive.replicationMaxMaps}}</span>
+    </div>
+  </div>
+  <hr />
 
   <h4 class="lightSubtitle">Retry</h4>
-  <div><span>Policy: </span> {{UIModel.retry.policy}}</div>
-  <div><span>delay: </span> {{UIModel.retry.delay.number}} {{UIModel.retry.delay.unit}}</div>
-  <div><span>Attempts: </span> {{UIModel.retry.attempts}}</div>
-
-  <h4 class="lightSubtitle">Frequency</h4>
-  <div>{{UIModel.frequency.number}} {{UIModel.frequency.unit}}</div>
-
+  <div><label>Policy</label>: <span>{{UIModel.retry.policy}}</span></div>
+  <div><label>Delay</label>: <span>{{UIModel.retry.delay.quantity}} {{UIModel.retry.delay.unit}}</span></div>
+  <div><label>Attempts</label>: <span>{{UIModel.retry.attempts}}</span></div>
   <hr />
 
-  <div class="row">
-    <div class="col-xs-24 mt20">
-      <button type="button" class="btn prevBtn"
-              ng-click="goBack('forms.dataset.general')"
-              ng-disabled="buttonSpinners.backShow">
-        Previous <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.backShow" />
-      </button>
-      <button class="btn nextBtn pull-right"
+  <h4 class="lightSubtitle">Access Control List</h4>
+  <div>
+    <label>Owner</label>: <span>{{UIModel.ACL.owner}}</span>
+    <label>Group</label>: <span>{{UIModel.ACL.group}}</span>
+    <label>Permissions</label>: <span>{{UIModel.ACL.permission}}</span>
+  </div>
+  <hr />
+
+  <div class="col-xs-24 mt35 pb15px pl0px">
+    <button type="button" class="btn prevBtn"
+            ng-click="goBack()"
+            ng-disabled="buttonSpinners.backShow">
+      Previous <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.backShow" />
+    </button>
+    <div class="pull-right">
+      <a class="btn cnclBtn" ui-sref="main">
+        CANCEL
+      </a>
+      <button class="btn nextBtn"
               ng-disabled="buttonSpinners.show"
               ng-click="save()">
-        Save <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
+        SAVE <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
       </button>
-      <a class="pull-right" ui-sref="main">
-        Cancel
-      </a>
     </div>
   </div>
 
diff --git a/falcon-ui/app/html/dataset/datasetFormTpl.html b/falcon-ui/app/html/dataset/datasetFormTpl.html
index d471d40..3d1d01a 100644
--- a/falcon-ui/app/html/dataset/datasetFormTpl.html
+++ b/falcon-ui/app/html/dataset/datasetFormTpl.html
@@ -17,41 +17,29 @@
  * limitations under the License.
  */
 -->
-<div id="formBox">
-  <div class="formTitol">
-    <a>Falcon Mirrors</a>
-    <h1>New Mirror</h1>
-  </div>
-
+<div id="formBox" class="datasetForm">
   <div class="col-sm-24">
-    <div class="formBoxWrapper">
-
-      <div class="progressBox col-xs-24" ng-class="{ general:isActive('forms.dataset.general'),
+    <div class="formBoxContainer detailsBox">
+      <div class="row datasetProgressBox" ng-class="{ general:isActive('forms.dataset.general'),
                                                  summary:isActive('forms.dataset.summary')}">
-        <div class="progressBar">
-          <div class="bar1"></div>
-          <span>
-            <div class="fir">
-              <b>1</b>
-              <span class="glyphicon glyphicon-ok"></span>
-              <h6>General</h6>
-            </div>
-          </span>
-          <span>
-            <div class="sec">
-              <b>2</b>
-              <span class="glyphicon glyphicon-ok"></span>
-              <h6>Summary</h6>
-            </div>
-          </span>
+        <div class="progressBar col-xs-24">
+          <div class="text-center" ng-class="{
+                active:isActive('forms.dataset.general'),
+                completed:isCompleted('forms.dataset.general')}">General</div>
+          <div class="text-center" ng-class="{
+                active:isActive('forms.dataset.summary'),
+                completed:isCompleted('forms.dataset.summary')}">Summary</div>
         </div>
       </div>
 
-      <div class="row" ui-view></div>
+      <div class="row customContainer">
+        <div class="col-xs-offset-1 col-xs-22">
+          <div class="col-xs-24">
+            <label class="title">NEW {{UIModel.type}} MIRROR</label>
+          </div>
+          <div ui-view></div>
+        </div>
+      </div>
     </div>
   </div>
-
-  <div class="col-sm-24">
-
-  </div>
-</div>
\ No newline at end of file
+</div>
diff --git a/falcon-ui/app/html/dataset/datasetSummary.html b/falcon-ui/app/html/dataset/datasetSummary.html
new file mode 100644
index 0000000..8d855f1
--- /dev/null
+++ b/falcon-ui/app/html/dataset/datasetSummary.html
@@ -0,0 +1,209 @@
+<!--
+/**
+ * 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.
+ */
+-->
+<div id="formSummaryBox" class="summaryBox">
+  <h5>{{entityTypeLabel}}</h5>
+  <div>
+    <label>Name</label>:
+    <span>{{extension.name}}</span>
+  </div>
+  <div>
+    <label>Tags</label>:
+    <div ng-repeat="tag in extension.tags"><span>{{tag.key}}</span> - <span>{{tag.value}}</span></div>
+  </div>
+
+  <div>
+    <h4 class="lightSubtitle">Source</h4>
+  </div>
+  <div class="box">
+    <h3 ng-if="extension.type === 'HIVE' || extension.source.location === 'HDFS'">{{extension.source.cluster}}</h3>
+    <div ng-if="extension.type === 'HDFS'">
+      <label class="locationBox">Location</label>:
+      <span>{{extension.source.location}}</span>
+    </div>
+    <div ng-if="extension.type === 'HDFS'">
+      <label>Path</label>:
+      <span>{{extension.source.path}}</span></div>
+    <div ng-if="extension.type === 'HDFS' && extension.source.location !== 'HDFS'">
+      <label>URL</label>:
+      <span>{{extension.source.url}}</span>
+    </div>
+
+    <div ng-if="extension.type === 'HIVE'">I want to copy <span>{{extension.source.hiveDatabaseType}}</span></div>
+    <div ng-if="extension.type === 'HIVE' && extension.source.hiveDatabaseType === 'databases'">
+      <label>Databases</label>:
+      <span>{{extension.source.hiveDatabases}}</span>
+    </div>
+    <div ng-if="extension.type === 'HIVE' && extension.source.hiveDatabaseType === 'tables'">
+      <label>From Database </label>
+      <span>{{extension.source.hiveDatabases}}</span>
+    </div>
+    <div ng-if="extension.type === 'HIVE' && extension.source.hiveDatabaseType === 'tables'">
+      <label>Tables</label>:
+      <span>{{extension.source.hiveTables}}</span>
+    </div>
+
+    <div ng-if="extension.type === 'HIVE'">
+      <label>HiveServer2 endpoint</label>:
+      <span>{{extension.hiveOptions.source.hiveServerToEndpoint}}</span>
+    </div>
+
+    <div ng-if="extension.type === 'HIVE'">
+      <label>Staging path</label>:
+      <span>{{extension.hiveOptions.source.stagingPath}}</span>
+    </div>
+
+    <div ng-if="extension.type === 'HIVE' && secureMode === true">
+      <label>Hive2 Kerberos Principal</label>:
+      <span>{{extension.source.hive2KerberosPrincipal}}</span>
+    </div>
+
+    <div ng-if="extension.type === 'HIVE' && secureMode === true">
+      <label>Meta Store URI</label>:
+      <span>{{extension.source.hiveMetastoreUri}}</span>
+    </div>
+
+    <div ng-if="extension.type === 'HIVE' && secureMode === true">
+      <label>Kerberos Principal</label>:
+      <span>{{extension.source.hiveMetastoreKerberosPrincipal}}</span>
+    </div>
+  </div>
+
+  <div>
+    <h4 class="lightSubtitle">Target</h4>
+  </div>
+  <div class="box">
+    <h3 ng-if="(extension.type === 'HDFS' && extension.target.location === 'HDFS') || extension.type === 'HIVE'">
+      {{extension.target.cluster}}
+    </h3>
+
+    <div ng-if="extension.type === 'HDFS'">
+      <label class="locationBox">Location</label>:
+      <span>{{extension.target.location}}</span>
+    </div>
+    <div ng-if="extension.type === 'HDFS'">
+      <label>Path</label>:
+      <span>{{extension.target.path}}</span>
+    </div>
+    <div ng-if="extension.type === 'HDFS' && extension.target.location !== 'HDFS'">
+      <label>URL</label>:
+      <span>{{extension.target.url}}</span>
+    </div>
+
+    <div ng-if="extension.type === 'HIVE'">
+      <label>HiveServer2 endpoint</label>:
+      <span>{{extension.hiveOptions.target.hiveServerToEndpoint}}</span>
+    </div>
+
+    <div ng-if="extension.type === 'HIVE'">
+      <label>Staging path</label>:
+      <span>{{extension.hiveOptions.target.stagingPath}}</span>
+    </div>
+
+    <div ng-if="extension.type === 'HIVE' && secureMode === true">
+      <label>Hive2 Kerberos Principal</label>:
+      <span>{{extension.target.hive2KerberosPrincipal}}</span>
+    </div>
+
+    <div ng-if="extension.type === 'HIVE' && secureMode === true">
+      <label>Meta Store URI</label>:
+      <span>{{extension.target.hiveMetastoreUri}}</span>
+    </div>
+
+    <div ng-if="extension.type === 'HIVE' && secureMode === true">
+      <label>Kerberos Principal</label>:
+      <span>{{extension.target.hiveMetastoreKerberosPrincipal}}</span>
+    </div>
+  </div>
+
+  <div>
+    <h4 class="lightSubtitle">Run On</h4>
+    <div ng-if="extension.runOn === 'source'"><span>{{extension.source.cluster}}</span></div>
+    <div ng-if="extension.runOn === 'target'"><span>{{extension.target.cluster}}</span></div>
+  </div>
+
+  <hr />
+
+  <div>
+    <h4 class="lightSubtitle">Schedule</h4>
+    <div><label>Start on</label>: <span>{{extension.validity.start.date|date:'yyyy-MM-dd'}} {{extension.validity.start.time|date:'HH:mm'|date:'HH:mm'}}</span></div>
+    <div><label>End on</label>: <span>{{extension.validity.end.date|date:'yyyy-MM-dd'}} {{extension.validity.end.time|date:'HH:mm'}}</span></div>
+  </div>
+
+  <div>
+    <h4 class="lightSubtitle">Frequency</h4>
+    <span>{{extension.frequency.quantity}} {{extension.frequency.unit}}</span>
+  </div>
+
+  <div>
+    <h4 class="lightSubtitle">Timezone</h4>
+    <span>{{extension.validity.timezone}}</span>
+  </div>
+
+  <div>
+    <h4 ng-if="extension.alerts.length > 0" class="lightSubtitle">Alerts</h4>
+    <span>{{ extension.alerts.join() }}</span>
+  </div>
+  <hr />
+
+  <h4 class="lightSubtitle">Allocation</h4>
+  <div ng-if="extension.type === 'HDFS'">
+    <div>
+      <label>Max Maps</label>:
+      <span>{{extension.allocation.hdfs.distcpMaxMaps}}</span>
+    </div>
+    <div>
+      <label>Max Bandwidth</label>:
+      <span>{{extension.allocation.hdfs.distcpMapBandwidth}}</span>
+    </div>
+  </div>
+  <div ng-if="extension.type === 'HIVE'">
+    <div>
+      <label>Max Maps for Distcp</label>:
+      <span>{{extension.allocation.hive.distcpMaxMaps}}</span>
+    </div>
+    <div>
+      <label>Max Bandwidth</label>:
+      <span>{{extension.allocation.hive.distcpMapBandwidth}}</span>
+    </div>
+    <div>
+      <label>Max Events</label>:
+      <span>{{extension.allocation.hive.maxEvents}}</span>
+    </div>
+    <div>
+      <label>Max Maps for mirror</label>:
+      <span>{{extension.allocation.hive.replicationMaxMaps}}</span>
+    </div>
+  </div>
+  <hr />
+
+  <h4 class="lightSubtitle">Retry</h4>
+  <div><label>Policy</label>: <span>{{extension.retry.policy}}</span></div>
+  <div><label>delay</label>: <span>{{extension.retry.delay.quantity}} {{extension.retry.delay.unit}}</span></div>
+  <div><label>Attempts</label>: <span>{{extension.retry.attempts}}</span></div>
+  <hr />
+
+  <h4 class="lightSubtitle">Access Control List</h4>
+  <div>
+    <label>Owner</label>: <span>{{extension.ACL.owner}}</span>
+    <label>Group</label>: <span>{{extension.ACL.group}}</span>
+    <label>Permissions</label>: <span>{{extension.ACL.permission}}</span>
+  </div>
+  <hr />
+</div>
diff --git a/falcon-ui/app/html/datasource/datasourceFormAdvancedStepTpl.html b/falcon-ui/app/html/datasource/datasourceFormAdvancedStepTpl.html
new file mode 100644
index 0000000..b382040
--- /dev/null
+++ b/falcon-ui/app/html/datasource/datasourceFormAdvancedStepTpl.html
@@ -0,0 +1,72 @@
+<!--
+/**
+ * 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.
+ */
+-->
+<form name="datasourceForm" novalidate id="datasourceFormGeneralStep">
+	<div class="col-xs-24"><label>Access Control List</label></div>
+	<div class="col-xs-24 plr0px">
+		<div class="col-xs-8">
+			<label class="light">Owner<mandatory-field></mandatory-field></label>
+			<input type="text" class="form-control" validation-message="{{validations.messages.acl.owner}}"
+						 ng-required="true"
+						 ng-pattern="validations.patterns.unixId"
+						 ng-model="datasource.ACL.owner"/>
+		</div>
+		<div class="col-xs-8">
+			<label class="light">Group<mandatory-field></mandatory-field></label>
+			<input type="text" class="form-control" validation-message="{{validations.messages.acl.group}}"
+						 ng-required="true"
+						 ng-pattern="validations.patterns.unixId"
+						 ng-model="datasource.ACL.group"/>
+		</div>
+		<div class="col-xs-24">
+			<div class="col-xs-8 plr0px">
+				<label class="light">Permissions<mandatory-field></mandatory-field></label>
+				<acl-permissions acl-model="datasource.ACL.permission"></acl-permissions>
+			</div>
+		</div>
+		</div>
+
+		<div class="col-xs-24">
+			<div class="pull-right">
+				<button id="datasource.step2" class="btn btn-datasource"
+		         ng-disabled="buttonSpinners.validateShow"
+		         ng-click="validate()">
+		      Test <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.validateShow" />
+		    </button>
+			</div>
+	  </div>
+
+  <div class="col-xs-24 pb15px mt35">
+		<button id="datasource.backToStep1" class="btn prevBtn" type="button" ng-click="goBack()" ng-disabled="buttonSpinners.backShow">
+			PREVIOUS <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.backShow">
+		</button>
+		<div class="pull-right">
+	    <a class="btn cnclBtn" ui-sref="main">
+	      CANCEL
+	    </a>
+	    <button id="datasource.step1" class="btn nextBtn"
+	         ng-disabled="buttonSpinners.show"
+	         ng-click="goNext(datasourceForm.$invalid)"
+					 scroll-to-error>
+	      NEXT <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
+	    </button>
+		</div>
+  </div>
+
+</form>
diff --git a/falcon-ui/app/html/datasource/datasourceFormGeneralStepTpl.html b/falcon-ui/app/html/datasource/datasourceFormGeneralStepTpl.html
new file mode 100644
index 0000000..e5ca971
--- /dev/null
+++ b/falcon-ui/app/html/datasource/datasourceFormGeneralStepTpl.html
@@ -0,0 +1,355 @@
+<!--
+/**
+* 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.
+*/
+-->
+<form name="datasourceForm" novalidate id="datasourceFormGeneralStep">
+	<div class="col-xs-24 plr0px">
+		<div class="col-xs-12">
+			<label class="light" tooltip="datasource.name">Connection Name<mandatory-field></mandatory-field></label>
+			<input type="text" class="form-control" ng-disabled="editingMode" ng-keydown="validations.acceptNoSpaces($event)"
+			check-name="{type:'datasource', check:!editingMode}" ng-class="{fakeInvalid:!validations.nameAvailable}"
+			ng-model="datasource.name" ng-required="true" ng-pattern="validations.patterns.name"/>
+		</div>
+		<div class="col-xs-12">
+			<label class="light" tooltip="cluster.colo">Data Center or Colo Name<mandatory-field></mandatory-field></label>
+			<input type="text" class="form-control"
+						ng-pattern="validations.patterns.name"
+						ng-required="true" ng-disabled="xmlPreview.edit"
+						ng-model="datasource.colo" validation-message="{{validations.messages.colo}}"/>
+		</div>
+	</div>
+	<div class="col-xs-24">
+		<label class="light">Description</label>
+		<input type="text" class="form-control"
+		ng-disabled="xmlPreview.edit"
+		ng-pattern="validations.patterns.freeText"
+		ng-model="datasource.description" />
+	</div>
+	<div class="col-xs-24">
+		<label class="light">Tags</label>
+	</div>
+
+	<div class="col-xs-12">
+		<div ng-repeat="tag in datasource.tags">
+			<div class="row dynamic-table-spacer">
+				<div class="col-xs-8">
+					<input type="text" class="form-control" ng-model="tag.key"
+						validation-optional-message="{{validations.messages.key}}"
+							ng-pattern="validations.patterns.alpha" ng-required="tag.value" placeholder="key"/>
+				</div>
+				<div class="col-xs-8">
+					<input type="text" class="form-control" validation-optional-message="{{validations.messages.value}}"
+							ng-model="tag.value"
+							ng-pattern="validations.patterns.alpha" ng-required="tag.key" placeholder="value"/>
+				</div>
+				<div class="col-xs-8">
+					<button type="button" class="btn btn-default btn-xs" ng-click="removeTag($index)" ng-disabled="xmlPreview.edit" ng-if="!$first || !$last">
+						<span class="entypo minus"></span> delete
+					</button>
+					<button type="button" class="btn btn-default btn-xs" ng-click="addTag()" ng-disabled="xmlPreview.edit" ng-if="$last">
+						<span class="entypo plus"></span> add tag
+					</button>
+				</div>
+			</div>
+		</div>
+	</div>
+
+	<div class="col-xs-24 plr0px">
+		<div class="col-xs-12">
+			<label class="light">Database Manager<mandatory-field></mandatory-field></label>
+			<select class="form-control padding0 "ng-required="true" validation-message="{{validations.messages.dbManager}}"
+				ng-model="datasource.type" ng-change="getDatabaseDefaultDetails()">
+				<option value="" disabled selected style='display:none;'>- Select Database Manager -</option>
+				<option value="mysql">MySQL</option>
+				<option value="oracle">Oracle</option>
+				<option value="hsql">HSQL</option>
+				<option value="db2">DB2</option>
+				<option value="postgres">Postgres</option>
+				<option value="netezza">Netezza</option>
+				<option value="teradata">Teradata</option>
+				<option value="generic">Generic</option>
+				<!-- <option ng-repeat="driverItem in driverList">{{driverItem.name}}</option> -->
+			</select>
+		</div>
+		<div class="col-xs-12">
+			<label class="light">Connection String<mandatory-field></mandatory-field></label>
+			<input type="text" title="You need to update the connection string to point to your db"
+			 ng-required="true"
+			 validation-message="{{validations.messages.connectionString}}"
+			 class="form-control endpointDefault" ng-class="{endpointChanged:datasourceForm.endpoint.$dirty}"
+			 ng-model="datasource.interfaces.interfaces[0].endpoint"/>
+			<!-- <span>jdbc:sqlserver//localhost:80</span> -->
+		</div>
+	</div>
+	<div class="col-xs-24 plr0px">
+		<div class="col-xs-12">
+			<label class="light" tooltip="datasource.driver.jar">Driver Jar<mandatory-field></mandatory-field></label>
+			<div ng-repeat="jar in datasource.driver.jar track by $index" class="col-xs-24 plr0px">
+				<div class="col-xs-16 plr0px">
+					<input type="text" class="form-control" ng-model="jar.value"
+					validation-message="{{validations.messages.driver.jar}}"
+					ng-pattern="validations.patterns.driver"
+					ng-required="true"
+					/>
+				</div>
+				<div class="col-xs-4" ng-if="!$first || !$last">
+					<a href="" class="driver-jar-link" ng-click="removeDriverJar($index)" ng-disabled="xmlPreview.edit">- Delete</a>
+				</div>
+				<div class="col-xs-4">
+					<a href="" class="driver-jar-link" ng-click="addDriverJar()" ng-disabled="xmlPreview.edit" ng-if="$last">+ Add</a>
+				</div>
+			</div>
+		</div>
+		<div class="col-xs-12">
+			<label class="light" tooltip="datasource.driver">Driver Class<mandatory-field></mandatory-field></label>
+			<input type="text" name="driverClass" class="form-control" ng-model="datasource.driver.clazz"
+				validation-message="{{validations.messages.driver.clazz}}"
+				ng-required="true"
+				ng-pattern="validations.patterns.driver"
+			/>
+		</div>
+	</div>
+	<div class="col-xs-12 plr0px">
+		<div class="col-xs-24">
+			<label class="light">Type<mandatory-field></mandatory-field></label>
+		</div>
+		<div class="col-xs-24">
+			<input type="radio" ng-model="datasource.interfaces.interfaces[0].type" value="readonly" class="ml0" />
+			<label class="light mt5" tooltip="datasource.readMode">Read only</label>
+			<input type="radio" ng-model="datasource.interfaces.interfaces[0].type" value="write"/>
+			<label class="light mt5" tooltip="datasource.writeMode">Write</label>
+		</div>
+		<div class="col-xs-24 plr0px">
+			<div class="col-xs-24">
+				<label class="light" tooltip="datasource.interfaces.credentialType">Credential Type<mandatory-field></mandatory-field></label>
+			</div>
+			<div class="col-xs-24">
+				<input type="radio" ng-model="datasource.interfaces.interfaces[0].credential.type" ng-required="!datasource.interfaces.credential.type" value="password-text" class="ml0" />
+				<label class="light mt5" tooltip="datasource.interfaces.credentialType">Username / Password</label>
+				<input type="radio" ng-model="datasource.interfaces.interfaces[0].credential.type" ng-required="!datasource.interfaces.credential.type" value="password-file"/>
+				<label class="light mt5" tooltip="datasource.interfaces.credentialType">Password File</label>
+				<input type="radio" ng-model="datasource.interfaces.interfaces[0].credential.type" ng-required="!datasource.interfaces.credential.type" value="password-alias"/>
+				<label class="light mt5" tooltip="datasource.interfaces.credentialType">Password Alias</label>
+				<label class="col-xs-24 custom-danger validationMessageGral" ng-if="!datasource.interfaces.interfaces[0].credential.type">
+          {{validations.messages.credential.empty}}
+        </label>
+			</div>
+
+			<div class="col-xs-10" ng-if="datasource.interfaces.interfaces[0].credential.type">
+				<label class="light" tooltip="datasource.userName">Username<mandatory-field></mandatory-field></label>
+				<input type="text" class="form-control" ng-model="datasource.interfaces.interfaces[0].credential.userName"
+				ng-required="true"
+				validation-optional-message="{{validations.messages.userName}}"
+				ng-pattern="validations.patterns.userName"
+				/>
+			</div>
+			<div class="col-xs-10" ng-if="datasource.interfaces.interfaces[0].credential.type == 'password-text'">
+				<label class="light" tooltip="datasource.password">Password<mandatory-field></mandatory-field></label>
+				<input type="text" class="form-control" ng-model="datasource.interfaces.interfaces[0].credential.passwordText"
+				ng-required="true"
+				validation-optional-message="{{validations.messages.dbPassword}}"
+				ng-pattern="validations.patterns.password"
+				/>
+			</div>
+			<div class="col-xs-10" ng-if="datasource.interfaces.interfaces[0].credential.type == 'password-file'">
+				<label class="light" tooltip="datasource.credential.passwordFile">Password File<mandatory-field></mandatory-field></label>
+				<input type="text" class="form-control" ng-model="datasource.interfaces.interfaces[0].credential.passwordFile"
+				ng-required="true"
+				validation-optional-message="{{validations.messages.passwordFile}}"
+				ng-pattern="validations.patterns.password"
+				/>
+			</div>
+			<div class="col-xs-10" ng-if="datasource.interfaces.interfaces[0].credential.type == 'password-alias'">
+				<label class="light" tooltip="datasource.password">Password Alias<mandatory-field></mandatory-field></label>
+				<input type="text" class="form-control" ng-model="datasource.interfaces.interfaces[0].credential.passwordAlias"
+				validation-optional-message="{{validations.messages.passwordAlias}}"
+				ng-required="true"
+				ng-pattern="validations.patterns.password"
+				/>
+			</div>
+
+			<div class="col-xs-10" ng-if="datasource.interfaces.interfaces[0].credential.type == 'password-alias'">
+				<label class="light" tooltip="datasource.password">Provider Path<mandatory-field></mandatory-field></label>
+				<input type="text" class="form-control" ng-model="datasource.interfaces.interfaces[0].credential.providerPath"
+				validation-optional-message="{{validations.messages.providerPath}}"
+				ng-required="true"
+				ng-pattern="validations.patterns.password"
+				/>
+			</div>
+		</div>
+	</div>
+	<div class="col-xs-24 plr0px">
+		<label class="col-xs-24" tooltip="datasource.properties">Sqoop Properties</label>
+		<div class="col-xs-12">
+			<input type="checkbox" class="ml0"
+			ng-model="((datasource.properties | filter:{name:'directMode'})[0]).value"
+			ng-disabled="xmlPreview.edit" />
+			<label class="light" tooltip="datasource.directMode">Direct</label>
+			<input type="checkbox"
+			ng-model="((datasource.properties | filter:{name:'verboseMode'})[0]).value"
+			ng-disabled="xmlPreview.edit" />
+			<label class="light" tooltip="datasource.verboseMode">Verbose</label>
+		</div>
+	</div>
+	<div class="col-xs-24 plr0px">
+		<div class="col-xs-24">
+			<a href="" class="datasource-link" ng-click="addProperty()" ng-disabled="xmlPreview.edit">+ Add Property</a>
+		</div>
+		<div class="row m0" ng-if="datasource.customProperties.length > 0">
+			<label class="col-xs-8">Property Name</label><label class="col-xs-16">Value</label>
+		</div>
+		<div ng-repeat="property in datasource.customProperties" class="row m0"  ng-if="datasource.customProperties.length > 0">
+			<div class="col-xs-8 dynamic-table-spacer">
+				<input type="text" class="form-control" ng-model="property.name"
+				ng-pattern="validations.patterns.propertyName"
+				validation-optional-message="{{validations.messages.name}}"
+				ng-disabled="xmlPreview.edit"
+				ng-required="property.value" placeholder="name" />
+			</div>
+			<div class="col-xs-8 dynamic-table-spacer">
+				<input type="text" class="form-control" ng-model="property.value"
+				validation-optional-message="{{validations.messages.value}}"
+				ng-disabled="xmlPreview.edit"
+				ng-required="property.name" placeholder="value" />
+			</div>
+			<div class="dynamic-table-spacer">
+				<button type="button" class="btn btn-default btn-xs" ng-click="removeProperty($index)"
+				ng-disabled="xmlPreview.edit">
+				<span class="entypo minus"></span> delete
+			</button>
+		</div>
+	</div>
+</div>
+</div>
+<div class="col-xs-24 plr0px">
+	<div class="col-xs-12">
+		<label class="light" tooltip="datasource.parameterFile">Sqoop Parameter File</label>
+		<div class="form-inline">
+			<input type="text" class="form-control" ng-disabled="xmlPreview.edit"
+			ng-model="((datasource.properties | filter:{name:'parameterFile'})[0]).value"
+			validation-optional-message="{{validations.messages.parameterFile}}"/>
+			<!-- <button type="button" class="btn btn-sharp btn-browse" ng-disabled="xmlPreview.edit" ng-click="">
+			<i>Browse</i>
+		</button> -->
+		<!-- <a href="" class="datasource-link" ng-click="addParameter()" ng-disabled="xmlPreview.edit">+ Add Parameters</a> -->
+		<!-- <div class="pull-right">
+		<label class="light" tooltip="datasource.parameters">Parameters</label>
+		<a href="" class="datasource-link">+ Add Parameters</a>
+	</div>
+</div> -->
+<!-- <div class="form-inline pull-right">
+<label class="light" tooltip="datasource.parameterFile">Parameter File</label>
+<input type="text" class="form-control" ng-disabled="xmlPreview.edit"
+ng-model="datasource.parameterFile"
+validation-optional-message="{{validations.messages.parameterFile}}"/>
+<button type="button" class="btn btn-sharp btn-browse" ng-disabled="xmlPreview.edit" ng-click="">
+<i>Browse</i>
+</button>
+</div> -->
+</div>
+</div>
+</div>
+
+<div class="col-xs-12 plr0px">
+	<div class="row m0" ng-if="datasource.parameters.length > 0">
+		<label class="col-xs-8">Parameter Name</label><label class="col-xs-16">Value</label>
+	</div>
+	<div ng-repeat="parameter in datasource.parameters" class="row m0" ng-if="datasource.parameters.length > 0">
+		<div class="col-xs-8 dynamic-table-spacer">
+			<input type="text" class="form-control" ng-model="parameter.name"
+			ng-pattern="validations.patterns.propertyName"
+			validation-optional-message="{{validations.messages.name}}"
+			ng-disabled="xmlPreview.edit"
+			ng-required="parameter.value" placeholder="name" />
+		</div>
+		<div class="col-xs-8 dynamic-table-spacer">
+			<input type="text" class="form-control" ng-model="parameter.value"
+			validation-optional-message="{{validations.messages.value}}"
+			ng-disabled="xmlPreview.edit"
+			ng-required="parameter.name" placeholder="value" />
+		</div>
+		<div class="dynamic-table-spacer">
+			<button type="button" class="btn btn-default btn-xs" ng-click="removeParameter($index)"
+			ng-disabled="xmlPreview.edit">
+			<span class="entypo minus"></span> delete
+		</button>
+	</div>
+</div>
+</div>
+<!-- <div class="pull-right">
+<label class="light" tooltip="datasource.properties">Properties</label>
+<a href="" class="datasource-link">+ Add Properties</a>
+</div> -->
+
+	<div class="col-xs-24 advancedOption" ng-click="expandOptions = !expandOptions" id="snapshotAdvancedOption">
+		<label class="mt15 pointer blink-success">ADVANCED OPTIONS</label>
+		<i class="glyphicon glyphicon-chevron-down mt15" ng-if="!expandOptions"></i>
+		<i class="glyphicon glyphicon-chevron-up mt15" ng-if="expandOptions"></i>
+	</div>
+
+	<div id="advancedOptionsBox" class="col-xs-24 plr0px" ng-class="{expanded:expandOptions}">
+		<div class="col-xs-24"><label>Access Control List</label></div>
+		<div class="col-xs-24 plr0px">
+			<div class="col-xs-8">
+				<label class="light">Owner<mandatory-field></mandatory-field></label>
+				<input type="text" class="form-control" validation-message="{{validations.messages.acl.owner}}"
+							 ng-required="true"
+							 ng-pattern="validations.patterns.unixId"
+							 ng-model="datasource.ACL.owner"/>
+			</div>
+			<div class="col-xs-8">
+				<label class="light">Group<mandatory-field></mandatory-field></label>
+				<input type="text" class="form-control" validation-message="{{validations.messages.acl.group}}"
+							 ng-required="true"
+							 ng-pattern="validations.patterns.unixId"
+							 ng-model="datasource.ACL.group"/>
+			</div>
+			<div class="col-xs-24">
+				<div class="col-xs-8 plr0px">
+					<label class="light">Permissions<mandatory-field></mandatory-field></label>
+					<acl-permissions acl-model="datasource.ACL.permission"></acl-permissions>
+				</div>
+			</div>
+		</div>
+	</div>
+
+	<div class="col-xs-24">
+		<div class="pull-right">
+			<button id="datasource.step2" class="btn btn-datasource"
+					 ng-disabled="buttonSpinners.validateShow"
+					 ng-click="validate()">
+				TEST <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.validateShow" />
+			</button>
+		</div>
+	</div>
+
+	<div class="col-xs-24 pb15px mt35">
+		<div class="pull-right">
+			<a class="btn cnclBtn" ui-sref="main">
+				CANCEL
+			</a>
+			<button id="datasource.step1" class="btn nextBtn"
+				ng-disabled="buttonSpinners.show"
+				ng-click="goNext(datasourceForm.$invalid)"
+				scroll-to-error>
+				NEXT <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
+			</button>
+		</div>
+	</div>
+
+</form>
diff --git a/falcon-ui/app/html/datasource/datasourceFormSummaryStepTpl.html b/falcon-ui/app/html/datasource/datasourceFormSummaryStepTpl.html
new file mode 100644
index 0000000..29923f9
--- /dev/null
+++ b/falcon-ui/app/html/datasource/datasourceFormSummaryStepTpl.html
@@ -0,0 +1,113 @@
+<!--
+/**
+ * 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.
+ */
+-->
+<div class="row datasourceSummaryRow" id="datasourceSummaryStep">
+  <h4 class="col-sm-24">
+    General
+  </h4>
+  <div class="col-sm-24">
+    <label>Connection Name</label>: <span>{{datasource.name}}</span>
+  </div>
+  <div class="col-sm-24">
+    <label>Data Center or Colo Name</label>: <span>{{datasource.colo}}</span>
+  </div>
+  <div class="col-sm-24">
+    <label>Description</label>: <span>{{datasource.description}}</span>
+  </div>
+  <div class="col-sm-24">
+    <label>Type</label>: <span>{{datasource.type}}</span>
+  </div>
+
+  <h4 class="col-sm-24">
+    Interfaces
+  </h4>
+  <div class="col-sm-24 plr0px" ng-repeat="interface in datasource.interfaces.interfaces">
+    <div class="col-sm-24">
+      <label>Interface Type</label>: <span>{{interface.type}}</span>
+    </div>
+    <div class="col-sm-24">
+      <label>Interface Endpoint</label>: <span>{{interface.endpoint}}</span>
+    </div>
+    <div class="col-sm-24" ng-if="interface.credential.type != ''">
+      <label>Interface Credentials</label>
+    </div>
+    <div class="col-sm-24" ng-if="interface.credential.type != ''">
+      <label>Credential Type</label>: <span>{{interface.credential.type}}</span>
+    </div>
+    <div class="col-sm-24" ng-if="interface.credential.type == 'password-text'">
+      <label>User Name</label>: <span>{{interface.credential.userName}}</span>
+    </div>
+    <div class="col-sm-24" ng-if="interface.credential.type == 'password-text'">
+      <label>Password Text</label>: <span>{{interface.credential.passwordText}}</span>
+    </div>
+    <div class="col-sm-24" ng-if="interface.credential.type == 'password-file'">
+      <label>Password File</label>: <span>{{interface.credential.passwordFile}}</span>
+    </div>
+    <div class="col-sm-24" ng-if="interface.credential.type == 'password-alias'">
+      <label>Password Alias</label>: <span>{{interface.credential.passwordAlias}}</span>
+    </div>
+  </div>
+
+  <h4 class="col-sm-24" ng-if="datasource.interfaces.credential.type != ''">
+    Default Credentials
+  </h4>
+  <div class="col-sm-24" ng-if="datasource.interfaces.credential.type != ''">
+    <label>Credential Type</label>: <span>{{datasource.interfaces.credential.type}}</span>
+  </div>
+  <div class="col-sm-24" ng-if="datasource.interfaces.credential.type == 'password-text'">
+    <label>User Name</label>: <span>{{datasource.interfaces.credential.userName}}</span>
+  </div>
+  <div class="col-sm-24" ng-if="datasource.interfaces.credential.type == 'password-text'">
+    <label>Password Text</label>: <span>{{datasource.interfaces.credential.passwordText}}</span>
+  </div>
+  <div class="col-sm-24" ng-if="datasource.interfaces.credential.type == 'password-file'">
+    <label>Password File</label>: <span>{{datasource.interfaces.credential.passwordFile}}</span>
+  </div>
+  <div class="col-sm-24" ng-if="datasource.interfaces.credential.type == 'password-alias'">
+    <label>Password Alias</label>: <span>{{datasource.interfaces.credential.passwordAlias}}</span>
+  </div>
+
+  <h4 class="col-sm-24">
+    Properties
+  </h4>
+  <div class="col-sm-24" ng-repeat="property in datasource.customProperties | filter: {name: '!!'}">
+    <label>{{property.name}}</label>: <span>{{property.value}}</span>
+  </div>
+  <div ng-repeat="property in datasource.properties">
+    <div class="col-sm-24" ng-if="property.value && property.value !== ''">
+      <label>{{property.name}}</label>: <span>{{property.value}}</span>
+    </div>
+  </div>
+</div>
+
+<div class="col-xs-24 mt35 pb15px pl0px">
+  <button id="datasource.backToStep1" class="btn prevBtn" type="button"
+       ng-click="goBack()"
+       ng-disabled="buttonSpinners.backShow">
+    PREVIOUS <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.backShow" />
+  </button>
+  <div class="pull-right">
+    <a class="btn cnclBtn" ui-sref="main">
+      CANCEL
+    </a>
+    <button id="datasource.step2" class="btn nextBtn" ng-click="saveEntity()" focus-if>
+      SAVE <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
+    </button>
+  </div>
+</div>
diff --git a/falcon-ui/app/html/datasource/datasourceFormTpl.html b/falcon-ui/app/html/datasource/datasourceFormTpl.html
new file mode 100644
index 0000000..7a0b7ec
--- /dev/null
+++ b/falcon-ui/app/html/datasource/datasourceFormTpl.html
@@ -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.
+ */
+-->
+<div class="datasourceForm">
+  <div class="col-xs-24">
+    <div class="preview pullOver">
+      <button  type="button" class="btn btn-default btn-md pull-right nextBtn" ng-click="toggleclick()" >Preview XML</button>
+    </div>
+    <br/>
+    <div>
+      <div class=" formBoxContainer detailsBox">
+        <div class="datasourceProgressBox" ng-class="{
+          general:isActive('forms.datasource.general'),
+          summary:isActive('forms.datasource.summary')
+          }">
+          <div class="progressBar col-xs-24">
+              <div class="text-center fir" ng-class="{
+                active:isActive('forms.datasource.general'),
+                completed:isCompleted('forms.datasource.general')}">General</div>
+              <div class="text-center fif" ng-class="{
+                active:isActive('forms.datasource.summary'),
+                completed:isCompleted('forms.datasource.summary')}">Summary</div>
+          </div>
+        </div>
+        <div class="row customContainer">
+          <div class="col-xs-offset-1 col-xs-22">
+            <fieldset ng-disabled="!editXmlDisabled">
+              <div class="formViewContainer">
+                <div class="col-xs-24">
+                  <label class="title"><span class="entypo download icon-lg entypo-align-sub"></span> NEW DATA SOURCE</label>
+                </div>
+                <div ui-view></div>
+              </div>
+            </fieldset>
+          </div>
+        </div>
+      </div>
+
+      <div class="hide xmlPreviewContainer detailsBox">
+        <div class="row dt">
+          <div class="col-xs-24 pt15px">
+            <div class="col-xs-13 noSpecial">
+                <h5>XML Preview</h5>
+                <label style="margin-top: -10px;margin-bottom: -2px;" ng-if="invalidXml" class="custom-danger">Invalid Xml</label>
+            </div>
+
+            <div class="pull-right">
+              <button type="button"
+                      id="datasource.editXML"
+                      class="btn btn-default btn-xs"
+                      ng-click="toggleEditXml()"
+                      ng-class="{'btn-warning':!editXmlDisabled}"
+                      ng-disabled="invalidXml">
+                <div ng-if="editXmlDisabled">Edit XML</div>
+                <div ng-if="!editXmlDisabled">Finish</div>
+              </button>
+
+              <button type="button"
+                      class="btn btn-default btn-xs"
+                      ng-if="invalidXml"
+                      ng-click="revertXml()">
+                  <div>Revert</div>
+              </button>
+            </div>
+		  </div>
+          <div class="col-sm-24 showValidationStyle">
+            <textarea ng-model="prettyXml"
+                      elastic
+                      class="form-control"
+                      ng-disabled="editXmlDisabled"
+                      ng-class="{fakeInvalid:invalidXml}">
+            </textarea>
+            <!--{{xmlEditValidationError}}-->
+          </div>
+
+          </div>
+        </div>
+    </div>
+  </div>
+</div>
diff --git a/falcon-ui/app/html/datasource/datasourceSummary.html b/falcon-ui/app/html/datasource/datasourceSummary.html
new file mode 100644
index 0000000..69e68f8
--- /dev/null
+++ b/falcon-ui/app/html/datasource/datasourceSummary.html
@@ -0,0 +1,95 @@
+<!--
+/**
+ * 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.
+ */
+-->
+<div class="summaryBox" id="datasourceFormSummary">
+  <h4 class="col-sm-24">
+    General
+  </h4>
+  <div class="col-sm-24">
+    <label>Connection Name</label>: <span>{{datasource.name}}</span>
+  </div>
+  <div class="col-sm-24">
+    <label>Data Center or Colo Name</label>: <span>{{datasource.colo}}</span>
+  </div>
+  <div class="col-sm-24">
+    <label>Description</label>: <span>{{datasource.description}}</span>
+  </div>
+  <div class="col-sm-24">
+    <label>Type</label>: <span>{{datasource.type}}</span>
+  </div>
+
+  <h4 class="col-sm-24">
+    Interfaces
+  </h4>
+  <div class="col-sm-24 plr0px" ng-repeat="interface in datasource.interfaces.interfaces">
+    <div class="col-sm-24">
+      <label>Interface Type</label>: <span>{{interface.type}}</span>
+    </div>
+    <div class="col-sm-24">
+      <label>Interface Endpoint</label>: <span>{{interface.endpoint}}</span>
+    </div>
+    <div class="col-sm-24" ng-if="interface.credential.type != ''">
+      <label>Interface Credentials</label>
+    </div>
+    <div class="col-sm-24" ng-if="interface.credential.type != ''">
+      <label>Credential Type</label>: <span>{{interface.credential.type}}</span>
+    </div>
+    <div class="col-sm-24" ng-if="interface.credential.type == 'password-text'">
+      <label>User Name</label>: <span>{{interface.credential.userName}}</span>
+    </div>
+    <div class="col-sm-24" ng-if="interface.credential.type == 'password-text'">
+      <label>Password Text</label>: <span>{{interface.credential.passwordText}}</span>
+    </div>
+    <div class="col-sm-24" ng-if="interface.credential.type == 'password-file'">
+      <label>Password File</label>: <span>{{interface.credential.passwordFile}}</span>
+    </div>
+    <div class="col-sm-24" ng-if="interface.credential.type == 'password-alias'">
+      <label>Password Alias</label>: <span>{{interface.credential.passwordAlias}}</span>
+    </div>
+  </div>
+
+  <h4 class="col-sm-24" ng-if="datasource.interfaces.credential.type != ''">
+    Default Credentials
+  </h4>
+  <div class="col-sm-24" ng-if="datasource.interfaces.credential.type != ''">
+    <label>Credential Type</label>: <span>{{datasource.interfaces.credential.type}}</span>
+  </div>
+  <div class="col-sm-24" ng-if="datasource.interfaces.credential.type == 'password-text'">
+    <label>User Name</label>: <span>{{datasource.interfaces.credential.userName}}</span>
+  </div>
+  <div class="col-sm-24" ng-if="datasource.interfaces.credential.type == 'password-text'">
+    <label>Password Text</label>: <span>{{datasource.interfaces.credential.passwordText}}</span>
+  </div>
+  <div class="col-sm-24" ng-if="datasource.interfaces.credential.type == 'password-file'">
+    <label>Password File</label>: <span>{{datasource.interfaces.credential.passwordFile}}</span>
+  </div>
+  <div class="col-sm-24" ng-if="datasource.interfaces.credential.type == 'password-alias'">
+    <label>Password Alias</label>: <span>{{datasource.interfaces.credential.passwordAlias}}</span>
+  </div>
+
+  <h4 class="col-sm-24">
+    Properties
+  </h4>
+  <div class="col-sm-24" ng-repeat="property in datasource.customProperties">
+    <label>{{property.name}}</label>: <span>{{property.value}}</span>
+  </div>
+  <div class="col-sm-24" ng-repeat="property in datasource.properties">
+    <label>{{property.name}}</label>: <span>{{property.value}}</span>
+  </div>
+</div>
diff --git a/falcon-ui/app/html/directives/aclPermissions.html b/falcon-ui/app/html/directives/aclPermissions.html
new file mode 100644
index 0000000..13e4b50
--- /dev/null
+++ b/falcon-ui/app/html/directives/aclPermissions.html
@@ -0,0 +1,45 @@
+<!--
+/**
+ * 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.
+ */
+-->
+<div class="col-xs-24 plr0px panel panel-default aclPermission">
+  <div class="col-xs-24 plr0px">
+    <span class="col-xs-4"></span>
+    <span class="col-xs-4 font11px pt5px">Read</span>
+    <span class="col-xs-4 font11px pt5px">Write</span>
+    <span class="col-xs-4 font11px pt5px">Execute</span>
+  </div>
+      <div class="col-xs-24 plr0px">
+      <span class="col-xs-4 font11px pt5px">Owner</span>
+      <span class="col-xs-4"><input type="checkbox" name="owner" value="4" ng-click="calculatePermission('owner')" ng-disabled="xmlPreview.edit"></span>
+      <span class="col-xs-4"><input type="checkbox" name="owner" value="2" ng-click="calculatePermission('owner')" ng-disabled="xmlPreview.edit"></span>
+      <span class="col-xs-4"><input type="checkbox" name="owner" value="1" ng-click="calculatePermission('owner')" ng-disabled="xmlPreview.edit"></span>
+    </div>
+    <div class="col-xs-24 plr0px">
+      <span class="col-xs-4 font11px pt5px">Group</span>
+      <span class="col-xs-4"><input type="checkbox" name="groups" value="4" ng-click="calculatePermission('groups')" ng-disabled="xmlPreview.edit"></span>
+      <span class="col-xs-4"><input type="checkbox" name="groups" value="2" ng-click="calculatePermission('groups')" ng-disabled="xmlPreview.edit"></span>
+      <span class="col-xs-4"><input type="checkbox" name="groups" value="1" ng-click="calculatePermission('groups')" ng-disabled="xmlPreview.edit"></span>
+    </div>
+    <div class="col-xs-24 plr0px">
+      <span class="col-xs-4 font11px pt5px">Others</span>
+      <span class="col-xs-4"><input type="checkbox" name="others" value="4" ng-click="calculatePermission('others')" ng-disabled="xmlPreview.edit"></span>
+      <span class="col-xs-4"><input type="checkbox" name="others" value="2" ng-click="calculatePermission('others')" ng-disabled="xmlPreview.edit"></span>
+      <span class="col-xs-4"><input type="checkbox" name="others" value="1" ng-click="calculatePermission('others')" ng-disabled="xmlPreview.edit"></span>
+    </div>
+</div>
diff --git a/falcon-ui/app/html/directives/dependenciesGraphDv.html b/falcon-ui/app/html/directives/dependenciesGraphDv.html
index 7fbba06..9b263fd 100644
--- a/falcon-ui/app/html/directives/dependenciesGraphDv.html
+++ b/falcon-ui/app/html/directives/dependenciesGraphDv.html
@@ -16,4 +16,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
--->
\ No newline at end of file
+-->
+<svg >
+    <g/>
+</svg>
diff --git a/falcon-ui/app/html/directives/entitiesListDv.html b/falcon-ui/app/html/directives/entitiesListDv.html
index 7016de1..f791e50 100644
--- a/falcon-ui/app/html/directives/entitiesListDv.html
+++ b/falcon-ui/app/html/directives/entitiesListDv.html
@@ -52,9 +52,9 @@
             <span class="entypo play"></span> <div>Resume</div>
         </div>
         <div class="btn btn-default btn-xs buttons-to-show" ng-click="scopeSuspend()" ng-hide="selectedDisabledButtons.suspend" ng-if="type !== 'cluster'">
-            <span class="entypo paus"></span> <div>Suspend</div>
+            <span class="entypo paus"></span> <div>Pause</div>
         </div>
-        <div class="btn btn-default btn-xs buttons-to-show" ng-click="scopeEdit()" ng-hide="selectedRows.length === 0 || selectedRows.length > 1" ng-if="type !== 'cluster'">
+        <div class="btn btn-default btn-xs buttons-to-show" ng-click="scopeEdit()" ng-hide="selectedRows.length === 0 || selectedRows.length > 1">
             <span class="entypo cog"></span> <div>Edit</div>
         </div>
         <div class="btn btn-default btn-xs buttons-to-show" ng-click="scopeClone()" ng-hide="selectedRows.length === 0 || selectedRows.length > 1">
@@ -68,6 +68,8 @@
         </div>
       </td>
     </tr>
+  </tbody>
+  <tbody>
     <tr ng-if="input.length === 0 && !server.responses.listLoaded[type]">
       <td> loading {{ type }}s </td>
     </tr>
@@ -104,4 +106,4 @@
     </tr>
   </tbody>
 
-</table>
\ No newline at end of file
+</table>
diff --git a/falcon-ui/app/html/directives/entitiesSearchListDv.html b/falcon-ui/app/html/directives/entitiesSearchListDv.html
index 3e356fc..30dee7c 100644
--- a/falcon-ui/app/html/directives/entitiesSearchListDv.html
+++ b/falcon-ui/app/html/directives/entitiesSearchListDv.html
@@ -22,31 +22,39 @@
 <table class="listTable table" id="entitiesSearchList">
   <thead>
     <tr>
-      <th><div class="filtersSearchBox"><input type="checkbox" ng-model="selectedAll" ng-click="checkAll()"/></div></th>
+      <th><div class="filtersSearchBox pointer"><input type="checkbox" ng-model="selectedAll" ng-click="checkAll()"/></div></th>
       <th><div class="filtersSearchBox pointer" ng-click="toggleSortOrder()">Name <span class="glyphicon glyphicon-sort"></span></div> </th>
       <th><div class="filtersSearchBox">Tags</div></th>
-      <th><div class="filtersSearchBox">Cluster</div></th>
-      <th><div class="filtersSearchBox">Type</div></th>
-      <th><div class="filtersSearchBox">Status</div></th>
+      <th ng-if="$parent.$parent.$parent.entityType != 'cluster'"><div class="filtersSearchBox">Cluster</div></th>
+      <th ng-if="$parent.$parent.$parent.entityType != 'cluster'"><div class="filtersSearchBox">Type</div></th>
+      <th ng-if="$parent.$parent.$parent.entityType != 'cluster'"><div class="filtersSearchBox">Status</div></th>
     </tr>
+
   </thead>
 
   <tbody>
     <tr ng-if="input.length > 0" class="buttonsRow">
       <td class="buttonCell" colspan="9">
-        <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeSchedule()" ng-disabled="selectedDisabledButtons.schedule">
+        <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeSchedule()" ng-disabled="selectedDisabledButtons.schedule"
+           ng-if="$parent.$parent.$parent.entityType != 'cluster'">
           <span class="entypo play"></span> <div>Schedule</div>
         </div>
-        <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeResume()" ng-disabled="selectedDisabledButtons.resume">
+        <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeResume()" ng-disabled="selectedDisabledButtons.resume"
+           ng-if="$parent.$parent.$parent.entityType != 'cluster'">
           <span class="entypo play"></span> <div>Resume</div>
         </div>
-        <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeSuspend()" ng-disabled="selectedDisabledButtons.suspend">
-          <span class="entypo paus"></span> <div>Suspend</div>
+        <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeSuspend()" ng-disabled="selectedDisabledButtons.suspend"
+           ng-if="$parent.$parent.$parent.entityType != 'cluster'">
+          <span class="entypo paus"></span> <div>Pause</div>
         </div>
-        <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeEdit()" ng-disabled="selectedRows.length === 0 || selectedRows.length > 1">
+        <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeEdit()"
+          ng-disabled="selectedRows.length === 0 || selectedRows.length > 1 || ($parent.$parent.$parent.entityType === 'cluster' && (!isSafeMode() || !isSuperUser()))"
+          ng-class="{disabledEditBtn: $parent.$parent.$parent.entityType === 'cluster' && (!isSafeMode()  || !isSuperUser())}"
+          title="{{($parent.$parent.$parent.entityType === 'cluster' && (!isSafeMode() || !isSuperUser())) ? 'Cluster entity update can only be performed by superuser during safemode' : ''}}">
           <span class="entypo cog"></span> <div>Edit</div>
         </div>
-        <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeClone()" ng-disabled="selectedRows.length === 0 || selectedRows.length > 1">
+        <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeClone()" ng-disabled="selectedRows.length === 0 || selectedRows.length > 1"
+          ng-if="$parent.$parent.$parent.entityType != 'cluster'">
           <span class="entypo docs"></span> <div>Copy</div>
         </div>
         <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeRemove()" ng-disabled="selectedRows.length === 0">
@@ -57,7 +65,8 @@
         </div>
       </td>
     </tr>
-
+  </tbody>
+  <tbody>
     <tr ng-if="input.length === 0 && !server.responses.listLoaded">
       <td> loading... </td>
     </tr>
@@ -72,14 +81,15 @@
         ng-class="{
               firstEntityRow:$first, lastEntityRow:$last,
               rowSelected:checkedRow(item.name)
-            }">
+            }"
+        ng-class-odd="'oddRow'" ng-class-even="'evenRow'">
       <td class="checkboxCell">
         <input type="checkbox" checklist-model="selectedRows" ng-model="$index"
                checklist-value="{name:item.name, type:item.type, status:item.status}"
                ng-change="checkButtonsToShow()"/>
       </td>
       <td class="nameCell" ng-init="entityType = item.type | uppercase">
-        <button type="button" class="btn btn-default" ng-click="goEntityDetails(item.name, item.type)">
+        <button type="button" class="btn btn-link" ng-click="goEntityDetails(item.name, item.type)">
           <span ng-class="displayIcon((item.type | uppercase), item.tags.tag)"></span> {{ item.name }}
         </button>
       </td>
@@ -88,17 +98,17 @@
           {{ tag }}{{$last ? '' : ', '}}
         </span>
       </td>
-      <td>
+      <td ng-if="$parent.$parent.$parent.entityType != 'cluster'">
         <span ng-repeat="cluster in item.clusters.cluster">
           {{ cluster }}{{$last ? '' : ', '}}
         </span>
       </td>
-      <td>
+      <td ng-if="$parent.$parent.$parent.entityType != 'cluster'">
         <span ng-repeat="tag in item.tags.tag" ng-init="type = displayType(tag)">
           {{ type | uppercase}}
         </span>
       </td>
-      <td class="stateCell">
+      <td class="stateCell" ng-if="$parent.$parent.$parent.entityType != 'cluster'">
         <span ng-class="{'blink-success': item.status == 'RUNNING',
                          'text-success': item.status == 'SUCCEEDED',
                          'blink-warning': item.status == 'SUSPENDED',
@@ -114,7 +124,7 @@
       </td>
     </tr>
 
-    <tr>
+    <tr class="paginationRow">
       <td colspan="9">
         <nav class="pull-right">
           <ul class="pagination">
diff --git a/falcon-ui/app/html/directives/feedFormHdfsStorage.html b/falcon-ui/app/html/directives/feedFormHdfsStorage.html
new file mode 100644
index 0000000..143d155
--- /dev/null
+++ b/falcon-ui/app/html/directives/feedFormHdfsStorage.html
@@ -0,0 +1,139 @@
+<!--
+/**
+* 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.
+*/
+-->
+<div class="col-xs-24 plr0px">
+  <div class="col-xs-10 plr0px">
+    <div class="col-xs-24">
+      <label class="light">Cluster<mandatory-field></mandatory-field></label>
+    </div>
+    <div class="col-xs-24">
+      <select ng-model="cluster.name" name="clusterName"
+        class="form-control padding0" ng-required="required"
+        ng-change="findClusterExists(cluster.name, cluster.type, storageInfo.feedClusters)"
+        validation-message="{{validations.messages.cluster}}">
+        <option value="" disabled style='display:none;'>-Select {{cluster.type}} cluster-</option>
+        <option ng-repeat="clusterItem in storageInfo.clustersList"
+          value="{{clusterItem.name}}" ng-selected="cluster.name === clusterItem.name">
+          {{clusterItem.name}}
+        </option>
+      </select>
+    </div>
+    <div class="col-xs-24 custom-danger" ng-show="checkDuplicateClusterOnTarget()">
+      Target cannot be the same as the Source
+    </div>
+    <div class="col-xs-24 custom-danger" ng-show="clusterExists">
+      Cluster is already added
+    </div>
+    <div class="col-xs-24">
+      <label class="light">Data Path<mandatory-field></mandatory-field></label>
+    </div>
+    <div ng-repeat="location in cluster.storage.fileSystem.locations">
+      <div class="col-xs-24" ng-if="location.type==='data'">
+        <input type="text" name="dataPath"
+          placeholder="Enter Data Path"
+          ng-required="cluster.name"
+          validation-optional-message="{{validations.messages.path}}"
+          class="form-control"
+          ng-model="location.path" />
+      </div>
+    </div>
+    <div class="col-xs-24">
+      <a href="" ng-click="toggleAdvancedOptions()">MORE OPTIONS ></a>
+    </div>
+  </div>
+  <div class="col-xs-12 plr0px">
+    <div class="datasourceBox" ng-show="showingAdvancedOptions">
+      <div class="col-xs-24">
+        <label class="light">Statistics Path</label>
+      </div>
+      <div ng-repeat="location in cluster.storage.fileSystem.locations">
+        <div class="col-xs-24" ng-if="location.type==='stats'">
+          <input type="text" class="form-control" ng-model="location.path"/>
+        </div>
+      </div>
+      <div class="col-xs-24 validityBox plr0px">
+        <div class="col-xs-24 plr0px">
+          <div class="col-xs-12 startDateBox">
+            <label class="light">Start<mandatory-field></mandatory-field></label>
+              <input type="text"
+                name="startDateInput"
+                class="form-control dateInput"
+                placeholder="{{dateFormat | lowercase}}"
+                ng-model="cluster.validity.start.date"
+                simple-date-picker />
+          </div>
+          <div class="col-xs-12 startTimeBox">
+            <label class="light">Time<mandatory-field></mandatory-field></label>
+            <timepicker ng-change="constructDate()"
+              ng-model="cluster.validity.start.time"
+              hour-step="1"
+              minute-step="1"
+              show-meridian="true">
+            </timepicker>
+          </div>
+        </div>
+        <label class="col-xs-24 custom-danger validationMessageGral" ng-if="!cluster.validity.start.date">
+          {{validations.messages.date.empty}}
+        </label>
+        <div class="col-xs-24 plr0px">
+          <div class="col-xs-12 endDateBox">
+            <label class="light">End<mandatory-field></mandatory-field></label>
+                          <input type="text"
+                name="startDateInput"
+                class="form-control dateInput"
+                placeholder="{{dateFormat | lowercase}}"
+                ng-model="cluster.validity.end.date"
+                simple-date-picker />
+          </div>
+          <div class="col-xs-12 endTimeBox">
+            <label class="light">Time<mandatory-field></mandatory-field></label>
+            <timepicker ng-change="constructDate()"
+              ng-model="cluster.validity.end.time"
+              hour-step="1"
+              minute-step="1"
+              show-meridian="true">
+            </timepicker>
+          </div>
+        </div>
+        <label class="col-xs-24 custom-danger validationMessageGral" ng-if="!cluster.validity.end.date">
+          {{validations.messages.date.empty}}
+        </label>
+      </div>
+      <label class="light col-xs-24">Retention<mandatory-field></mandatory-field></label>
+      <div class="col-xs-24 inlineInputsGroup">
+        <input type="text" class="form-control" ng-model="cluster.retention.quantity"
+          ng-keydown="validations.acceptOnlyNumber($event)" ng-pattern="validations.patterns.twoDigits" />
+        <select ng-model="cluster.retention.unit">
+          <option selected value="minutes">minutes</option>
+          <option value="hours">hours</option>
+          <option value="days">days</option>
+          <option value="months">months</option>
+        </select>
+      </div>
+    </div>
+  </div>
+</div>
+<div class="col-xs-24 mt10">
+  <a ng-click="reset()" ng-if="!storageInfo.readOnly">Reset</a>
+  <button class="btn datasourceBtn" ng-if="!storageInfo.readOnly"
+    ng-disabled="cluster.name==='' || !cluster.storage.fileSystem.locations[0].path || cluster.storage.fileSystem.locations[0].path ==='' || clusterExists"
+    ng-click="addCluster({type : storageInfo.type, dataTransferType : 'hdfs'})">Add {{buttonText}}</button>
+  <button class="btn datasourceBtn" ng-click="deleteCluster()"
+    ng-if="(storageInfo.feedClusters | filter:{type: cluster.type}).length > 1">Delete</button>
+</div>
diff --git a/falcon-ui/app/html/directives/feedFormHiveStorage.html b/falcon-ui/app/html/directives/feedFormHiveStorage.html
new file mode 100644
index 0000000..655a973
--- /dev/null
+++ b/falcon-ui/app/html/directives/feedFormHiveStorage.html
@@ -0,0 +1,132 @@
+<!--
+/**
+* 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.
+*/
+-->
+<div class="col-xs-24 plr0px">
+  <div class="col-xs-10 plr0px">
+    <div class="datasourceBox">
+      <div class="col-xs-24">
+        <label class="light">Cluster<mandatory-field></mandatory-field></label>
+      </div>
+      <div class="col-xs-24">
+        <select ng-model="cluster.name" class="form-control padding0" ng-required="required"
+          ng-change="findClusterExists(cluster.name, cluster.type, storageInfo.feedClusters)"
+          validation-message="{{validations.messages.cluster}}">
+          <option value="" disabled style='display:none;'>-Select {{cluster.type}} cluster-</option>
+          <option ng-repeat="clusterItem in storageInfo.clustersList"
+            value="{{clusterItem.name}}" ng-selected="cluster.name === clusterItem.name">
+          {{clusterItem.name}}
+          </option>
+        </select>
+      </div>
+      <div class="col-xs-24 custom-danger" ng-show="checkDuplicateClusterOnTarget()">
+        Target cannot be the same as the Source
+      </div>
+      <div class="col-xs-24 custom-danger" ng-show="clusterExists">
+        Cluster is already added
+      </div>
+      <div class="col-xs-24">
+        <label class="light" tooltip="feed.storage.tableUri">
+          Table URI<mandatory-field></mandatory-field>
+        </label>
+      </div>
+      <div class="col-xs-24">
+        <input type="text"
+          placeholder="Enter table uri"
+          class="form-control"
+          ng-required="cluster.name"
+          validation-optional-message="{{validations.messages.tableUri}}"
+          ng-model="cluster.storage.catalog.catalogTable.uri" />
+      </div>
+      <div class="col-xs-24">
+        <a href="" ng-click="toggleAdvancedOptions()">MORE OPTIONS ></a>
+      </div>
+    </div>
+  </div>
+  <div class="col-xs-12 plr0px">
+    <div class="datasourceBox" ng-show="showingAdvancedOptions">
+      <div class="col-xs-24 validityBox plr0px">
+        <div class="col-xs-24 plr0px">
+          <div class="col-xs-12 startDateBox">
+            <label class="light">Start<mandatory-field></mandatory-field></label>
+            <input type="text"
+              name="startDateInput"
+              class="form-control dateInput"
+              placeholder="{{dateFormat | lowercase}}"
+              ng-model="cluster.validity.start.date"
+              simple-date-picker />
+          </div>
+          <div class="col-xs-12 startTimeBox">
+            <label class="light">Time<mandatory-field></mandatory-field></label>
+            <timepicker ng-change="constructDate()"
+              ng-model="cluster.validity.start.time"
+              hour-step="1"
+              minute-step="1"
+              show-meridian="true">
+            </timepicker>
+          </div>
+        </div>
+        <label class="col-xs-24 custom-danger validationMessageGral" ng-if="!cluster.validity.start.date">
+          {{validations.messages.date.empty}}
+        </label>
+        <div class="col-xs-24 plr0px">
+          <div class="col-xs-12 endDateBox">
+            <label class="light">End<mandatory-field></mandatory-field></label>
+            <input type="text"
+              name="startDateInput"
+              class="form-control dateInput"
+              placeholder="{{dateFormat | lowercase}}"
+              ng-model="cluster.validity.end.date"
+              simple-date-picker />
+          </div>
+          <div class="col-xs-12 endTimeBox">
+            <label class="light">Time<mandatory-field></mandatory-field></label>
+            <timepicker ng-change="constructDate()"
+              ng-model="cluster.validity.end.time"
+              hour-step="1"
+              minute-step="1"
+              show-meridian="true">
+            </timepicker>
+          </div>
+        </div>
+        <label class="col-xs-24 custom-danger validationMessageGral" ng-if="!cluster.validity.end.date">
+          {{validations.messages.date.empty}}
+        </label>
+      </div>
+      <label class="light col-xs-24">Retention<mandatory-field></mandatory-field></label>
+      <div class="col-xs-24 inlineInputsGroup">
+        <input type="text" class="form-control" ng-required="required" ng-model="cluster.retention.quantity" ng-keydown="validations.acceptOnlyNumber($event)" ng-pattern="validations.patterns.twoDigits">
+        <select ng-model="cluster.retention.unit" ng-keydown="validations.acceptOnlyNumber({$event:$event})" ng-required="required">
+          <option selected value="minutes">minutes</option>
+          <option value="hours">hours</option>
+          <option value="days">days</option>
+          <option value="months">months</option>
+        </select>
+      </div>
+    </div>
+  </div>
+</div>
+
+<div class="col-xs-24 mt10">
+  <a ng-click="reset()" ng-if="!storageInfo.readOnly">Reset</a>
+  <button class="btn datasourceBtn" ng-if="!storageInfo.readOnly"
+    ng-disabled="cluster.name === '' || !cluster.storage.catalog.catalogTable.uri || $scope.cluster.name === '' || $scope.cluster.storage.catalog.catalogTable.uri==='' || clusterExists"
+    ng-click="addCluster({type : storageInfo.type, dataTransferType : 'hive'})">Add {{buttonText}}</button>
+  <button class="btn datasourceBtn" ng-click="deleteCluster()"
+    ng-if="(storageInfo.feedClusters | filter:{type: cluster.type}).length > 1">Delete</button>
+</div>
diff --git a/falcon-ui/app/html/directives/instancesListDv.html b/falcon-ui/app/html/directives/instancesListDv.html
index 5abc9d3..a3cc193 100644
--- a/falcon-ui/app/html/directives/instancesListDv.html
+++ b/falcon-ui/app/html/directives/instancesListDv.html
@@ -17,34 +17,28 @@
  * limitations under the License.
  */
 -->
-<table class="listTable table" id="instancesList">
+<table class="listTable table">
   <thead>
   <tr>
-    <th><div class="filtersSearchBox vertical-align"><input type="checkbox" ng-model="selectedAll" ng-click="checkAll()"/></div></th>
-    <th><div class="filtersSearchBox vertical-align">Instance</div></th>
-    <th><div class="filtersSearchBox">Started&nbsp;<span class="glyphicon glyphicon-sort pointer" ng-click="filterInstances('startTime')"></span>
-      <input type="text" class="form-control dateInput" ng-model="startFilter" ng-keypress="validateDate($event, 'start');"
-             ng-enter="filterInstances('startTime')" placeholder="mm/dd/yyyy hh:mm">
-      <label class="error" ng-if="startFilterError">Incorrect Date Format</label>
-      <label class="error" ng-if="startAfterEndError">Start date should be before end date</label>
-      <label class="error" ng-if="startAfterNominalError">Start date should be after nominal start date {{ start }}</label>
-      <label class="error" ng-if="startBeforeNominalError">Start date should be before nominal end date {{ end }}</label>
+    <th class="align-top"><div class="filtersSearchBox vertical-align pt35px"><input type="checkbox" ng-model="selectedAll" ng-click="checkAll()"/></div></th>
+    <th class="align-top"><div class="filtersSearchBox vertical-align">Instance</div>
+		 <input type="text" class="form-control" placeholder="instance" restrict="reject">
+	</th>
+    <th class="align-top"><div class="filtersSearchBox" ng-class="{showMessage:!startDateValid, showValidationStyle :!startDateValid, validationMessageParent:!startDateValid}">Started&nbsp;<span class="glyphicon glyphicon-sort pointer" ng-click="filterInstances('startTime')"></span>
+      <input type="text" title="Date should be entered in {{dateFormat | lowercase}} format." class="form-control dateInput" ng-model="startFilter" ng-enter="filterInstances('startTime')" placeholder="{{dateFormat | lowercase}}" ng-keypress="validateDate($event,'start')">
+      <label class="custom-danger validationMessageGral" ng-if="!startDateValid">You need to provide a valid date</label>
     </div></th>
-    <th><div class="filtersSearchBox">Ended&nbsp;<span class="glyphicon glyphicon-sort pointer" ng-click="filterInstances('endTime')"></span>
-      <input type="text" class="form-control dateInput" ng-model="endFilter" ng-keypress="validateDate($event, 'end');"
-             ng-enter="filterInstances('endTime')" placeholder="mm/dd/yyyy hh:mm">
-      <label class="error" ng-if="endFilterError">Incorrect Date Format</label>
-      <label class="error" ng-if="endAfterNominalError">End date should be after nominal start date {{ start }}</label>
-      <label class="error" ng-if="endBeforeNominalError">End date should be before nominal end date {{ end }}</label>
+    <th class="align-top"><div class="filtersSearchBox" ng-class="{showMessage:!endDateValid, showValidationStyle :!endDateValid, validationMessageParent:!endDateValid}">Ended&nbsp;<span class="glyphicon glyphicon-sort pointer" ng-click="filterInstances('endTime')"></span>
+      <input type="text" title="Date should be entered in {{dateFormat | lowercase}} format." class="form-control dateInput" ng-model="endFilter" ng-enter="filterInstances('startTime')" placeholder="{{dateFormat | lowercase}}" ng-keypress="validateDate($event,'end')">
+      <label class="custom-danger validationMessageGral" ng-if="!endDateValid">You need to provide a valid date</label>
     </div></th>
-    <th>
+    <th class="align-top">
       <div class="filtersSearchBox">Status&nbsp;<span class="glyphicon glyphicon-sort pointer" ng-click="filterInstances('status')"></span>
         <select class="form-control padding0" ng-model="statusFilter" ng-change="filterInstances('startTime')">
           <option value="">ALL</option>
           <option value="RUNNING">RUNNING</option>
           <option value="SUCCEEDED">SUCCEEDED</option>
           <option value="SUSPENDED">SUSPENDED</option>
-          <option value="WAITING">WAITING</option>
           <option value="KILLED">KILLED</option>
         </select>
       </div>
@@ -54,18 +48,18 @@
 
   <tbody>
   <tr ng-if="input.length > 0" class="buttonsRow">
-    <td class="buttonCell" colspan="9">
+    <td class="buttonCell border0px" colspan="9">
       <div class="btn btn-gray btn-xs buttons-to-show" ng-click="download()" ng-disabled="selectedRows.length === 0 || selectedRows.length > 1">
         <span class="entypo down"></span> <div>Log</div>
       </div>
-      <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeResume()" ng-disabled="selectedDisabledButtons.resume">
+      <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeResume()" ng-disabled="selecteisabledButtons.resume">
         <span class="entypo play"></span> <div>Resume</div>
       </div>
       <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeRerun()" ng-disabled="selectedDisabledButtons.rerun">
         <span class="entypo play"></span> <div>Rerun</div>
       </div>
       <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeSuspend()" ng-disabled="selectedDisabledButtons.suspend">
-        <span class="entypo paus"></span> <div>Suspend</div>
+        <span class="entypo paus"></span> <div>Pause</div>
       </div>
       <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeKill()" ng-disabled="selectedDisabledButtons.stop">
         <span class="entypo stop"></span> <div>Kill</div>
@@ -107,18 +101,18 @@
     <td>
       <!--{{ item.startTime }}<br/>-->
       <!--{{ item.startTime | date :'yyyy-MM-ddTHH:mm:ssZ' }}<br/>-->
-      {{ item.startTime | date :'MM/dd/yyyy HH:mm'}}
+      {{ item.startTime | date : dateFormat}}
     </td>
     <td>
-      {{ item.endTime | date :'MM/dd/yyyy HH:mm'}}
+      {{ item.endTime | date : dateFormat}}
     </td>
     <td class="stateCell">
       <span ng-class="{
-      'blink-success': item.status == 'RUNNING',
-      'text-success': item.status == 'SUCCEEDED',
-      'blink-warning': item.status == 'WAITING' || item.status == 'UNKNOWN',
-      'blink-danger': item.status == 'SUSPENDED',
-      'text-danger': item.status == 'FAILED' || item.status == 'KILLED',
+        'blink-success': item.status == 'RUNNING',
+        'text-success': item.status == 'SUCCEEDED',
+        'blink-warning': item.status == 'WAITING' || item.status == 'UNKNOWN',
+        'blink-danger': item.status == 'SUSPENDED',
+        'text-danger': item.status == 'FAILED' || item.status == 'KILLED',
       }">{{ item.status }}</span>
     </td>
 
@@ -131,7 +125,7 @@
     </td>
   </tr>
 
-  <tr>
+  <tr class="paginationRow">
     <td colspan="5">
       <nav class="pull-right">
         <ul class="pagination">
diff --git a/falcon-ui/app/html/directives/lineageGraphDv.html b/falcon-ui/app/html/directives/lineageGraphDv.html
index 93a2896..7e01d78 100644
--- a/falcon-ui/app/html/directives/lineageGraphDv.html
+++ b/falcon-ui/app/html/directives/lineageGraphDv.html
@@ -20,10 +20,10 @@
 <div id="lineageGraph">
   <h4><small>Legends</small></h4>
   <ul class="lineage-legend">
-    <li class="lineage-legend-feed-inst">Feed instance</li>
-    <li class="lineage-legend-feed-inst lineage-legend-terminal">Feed instance (terminal)</li>
-    <li class="lineage-legend-process-inst">Process instance</li>
-    <li class="lineage-legend-process-inst lineage-legend-terminal">Process instance (terminal)</li>
+    <li class="lineage-legend-feed-inst"><span>Feed instance</span></li>
+    <li class="lineage-legend-feed-inst lineage-legend-terminal"><span>Feed instance (terminal)</span></li>
+    <li class="lineage-legend-process-inst"><span>Process instance</span></li>
+    <li class="lineage-legend-process-inst lineage-legend-terminal"><span>Process instance (terminal)</span></li>
   </ul>
 </div>
 <div>
diff --git a/falcon-ui/app/html/directives/navDv.html b/falcon-ui/app/html/directives/navDv.html
index 63046f6..cffc170 100644
--- a/falcon-ui/app/html/directives/navDv.html
+++ b/falcon-ui/app/html/directives/navDv.html
@@ -17,84 +17,216 @@
  * limitations under the License.
  */
 -->
-<nav class="col-sm-24 navbar navbar-default" role="navigation">
-  <div class="col-sm-offset-1 col-sm-22">
-    <button class="logoTitle" ui-sref="main">
+<nav class="col-sm-24 navbar navbar-default header1" role="navigation">
+  <div class="col-sm-offset-2 col-sm-20">
+    <a class="btn-link logoTitle" ui-sref="main">
       <h1 class="navbar-header">
-        <span class="falconLogo"></span> <span>Falcon</span>
+        <span class="falconLogo"></span>
       </h1>
-    </button>
-
-      <div class="createNavWrapper" ng-show="userLogged()">
-        <h4>Create an entity</h4>
-        <button type="button"
-                id="cluster.create"
-                ng-click="resetCluster()"
-                ng-disabled="isInForm('cluster')"
-                ng-class="{disabled:isInForm('cluster')}">
-          <span class="entypo archive"></span> <span>Cluster</span>
-        </button>
-        <button type="button"
-                id="feed.create"
-                ng-click="resetFeed()"
-                ng-disabled="isInForm('feed')"
-                ng-class="{disabled:isInForm('feed')}">
-          <span class="entypo download"></span> <span>Feed</span>
-        </button>
-        <button type="button"
-                id="process.create"
-                ng-click="resetProcess()"
-                ng-disabled="isInForm('process')"
-                ng-class="{disabled:isInForm('process')}">
-          <span class="entypo cycle"></span> <span>Process</span>
-        </button>
-        <button type="button"
-                id="dataset.create"
-                ng-click="resetDataset()"
-                ng-disabled="isInForm('dataset')"
-                ng-class="{disabled:isInForm('dataset')}">
-          <span class="glyphicon glyphicon-duplicate"></span> <span>Mirror</span>
-        </button>
-      </div>
-
-    <div class="uploadNavWrapper" ng-show="userLogged()">
-      <h4>Upload an entity</h4>
-      <div class="btn-file" ng-class="{fakeFocus: fake.focus}">
-        <span class="entypo up"></span>
-        <input type="file"
-               id="files"
-               ng-focus="fake.focus = true"
-               ng-blur="fake.focus = false"
-               name="files[]"
-               multiple
-               fileinput-change="handleFile"
-               ng-model="fileJson">
-        <span>Browse for the XML file</span>
-      </div>
-    </div>
-
-    <div class="loginHeaderBox">
-      <div ng-show="userLogged()">
-        <span class="user"></span> <div><strong>{{userToken}}</strong></div>
-      </div>
-
-      <button ng-show="userLogged() && !ambariView() && !isSecureMode()" ng-click="logOut()" ng-class="responses.unreaded > 0 ? 'logoutBT' : ''">
-        <span class="glyphicon glyphicon-log-out header-icon"></span> <div><strong class="pointer">Logout</strong></div>
-      </button>
-
-      <button ng-click="notify()" ng-blur="hideNotifs()" class="no-outline">
-        <span class="badge badge-notify" ng-show="responses.unreaded > 0">{{ responses.unreaded }}</span>
-        <span class="glyphicon glyphicon-bell bell-notif header-icon"></span>
-        <strong class="pointer">Notifications</strong>
-        <div class="notifications">
+    </a>
+    <div class="loginHeaderBox" ng-show="userLogged()">
+        <!--<button type="button" class="btn btn-lg btn-link" data-ng-click="showMenu=!showMenu">
+            <span class="glyphicon glyphicon-th" aria-hidden="true"></span>
+        </button>-->
+        <!-- <div class="dropdown visible-lg-inline-block">
+            <a class="btn btn-link dropdown-toggle" data-ng-click="" id="settingMenu"
+              data-toggle="dropdown" aria-expanded="true" role="button">
+                <span class="glyphicon glyphicon-th"></span>
+            </a>
+            <ul class="dropdown-menu pull-right" role="menu" aria-labelledby="settingMenu">
+              <li role="presentation" role="menuitem" tabindex="-1">
+                  <button type="button" class="btn btn-link" data-ng-click="displayEntities('cluster')">
+                      Clusters
+                  </button>
+              </li>
+            </ul>
+        </div> -->
+        <span class="entypo archive icon-lg entypo-align-sub" title="Clusters" data-ng-click="displayEntities('cluster')">&nbsp;</span>
+        <span class="separator"> | </span>
+        <span class="notifications">
+          <button class="btn btn-link" ng-click="notify()">
+            <span class="glyphicon glyphicon-bell" title="Notifications"></span>
+          </button>
           <server-messages></server-messages>
+        </span>
+        <span class="separator"> | </span>
+        <div class="dropdown visible-lg-inline-block">
+            <div class="dropdown-toggle pointer" id="userMenu" data-toggle="dropdown" aria-expanded="true" role="button">
+              <span class="user hide"></span>{{userToken}} <span class="caret"></span>
+            </div>
+            <ul class="dropdown-menu pull-right" role="menu" aria-labelledby="userMenu">
+                <li role="presentation">
+                  <a class="btn btn-link" ng-show="userLogged() && !ambariView()" ng-click="logOut()">
+                      <span class="glyphicon glyphicon-log-out" title="Logout"></span>
+                      Logout
+                  </a>
+                </li>
+                <li>
+                  <a class="btn btn-link"
+                        href="https://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.3.4/bk_data_governance/content/ch_hdp_data_governance_overview.html"
+                        target="_blank">
+                    <span class="glyphicon glyphicon-question-sign" title="Help"></span>
+                    Help
+                  </a>
+                </li>
+                <li><a class="btn btn-link" href="http://hortonworks.com/hadoop/falcon/" target="_blank">
+                    <span class="glyphicon glyphicon-info-sign" title="About"></span>
+                    About
+                </a></li>
+            </ul>
         </div>
-      </button>
-
-      <a href="http://hortonworks.com/hadoop/falcon/">
-        <span class="glyphicon glyphicon-question-sign header-icon"></span> <div>Help</div>
-      </a>
     </div>
+  </div>
+</nav>
+<nav class="col-sm-24 navbar navbar-default header2" role="navigation" ng-show="userLogged()">
+
+  <div class="col-sm-16" ng-show="userLogged()">
+      <div class="row searchBoxContainer">
+          <div class=" col-sm-offset-4 col-sm-16">
+              <!--<i class="glyphicon glyphicon-refresh search-loading-icon" ng-show="loading"></i>-->
+              <img src="css/img/ajax-loader.gif" class="glyphicon search-loading-icon" ng-show="loading"/>
+              <!--<tags-input ng-model="tags" min-length="1" add-on-space="true" on-tag-added="displayResults()"-->
+              <!--on-tag-removed="displayResults()"></tags-input>-->
+
+              <tags-input ng-model="tags" min-length="1" add-on-space="true" add-from-autocomplete-only="true"
+                          on-tag-added="displayResults()" on-tag-removed="displayResults(true)" placeholder="Search">
+                  <auto-complete source="loadTags($query)" min-length="0"></auto-complete>
+              </tags-input>
+              <!--ng-class="tags.length > 0 ? 'question-icon' : 'remove-icon'"-->
+              <i id="nsPopover" class="glyphicon glyphicon-question-sign question-icon"
+                 ns-popover
+                 ns-popover-template="menu"
+                 ns-popover-trigger="click"
+                 ns-popover-theme="ns-popover-tooltip-theme"
+                 ns-popover-timeout="5"
+                 ns-popover-placement="bottom|right"></i>
+              <i class="glyphicon glyphicon-search search-icon" ng-hide="loading" ng-click="displayResults()"></i>
+              <script type="text/ng-template" id="menu">
+                  <div class="triangle"></div>
+                  <div class="ns-popover-tooltip">
+                      <h5>Hey there! Want some search tips?</h5>
+                      The <strong>first word</strong> you type will be taken as the <strong>Name</strong> of the entity.
+                      <br/>
+                      You can search <strong>*</strong> for getting all the entities.
+                      <br/>
+                      The <strong>second and following</strong> words will be taken as <strong> Tags</strong>.
+                      <br/>
+                      For filtering by type, write <strong>type=feed|process|mirror</strong>
+                  </div>
+              </script>
+              <i class="glyphicon glyphicon-remove remove-icon" ng-if="tags.length > 0" ng-click="clearTags()"></i>
+          </div>
+      </div>
+  </div>
+
+  <div class="col-sm-8 uploadNavWrapper">
+    <div class="dropdown">
+          <!--<img src="css/img/32x32_create-entity.png" data-ng-click="showMenu=false" class="dropdown-toggle btn-create"
+            title="Create entity" id="entityMenu" data-toggle="dropdown" aria-expanded="true" role="button" />-->
+          <button class="dropdown-toggle btn-create" title="Create entity" id="entityMenu"
+            data-toggle="dropdown" aria-expanded="true" role="button">
+            Create <span class="caret"></span>
+          </button>
+          <ul class="dropdown-menu" role="menu" aria-labelledby="entityMenu">
+              <li role="presentation">
+                  <button class="cluster btn btn-link" role="menuitem" tabindex="-1" type="button" id="cluster.create"
+                    ng-click="resetCluster()" ng-disabled="isInForm('cluster')">
+                    <span title="Cluster">Cluster</span>
+                  </button>
+              </li>
+              <li role="presentation">
+                  <button class="feed btn btn-link" role="menuitem" tabindex="-1" type="button" id="feed.create"
+                    ng-click="resetFeed()" ng-disabled="isInForm('feed')">
+                    <span title="Feed">Feed</span>
+                  </button>
+              </li>
+              <li role="presentation">
+                  <button class="process btn btn-link" role="menuitem" tabindex="-1" type="button" id="process.create"
+                    ng-click="resetProcess()" ng-disabled="isInForm('process')">
+                    <span title="Process">Process</span>
+                  </button>
+              </li>
+              <li role="presentation">
+                <div class="dropdown open">
+                  <button class="dataset btn btn-link" role="menuitem" tabindex="-1" type="button" id="dataset.create"
+                    ng-click="resetDataset('HDFS')" ng-disabled="isInForm('dataset')  && isMirror('HDFS')">
+                    <span title="Mirror">Mirror</span>
+                  </button>
+                  <ul class="dropdown-submenu" role="menu" aria-labelledby="dataset.create">
+                    <li role="presentation">
+                      <button class="hdfsMirror btn btn-link" role="menuitem" tabindex="-2" type="button"
+                        id="hdfsMirror.create" ng-click="resetDataset('HDFS')" ng-disabled="isInForm('dataset') && isMirror('HDFS')">
+                        <span title="File System">File System</span>
+                      </button>
+                    </li>
+                    <li role="presentation">
+                      <button class="hiveMirror btn btn-link" role="menuitem" tabindex="-2" type="button"
+                        id="hiveMirror.create" ng-click="resetDataset('HIVE')" ng-disabled="isInForm('dataset') && isMirror('HIVE')">
+                        <span title="Hive">Hive</span>
+                      </button>
+                    </li>
+                    <li role="presentation">
+                      <button class="snapshot btn btn-link" role="menuitem" tabindex="-2" type="button"
+                        id="snapshot.create" ng-click="resetSnapshot()" ng-disabled="isInForm('snapshot')">
+                        <span title="Snapshot">Snapshot</span>
+                      </button>
+                    </li>
+                  </ul>
+              </li>
+              <li role="presentation">
+                  <button class="dataset btn btn-link" role="menuitem" tabindex="-1" type="button" id="datasource.create" ng-click="resetDatasource()" ng-disabled="isInForm('datasource')" ng-class="{disabled:isInForm('datasource')}">
+                    <span title="Data Source">Data Source</span>
+                  </button>
+              </li>
+          </ul>
+      </div>
+      <div class="dropdown">
+          <!--<img src="css/img/32x32_upload.png" data-ng-click="showMenu=false" class="dropdown-toggle btn-upload"
+          title="Upload an entity definition" id="uploadMenu" data-toggle="dropdown"
+          aria-expanded="true" role="button" />-->
+          <button class="dropdown-toggle btn-upload" title="Upload an entity definition" id="uploadMenu"
+            data-toggle="dropdown" aria-expanded="true" role="button">Import<span class="caret"></span></button>
+          <ul class="dropdown-menu" role="menu" aria-labelledby="uploadMenu">
+              <li role="presentation" class="btn-file">
+                  <button class="btn btn-link" role="menuitem" tabindex="-1" type="button">
+                      <span title="Xml file">Xml file</span>
+                  </button>
+                  <input type="file"
+                         id="files"
+                         ng-focus="fake.focus = true"
+                         ng-blur="fake.focus = false"
+                         name="files[]"
+                         multiple
+                         fileinput-change="handleFile"
+                         ng-model="fileJson" />
+              </li>
+          </ul>
+      </div>
 
   </div>
 </nav>
+
+<!--
+<nav class="col-sm-24 navbar navbar-default header3" role="navigation" ng-show="userLogged() && showMenu">
+    <div class="col-sm-offset-4 col-sm-18">
+        <div class="loginHeaderBox">
+            <a class="btn btn-link" ng-click="notify()">
+                <span class="glyphicon glyphicon-bell" title="Notifications"></span>
+                <div class="notifications">
+                    <server-messages></server-messages>
+                </div>
+            </a>
+            <a class="btn btn-link" ng-show="userLogged() && !ambariView()" ng-click="logOut()">
+                <span class="glyphicon glyphicon-log-out" title="Logout"></span>
+            </a>
+            <a class="btn btn-link"
+              href="http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.1.1/bk_falcon/bk_falcon-20140422.pdf"
+              target="_blank">
+                <span class="glyphicon glyphicon-question-sign" title="Help"></span>
+            </a>
+            <a class="btn btn-link" href="http://hortonworks.com/hadoop/falcon/" target="_blank">
+                <span class="glyphicon glyphicon-info-sign" title="About"></span>
+            </a>
+        </div>
+    </div>
+</nav>-->
diff --git a/falcon-ui/app/html/directives/serverMessagesDv.html b/falcon-ui/app/html/directives/serverMessagesDv.html
index dd5a2a2..3910831 100644
--- a/falcon-ui/app/html/directives/serverMessagesDv.html
+++ b/falcon-ui/app/html/directives/serverMessagesDv.html
@@ -20,7 +20,7 @@
 
 <div class="messagesArrow notifs" ng-show="server.responses.queue.length > 0"></div>
 <div class="messages notifs">
-
+  <div ng-if="showClose" class='notif-close'><button type='button' class='close' ng-click="close()">&times;</button></div>
   <div ng-show="server.responses.showAll" ng-repeat="message in server.responses.queue | reverse" class="message"
       ng-class="{ 'color-warning' : message.type === 'warning' || message.type === 'cancel',
                     'color-success' : message.type === 'success',
diff --git a/falcon-ui/app/html/directives/timeZoneSelectDv.html b/falcon-ui/app/html/directives/timeZoneSelectDv.html
index f15bed7..f1ba102 100644
--- a/falcon-ui/app/html/directives/timeZoneSelectDv.html
+++ b/falcon-ui/app/html/directives/timeZoneSelectDv.html
@@ -17,7 +17,8 @@
  * limitations under the License.
  */
 -->
-<select class="padding0 TZSelect form-control" ng-model="ngModel">
+<select class="padding0 TZSelect form-control" ng-model="ngModel"
+  ng-required="required">
   <option value="" disabled style='display:none;'>-Select timezone-</option>
   <option value="UTC">UTC</option>
   <option value="GMT-12:00">(GMT -12:00) Eniwetok, Kwajalein</option>
@@ -29,7 +30,7 @@
   <option value="GMT-06:00">(GMT -6:00) Central Time (US &amp; Canada), Mexico City</option>
   <option value="GMT-05:00">(GMT -5:00) Eastern Time (US &amp; Canada), Bogota, Lima</option>
   <option value="GMT-04:00">(GMT -4:00) Atlantic Time (Canada), Caracas, La Paz</option>
-  <option value="GMT-03:50">(GMT -3:30) Newfoundland</option>
+  <option value="GMT-03:30">(GMT -3:30) Newfoundland</option>
   <option value="GMT-03:00">(GMT -3:00) Brazil, Buenos Aires, Georgetown</option>
   <option value="GMT-02:00">(GMT -2:00) Mid-Atlantic</option>
   <option value="GMT-01:00">(GMT -1:00 hour) Azores, Cape Verde Islands</option>
@@ -37,17 +38,17 @@
   <option value="GMT+01:00">(GMT +1:00 hour) Brussels, Copenhagen, Madrid, Paris</option>
   <option value="GMT+02:00">(GMT +2:00) Kaliningrad, South Africa</option>
   <option value="GMT+03:00">(GMT +3:00) Baghdad, Riyadh, Moscow, St. Petersburg</option>
-  <option value="GMT+03:50">(GMT +3:30) Tehran</option>
+  <option value="GMT+03:30">(GMT +3:30) Tehran</option>
   <option value="GMT+04:00">(GMT +4:00) Abu Dhabi, Muscat, Baku, Tbilisi</option>
-  <option value="GMT+04:50">(GMT +4:30) Kabul</option>
+  <option value="GMT+04:30">(GMT +4:30) Kabul</option>
   <option value="GMT+05:00">(GMT +5:00) Ekaterinburg, Islamabad, Karachi, Tashkent</option>
-  <option value="GMT+05:50">(GMT +5:30) Bombay, Calcutta, Madras, New Delhi</option>
-  <option value="GMT+05:75">(GMT +5:45) Kathmandu</option>
+  <option value="GMT+05:30">(GMT +5:30) Bombay, Calcutta, Madras, New Delhi</option>
+  <option value="GMT+05:45">(GMT +5:45) Kathmandu</option>
   <option value="GMT+06:00">(GMT +6:00) Almaty, Dhaka, Colombo</option>
   <option value="GMT+07:00">(GMT +7:00) Bangkok, Hanoi, Jakarta</option>
   <option value="GMT+08:00">(GMT +8:00) Beijing, Perth, Singapore, Hong Kong</option>
   <option value="GMT+09:00">(GMT +9:00) Tokyo, Seoul, Osaka, Sapporo, Yakutsk</option>
-  <option value="GMT+09:50">(GMT +9:30) Adelaide, Darwin</option>
+  <option value="GMT+09:30">(GMT +9:30) Adelaide, Darwin</option>
   <option value="GMT+10:00">(GMT +10:00) Eastern Australia, Guam, Vladivostok</option>
   <option value="GMT+11:00">(GMT +11:00) Magadan, Solomon Islands, New Caledonia</option>
   <option value="GMT+12:00">(GMT +12:00) Auckland, Wellington, Fiji, Kamchatka</option>
diff --git a/falcon-ui/app/html/entityDetailsTpl.html b/falcon-ui/app/html/entityDetailsTpl.html
index 6f1a4bc..2afefac 100644
--- a/falcon-ui/app/html/entityDetailsTpl.html
+++ b/falcon-ui/app/html/entityDetailsTpl.html
@@ -19,58 +19,101 @@
 -->
 <div class="container" id="entityDetails">
 
-  <div class="row">
-    <div class="col-sm-24">
-      <button class="btn " ui-sref="main">< Back to Search</button>
+  <div class="row pt15px">
+    <div class="col-sm-24 detailsHeaders pl0px">
+	<button class="btn" title="Back to search" ui-sref="main">< </button>
+		<span class="entityName">{{entity.name}}</span>
+        <span ng-class="{'blink-success': entity.status == 'RUNNING',
+                     'text-success': entity.status == 'SUCCEEDED',
+                     'blink-warning': entity.status == 'SUSPENDED',
+                     'blink-danger': entity.status == 'UNKNOWN'}"  ng-if="entity.type != 'cluster'">
+                     {{entity.status}}</span>
+    <br><br>
+    <div class="pull-left">
+      <table>
+        <tbody>
+          <tr>
+            <td class="buttonCell" colspan="9">
+          <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scheduleEntity()" ng-if="entity.type != 'cluster' && entity.status == 'SUBMITTED'">
+            <span class="entypo play"></span> <div>Schedule</div>
+          </div>
+          <div class="btn btn-gray btn-xs buttons-to-show" ng-click="resumeEntity()" ng-if="entity.type != 'cluster' && entity.status == 'SUSPENDED'">
+            <span class="entypo play"></span> <div>Resume</div>
+          </div>
+          <div class="btn btn-gray btn-xs buttons-to-show" ng-click="suspendEntity()" ng-if="entity.type != 'cluster' && entity.status == 'RUNNING'">
+            <span class="entypo paus"></span> <div>Pause</div>
+          </div>
+          <div class="btn btn-gray btn-xs buttons-to-show" ng-click="editEntity()"
+            ng-disabled="entity.type === 'cluster' && (!isSafeMode() || !isSuperUser())"
+            ng-class="{disabledEditBtn: entity.type === 'cluster' && (!isSafeMode() || !isSuperUser())}"
+            title="{{(entity.type === 'cluster' && !isSafeMode() || (!isSuperUser())) ? 'Cluster entity update can only be performed by superuser during safemode' : ''}}">
+            <span class="entypo cog"></span> <div>Edit</div>
+          </div>
+          <div class="btn btn-gray btn-xs buttons-to-show" ng-click="cloneEntity()"  ng-if="entity.type != 'cluster'">
+            <span class="entypo docs"></span> <div>Copy</div>
+          </div>
+          <div class="btn btn-gray btn-xs buttons-to-show" ng-click="deleteEntity()">
+            <span class="entypo trash"></span> <div>Delete</div>
+          </div>
+          <div class="btn btn-gray btn-xs buttons-to-show" ng-click="downloadEntity()">
+            <span class="entypo down"></span> <div>XML</div>
+          </div>
+        </td>
+      </tr>
+      </tbody>
+      </table>
+
+    </div>
     </div>
   </div>
-
+<!--*
 	<h3 class="link-icons entity-title entity-link-null" id="entity-title">
 		{{entity.name}} <button type="button" class="detailsBT">
 		<span ng-class="displayIcon((entity.type | uppercase), entity.model)"></span> {{entityTypeLabel}}
 	</button>
-	</h3>
+	</h3>-->
 
-	<div class="row">
-		<div class="col-sm-24">
-			<div class="detailsBox">
-				<h4>
-					Dependencies
-				</h4>
-        <div class="dependencies-graph"><dependencies-graph name="entity.name" type="entity.type"/></div>
+	<div class="row pt15px" ng-if="entity.type != 'cluster'">
+		<div class="col-sm-24 pl0px">
+			<div class="entityDetailsBox">
+			<div class="dependencies-graph"><dependencies-graph name="entity.name" type="entity.type"/></div>
 			</div>
 		</div>
 	</div>
 
-	<div class="row">
-		<div class="col-sm-16">
-			<div class="detailsBox">
+	<div class="row pt15px">
+		<div class="col-sm-16 entityDetailsBox p10px" ng-if="entity.type != 'cluster'">
+			<div>
 				<h4>
-					Instances
+					INSTANCES
 				</h4>
 				<instances-list input="instancesList" type="entity.type" name="entity.name" instance-details="instanceDetails"
 												pages="pages" go-page="goPage" next-pages="nextPages" prev-pages="prevPages" change-pages-set="changePagesSet"
 												start="entity.start" end="entity.end"/>
 			</div>
 		</div>
-		<div class="col-sm-8">
-			<div class="summaryBox" ng-init="propsOpen = false">
+		<div ng-class="{'col-sm-8': entity.type !== 'cluster', 'col-sm-24': entity.type === 'cluster'}">
+			<div class="summaryBox" ng-init="propsOpen = entity.type === 'cluster'">
 				<div class="row">
 					<div class="col-sm-21">
 						<h4>
-							Properties
+							PROPERTIES
 						</h4>
 					</div>
 					<div class="col-sm-3">
-						<h4 class="pointer glyphicon" ng-click="propsOpen = !propsOpen" ng-class="propsOpen ? 'glyphicon-chevron-up':'glyphicon-chevron-down'"></h4>
+						<h4 ng-hide="entity.type === 'cluster'" class="pointer glyphicon" ng-click="propsOpen = !propsOpen" ng-class="propsOpen ? 'glyphicon-chevron-up':'glyphicon-chevron-down'"></h4>
 					</div>
 				</div>
         <div ng-show="propsOpen" class="animate-show">
 					<div ng-if="entity.type == 'feed'" ui-view="feedSummary"></div>
-					<div ng-if="entity.type == 'process'" ui-view="processSummary"></div>
+          <div ng-if="entity.type == 'cluster'" ui-view="clusterSummary"></div>
+          <div ng-if="entity.type == 'process' && entityTypeLabel == 'Process'" ui-view="processSummary"></div>
+          <div ng-if="entity.type == 'process' && entityTypeLabel == 'Snapshot'" ui-view="snapshotSummary"></div>
+          <div ng-if="entity.type == 'process' && (entityTypeLabel == 'HDFS Mirror' || entityTypeLabel == 'Hive Mirror')"
+            ui-view="datasetSummary"></div>
 				</div>
 			</div>
 		</div>
 	</div>
 
-</div>
\ No newline at end of file
+</div>
diff --git a/falcon-ui/app/html/entitySummary.html b/falcon-ui/app/html/entitySummary.html
index 83e8a85..f3d7c2a 100644
--- a/falcon-ui/app/html/entitySummary.html
+++ b/falcon-ui/app/html/entitySummary.html
@@ -85,13 +85,13 @@
   </div>
 
   <div class="col-sm-8" ng-repeat="property in feed.properties">
-    <label>{{property.key}}</label>:
+    <label>{{feedPropertiesLabels[property.key]}}</label>:
     <span ng-if="property.key !== 'timeout'">{{optional(property.value)}}</span>
     <frequency ng-if="property.key === 'timeout'" value="property.value" prefix="at"/>
   </div>
 
   <div class="col-sm-8" ng-repeat="property in feed.customProperties | filter: {key: '!!'}">
-    <label>{{property.key}}</label>: {{property.value}}
+    <label>{{feedPropertiesLabels[property.key]}}</label>: {{property.value}}
   </div>
 
   <h4 class="col-sm-8" >
@@ -131,7 +131,7 @@
       <label>Timezone</label>: {{feed.timezone}}
     </div>
     <div class="col-sm-24">
-      <label>Retention</label>: <frequency value="cluster.retention" prefix="Archive in"/>
+      <label>Retention</label>: <frequency value="cluster.retention" prefix=""/>
     </div>
   </div>
   <div class="clearfix hidden-md"></div>
@@ -144,4 +144,4 @@
     <label class="col-sm-24" >Table uri</label>
     <div class="col-sm-24">{{optional(cluster.storage.catalog.catalogTable.uri)}}</div>
   </div>
-</div>
\ No newline at end of file
+</div>
diff --git a/falcon-ui/app/html/error.html b/falcon-ui/app/html/error.html
new file mode 100644
index 0000000..683510e
--- /dev/null
+++ b/falcon-ui/app/html/error.html
@@ -0,0 +1,37 @@
+<!--
+/**
+ * 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.
+ */
+-->
+<div class="col-sm-24 dashboardBox login" ng-class="{showValidationStyle:showLoginVal.show}">
+  <div class="row">
+    <div class="col-sm-6"></div>
+    <div class="col-sm-12">
+
+      <div class="detailsBox centered">
+        <h3 class="auth" ng-if="httpError.code === 401 || httpError.code === 403">
+          Verify user name and password. If problem continues, contact your administrator.
+        </h3>
+        <h3 class="auth" ng-if="httpError.code !== 401 && httpError.code !== 403">
+          ERROR {{ httpError.code }} {{ httpError.error }}, try later.
+        </h3>
+      </div>
+
+    </div>
+    <div class="col-sm-6"></div>
+  </div>
+</div>
\ No newline at end of file
diff --git a/falcon-ui/app/html/feed/feedFormAdvancedStepTpl.html b/falcon-ui/app/html/feed/feedFormAdvancedStepTpl.html
new file mode 100644
index 0000000..e50fc29
--- /dev/null
+++ b/falcon-ui/app/html/feed/feedFormAdvancedStepTpl.html
@@ -0,0 +1,166 @@
+<!--
+/**
+ * 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.
+ */
+-->
+<form name="feedForm" novalidate id="feedFormAdvancedStep">
+		<div class="col-xs-24"><label>Job Details</label></div>
+		<div class="col-xs-24 plr0px">
+			<div ng-repeat="property in feed.properties track by $index">
+				<div ng-if="property.key === 'queueName'">
+					<div class="col-xs-4">
+						<label class="light">Queue Name</label>
+						<input type="text" class="form-control"
+							ng-model="property.value" />
+					</div>
+				</div>
+				<div ng-if="property.key === 'jobPriority'">
+					<div class="col-xs-4">
+						<label class="light">Job Priority</label>
+						<select ng-model="property.value" class="form-control padding0">
+              <option value="" disabled selected style='display:none;'>-Select job-</option>
+              <option value="VERY_HIGH">Very high</option>
+              <option value="HIGH">High</option>
+              <option value="NORMAL">Normal</option>
+              <option value="LOW">Low</option>
+              <option value="VERY_LOW">Very Low</option>
+            </select>
+					</div>
+				</div>
+			</div>
+		</div>
+
+		<div class="col-xs-24 plr0px">
+			<div class="col-xs-4">
+				<label class="col-xs-24 light plr0px">Late Arrival Cutoff</label>
+				<input type="text" class="col-xs-4" ng-keydown="validations.acceptOnlyNumber($event)"
+                 ng-model="feed.lateArrival.cutOff.quantity"
+                 ng-pattern="validations.patterns.twoDigits"/>
+        <select
+          ng-model="feed.lateArrival.cutOff.unit" class="col-xs-offset-1 col-xs-19">
+          <option value="" disabled selected style='display:none;'>-Select unit-</option>
+          <option value="minutes">minutes</option>
+          <option value="hours">hours</option>
+          <option value="days">days</option>
+          <option value="months">months</option>
+        </select>
+			</div>
+			<div class="col-xs-4">
+				<label class="light">Availability Flag</label>
+				<input type="text" class="form-control"
+					ng-model="feed.availabilityFlag"
+					validation-optional-message="{{validations.messages.value}}"
+					ng-pattern="validations.patterns.alpha">
+			</div>
+		</div>
+
+		<label class="col-xs-24">Performance & Throttling - Distributed Copy</label>
+
+		<div class="col-xs-24 plr0px">
+			<div ng-repeat="property in feed.properties track by $index">
+				<div ng-if="property.key === 'mapBandwidthKB'">
+					<div class="col-xs-4">
+						<label class="light">Max Bandwidth</label>
+						<input type="text" class="form-control"
+							ng-model="property.value">
+					</div>
+				</div>
+				<div ng-if="property.key === 'maxMaps'">
+					<div class="col-xs-4">
+						<label class="light">Max map jobs</label>
+						<input type="text" class="form-control"
+							ng-model="property.value">
+					</div>
+				</div>
+			</div>
+		</div>
+
+		<div class="col-xs-24 plr0px">
+			<div ng-repeat="property in feed.properties track by $index">
+				<div ng-if="property.key === 'parallel'">
+					<div class="col-xs-4">
+						<label class="col-xs-24 light plr0px">Parallel</label>
+						<input type="text" class="form-control"
+							ng-model="property.value">
+					</div>
+				</div>
+			</div>
+		</div>
+
+    <div class="col-xs-24"><label>Access Control List</label></div>
+    <div class="col-xs-24 plr0px">
+        <div class="col-xs-8">
+          <label class="light">Owner<mandatory-field></mandatory-field></label>
+          <input type="text" class="form-control" validation-message="{{validations.messages.acl.owner}}"
+                 ng-required="true"
+                 ng-pattern="validations.patterns.unixId"
+                 ng-model="feed.ACL.owner"/>
+        </div>
+        <div class="col-xs-8">
+          <label class="light">Group<mandatory-field></mandatory-field></label>
+          <input type="text" class="form-control" validation-message="{{validations.messages.acl.group}}"
+                 ng-required="true"
+                 ng-pattern="validations.patterns.unixId"
+                 ng-model="feed.ACL.group"/>
+        </div>
+				<div class="col-xs-24">
+		<div class="col-xs-8 plr0px">
+		<label class="light">Permissions<mandatory-field></mandatory-field></label>
+					  <acl-permissions acl-model="feed.ACL.permission"></acl-permissions>
+		</div>
+				</div>
+	</div>
+    <div class="col-xs-24"><label>Feed Schema</label></div>
+    <div class="col-xs-8">
+      <label class="light" tooltip="feed.schema.location">Location<mandatory-field></mandatory-field></label>
+      <input type="text" class="form-control" validation-message="{{validations.messages.location}}"
+        ng-maxlength="200"
+        ng-pattern="validations.patterns.osPath"
+        ng-model="feed.schema.location"/>
+    </div>
+    <div class="col-xs-8">
+      <label class="light" tooltip="feed.schema.provider">Provider<mandatory-field></mandatory-field></label>
+      <input type="text" class="form-control" validation-message="{{validations.messages.provider}}"
+        ng-pattern="validations.patterns.osPath"
+        ng-model="feed.schema.provider"/>
+    </div>
+	<div class="col-xs-8"></div>
+
+
+  <div class="col-xs-24 pb15px mt35">
+		<button id="feed.backToStep1" class="btn prevBtn" type="button" ng-click="goBack()" ng-disabled="buttonSpinners.backShow">
+		  PREVIOUS <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.backShow">
+		</button>
+		<div class="pull-right">
+	    <a class="btn cnclBtn" ui-sref="main">
+	      CANCEL
+	    </a>
+	    <button id="feed.step1" class="btn nextBtn"
+	         ng-disabled="buttonSpinners.show"
+	         ng-click="goNext(feedForm.$invalid)"
+					 scroll-to-error>
+	      NEXT <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
+	    </button>
+			<button class="btn advancedSaveBtn"
+           ng-disabled="feedForm.$invalid || buttonSpinners.saveShow"
+           ng-click="saveEntity(feedForm.$invalid)" scroll-to-error>
+        SAVE ADVANCED OPTIONS <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.saveShow" />
+      </button>
+		</div>
+  </div>
+
+</form>
diff --git a/falcon-ui/app/html/feed/feedFormClusterDetailsTpl.html b/falcon-ui/app/html/feed/feedFormClusterDetailsTpl.html
new file mode 100644
index 0000000..7192fd7
--- /dev/null
+++ b/falcon-ui/app/html/feed/feedFormClusterDetailsTpl.html
@@ -0,0 +1,151 @@
+<!--
+/**
+ * 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.
+ */
+-->
+<feed-form-cluster-partitions></feed-form-cluster-partitions>
+
+<div class="row detailsBox">
+  <div class="col-xs-24 feedLocationNavBox nopointer plr0px">
+    <span class="col-xs-7" ng-show="!feed.storage.fileSystem.active">Default Storage Type</span>
+    <span class="col-xs-7" ng-show="feed.storage.fileSystem.active">Storage Type</span>
+
+    <div class="col-xs-17 feedLocationNav disabled">
+      <button class="btn btn-default pull-right"
+              ng-class="{active: feed.storage.catalog.active}"
+              ng-disabled="true">
+        Catalog Storage
+      </button>
+      <button class="btn btn-default pull-right"
+              ng-class="{active: feed.storage.fileSystem.active}"
+              ng-disabled="true">
+        File System
+      </button>
+    </div>
+  </div>
+
+  <div class="col-xs-24">
+    <label pl0px>LOCATION</label>
+    <label class="light">(if not defined, will use default location)</label>
+  </div>
+
+  <div class="col-xs-24"
+     ng-show="feed.storage.fileSystem.active"
+     ng-repeat="location in cluster.storage.fileSystem.locations">
+  <label class="light">{{capitalize(location.type)}} Path<mandatory-field></mandatory-field></label>
+  <input type="text"
+         placeholder="{{clusterLocationsPlaceHolders[location.type]}}"
+         class="form-control"
+         ng-model="location.path"
+         validation-optional-message="{{validations.messages.path}}"
+         ng-pattern="validations.patterns.osPath" />
+  </div>
+
+  <div class="col-xs-24" ng-show="feed.storage.catalog.active">
+    <label class="light">Table uri<mandatory-field></mandatory-field></label>
+    <input type="text" class="form-control"
+           ng-model="cluster.storage.catalog.catalogTable.uri"
+           validation-optional-message="{{validations.messages.path}}"
+           ng-pattern="validations.patterns.osPath"/>
+  </div>
+
+  <div class="col-xs-24">
+    <label class="mt15">VALIDITY</label>
+  </label></div>
+  <div class="col-xs-24">
+    <label class="mt15 light">Time Zone : <span>{{feed.timezone}}</span>
+  </label></div>
+  <div class="col-xs-24 validityBox plr0px">
+    <div class="col-xs-24 plr0px">
+      <div class="col-xs-6 startDateBox">
+        <label class="light">Start<mandatory-field></mandatory-field>
+        <input type="text"
+          name="startDateInput"
+          class="form-control dateInput"
+          placeholder="{{dateFormat | lowercase}}"
+          ng-model="cluster.validity.start.date"
+          simple-date-picker />
+        </label>
+      </div>
+      <div class="col-xs-6 startTimeBox">
+        <label class="light">Time<mandatory-field></mandatory-field>
+          <timepicker ng-change="constructDate()"
+                      ng-model="cluster.validity.start.time"
+                      hour-step="1"
+                      minute-step="1"
+                      show-meridian="true">
+          </timepicker>
+        </label>
+      </div>
+    </div>
+
+    <label class="col-xs-24 custom-danger validationMessageGral"
+           ng-if="!cluster.validity.start.date">
+      {{validations.messages.date.empty}}
+    </label>
+
+    <div class="col-xs-24 plr0px">
+      <div class="col-xs-6 endDateBox">
+        <label class="light">End<mandatory-field></mandatory-field>
+          <input type="text"
+            name="startDateInput"
+            class="form-control dateInput"
+            placeholder="{{dateFormat | lowercase}}"
+            ng-model="cluster.validity.end.date"
+            simple-date-picker />
+        </label>
+      </div>
+      <div class="col-xs-6 endTimeBox">
+        <label class="light">Time<mandatory-field></mandatory-field>
+          <timepicker ng-change="constructDate()"
+                      ng-model="cluster.validity.end.time"
+                      hour-step="1"
+                      minute-step="1"
+                      show-meridian="true">
+          </timepicker>
+        </label>
+      </div>
+    </div>
+
+    <label class="col-xs-24 custom-danger validationMessageGral"
+           ng-if="!cluster.validity.end.date">
+      {{validations.messages.date.empty}}
+    </label>
+  </div>
+
+  <label class="light col-xs-24">Retention<mandatory-field></mandatory-field></label>
+
+  <div class="col-xs-24 inlineInputsGroup">
+    <input type="text" class="form-control" validation-message="{{validations.messages.number}}"
+           ng-required="true" ng-model="cluster.retention.quantity" ng-keydown="validations.acceptOnlyNumber($event)"
+           ng-pattern="validations.patterns.twoDigits">
+
+    <select ng-model="cluster.retention.unit"
+            ng-required="true">
+      <option selected value="minutes">minutes</option>
+      <option value="hours">hours</option>
+      <option value="days">days</option>
+      <option value="months">months</option>
+    </select>
+  </div>
+
+  <div class="row">
+    <button type="button" class="btn btn-default pull-right btn-xs mt5" ng-click="removeCluster($index, cluster.type)">
+      <span class="entypo minus"></span> delete
+    </button>
+  </div>
+</div>
diff --git a/falcon-ui/app/html/feed/feedFormClusterPartitionsTpl.html b/falcon-ui/app/html/feed/feedFormClusterPartitionsTpl.html
new file mode 100644
index 0000000..a09c74e
--- /dev/null
+++ b/falcon-ui/app/html/feed/feedFormClusterPartitionsTpl.html
@@ -0,0 +1,44 @@
+<!--
+/**
+ * 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.
+ */
+-->
+<div class="col-xs-24" ng-show="partitionList.length > 0">
+  <input type="checkbox" ng-model="selectPartition" />
+  <label class="light">Partition</label>
+  <div class="typeButtonsBox mt5" ng-show="selectPartition">
+    <div ng-repeat="partition in partitionList">
+      <div class="col-xs-16 panel panel-default mb5">
+        <div class="partition-panel-body">
+          <div class="col-xs-4 mt5">
+            {{partition.partitionName}}
+          </div>
+          <div class="col-xs-12 form-inline">
+            <input type="radio" ng-model="partition.mapping" value="mappedPartition"
+              ng-change="preparePartitionExpression(partitionList)" />
+            <input type="text" class="form-control" ng-model="partition.partitionText"
+              ng-change="preparePartitionExpression(partitionList)"
+              ng-disabled="partition.mapping!='mappedPartition'" />
+            <input type="radio" ng-model="partition.mapping" value="any"
+              ng-change="preparePartitionExpression(partitionList)" />
+            Any
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
diff --git a/falcon-ui/app/html/feed/feedFormClustersStepTpl.html b/falcon-ui/app/html/feed/feedFormClustersStepTpl.html
index b33b7f3..91f7d31 100644
--- a/falcon-ui/app/html/feed/feedFormClustersStepTpl.html
+++ b/falcon-ui/app/html/feed/feedFormClustersStepTpl.html
@@ -18,179 +18,107 @@
  */
 -->
 <form name="feedForm" novalidate id="feedFormClusterStep">
-  <button class="hidden" ng-click="goNext(feedForm.$invalid, 'forms.feed.summary')" ></button>
-  <div ng-repeat="cluster in feed.clusters">
-    <div class="row">
-      <h4 class="col-xs-24">{{capitalize(cluster.type)}} Cluster </h4>
+  <div class="feedFormClusters">
+    <div class="col-xs-24 pt5px">
+      <label class="light">Partitions (comma separated)</label>
+      <input type="text" class="form-control" validation-optional-message="{{validations.messages.partitions}}"
+        ng-pattern="validations.patterns.commaSeparated"
+        ng-blur="createFeedClusterPartitions()"
+        ng-model="feedPartitions" />
     </div>
 
-    <div class="row detailsBox">
-      <div class="col-xs-offset-1 col-xs-22">
+    <div class="col-xs-24">
+      <label>Source Cluster<mandatory-field></mandatory-field></label>
+    </div>
 
-        <div class="row">
-          <div class="col-xs-24">
-            <select ng-model="cluster.name" validation-message="{{validations.messages.cluster}}"
-                    ng-required="true" class="col-xs-24 form-control padding0" id="clusterNameSelect">
-              <option value="" disabled selected style='display:none;'>-Select cluster-</option>
-              <option id="cluster_" ng-repeat="clusterItem in clusterList">{{clusterItem.name}}</option>
-            </select>
-          </div>
+    <div class="col-xs-24">
+      <select ng-model="sourceClusterName"
+            ng-change="clearSourceClusterFlags()"
+            class="form-control padding0 clusterSelect">
+          <option value="" disabled selected style='display:none;'>-Select source cluster-</option>
+          <option id="cluster_" ng-repeat="clusterItem in clusterList">{{clusterItem.name}}</option>
+      </select>
 
+      <button type="button" class="btn btn-default btn-xs clusterAddBtn" ng-click="addSourceCluster()">
+        Add
+      </button>
+    </div>
+    <div class="col-xs-24">
+      <label class="custom-danger" ng-show="sourceClusterNotSelected">
+        You need to select the source cluster
+      </label>
+      <label class="custom-danger" ng-show="sourceClusterExists">
+        Source cluster is already added
+      </label>
+    </div>
 
-          <div class="col-xs-24 feedLocationNavBox nopointer">
-            <h4 class="col-xs-7" ng-show="!feed.storage.fileSystem.active">Default Storage type</h4>
-            <h4 class="col-xs-7" ng-show="feed.storage.fileSystem.active">Storage type</h4>
-
-            <div class="col-xs-17 feedLocationNav disabled">
-              <button class="btn btn-default pull-right"
-                      ng-class="{active: feed.storage.catalog.active}"
-                      ng-disabled="true">
-                Catalog Storage
-              </button>
-              <button class="btn btn-default pull-right"
-                      ng-class="{active: feed.storage.fileSystem.active}"
-                      ng-disabled="true">
-                File System
-              </button>
-            </div>
-          </div>
-
-          <div class="col-xs-19">
-            <label>Location</label>
-            <label class="light">(if not defined, will use default location)</label>
-          </div>
-
-          <div class="col-xs-24"
-               ng-show="feed.storage.fileSystem.active"
-               ng-repeat="location in cluster.storage.fileSystem.locations">
-            <label class="light">{{location.type}} path</label>
-            <input type="text"
-                   placeholder="{{clusterLocationsPlaceHolders[location.type]}}"
-                   class="form-control"
-                   ng-model="location.path"
-                   validation-optional-message="{{validations.messages.path}}"
-                   ng-pattern="validations.patterns.osPath" />
-          </div>
-
-          <div class="col-xs-24 mb10" ng-show="feed.storage.catalog.active">
-            <label class="light">Table uri</label>
-            <input type="text" class="form-control"
-                   ng-model="cluster.storage.catalog.catalogTable.uri"
-                   validation-optional-message="{{validations.messages.path}}"
-                   ng-pattern="validations.patterns.osPath"/>
-          </div>
-          <div class="clearfix mb20"></div>
-          <label class="col-xs-24"> Validity </label>
-          <div class="col-xs-24 validityBox">
-            <div class="startDateBox">
-              <label>Start
-                <input type="text"
-                       name="startDateInput"
-                       class="form-control dateInput"
-                       placeholder="mm/dd/yyyy"
-                       datepicker-popup="{{dateFormat}}"
-                       ng-model="cluster.validity.start.date"
-                       is-open="cluster.validity.start.opened"
-                       ng-click="openDatePicker($event, cluster.validity.start)"
-                       ng-change="constructDate()"
-                       ng-required="true"
-                       simple-date>
-              </label>
-              <label class="col-xs-24 custom-danger validationMessageGral"
-                     ng-if="!cluster.validity.start.date">
-                {{validations.messages.date.empty}}
-              </label>
-            </div>
-            <div class="startTimeBox">
-              <label>Time
-                <timepicker ng-change="constructDate()"
-                            ng-model="cluster.validity.start.time"
-                            hour-step="1"
-                            minute-step="1"
-                            show-meridian="true">
-                </timepicker>
-              </label>
-            </div>
-            <div class="endDateBox">
-              <label>End
-                <input type="text"
-                       name="startDateInput"
-                       class="form-control dateInput"
-                       placeholder="mm/dd/yyyy"
-                       datepicker-popup="{{dateFormat}}"
-                       ng-model="cluster.validity.end.date"
-                       is-open="cluster.validity.end.opened"
-                       ng-click="openDatePicker($event, cluster.validity.end)"
-                       ng-change="constructDate()"
-                       ng-required="true"
-                       min-date="cluster.validity.start.date"
-                       simple-date>
-              </label>
-              <label class="col-xs-24 custom-danger validationMessageGral"
-                     ng-if="!cluster.validity.end.date">
-                {{validations.messages.date.empty}}
-              </label>
-            </div>
-            <div class="endTimeBox">
-              <label>Time
-                <timepicker ng-change="constructDate()"
-                            ng-model="cluster.validity.end.time"
-                            hour-step="1"
-                            minute-step="1"
-                            show-meridian="true">
-                </timepicker>
-              </label>
-            </div>
-          </div>
-
-          <label class="light col-xs-24"> Retention </label>
-
-          <div class="col-xs-24 inlineInputsGroup">
-            <input type="text" class="form-control" validation-message="{{validations.messages.number}}"
-                   ng-required="true" ng-model="cluster.retention.quantity" ng-keydown="validations.acceptOnlyNumber($event)"
-                   ng-pattern="validations.patterns.twoDigits">
-
-            <select ng-model="cluster.retention.unit"
-                    ng-required="true">
-              <option selected value="minutes">minutes</option>
-              <option value="hours">hours</option>
-              <option value="days">days</option>
-              <option value="months">months</option>
-            </select>
-          </div>
-
-          <div class="row"  ng-if="cluster.type !== 'source'">
-            <button type="button" class="btn btn-default pull-right btn-xs" ng-click="removeCluster($index)">
-              <span class="entypo minus"></span> delete
-            </button>
-          </div>
-
-
-        </div>
-
-      </div>
+    <div class="col-xs-24 sourceClusterList" ng-show="(feed.clusters | filter:{type:'source'}).length > 0">
+      <label class="clusterListLabel mb7">Source Clusters</label>
+      <accordion close-others="false">
+        <accordion-group ng-repeat="cluster in feed.clusters | filter:{type:'source'}" is-open="cluster.isAccordionOpened">
+          <accordion-heading>{{ cluster.name }}</accordion-heading>
+          <feed-form-cluster-details></feed-form-cluster-details>
+        </accordion-group>
+      </accordion>
     </div>
   </div>
-  <div class="col-xs-24 mt10">
-    <button type="button" class="btn btn-default btn-xs" ng-click="addCluster()">
-      <span class="entypo plus"></span> add cluster
+  <div class="col-xs-24" ng-show="(feed.clusters | filter:{type:'source'}).length < 1">
+    <label class="custom-danger">
+      You need to provide at least one source cluster
+    </label>
+  </div>
+
+  <div class="col-xs-24">
+    <label>Target Cluster</label>
+  </div>
+  <div class="col-xs-24">
+    <select ng-model="targetClusterName"
+          ng-change="clearTargetClusterFlags()"
+          class="form-control padding0 clusterSelect">
+        <option value="" disabled selected style='display:none;'>-Select target cluster-</option>
+        <option id="cluster_" ng-repeat="clusterItem in clusterList">{{clusterItem.name}}</option>
+    </select>
+
+    <button type="button" class="btn btn-default btn-xs clusterAddBtn" ng-click="addTargetCluster()">
+      Add
     </button>
   </div>
 
-  <div class="col-xs-24 mt20">
+  <div class="col-xs-24">
+    <label class="custom-danger" ng-show="targetClusterNotSelected">
+      You need to select the target cluster
+    </label>
+    <label class="custom-danger" ng-show="targetClusterExists">
+      Target cluster is already added
+    </label>
+  </div>
+
+  <div class="col-xs-24 targetClusterList" ng-show="(feed.clusters | filter:{type:'target'}).length > 0">
+    <label class="clusterListLabel mb7">Target Clusters</label>
+    <accordion close-others="false">
+      <accordion-group ng-repeat="cluster in feed.clusters | filter:{type:'target'}" is-open="cluster.isAccordionOpened">
+        <accordion-heading>{{ cluster.name }}</accordion-heading>
+        <feed-form-cluster-details></feed-form-cluster-details>
+      </accordion-group>
+    </accordion>
+  </div>
+
+  <div class="col-xs-24 mt35 pb15px">
     <button id="feed.backToStep3"
-            class="btn prevBtn"
-            type="button"
-            ng-click="goBack('forms.feed.location')"
-            ng-disabled="buttonSpinners.backShow" >
-      Previous <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.backShow" />
+        class="btn prevBtn"
+        type="button"
+        ng-click="goBack()"
+        ng-disabled="buttonSpinners.backShow" >
+      PREVIOUS <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.backShow" />
     </button>
-    <button id="feed.step4" class="btn nextBtn pull-right"
-            ng-click="goNext(feedForm.$invalid, 'forms.feed.summary')" >
-      Next <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
-    </button>
-    <a class="pull-right" ui-sref="main">
-      Cancel
-    </a>
+    <div class="pull-right">
+        <a class="btn cnclBtn" ui-sref="main">
+          CANCEL
+        </a>
+         <button id="feed.step4" class="btn nextBtn"
+            ng-click="goNext(feedForm.$invalid)" scroll-to-error>
+            NEXT <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
+        </button>
+     </div>
   </div>
-</form>
\ No newline at end of file
+</form>
diff --git a/falcon-ui/app/html/feed/feedFormDataSourceTpl.html b/falcon-ui/app/html/feed/feedFormDataSourceTpl.html
new file mode 100644
index 0000000..04ea3a2
--- /dev/null
+++ b/falcon-ui/app/html/feed/feedFormDataSourceTpl.html
@@ -0,0 +1,148 @@
+<!--
+/**
+ * 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.
+ */
+-->
+<div class="datasourceBox">
+  <div class="col-xs-24">
+    <label class="light">Datasource<mandatory-field></mandatory-field></label>
+  </div>
+  <div class="col-xs-10">
+    <select ng-model="feed[feed.dataTransferType][dataSourceType].name"
+        ng-required="true"
+        class="form-control padding0"
+        validation-message="{{validations.messages.datasource}}">
+      <option value="" disabled style='display:none;'>Select transfer datasource</option>
+      <option ng-repeat="datasourceItem in datasourceList"
+              value="{{datasourceItem.name}}">
+        {{datasourceItem.name}}
+      </option>
+    </select>
+  </div>
+
+  <div class="col-xs-24">
+    <label class="light">Table<mandatory-field></mandatory-field></label>
+  </div>
+  <div class="col-xs-10">
+    <input type="text"
+        ng-required="true"
+        placeholder="Enter table name"
+        class="form-control"
+        ng-model="feed[feed.dataTransferType][dataSourceType].tableName"
+        validation-optional-message="{{validations.messages.table}}" />
+  </div>
+  <div class="col-xs-24 plr0px" ng-if="feed.dataTransferType === 'export'">
+    <div class="col-xs-24">
+      <label class="light">Load Method<mandatory-field></mandatory-field></label>
+    </div>
+
+    <div class="col-xs-12 plr0px mt5">
+      <div class="typeButtonsBox">
+        <div class="col-xs-12">
+          <span class="radio-inline">
+            <input type="radio" name="type" value="updateonly" ng-model="feed[feed.dataTransferType][dataSourceType][dataTransferAction].type"/>
+            Update Only
+        </div>
+        <div class="col-xs-12">
+          <span class="radio-inline">
+            <input type="radio" name="type" value="allowinsert" ng-model="feed[feed.dataTransferType][dataSourceType][dataTransferAction].type"/>
+            Allow Insert
+        </div>
+      </div>
+    </div>
+  </div>
+  <div class="col-xs-24 plr0px" ng-if="feed.dataTransferType === 'import'">
+    <div class="col-xs-24">
+      <label class="light">Extract Type<mandatory-field></mandatory-field></label>
+    </div>
+
+    <div class="col-xs-12 plr0px mt5">
+      <div class="typeButtonsBox">
+        <div class="col-xs-8">
+          <span class="radio-inline">
+            <input type="radio" name="type" value="full"
+              ng-model="feed[feed.dataTransferType][dataSourceType][dataTransferAction].type"/>
+            Full
+        </div>
+        <div class="col-xs-8">
+          <span class="radio-inline">
+            <input type="radio" name="type" value="incremental" disabled="disabled"
+              ng-model="feed[feed.dataTransferType][dataSourceType][dataTransferAction].type"/>
+            Incremental
+        </div>
+      </div>
+    </div>
+    <div class="col-xs-24">
+      <label class="light">Merge Type<mandatory-field></mandatory-field></label>
+    </div>
+
+    <div class="col-xs-12 plr0px mt5">
+      <div class="typeButtonsBox">
+        <div class="col-xs-8">
+          <span class="radio-inline">
+            <input type="radio" name="mergepolicy" value="snapshot"
+              ng-model="feed[feed.dataTransferType][dataSourceType][dataTransferAction].mergepolicy"/>
+            Snapshot
+        </div>
+        <div class="col-xs-8">
+          <span class="radio-inline">
+            <input type="radio" name="mergepolicy" value="append"
+              ng-model="feed[feed.dataTransferType][dataSourceType][dataTransferAction].mergepolicy"/>
+            Append
+        </div>
+      </div>
+    </div>
+  </div>
+  <div class="col-xs-24">
+    <label class="light">Columns<mandatory-field></mandatory-field></label>
+  </div>
+
+  <div class="col-xs-12 mt5 plr0px">
+    <div class="typeButtonsBox">
+      <div class="col-xs-8">
+        <span class="radio-inline">
+          <input type="radio" name="fieldsType" value="all"
+            ng-model="feed[feed.dataTransferType][dataSourceType].columnsType"/>
+          All
+      </div>
+      <div class="col-xs-8">
+        <span class="radio-inline">
+          <input type="radio" name="fieldsType" value="include"
+            ng-model="feed[feed.dataTransferType][dataSourceType].columnsType"/>
+          Include
+      </div>
+      <div class="col-xs-8">
+        <span class="radio-inline">
+          <input type="radio" name="fieldsType" value="exclude"
+            ng-model="feed[feed.dataTransferType][dataSourceType].columnsType"/>
+          Exclude
+      </div>
+    </div>
+  </div>
+  <div class="col-xs-16 mt5" ng-if="feed[feed.dataTransferType][dataSourceType].columnsType === 'include'">
+    <input type="text"
+        ng-required="true"
+        class="form-control"
+        ng-model="feed[feed.dataTransferType][dataSourceType].includesCSV" />
+  </div>
+  <div class="col-xs-16 mt5" ng-if="feed[feed.dataTransferType][dataSourceType].columnsType === 'exclude'">
+    <input type="text"
+        ng-required="true"
+        class="form-control"
+        ng-model="feed[feed.dataTransferType][dataSourceType].excludesCSV" />
+  </div>
+</div>
diff --git a/falcon-ui/app/html/feed/feedFormGeneralStepTpl.html b/falcon-ui/app/html/feed/feedFormGeneralStepTpl.html
index 2a4f5c4..6af357c 100644
--- a/falcon-ui/app/html/feed/feedFormGeneralStepTpl.html
+++ b/falcon-ui/app/html/feed/feedFormGeneralStepTpl.html
@@ -19,106 +19,463 @@
 -->
 <form name="feedForm" novalidate id="feedFormGeneralStep">
 
-    <div class="col-xs-24">
-      <label class="light">Name</label>
-      <input type="text" class="form-control" ng-disabled="!cloningMode" ng-keydown="validations.acceptNoSpaces($event)"
-             check-name="{type:'feed', check:cloningMode}" ng-class="{fakeInvalid:!validations.nameAvailable}"
-             ng-model="feed.name" ng-required="true" ng-pattern="validations.patterns.name"/>
-    </div>
-    <div class="col-xs-24">
-      <label class="light">Description</label>
-      <input type="text" class="form-control" validation-optional-message="{{validations.messages.description}}"
-        ng-model="feed.description"
-        ng-pattern="validations.patterns.freeText"/>
-    </div>
+	<div class="col-xs-4">
+    <label class="light" tooltip="feed.name">Feed Name<mandatory-field></mandatory-field></label>
+    <input type="text" class="form-control" ng-disabled="editingMode" ng-keydown="validations.acceptNoSpaces($event)"
+           check-name="{type:'feed', check:!editingMode}" ng-class="{fakeInvalid:!validations.nameAvailable}"
+           ng-model="feed.name" ng-required="true" ng-pattern="validations.patterns.name"/>
+  </div>
 
-    <div class="col-xs-24">
-      <label class="light">Tags</label>
-    </div>
+	<div class="col-xs-24">
+		<label class="light">Description</label>
+	</div>
 
-    <div class="col-xs-24">
-      <div ng-repeat="tag in feed.tags">
-        <div class="row dynamic-table-spacer">
-          <div class="col-xs-10">
-            <input type="text" class="form-control" ng-model="tag.key"
-                   validation-optional-message="{{validations.messages.key}}"
-              ng-pattern="validations.patterns.alpha" ng-required="tag.value" placeholder="key"/>
-          </div>
-          <div class="col-xs-11">
-            <input type="text" class="form-control" validation-optional-message="{{validations.messages.value}}"
-              ng-model="tag.value" ng-pattern="validations.patterns.alpha" ng-required="tag.key" placeholder="value"/>
-          </div>
-          <div class="col-xs-3">
-            <button type="button" class="btn btn-default btn-xs" ng-click="removeTag($index)" ng-if="$index>0">
-              <span class="entypo minus"></span> delete
-            </button>
-          </div>
+	<div class="col-xs-8">
+		<input type="text" class="form-control"
+				ng-model="feed.description"
+				ng-pattern="validations.patterns.freeText"/>
+	</div>
+
+  <div class="col-xs-24">
+    <label class="light">Tags</label>
+  </div>
+
+  <div class="col-xs-12">
+    <div ng-repeat="tag in feed.tags">
+      <div class="row dynamic-table-spacer">
+        <div class="col-xs-8">
+          <input type="text" class="form-control" ng-model="tag.key"
+		validation-optional-message="{{validations.messages.key}}"
+		ng-pattern="validations.patterns.alpha" ng-required="tag.value" placeholder="key"/>
         </div>
+        <div class="col-xs-8">
+          <input type="text" class="form-control" validation-optional-message="{{validations.messages.value}}"
+		ng-model="tag.value"
+			ng-pattern="validations.patterns.alpha" ng-required="tag.key" placeholder="value"/>
+        </div>
+				<div class="col-xs-8">
+	        <button type="button" class="btn btn-default btn-xs" ng-click="removeTag($index)" ng-disabled="xmlPreview.edit" ng-if="!$first || !$last">
+	          <span class="entypo minus"></span> delete
+	        </button>
+	        <button type="button" class="btn btn-default btn-xs" ng-click="addTag()" ng-disabled="xmlPreview.edit" ng-if="$last">
+	          <span class="entypo plus"></span> add tag
+	        </button>
+	      </div>
       </div>
     </div>
-    <div class="col-xs-24 dynamic-table-spacer">
-      <button type="button" class="btn btn-default btn-xs" ng-click="addTag()">
-        <span class="entypo plus"></span> add tag
-      </button>
-    </div>
+  </div>
+  <div class="col-xs-24">
+    <label class="light" tooltip="feed.groups">
+			Feed Groups (comma separated)
+		</label>
+  </div>
 
-    <div class="col-xs-24">
-      <label class="light">Groups (comma separated)</label>
-      <input type="text" class="form-control" validation-optional-message="{{validations.messages.acl.group}}"
-        ng-pattern="validations.patterns.commaSeparated"
-        ng-model="feed.groups"/>
-    </div>
+	<div class="col-xs-8">
+    <input type="text" class="form-control" validation-optional-message="{{validations.messages.acl.group}}"
+      ng-pattern="validations.patterns.commaSeparated"
+      ng-model="feed.groups"/>
+  </div>
 
-    <div class="col-xs-24"><h4 class="tittle-in-row">Access Control List</h4></div>
-    <div class="col-xs-8">
-      <label class="light">Owner</label>
-      <input type="text" class="form-control" validation-message="{{validations.messages.acl.owner}}"
-             ng-required="true"
-             ng-pattern="validations.patterns.unixId"
-             ng-model="feed.ACL.owner"/>
-    </div>
-    <div class="col-xs-8">
-      <label class="light">Group</label>
-      <input type="text" class="form-control" validation-message="{{validations.messages.acl.group}}"
-             ng-required="true"
-             ng-pattern="validations.patterns.unixId"
-             ng-model="feed.ACL.group"/>
-    </div>
-    <div class="col-xs-8">
-      <label class="light">Permissions</label>
-      <input type="text" class="form-control" validation-message="{{validations.messages.acl.permission}}"
-             ng-required="true"
-             ng-pattern="validations.patterns.unixPermissions"
-             ng-model="feed.ACL.permission"/>
-    </div>
+	<div class="col-xs-24">
+    <label class="light">Type<mandatory-field></mandatory-field></label>
+  </div>
 
-    <div class="col-xs-24"><h4 class="tittle-in-row">Schema</h4></div>
-    <div class="col-xs-12">
-      <label class="light">Location</label>
+	<div class="col-xs-4">
+		<select ng-model="feed.dataTransferType" ng-required="true"
+			class="form-control padding0" ng-change="onTypeChange(feed.dataTransferType)">
+			<option value="" disabled selected style='display:none;'>-Select feed type-</option>
+			<option value="hive">Hive</option>
+			<option value="hdfs">HDFS</option>
+			<option value="import">RDBMS Import</option>
+			<option value="export">RDBMS Export</option>
+		</select>
+	</div>
+
+	<div class="col-xs-24" ng-if="feed.dataTransferType !== ''">
+		<input type="checkbox" ng-checked="feed.enableFeedReplication"
+			ng-model="feed.enableFeedReplication" ng-disabled="xmlPreview.edit"/>
+		<label class="light">Enable Replication</label>
+	</div>
+	<div class="col-xs-24 plr0px" ng-if="feed.dataTransferType !== ''">
+		<div class="col-xs-12 plr0px">
+			<div class="col-xs-24 plr0px clusterBox">
+				<h3>Source(s)</h3>
+				<div ng-if="feed.dataTransferType === 'import'">
+					<feed-form-data-source></feed-form-data-source>
+				</div>
+				<div ng-if="feed.dataTransferType === 'hdfs' || feed.dataTransferType === 'hive' || feed.dataTransferType === 'export'">
+					<div class="col-xs-24 plr0px" ng-if="feed.dataTransferType === 'export'">
+						<div class="col-xs-24">
+					    <label class="light">Location</label>
+					  </div>
+						<label class="custom-danger" ng-show="feedForm.$submitted && !feed.sourceClusterLocationType">
+							You need to select a source location type.
+						</label>
+					  <div class="col-xs-24 mt5 plr0px">
+					    <div class="typeButtonsBox">
+					      <div class="col-xs-6">
+					        <span class="radio-inline">
+					          <input type="radio" name="sourceClusterLocationType" ng-required="!feed.sourceClusterLocationType"
+											value="hdfs" ng-model="feed.sourceClusterLocationType"
+											ng-checked="feed.dataTransferType === 'hdfs' || feed.sourceClusterLocationType === 'hdfs'"/>
+					          HDFS
+					      </div>
+					      <div class="col-xs-6">
+					        <span class="radio-inline">
+					          <input type="radio" name="sourceClusterLocationType" ng-required="!feed.sourceClusterLocationType"
+											value="hive" ng-model="feed.sourceClusterLocationType"
+											ng-checked="feed.dataTransferType === 'hive' || feed.sourceClusterLocationType ==='hive'"/>
+					          Hive
+					      </div>
+					    </div>
+						</div>
+					</div>
+					<div id="sourceClusters">
+						<div class="col-xs-24 plr0px" ng-repeat="sourceCluster in feed.clusters | filter:{type:'source'}" ng-if="$index > 0">
+							<div ng-if="feed.sourceClusterLocationType === 'hive'">
+								<feed-form-hive-storage
+									storage-info="{'clusterStorage':sourceCluster, 'clustersList':clustersList, 'feedClusters':feed.clusters, readOnly:true}"
+									required="(feed.clusters | filter:{type:'source'}).length > 1" validations="validations">
+								</feed-form-hive-storage>
+							</div>
+							<div ng-if="feed.sourceClusterLocationType === 'hdfs'">
+								<feed-form-hdfs-storage
+									storage-info="{'clusterStorage':sourceCluster, 'clustersList':clustersList, 'feedClusters':feed.clusters, readOnly:true}"
+									required="(feed.clusters | filter:{type:'source'}).length > 1" validations="validations">
+								</feed-form-hdfs-storage>
+							</div>
+						</div>
+					</div>
+
+					<div class="col-xs-24 plr0px" ng-repeat="sourceCluster in feed.clusters | filter:{type:'source'}" ng-if='$index === 0'>
+						<div ng-if="feed.sourceClusterLocationType === 'hive'">
+							<feed-form-hive-storage storage-info="{'clusterStorage':sourceCluster,'clustersList':clustersList, 'feedClusters':feed.clusters,type:'source',validationMessage:validations.messages.number}"
+								required="(feed.clusters | filter:{type:'source'}).length === 1" validations="validations"
+								add="addClusterStorage(value)" show="toggleClusterStorage(value)"
+								open-date-picker="openDatePicker(event,container)" construct-date="constructDate()">
+							</feed-form-hive-storage>
+						</div>
+						<div ng-if="feed.sourceClusterLocationType === 'hdfs'">
+							<feed-form-hdfs-storage storage-info="{'clusterStorage':sourceCluster,'clustersList':clustersList, 'feedClusters':feed.clusters,type:'source',validationMessage:validations.messages.number}"
+								required="(feed.clusters | filter:{type:'source'}).length === 1" validations="validations"
+								add="addClusterStorage(value)" show="toggleClusterStorage(value)"
+								open-date-picker="openDatePicker(event,container)" construct-date="constructDate()">
+							</feed-form-hdfs-storage>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+
+		<div class="col-xs-12 plr0px pl5">
+			<div class="col-xs-24 plr0px clusterBox"
+				ng-if="feed.dataTransferType === 'export' || feed.dataTransferType === 'import' || feed.enableFeedReplication">
+				<h3>Target(s)</h3>
+				<div ng-if="feed.dataTransferType === 'export'">
+					<feed-form-data-source></feed-form-data-source>
+				</div>
+				<div ng-if="feed.dataTransferType === 'import'">
+					<div class="col-xs-24 plr0px">
+						<div class="col-xs-24">
+							<label class="light">Location</label>
+						</div>
+						<label class="custom-danger" ng-show="feedForm.$submitted && !feed.targetClusterLocationType">
+							You need to select a target location type.
+						</label>
+						<div class="col-xs-24 mt5 plr0px">
+							<div class="typeButtonsBox">
+								<div class="col-xs-6">
+									<span class="radio-inline">
+										<input type="radio" name="targetClusterLocationType" ng-required="!feed.targetClusterLocationType"
+											value="hdfs" ng-model="feed.targetClusterLocationType"
+											ng-checked="feed.dataTransferType === 'hdfs' || feed.targetClusterLocationType === 'hdfs'"/>
+										HDFS
+								</div>
+								<div class="col-xs-6">
+									<span class="radio-inline">
+										<input type="radio" name="targetClusterLocationType" ng-required="!feed.targetClusterLocationType"
+											value="hive" ng-model="feed.targetClusterLocationType"
+											ng-checked="feed.dataTransferType === 'hive' || feed.targetClusterLocationType ==='hive'"/>
+										Hive
+								</div>
+							</div>
+						</div>
+					</div>
+					<div id="sourceClusters">
+						<div class="col-xs-24 plr0px" ng-repeat="sourceCluster in feed.clusters | filter:{type:'source'}" ng-if="$index > 0">
+							<div ng-if="feed.targetClusterLocationType === 'hive'">
+								<feed-form-hive-storage
+									storage-info="{'clusterStorage':sourceCluster, 'clustersList':clustersList, 'feedClusters':feed.clusters, readOnly:true}"
+									required="(feed.clusters | filter:{type:'source'}).length > 1" validations="validations">
+								</feed-form-hive-storage>
+							</div>
+							<div ng-if="feed.targetClusterLocationType === 'hdfs'">
+								<feed-form-hdfs-storage
+									storage-info="{'clusterStorage':sourceCluster, 'clustersList':clustersList, 'feedClusters':feed.clusters, readOnly:true}"
+									required="(feed.clusters | filter:{type:'source'}).length > 1" validations="validations">
+								</feed-form-hdfs-storage>
+							</div>
+						</div>
+					</div>
+
+					<div class="col-xs-24 plr0px" ng-repeat="sourceCluster in feed.clusters | filter:{type:'source'}" ng-if='$index === 0'>
+						<div ng-if="feed.targetClusterLocationType === 'hive'">
+							<feed-form-hive-storage storage-info="{'clusterStorage':sourceCluster,'clustersList':clustersList, 'feedClusters':feed.clusters,type:'source',validationMessage:validations.messages.number}"
+								required="(feed.clusters | filter:{type:'source'}).length === 1" validations="validations"
+								add="addClusterStorage(value)" show="toggleClusterStorage(value)"
+								open-date-picker="openDatePicker(event,container)" construct-date="constructDate()">
+							</feed-form-hive-storage>
+						</div>
+						<div ng-if="feed.targetClusterLocationType === 'hdfs'">
+							<feed-form-hdfs-storage storage-info="{'clusterStorage':sourceCluster,'clustersList':clustersList, 'feedClusters':feed.clusters,type:'source',validationMessage:validations.messages.number}"
+								required="(feed.clusters | filter:{type:'source'}).length === 1" validations="validations"
+								add="addClusterStorage(value)" show="toggleClusterStorage(value)"
+								open-date-picker="openDatePicker(event,container)" construct-date="constructDate()">
+							</feed-form-hdfs-storage>
+						</div>
+					</div>
+				</div>
+
+				<div ng-if="feed.enableFeedReplication && (feed.dataTransferType === 'hdfs' || feed.dataTransferType === 'hive')">
+					<div id="targetClusters">
+						<div class="col-xs-24 plr0px" ng-repeat="targetCluster in feed.clusters | filter:{type:'target'}" ng-if='$index > 0'>
+							<div ng-if="feed.targetClusterLocationType === 'hive'">
+								<feed-form-hive-storage
+									storage-info="{'clusterStorage':targetCluster, 'clustersList':clustersList, 'feedClusters':feed.clusters, readOnly:true}"
+									required="feed.enableFeedReplication && (feed.clusters | filter:{type:'target'}).length > 1"
+									validations="validations">
+								</feed-form-hive-storage>
+							</div>
+							<div ng-if="feed.targetClusterLocationType === 'hdfs'">
+								<feed-form-hdfs-storage
+									storage-info="{'clusterStorage':targetCluster, 'clustersList':clustersList, 'feedClusters':feed.clusters, readOnly:true}"
+									required="feed.enableFeedReplication && (feed.clusters | filter:{type:'target'}).length > 1"
+									validations="validations">
+								</feed-form-hdfs-storage>
+							</div>
+						</div>
+					</div>
+
+					<div class="col-xs-24 plr0px" ng-repeat="targetCluster in feed.clusters | filter:{type:'target'}" ng-if='$index === 0'>
+						<div ng-if="feed.targetClusterLocationType === 'hive'">
+							<feed-form-hive-storage
+								storage-info="{'clusterStorage':targetCluster, 'clustersList':clustersList, 'feedClusters':feed.clusters, type:'target'}"
+								validations="validations" add="addClusterStorage(value)"
+								required="feed.enableFeedReplication && (feed.clusters | filter:{type:'target'}).length === 1"
+								show="toggleClusterStorage(value)" open-date-picker="openDatePicker(event,container)"
+								construct-date="constructDate()">
+							</feed-form-hive-storage>
+						</div>
+						<div ng-if="feed.targetClusterLocationType === 'hdfs'">
+							<feed-form-hdfs-storage
+								storage-info="{'clusterStorage':targetCluster, 'clustersList':clustersList, 'feedClusters':feed.clusters,type:'target'}"
+								validations="validations" add="addClusterStorage(value)"
+								required="feed.enableFeedReplication && (feed.clusters | filter:{type:'target'}).length === 1"
+								show="toggleClusterStorage(value)" open-date-picker="openDatePicker(event,container)"
+								construct-date="constructDate()">
+							</feed-form-hdfs-storage>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+
+	<div class="col-xs-24 plr0px" ng-if="feed.dataTransferType !== ''">
+    <div class="col-xs-12 plr0px clusterBoxEndLine">
+    </div>
+    <div class="col-xs-12 plr0px pl5"
+			ng-if="feed.dataTransferType === 'export' || feed.dataTransferType === 'import' || feed.enableFeedReplication">
+      <div class="col-xs-24 plr0px clusterBoxEndLine">
+      </div>
+    </div>
+  </div>
+
+	<div class="col-xs-24 frequencyBox plr0px">
+		<div class="col-xs-24">
+			<label>Frequency</label>
+		</div>
+		<div class="col-xs-24">
+			<label class="light">Repeat Every<mandatory-field></mandatory-field></label>
+		</div>
+		<div class="col-xs-24 plr0px">
+			<div class="col-xs-2">
+				<input type="text"
+							 name="frequencyQuantity"
+							 ng-model="feed.frequency.quantity"
+							 ng-pattern="validations.patterns.twoDigits"
+							 ng-keydown="validations.acceptOnlyNumber($event)"
+							 ng-keyup="checkMininumFrequency(feed.frequency.quantity, feed.frequency.unit, feedForm.frequencyQuantity)"
+							 class="form-control"
+							 ng-required="true"
+							 validation-message="{{validations.messages.number}}" />
+			</div>
+			<div class="col-xs-6">
+				<select ng-model="feed.frequency.unit" class="form-control padding0" ng-required="true"
+					ng-change="checkMininumFrequency(feed.frequency.quantity, feed.frequency.unit, feedForm.frequencyQuantity)">
+					<option selected value="minutes">minutes</option>
+					<option value="hours">hours</option>
+					<option value="days">days</option>
+					<option value="months">months</option>
+				</select>
+			</div>
+		</div>
+		<div class="col-xs-24 custom-danger" ng-if="!isFrequencyValid">{{validations.messages.frequency.minimum}}</div>
+
+		<div class="col-xs-24">
+			<label class="light">Timezone<mandatory-field></mandatory-field></label>
+		</div>
+		<div class="col-xs-8">
+			<time-zone-select ng-model="feed.timezone"></time-zone-select>
+		</div>
+	</div>
+
+	<div class="col-xs-24 advancedOption" ng-click="expandOptions = !expandOptions" id="feedAdvancedOption">
+    <label class="mt15 pointer blink-success">ADVANCED OPTIONS</label>
+    <i class="glyphicon glyphicon-chevron-down mt15" ng-if="!expandOptions"></i>
+    <i class="glyphicon glyphicon-chevron-up mt15" ng-if="expandOptions"></i>
+  </div>
+
+	<div id="advancedOptionsBox" class="col-xs-24 plr0px" ng-class="{expanded:expandOptions}">
+		<div class="col-xs-24"><label>Job Details</label></div>
+		<div class="col-xs-24 plr0px">
+			<div ng-repeat="property in feed.properties track by $index">
+				<div ng-if="property.key === 'queueName'">
+					<div class="col-xs-4">
+						<label class="light">Queue Name</label>
+						<input type="text" class="form-control"
+							ng-model="property.value" />
+					</div>
+				</div>
+				<div ng-if="property.key === 'jobPriority'">
+					<div class="col-xs-4">
+						<label class="light">Job Priority</label>
+						<select ng-model="property.value" class="form-control padding0">
+              <option value="" disabled selected style='display:none;'>-Select job-</option>
+              <option value="VERY_HIGH">Very high</option>
+              <option value="HIGH">High</option>
+              <option value="NORMAL">Normal</option>
+              <option value="LOW">Low</option>
+              <option value="VERY_LOW">Very Low</option>
+            </select>
+					</div>
+				</div>
+			</div>
+		</div>
+
+		<div class="col-xs-24 plr0px">
+			<div class="col-xs-4">
+				<label class="col-xs-24 light plr0px">Late Arrival Cutoff</label>
+				<input type="text" class="col-xs-4" ng-keydown="validations.acceptOnlyNumber($event)"
+                 ng-model="feed.lateArrival.cutOff.quantity"
+                 ng-pattern="validations.patterns.twoDigits"/>
+        <select
+          ng-model="feed.lateArrival.cutOff.unit" class="col-xs-offset-1 col-xs-19">
+          <option value="" disabled selected style='display:none;'>-Select unit-</option>
+          <option value="minutes">minutes</option>
+          <option value="hours">hours</option>
+          <option value="days">days</option>
+          <option value="months">months</option>
+        </select>
+			</div>
+			<div class="col-xs-4">
+				<label class="light">Availability Flag</label>
+				<input type="text" class="form-control"
+					ng-model="feed.availabilityFlag"
+					validation-optional-message="{{validations.messages.value}}"
+					ng-pattern="validations.patterns.alpha">
+			</div>
+		</div>
+
+		<label class="col-xs-24">Performance & Throttling - Distributed Copy</label>
+
+		<div class="col-xs-24 plr0px">
+			<div ng-repeat="property in feed.properties track by $index">
+				<div ng-if="property.key === 'mapBandwidthKB'">
+					<div class="col-xs-4">
+						<label class="light">Max Bandwidth</label>
+						<input type="text" class="form-control"
+							ng-model="property.value">
+					</div>
+				</div>
+				<div ng-if="property.key === 'maxMaps'">
+					<div class="col-xs-4">
+						<label class="light">Max map jobs</label>
+						<input type="text" class="form-control"
+							ng-model="property.value">
+					</div>
+				</div>
+			</div>
+		</div>
+
+		<div class="col-xs-24 plr0px">
+			<div ng-repeat="property in feed.properties track by $index">
+				<div ng-if="property.key === 'parallel'">
+					<div class="col-xs-4">
+						<label class="col-xs-24 light plr0px">Parallel</label>
+						<input type="text" class="form-control"
+							ng-model="property.value">
+					</div>
+				</div>
+			</div>
+		</div>
+
+    <div class="col-xs-24"><label>Access Control List</label></div>
+    <div class="col-xs-24 plr0px">
+        <div class="col-xs-8">
+          <label class="light">Owner<mandatory-field></mandatory-field></label>
+          <input type="text" class="form-control" validation-message="{{validations.messages.acl.owner}}"
+                 ng-required="true"
+                 ng-pattern="validations.patterns.unixId"
+                 ng-model="feed.ACL.owner"/>
+        </div>
+        <div class="col-xs-8">
+          <label class="light">Group<mandatory-field></mandatory-field></label>
+          <input type="text" class="form-control" validation-message="{{validations.messages.acl.group}}"
+                 ng-required="true"
+                 ng-pattern="validations.patterns.unixId"
+                 ng-model="feed.ACL.group"/>
+        </div>
+				<div class="col-xs-24">
+		<div class="col-xs-8 plr0px">
+		<label class="light">Permissions<mandatory-field></mandatory-field></label>
+					  <acl-permissions acl-model="feed.ACL.permission"></acl-permissions>
+		</div>
+				</div>
+		</div>
+    <div class="col-xs-24"><label>Feed Schema</label></div>
+    <div class="col-xs-8">
+      <label class="light" tooltip="feed.schema.location">Location<mandatory-field></mandatory-field></label>
       <input type="text" class="form-control" validation-message="{{validations.messages.location}}"
         ng-maxlength="200"
         ng-pattern="validations.patterns.osPath"
-        ng-model="feed.schema.location"
-        ng-required="true"/>
+        ng-model="feed.schema.location"/>
     </div>
-    <div class="col-xs-12">
-      <label class="light">Provider</label>
+    <div class="col-xs-8">
+      <label class="light" tooltip="feed.schema.provider">Provider<mandatory-field></mandatory-field></label>
       <input type="text" class="form-control" validation-message="{{validations.messages.provider}}"
         ng-pattern="validations.patterns.osPath"
-        ng-model="feed.schema.provider"
-        ng-required="true"/>
+        ng-model="feed.schema.provider"/>
     </div>
+		<div class="col-xs-8"></div>
+	</div>
 
-
-  <div class="col-xs-24 mt20">
-    <button id="feed.step1" class="btn nextBtn col-xs-6 pull-right"
-         ng-disabled="buttonSpinners.show"
-         ng-click="goNext(feedForm.$invalid, 'forms.feed.properties')">
-      Next <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
-    </button>
-    <a class="pull-right" ui-sref="main">
-      Cancel
-    </a>
+  <div class="col-xs-24 pb15px mt35">
+		<div class="pull-right">
+	    <a class="btn cnclBtn" ui-sref="main">
+	      CANCEL
+	    </a>
+	    <button id="feed.step1" class="btn nextBtn"
+	         ng-disabled="buttonSpinners.show"
+	         ng-click="goNext(feedForm.$invalid)"
+					 scroll-to-error>
+	      NEXT <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
+	    </button>
+			<button id="feed.step5" class="btn nextBtn" ng-click="saveEntity(feedForm.$invalid)"
+				ng-disabled="feedForm.$invalid || buttonSpinners.saveShow">
+	      SAVE <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.saveShow" />
+	    </button>
+		</div>
   </div>
 
-</form>
\ No newline at end of file
+</form>
diff --git a/falcon-ui/app/html/feed/feedFormLocationStepTpl.html b/falcon-ui/app/html/feed/feedFormLocationStepTpl.html
index 7c7355e..aefe7c0 100644
--- a/falcon-ui/app/html/feed/feedFormLocationStepTpl.html
+++ b/falcon-ui/app/html/feed/feedFormLocationStepTpl.html
@@ -20,9 +20,11 @@
 <form name="feedForm" novalidate id="feedFormLocationStep">
   <div class="col-xs-24 locationStep">
     <div class="row">
-      <div class="col-xs-24 feedLocationNavBox">
-        <h4 class="col-xs-10" ng-show="feed.storage.fileSystem.active">Default Storage type </h4>
-        <h4 class="col-xs-10" ng-show="feed.storage.catalog.active"> Storage type </h4>
+      <div class="col-xs-24 feedLocationNavBox plr0px mt15">
+        <span class="col-xs-10" ng-show="feed.storage.fileSystem.active"
+          tooltip="feed.location.storageType">Default Storage Type</span>
+        <span class="col-xs-10" ng-show="feed.storage.catalog.active"
+          tooltip="feed.location.storageType">Storage Type</span>
 
         <div class="col-xs-14 feedLocationNav">
           <button type="button"
@@ -41,13 +43,13 @@
         </div>
         <div class="clearfix"></div>
       </div>
-      <h4 class="col-xs-12">Default Location</h4>
+      <div class="col-xs-24"><label class="mt15">DEFAULT LOCATION</label></div>
       <div class="col-xs-24">
         <div ng-show="feed.storage.fileSystem.active"
           ng-repeat="location in feed.storage.fileSystem.locations" class="row">
 
           <div class="col-xs-8">
-            <label class="light">{{capitalize(location.type)}} path</label>
+            <label class="light">{{capitalize(location.type)}} Path<mandatory-field></mandatory-field></label>
           </div>
           <div class="pull-right" ng-show="location.focused">
             <label class="light">add</label>
@@ -59,10 +61,10 @@
           <div class="clearfix hidden-md"></div>
           <div class="col-xs-24">
             <input type="text" class="form-control" validation-message="{{validations.messages.path}}"
-              ng-required="true"
+              ng-required="feed.storage.fileSystem.active"
               ng-model="location.path"
               ng-pattern="validations.patterns.osPath"
-              ng-class="{firstInput: $index === 0}"
+              focus-if="feed.storage.fileSystem.active && $index === 0"
               ng-focus="location.focused = true"/>
           </div>
         </div>
@@ -71,12 +73,12 @@
 
       <div ng-show="feed.storage.catalog.active">
         <div class="col-xs-8">
-          <label class="light">Table uri</label>
+          <label class="light">Table uri<mandatory-field></mandatory-field></label>
         </div>
 
         <div class="pull-right" ng-show="feed.storage.catalog.catalogTable.focused">
           <label class="light">add</label>
-          <label ng-repeat="timeVariable in ['${YEAR}', '${MONTH}', '${DAY} ', '${HOUR}']"
+          <label ng-repeat="timeVariable in ['${YEAR}', '${MONTH}', '${DAY}', '${HOUR}']"
                  ng-click="appendVariable(timeVariable, feed.storage.catalog.catalogTable, 'uri')">
             {{timeVariable}}
           </label>
@@ -87,27 +89,27 @@
             ng-model="feed.storage.catalog.catalogTable.uri"
             ng-pattern="validations.patterns.tableUri"
             ng-required="feed.storage.catalog.active" validation-message="{{validations.messages.path}}"
+            focus-if="feed.storage.catalog.active"
             ng-focus="feed.storage.catalog.catalogTable.focused = true"/>
         </div>
 
       </div>
     </div>
-
-    <div class="row">
-      <div class="col-xs-24 mt20">
-        <button type="button"
-                id="feed.backToStep2" class="btn prevBtn"
-                ng-click="goBack('forms.feed.properties')"
-                ng-disabled="buttonSpinners.backShow">
-          Previous <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.backShow" />
-        </button>
-        <button id="feed.step3" class="btn nextBtn pull-right" ng-click="goNext(feedForm.$invalid, 'forms.feed.clusters')" >
-          Next <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
-        </button>
-        <a class="pull-right" ui-sref="main">
-          Cancel
+    <div class="col-xs-24 mt35 pb15px pl0px">
+      <button type="button"
+              id="feed.backToStep2" class="btn prevBtn"
+              ng-click="goBack()"
+              ng-disabled="buttonSpinners.backShow">
+        PREVIOUS <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.backShow" />
+      </button>
+      <div class="pull-right">
+        <a class="btn cnclBtn" ui-sref="main">
+          CANCEL
         </a>
+        <button id="feed.step3" class="btn nextBtn" ng-click="goNext(feedForm.$invalid)" scroll-to-error>
+          NEXT <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
+        </button>
       </div>
     </div>
   </div>
-</form>
\ No newline at end of file
+</form>
diff --git a/falcon-ui/app/html/feed/feedFormPropertiesStepTpl.html b/falcon-ui/app/html/feed/feedFormPropertiesStepTpl.html
index 2e4cfd1..e2a4a44 100644
--- a/falcon-ui/app/html/feed/feedFormPropertiesStepTpl.html
+++ b/falcon-ui/app/html/feed/feedFormPropertiesStepTpl.html
@@ -19,143 +19,132 @@
 -->
 <form name="feedForm" novalidate id="feedFormPropertiesStep">
 
-    <h5 class="col-xs-24 mb10">Timing</h5>
-
-    <div class="col-xs-9 inlineInputsGroup">
-      <div class="light">Frequency</div>
-      <span>Every</span>
-      <input type="text" class="form-control" validation-message="{{validations.messages.number}}"
+	<div class="col-xs-24">
+      <label class="light" tooltip="feed.properties.frequency">
+				Frequency Every<mandatory-field></mandatory-field>
+			</label>
+		<div class="row dynamic-table-spacer">
+          <div class="col-xs-10">
+            <input type="text" class="form-control" validation-message="{{validations.messages.number}}"
              ng-model="feed.frequency.quantity" autofocus
              ng-required="true"
              ng-keydown="validations.acceptOnlyNumber($event)"
              ng-pattern="validations.patterns.twoDigits"/>
-
-      <select
-        ng-model="feed.frequency.unit"
-        ng-required="true">
-        <option selected value="minutes">minutes</option>
-        <option value="hours">hours</option>
-        <option value="days">days</option>
-        <option value="months">months</option>
-      </select>
-    </div>
-
-    <div class="col-xs-9 inlineInputsGroup">
-      <div class="light"><input type="checkbox" ng-model="feed.lateArrival.active" />Late Arrival</div>
-      <span>Up to</span>
-
-      <input type="text" class="form-control" ng-keydown="validations.acceptOnlyNumber($event)"
-        ng-model="feed.lateArrival.cutOff.quantity"
-        ng-disabled="!feed.lateArrival.active"
-        ng-pattern="validations.patterns.twoDigits"
-        ng-required="feed.lateArrival.active"/>
-
-      <select
-        ng-model="feed.lateArrival.cutOff.unit" ng-disabled="!feed.lateArrival.active"
-        ng-required="feed.lateArrival.active">
-        <option selected value="minutes">minutes</option>
-        <option value="hours">hours</option>
-        <option value="days">days</option>
-        <option value="months">months</option>
-      </select>
-    </div>
-    <div class="col-xs-6 inlineInputsGroup">
-      <div class="light">Availability Flag</div>
-      <input type="text" id="availInput" class="form-control"
-        ng-model="feed.availabilityFlag"
-        ng-pattern="validations.patterns.alpha">
-    </div>
-  </div>
-
-  <div class="col-xs-24">
-    <div class="row mt20">
-      <label class="col-xs-5 light">Timezone</label>
-      <time-zone-select ng-model="feed.timezone" class="col-xs-19"></time-zone-select>
-
-      <h5 class="col-xs-24">Properties</h5>
-
-      <div class="col-xs-5">
-        <label class="light">Name</label>
-      </div>
-      <div class="col-xs-19">
-        <label class="light">Value</label>
-      </div>
-      <div class="col-xs-24" id="feedPropertiesBox">
-        <div ng-repeat="property in feed.properties" class="row">
-
-          <label class="col-xs-5">{{property.key}}</label>
-
-          <div class="col-xs-19" ng-if="property.key !== 'timeout' && property.key !== 'jobPriority'">
-            <input type="text" class="form-control" placeholder="{{propPlaceholders[property.key]}}"
-              ng-model="property.value" validation-optional-message="{{validations.messages.value}}"
-              ng-pattern="validations.patterns.alpha"/>
           </div>
-          <div class="col-xs-19 inlineInputsGroup" ng-if="property.key === 'timeout'">
-            At
-            <input type="text" class="form-control" ng-keydown="validations.acceptOnlyNumber($event)"
-                   ng-model="property.value.quantity"
-                   ng-pattern="validations.patterns.twoDigits"/>
+          <div class="col-xs-11">
             <select
-              ng-model="property.value.unit">
-              <option value="" disabled selected style='display:none;'>-Select timeout-</option>
-              <option value="minutes">minutes</option>
-              <option value="hours">hours</option>
-              <option value="days">days</option>
-              <option value="months">months</option>
-            </select>
+				ng-model="feed.frequency.unit"
+				ng-required="true">
+				<option selected value="minutes">minutes</option>
+				<option value="hours">hours</option>
+				<option value="days">days</option>
+				<option value="months">months</option>
+			 </select>
           </div>
-          <div class="col-xs-19" ng-if="property.key === 'jobPriority'">
-            <select ng-model="property.value" class="form-control padding0">
-              <option value="" disabled selected style='display:none;'>-Select job-</option>
-              <option value="VERY_HIGH">Very high</option>
-              <option value="HIGH">High</option>
-              <option value="NORMAL">Normal</option>
-              <option value="LOW">Low</option>
-              <option value="VERY_LOW">Very Low</option>
-            </select>
+          <div class="col-xs-3">
           </div>
         </div>
-      </div>
-      <div class="col-xs-24">
-        <div ng-repeat="property in feed.customProperties" class="row">
-          <div class="col-xs-5 mt10">
-            <input type="text" class="form-control" placeholder="key"
-              ng-model="property.key" validation-optional-message="{{validations.messages.key}}"
-              ng-pattern="validations.patterns.alpha"
-              ng-required="property.value"/>
-          </div>
-
-          <div class="col-xs-15 mt10">
-            <input type="text" class="form-control" placeholder="value"
-              ng-model="property.value" validation-optional-message="{{validations.messages.value}}"
-              ng-pattern="validations.patterns.alpha"
-              ng-required="property.key"/>
-          </div>
-          <div class="col-xs-4 mt10">
-            <button type="button" class="btn btn-default btn-xs mt1" ng-click="removeCustomProperty($index)" ng-if="$index>0">
-              <span class="entypo minus"></span> delete
-            </button>
-          </div>
-        </div>
-      </div>
-      <div class="col-xs-24 mt10">
-        <button type="button" class="btn btn-default btn-xs" ng-click="addCustomProperty()">
-          <span class="entypo plus"></span> add property
-        </button>
-      </div>
     </div>
-  </div>
-  <div class="col-xs-24 mt20">
-    <button id="feed.backToStep1" class="btn prevBtn" type="button"
-         ng-click="goBack('forms.feed.general')"
-         ng-disabled="buttonSpinners.backShow">
-      Previous <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.backShow" />
-    </button>
-    <button id="feed.step2" class="btn nextBtn pull-right" ng-click="goNext(feedForm.$invalid, 'forms.feed.location')">
-      Next <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
-    </button>
-    <a class="pull-right" ui-sref="main">
-      Cancel
-    </a>
-  </div>
-</form>
\ No newline at end of file
+    <div class="col-xs-24">
+			<input type="checkbox" ng-model="feed.lateArrival.active" class="labelCheckBox" />
+      <label class="light" tooltip="feed.properties.lateArrival">
+				Late Arrival Upto<mandatory-field></mandatory-field>
+			</label>
+		<div class="row dynamic-table-spacer">
+		  <div class="col-xs-10">
+           <input type="text" class="form-control" ng-keydown="validations.acceptOnlyNumber($event)"
+			ng-model="feed.lateArrival.cutOff.quantity"
+			ng-disabled="!feed.lateArrival.active"
+			ng-pattern="validations.patterns.twoDigits"
+			ng-required="feed.lateArrival.active"/>
+          </div>
+          <div class="col-xs-11">
+            <select
+				ng-model="feed.lateArrival.cutOff.unit" ng-disabled="!feed.lateArrival.active"
+				ng-required="feed.lateArrival.active">
+				<option selected value="minutes">minutes</option>
+				<option value="hours">hours</option>
+				<option value="days">days</option>
+				<option value="months">months</option>
+			</select>
+          </div>
+		</div>
+    </div>
+    <div class="col-xs-24">
+      <label class="light" tooltip="feed.properties.availabilityIndicator">
+				Availability Indicator<mandatory-field></mandatory-field>
+			</label>
+		<div class="row dynamic-table-spacer">
+		  <div class="col-xs-10">
+           <input type="text" id="availInput" class="form-control" ng-model="feed.availabilityFlag"
+				ng-pattern="validations.patterns.alpha"
+				validation-message="{{validations.messages.availabilityFlag}}"
+				ng-required="true">
+		   </div>
+        </div>
+    </div>
+	<div class="col-xs-24">
+      <label class="light" tooltip="feed.properties.timezone">Timezone<mandatory-field></mandatory-field></label>
+	  <div class="row dynamic-table-spacer">
+		  <div class="col-xs-24">
+           <time-zone-select ng-model="feed.timezone" required="true"></time-zone-select>
+          </div>
+	  </div>
+	</div>
+	<div class="col-xs-24"><label class="mt15">PROPERTIES</label></div>
+	</div>
+	<div class="col-xs-24 plr0px mt10">
+		<table class="table properties">
+			<thead>
+			  <tr>
+				<th class="no-border-bottom col-xs-4">Name</th>
+				<th class="no-border-bottom col-xs-20">Value</th>
+			  </tr>
+			</thead>
+			<tbody>
+			  <tr ng-repeat="property in feed.properties" class="">
+				<td class="no-border-top font11px">{{feedPropertiesLabels[property.key]}}</td>
+				<td class="no-border-top"><div ng-if="property.key !== 'timeout' &amp;&amp; property.key !== 'jobPriority'">
+					<input type="text" class="form-control" placeholder="{{propPlaceholders[property.key]}}" ng-model="property.value" validation-optional-message="{{validations.messages.value}}" ng-pattern="validations.patterns.alpha">
+				  </div>
+				  <div class="col-xs-24 plr0px" ng-if="property.key === 'timeout'">
+						<span class="col-xs-1 plr0px pt5px pb5px">at</span>
+						<input type="text" class="col-xs-2 feedFormInputBorder" ng-keydown="validations.acceptOnlyNumber($event)" ng-model="property.value.quantity" ng-pattern="validations.patterns.twoDigits">
+						<div class="col-xs-1"></div>
+						<select ng-model="property.value.unit" class="col-xs-4">
+						  <option value="" disabled="" selected="" style="display:none;">-Select timeout-</option>
+						  <option value="minutes">minutes</option>
+						  <option value="hours">hours</option>
+						  <option value="days">days</option>
+						  <option value="months">months</option>
+						</select>
+				  </div>
+				  <div class="" ng-if="property.key === 'jobPriority'">
+					<select ng-model="property.value" class="form-control padding0">
+					  <option value="" disabled="" selected="" style="display:none;">-Select job-</option>
+					  <option value="VERY_HIGH">Very high</option>
+					  <option value="HIGH">High</option>
+					  <option value="NORMAL">Normal</option>
+					  <option value="LOW">Low</option>
+					  <option value="VERY_LOW">Very Low</option>
+					</select>
+				  </div>
+				</td>
+			  </tr>
+			</tbody>
+		  </table>
+	</div>
+    <div class="col-xs-24 mt35 pb15px plr0px">
+		<button id="feed.backToStep1" class="btn prevBtn" type="button" ng-click="goBack()" ng-disabled="buttonSpinners.backShow">
+		  PREVIOUS <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.backShow">
+		</button>
+		<div class="pull-right">
+			<a class="btn cnclBtn" ui-sref="main">
+			  CANCEL
+			</a>
+			<button id="feed.step2" class="btn nextBtn" ng-click="goNext(feedForm.$invalid)" scroll-to-error>
+			  NEXT <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show">
+			</button>
+		</div>
+	</div>
+</form>
diff --git a/falcon-ui/app/html/feed/feedFormSummaryStepTpl.html b/falcon-ui/app/html/feed/feedFormSummaryStepTpl.html
index a8a4844..a77d310 100644
--- a/falcon-ui/app/html/feed/feedFormSummaryStepTpl.html
+++ b/falcon-ui/app/html/feed/feedFormSummaryStepTpl.html
@@ -17,147 +17,208 @@
  * limitations under the License.
  */
 -->
-<div class="row" id="feedFormSummaryStep">
+<div class="row feedSummaryRow" id="feedSummaryStep">
   <h4 class="col-sm-24">
     General
   </h4>
-  <div class="col-sm-12">
-    <label>Name</label>: {{feed.name}}
-  </div>
-  <div class="col-sm-12">
-    <label>Description</label>: {{optional(feed.description)}}
-  </div>
-
-  <h4 class="col-sm-24">
-    Tags
-  </h4>
   <div class="col-sm-24">
+    <label>Feed Name</label>: <span>{{feed.name}}</span>
+  </div>
+  <div class="col-sm-24">
+    <label>Description</label>:<span> {{optional(feed.description)}}</span>
+  </div>
+  <div class="col-sm-24">
+    <label>Tags</label>:
     <div ng-repeat="tag in feed.tags | filter:{key: '!!'}">
-      {{tag.key}} = {{tag.value}}
+      <span>{{tag.key}} = {{tag.value}}</span>
     </div>
-    <div ng-show="!hasTags()">No tags selected</div>
+    <div ng-show="!hasTags()"><span>No tags selected</span></div>
   </div>
 
-  <h4 class="col-sm-24">
-    Groups
-  </h4>
   <div class="col-sm-24">
+    <label>Feed Groups</label>:
     {{feed.groups}}
-    <div ng-show="!feed.groups">No groups selected</div>
+    <div ng-show="!feed.groups"><span>No groups selected</span></div>
   </div>
 
   <h4 class="col-sm-24">
     Access Control List
   </h4>
-  <div class="col-sm-8">
-    <label>Owner</label>: {{optional(feed.ACL.owner)}}
-  </div>
-  <div class="col-sm-8">
-    <label>Group</label>: {{optional(feed.ACL.group)}}
-  </div>
-  <div class="col-sm-8">
-    <label>Permissions</label>: {{optional(feed.ACL.permission)}}
+  <div class="col-sm-24">
+    <label>Owner</label>: <span>{{optional(feed.ACL.owner)}}</span>
+    <label>Group</label>: <span>{{optional(feed.ACL.group)}}</span>
+    <label>Permissions</label>:<span> {{optional(feed.ACL.permission)}}</span>
   </div>
 
   <h4 class="col-sm-24">
-    Schema
+    Feed Schema
   </h4>
 
-  <div class="col-sm-12">
-    <label>Location</label>: {{optional(feed.schema.location)}}
-  </div>
-  <div class="col-sm-12">
-    <label>Provider</label>: {{optional(feed.schema.provider)}}
+  <div class="col-sm-24">
+    <label>Location</label>: <span>{{optional(feed.schema.location)}}</span>
+    <label>Provider</label>: <span>{{optional(feed.schema.provider)}}</span>
   </div>
 
   <h4 class="col-sm-24">
     Properties
   </h4>
 
-  <div class="col-sm-8">
-    <label>Frequency</label>: <frequency value="feed.frequency" prefix="Every"/>
+  <div class="col-sm-24">
+    <label>Frequency</label>:<span> <frequency value="feed.frequency" prefix="Every"/></span>
   </div>
-  <div class="col-sm-8">
-    <label>Late Arrival</label>: <frequency value="feed.lateArrival.cutOff" prefix="Up to"/>
+  <div class="col-sm-24">
+    <label>Late Arrival</label>:<span> <frequency value="feed.lateArrival.cutOff" prefix="Up to"/></span>
   </div>
-  <div class="col-sm-8">
-    <label>Availability Flag</label>: {{optional(feed.availabilityFlag)}}
+  <div class="col-sm-24">
+    <label>Availability Flag</label>: <span>{{optional(feed.availabilityFlag)}}</span>
   </div>
 
-  <div class="col-sm-8" ng-repeat="property in feed.properties">
-    <label>{{property.key}}</label>:
+  <div class="col-sm-24" ng-repeat="property in feed.properties">
+    <label>{{feedPropertiesLabels[property.key]}}</label>:
     <span ng-if="property.key !== 'timeout'">{{optional(property.value)}}</span>
-    <frequency ng-if="property.key === 'timeout'" value="property.value" prefix="at"/>
+    <span><frequency ng-if="property.key === 'timeout'" value="property.value" prefix="at"/></span>
   </div>
 
-  <div class="col-sm-8" ng-repeat="property in feed.customProperties | filter: {key: '!!'}">
-    <label>{{property.key}}</label>: {{property.value}}
+  <div class="col-sm-24" ng-repeat="property in feed.customProperties | filter: {key: '!!'}">
+    <label>{{feedPropertiesLabels[property.key]}}</label>: <span>{{property.value}}</span>
   </div>
 
-  <h4 class="col-sm-8" >
-    Default Storage Type:
+  <h4 class="col-sm-24">Default Storage Type:</h4>
+  <div class="col-sm-24">
+    <label class="light" ng-show="feed.storage.fileSystem.locations">File System</label>
+    <label class="light" ng-show="feed.storage.catalog.catalogTable.uri">Catalog Storage</label>
+  </div>
+
+  <h4 class="col-sm-24">Default Location:</h4>
+  <div class="col-sm-24" ng-repeat="location in feed.storage.fileSystem.locations"
+    ng-show="feed.storage.fileSystem.locations">
+    <label>{{capitalize(location.type)}}</label>:
+    <span>{{optional(location.path)}}</span>
+  </div>
+
+  <div class="col-sm-24" ng-show="feed.storage.catalog.catalogTable.uri">
+    <label>Table uri</label>:<span>{{optional(feed.storage.catalog.catalogTable.uri)}}</span>
+  </div>
+
+  <h4 class="col-sm-24" ng-if="(feed.clusters | filter:{type:'source'} | filter:emptyClusterName).length > 0">
+    Source Cluster(s)
   </h4>
 
-  <div class="col-sm-8 light" ng-show="feed.storage.fileSystem.active">File System</div>
-  <div class="col-sm-8 light" ng-show="feed.storage.catalog.active">Catalog Storage</div>
-
-  <h4 class="col-sm-24" >Default Location:</h4>
-
-  <div ng-repeat="location in feed.storage.fileSystem.locations" ng-show="feed.storage.fileSystem.active">
-    <label class="col-sm-24" >{{capitalize(location.type)}}</label>
-    <div class="col-sm-24">{{optional(location.path)}}</div>
-  </div>
-
-  <div ng-show="feed.storage.catalog.active">
-    <label class="col-sm-24" >Table uri</label>
-    <div class="col-sm-24">{{optional(feed.storage.catalog.catalogTable.uri)}}</div>
-  </div>
-
-  <div ng-repeat="cluster in feed.clusters" >
-    <h4 class="col-sm-24" >{{capitalize(cluster.type)}} Cluster</h4>
-
-    <div class="col-sm-12">
-      <label>Name</label>: {{cluster.name}}
+  <div ng-repeat="cluster in feed.clusters | filter:{type:'source'} | filter:emptyClusterName">
+    <div class="col-sm-24">
+      <label>Name</label>: <span>{{cluster.name}}</span>
     </div>
-    <div class="clearfix hidden-md"></div>
 
-    <div class="col-sm-12">
-      <label>Start</label>: {{cluster.validity.start.date|date:'yyyy-MM-dd'}} {{cluster.validity.start.time|date:'HH:mm'}}
-    </div>
-    <div class="col-sm-12">
-      <label>End</label>: {{cluster.validity.end.date|date:'yyyy-MM-dd'}} {{cluster.validity.end.time|date:'HH:mm'}}
+    <div class="col-sm-24">
+      <label>Start</label>: <span>{{getDateTimeString(cluster.validity.start.date,cluster.validity.start.time)}}</span>
     </div>
     <div class="col-sm-24">
-      <label>Timezone</label>: {{feed.timezone}}
+      <label>End</label>: <span>{{getDateTimeString(cluster.validity.end.date,cluster.validity.end.time)}}</span>
     </div>
     <div class="col-sm-24">
-      <label>Retention</label>: <frequency value="cluster.retention" prefix="Archive in"/>
+      <label>Timezone</label>: <span>{{feed.timezone}}</span>
+    </div>
+    <div class="col-sm-24">
+      <label>Retention</label>: <span><frequency value="cluster.retention" prefix=""/></span>
+    </div>
+
+    <label class="col-sm-24" ng-show="cluster.storage.fileSystem.locations">Location</label>
+    <div class="col-sm-24" ng-repeat="location in cluster.storage.fileSystem.locations"
+      ng-show="cluster.storage.fileSystem.locations">
+      <label>{{capitalize(location.type)}}</label>: <span>{{optional(location.path)}}</span>
+    </div>
+    <div class="col-sm-24" ng-show="cluster.storage.catalog.catalogTable.uri">
+      <label>Table uri</label>: <span>{{optional(cluster.storage.catalog.catalogTable.uri)}}</span>
     </div>
   </div>
-  <div class="clearfix hidden-md"></div>
-  <h4 class="col-sm-24" >Location</h4>
-  <div ng-repeat="location in cluster.storage.fileSystem.locations" ng-show="cluster.storage.fileSystem">
-    <label class="col-sm-24" >{{capitalize(location.type)}}</label>
-    <div class="col-sm-24">{{optional(location.path)}}</div>
+
+  <h4 class="col-sm-24"
+    ng-if="feed.enableFeedReplication && (feed.clusters | filter:{type:'target'} | filter:emptyClusterName).length > 0">
+    Target Cluster(s)
+  </h4>
+  <div ng-repeat="cluster in feed.clusters | filter:{type:'target'} | filter:emptyClusterName" ng-if="feed.enableFeedReplication">
+    <div class="col-sm-24">
+      <label>Name</label>: <span>{{cluster.name}}</span>
+    </div>
+
+    <div class="col-sm-24">
+      <label>Start</label>: <span>{{getDateTimeString(cluster.validity.start.date,cluster.validity.start.time)}}</span>
+    </div>
+    <div class="col-sm-24">
+      <label>End</label>: <span>{{getDateTimeString(cluster.validity.end.date,cluster.validity.end.time)}}</span>
+    </div>
+    <div class="col-sm-24">
+      <label>Timezone</label>: <span>{{feed.timezone}}</span>
+    </div>
+    <div class="col-sm-24">
+      <label>Retention</label>: <span><frequency value="cluster.retention" prefix=""/></span>
+    </div>
+
+    <label class="col-sm-24" ng-show="cluster.storage.fileSystem.locations">Location</label>
+    <div class="col-sm-24" ng-repeat="location in cluster.storage.fileSystem.locations"
+      ng-show="cluster.storage.fileSystem.locations">
+      <label>{{capitalize(location.type)}}</label>: <span>{{optional(location.path)}}</span>
+    </div>
+    <div class="col-sm-24" ng-show="cluster.storage.catalog.catalogTable.uri">
+      <label>Table uri</label>: <span>{{optional(cluster.storage.catalog.catalogTable.uri)}}</span>
+    </div>
   </div>
-  <div ng-show="cluster.storage.catalog.active">
-    <label class="col-sm-24" >Table uri</label>
-    <div class="col-sm-24">{{optional(cluster.storage.catalog.catalogTable.uri)}}</div>
+
+  <h4 class="col-sm-24" ng-if="feed.dataTransferType === 'import' || feed.dataTransferType === 'export'">
+    Datasource
+  </h4>
+  <div class="col-sm-24 plr0px" ng-if="feed.dataTransferType === 'import'">
+    <div class="col-sm-24">
+      <label>Datasource Name</label>: <span>{{feed.import.source.name}}</span>
+    </div>
+    <div class="col-sm-24">
+      <label>Table Name</label>: <span>{{feed.import.source.tableName}}</span>
+    </div>
+    <div class="col-sm-24">
+      <label>Extract Type</label>: <span>{{feed.import.source.extract.type}}</span>
+    </div>
+    <div class="col-sm-24">
+      <label>Merge Type</label>: <span>{{feed.import.source.extract.mergepolicy}}</span>
+    </div>
+    <div class="col-sm-24">
+      <label>Columns</label>:
+      <span ng-if="feed.import.source.columnsType === 'include'">{{feed.import.source.includesCSV}}</span>
+      <span ng-if="feed.import.source.columnsType === 'exclude'">{{feed.import.source.excludesCSV}}</span>
+      <span ng-if="feed.import.source.columnsType === 'all'">All</span>
+    </div>
+  </div>
+
+  <div class="col-sm-24 plr0px" ng-if="feed.dataTransferType === 'export'">
+    <div class="col-sm-24">
+      <label>Datasource Name</label>: <span>{{feed.export.target.name}}</span>
+    </div>
+    <div class="col-sm-24">
+      <label>Table Name</label>: <span>{{feed.export.target.tableName}}</span>
+    </div>
+    <div class="col-sm-24">
+      <label>Load Method</label>: <span>{{feed.export.target.load.type}}</span>
+    </div>
+    <div class="col-sm-24">
+      <label>Columns</label>:
+      <span ng-if="feed.export.target.columnsType === 'include'">{{feed.export.target.includesCSV}}</span>
+      <span ng-if="feed.export.target.columnsType === 'exclude'">{{feed.export.target.excludesCSV}}</span>
+      <span ng-if="feed.export.target.columnsType === 'all'">All</span>
+    </div>
   </div>
 </div>
 
-<div class="row">
-  <div class="col-xs-24 mt20">
-    <button id="feed.backToStep4" class="btn prevBtn" type="button"
-         ng-click="goBack('forms.feed.clusters')"
-         ng-disabled="buttonSpinners.backShow">
-      Previous <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.backShow" />
-    </button>
-    <button id="feed.step5" class="btn nextBtn pull-right" ng-click="saveEntity()">
-      Save <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
-    </button>
-    <a class="pull-right" ui-sref="main">
-      Cancel
+<div class="col-xs-24 mt35 pb15px pl0px">
+  <button id="feed.backToStep4" class="btn prevBtn" type="button"
+       ng-click="goBack()"
+       ng-disabled="buttonSpinners.backShow">
+    PREVIOUS <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.backShow" />
+  </button>
+  <div class="pull-right">
+    <a class="btn cnclBtn" ui-sref="main">
+      CANCEL
     </a>
+    <button id="feed.step5" class="btn nextBtn" ng-click="saveEntity()" focus-if>
+      SAVE <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.saveShow" />
+    </button>
   </div>
-</div>
\ No newline at end of file
+</div>
diff --git a/falcon-ui/app/html/feed/feedFormTpl.html b/falcon-ui/app/html/feed/feedFormTpl.html
index ee30d54..c1a2952 100644
--- a/falcon-ui/app/html/feed/feedFormTpl.html
+++ b/falcon-ui/app/html/feed/feedFormTpl.html
@@ -17,91 +17,82 @@
  * limitations under the License.
  */
 -->
-<div class="col-xs-22 col-xs-offset-1 feedForm" id="feedFormTmpl">
+<div id="formBox" class="feedForm">
   <div class="col-xs-24">
-    <div class="row dt">
-
-      <h3 id="feed.title" class="col-xs-24">
-        <span class="entypo download icon-lg"></span> New Feed
-      </h3>
-
-      <div ng-class="{'col-xs-12' : propsOpen, 'col-xs-20' : !propsOpen}">
-        <div class="detailsBox">
-          <div class="feedProgressBox" ng-class="{
-            general:isActive('forms.feed.general'),
-            properties:isActive('forms.feed.properties'),
-            location:isActive('forms.feed.location'),
-            clusters:isActive('forms.feed.clusters'),
-            summary:isActive('forms.feed.summary')
-            }">
-            <div class="progressBar col-xs-24">
-              <div>
-                <span>
-                  <div class="fir">1<span class="entypo check"></span></div>
-                  <h6>General</h6>
-                </span>
-                <span>
-                  <div class="sec">2<span class="entypo check"></span></div>
-                  <h6>Properties</h6>
-                </span>
-                <span>
-                  <div class="thi">3<span class="entypo check"></span></div>
-                  <h6>Location</h6>
-                </span>
-                <span>
-                  <div class="fou">4<span class="entypo check"></span></div>
-                  <h6>Clusters</h6>
-                </span>
-                <span>
-                  <div class="fif">5<span class="entypo check"></span></div>
-                  <h6>Summary</h6>
-                </span>
-              </div>
-            </div>
+    <div class="preview pullOver">
+      <button id="previewXMLBtn" type="button" class="btn btn-default btn-md pull-right nextBtn"
+      ng-disabled="invalidXml && xmlPreview.edit" ng-click="toggleclick()" >Preview XML</button>
+    </div>
+    <br/>
+    <div>
+      <div class="formBoxContainer detailsBox">
+        <div class="row feedProgressBox" ng-class="{
+          general:isActive('forms.feed.general'),
+          summary:isActive('forms.feed.summary')
+          }">
+          <div class="progressBar col-xs-24">
+              <div class="text-center fir" ng-class="{
+                active:isActive('forms.feed.general'),
+                completed:isCompleted('forms.feed.general')}">General</div>
+              <div class="text-center fif" ng-class="{
+                active:isActive('forms.feed.summary'),
+                completed:isCompleted('forms.feed.summary')}">Summary</div>
           </div>
-
-          <div class="row">
-            <div class="col-xs-offset-1 col-xs-22">
-              <fieldset ng-disabled="!editXmlDisabled">
-                <div ui-view class="formViewContainer"></div>
-              </fieldset>
-            </div>
+        </div>
+        <div class="row customContainer">
+          <div class="col-xs-offset-1 col-xs-22">
+            <fieldset ng-disabled="!editXmlDisabled">
+              <div class="formViewContainer">
+                <div class="col-xs-24">
+                  <label class="title"><span class="entypo download icon-lg entypo-align-sub"></span> NEW FEED</label>
+                </div>
+                <div ui-view></div>
+              </div>
+            </fieldset>
           </div>
         </div>
       </div>
 
-      <div ng-class="{'col-xs-12' : propsOpen, 'col-xs-4' : !propsOpen}">
-        <div class="detailsBox">
-          <div class="row dt">
-
-            <div class="col-xs-13 col-xs-offset-1 noSpecial">
-              <h5><i class="pointer glyphicon" ng-click="propsOpen = !propsOpen" ng-class="propsOpen ? 'glyphicon-minus-sign':'glyphicon-plus-sign'"></i> XML Preview</h5>
+      <div class="hide xmlPreviewContainer detailsBox">
+        <div class="row dt">
+          <div class="col-xs-24 pt15px">
+            <div class="col-xs-13 noSpecial">
+                <h5>XML Preview</h5>
+                <label style="margin-top: -10px;margin-bottom: -2px;" ng-if="invalidXml" class="custom-danger">Invalid Xml</label>
             </div>
 
-            <div ng-if="propsOpen" class="col-xs-9">
+            <div class="pull-right">
               <button type="button"
                       id="feed.editXML"
-                      class="btn btn-default btn-xs pull-right"
+                      class="btn btn-default btn-xs"
                       ng-click="toggleEditXml()"
-                      ng-class="{'btn-warning':!editXmlDisabled}">
+                      ng-class="{'btn-warning':!editXmlDisabled}"
+                      ng-disabled="invalidXml">
                 <div ng-if="editXmlDisabled">Edit XML</div>
                 <div ng-if="!editXmlDisabled">Finish</div>
               </button>
 
+              <button type="button"
+                      id="revertXMLBtn"
+                      class="btn btn-default btn-xs"
+                      ng-if="invalidXml"
+                      ng-click="revertXml()">
+                  <div>Revert</div>
+              </button>
             </div>
-
-            <div ng-show="propsOpen" class="col-sm-24">
-              <div class="row">
-                <div class="col-sm-22 col-sm-offset-1">
-                  <textarea ng-model="prettyXml" elastic class="form-control prettyXml" ng-disabled="editXmlDisabled"></textarea>
-                </div>
-              </div>
-            </div>
+		  </div>
+          <div class="col-sm-24 showValidationStyle">
+            <textarea ng-model="prettyXml"
+                      elastic
+                      class="form-control"
+                      ng-disabled="editXmlDisabled"
+                      ng-class="{fakeInvalid:invalidXml}">
+            </textarea>
+            <!--{{xmlEditValidationError}}-->
+          </div>
 
           </div>
         </div>
-      </div>
-
     </div>
   </div>
 </div>
diff --git a/falcon-ui/app/html/feed/feedSummary.html b/falcon-ui/app/html/feed/feedSummary.html
index 760e810..1f0dcc6 100644
--- a/falcon-ui/app/html/feed/feedSummary.html
+++ b/falcon-ui/app/html/feed/feedSummary.html
@@ -34,9 +34,9 @@
   </div>
 
   <div class="row">
-    <h5 class="col-sm-24">
+    <label class="col-sm-24">
       Tags
-    </h5>
+    </label>
   </div>
 
   <div class="row">
@@ -48,14 +48,8 @@
   </div>
 
   <div class="row">
-    <h5 class="col-sm-24">
-      Groups
-    </h5>
-  </div>
-
-  <div class="row">
     <div class="col-sm-24">
-      {{feed.groups}}
+      <label>Groups</label>: {{feed.groups}}
     </div>
   </div>
 
@@ -114,13 +108,13 @@
 
   <div class="row">
     <div class="col-sm-8" ng-repeat="property in feed.properties">
-      <label>{{property.key}}</label>:
+      <label>{{feedPropertiesLabels[property.key]}}</label>:
       <span ng-if="property.key !== 'timeout'">{{property.value}}</span>
       <frequency ng-if="property.key === 'timeout'" value="property.value" prefix="at"/>
     </div>
 
     <div class="col-sm-8" ng-repeat="property in feed.customProperties | filter: {key: '!!'}">
-      <label>{{property.key}}</label>: {{property.value}}
+      <label>{{feedPropertiesLabels[property.key]}}</label>: {{property.value}}
     </div>
 
     <h5 class="col-xs-24">
@@ -129,31 +123,29 @@
   </div>
 
   <div class="row">
-    <div class="col-sm-8 light" ng-show="feed.storage.fileSystem.active">File System</div>
-    <div class="col-sm-8 light" ng-show="feed.storage.catalog.active">Catalog Storage</div>
+    <div class="col-sm-8 light" ng-show="feed.storage.fileSystem.locations">File System</div>
+    <div class="col-sm-8 light" ng-show="feed.storage.catalog.catalogTable.uri">Catalog Storage</div>
   </div>
 
   <div class="row">
     <h5 class="col-sm-24">Default Location:</h5>
   </div>
 
-
-  <div ng-repeat="location in feed.storage.fileSystem.locations" ng-show="feed.storage.fileSystem.active">
+  <div ng-repeat="location in feed.storage.fileSystem.locations" ng-show="feed.storage.fileSystem.locations">
     <div class="row">
-      <label class="col-sm-24">{{capitalize(location.type)}}</label>
-    </div>
-
-    <div class="row">
-      <div class="col-sm-24">{{location.path}}</div>
+      <div class="col-sm-24">
+        <label>{{capitalize(location.type)}}</label>:
+        <span>{{location.path}}</span>
+      </div>
     </div>
   </div>
 
-  <div ng-show="feed.storage.catalog.active">
+  <div ng-show="feed.storage.catalog.catalogTable.uri">
     <div class="row">
-      <label class="col-sm-24">Table uri</label>
-    </div>
-    <div class="row">
-      <div class="col-sm-24">{{feed.storage.catalog.catalogTable.uri}}</div>
+      <div class="col-sm-24">
+        <label>Table uri</label>
+        <span>{{feed.storage.catalog.catalogTable.uri}}</span>
+      </div>
     </div>
   </div>
 
@@ -186,29 +178,74 @@
     <div class="row">
       <div class="col-sm-24">
         <label>Retention</label>:
-        <frequency value="cluster.retention" prefix="Archive in"/>
+        <frequency value="cluster.retention" prefix=""/>
+      </div>
+    </div>
+
+    <div class="row">
+      <label class="col-sm-24">Location</label>
+    </div>
+
+    <div ng-repeat="location in cluster.storage.fileSystem.locations" ng-show="cluster.storage.fileSystem.locations">
+      <div class="row">
+        <div class="col-sm-24">
+          <label>{{capitalize(location.type)}}</label>
+          <span>{{location.path}}</span>
+        </div>
+      </div>
+    </div>
+    <div ng-show="cluster.storage.catalog.catalogTable.uri">
+      <div class="row">
+        <div class="col-sm-24">
+          <label>Table uri</label>
+          <span>{{cluster.storage.catalog.catalogTable.uri}}</span>
+        </div>
       </div>
     </div>
   </div>
-  <div class="clearfix hidden-md"></div>
+
   <div class="row">
-    <h5 class="col-sm-24">Location</h5>
+    <h4 class="col-sm-24" ng-if="feed.import || feed.export">
+      Datasource
+    </h4>
+    <div class="col-sm-24 plr0px" ng-if="feed.import">
+      <div class="col-sm-24">
+        <label>Datasource Name</label>: <span>{{feed.import.source.name}}</span>
+      </div>
+      <div class="col-sm-24">
+        <label>Table Name</label>: <span>{{feed.import.source.tableName}}</span>
+      </div>
+      <div class="col-sm-24">
+        <label>Extract Type</label>: <span>{{feed.import.source.extract.type}}</span>
+      </div>
+      <div class="col-sm-24">
+        <label>Merge Type</label>: <span>{{feed.import.source.extract.mergepolicy}}</span>
+      </div>
+      <div class="col-sm-24">
+        <label>Columns</label>:
+        <span ng-if="feed.import.source.includesCSV">{{feed.import.source.includesCSV}}</span>
+        <span ng-if="feed.import.source.excludesCSV">{{feed.import.source.excludesCSV}}</span>
+        <span ng-if="!feed.import.source.includesCSV && !feed.import.source.excludesCSV">All</span>
+      </div>
+    </div>
+
+    <div class="col-sm-24 plr0px" ng-if="feed.export">
+      <div class="col-sm-24">
+        <label>Datasource Name</label>: <span>{{feed.export.target.name}}</span>
+      </div>
+      <div class="col-sm-24">
+        <label>Table Name</label>: <span>{{feed.export.target.tableName}}</span>
+      </div>
+      <div class="col-sm-24">
+        <label>Load Method</label>: <span>{{feed.export.target.load.type}}</span>
+      </div>
+      <div class="col-sm-24">
+        <label>Columns</label>:
+        <span ng-if="feed.export.target.includesCSV">{{feed.export.target.includesCSV}}</span>
+        <span ng-if="feed.export.target.excludesCSV">{{feed.export.target.excludesCSV}}</span>
+        <span ng-if="!feed.export.target.includesCSV && !feed.export.target.excludesCSV">All</span>
+      </div>
+    </div>
   </div>
 
-  <div ng-repeat="location in cluster.storage.fileSystem.locations" ng-show="cluster.storage.fileSystem">
-    <div class="row">
-      <label class="col-sm-24">{{capitalize(location.type)}}</label>
-    </div>
-    <div class="row">
-      <div class="col-sm-24">{{location.path}}</div>
-    </div>
-  </div>
-  <div ng-show="cluster.storage.catalog.active">
-    <div class="row">
-      <label class="col-sm-24">Table uri</label>
-    </div>
-    <div class="row">
-      <div class="col-sm-24">{{cluster.storage.catalog.catalogTable.uri}}</div>
-    </div>
-  </div>
-</div>
\ No newline at end of file
+</div>
diff --git a/falcon-ui/app/html/formsTpl.html b/falcon-ui/app/html/formsTpl.html
index b8d50fb..bd63470 100644
--- a/falcon-ui/app/html/formsTpl.html
+++ b/falcon-ui/app/html/formsTpl.html
@@ -18,6 +18,6 @@
  */
 -->
 <div class="col-sm-24 formPage" ng-class="{showValidationStyle:validations.displayValidations.show}">
-  <div ui-view>
+  <div class="col-sm-offset-2 col-sm-20" ui-view>
   </div>
 </div>
diff --git a/falcon-ui/app/html/instanceDetails.html b/falcon-ui/app/html/instanceDetails.html
index b67c041..e22c717 100644
--- a/falcon-ui/app/html/instanceDetails.html
+++ b/falcon-ui/app/html/instanceDetails.html
@@ -17,29 +17,29 @@
  * limitations under the License.
  */
 -->
-<div class="container" id="instanceDetails">
+<div class="container instanceDetails pt15px">
 
   <div class="row">
     <div class="col-sm-24">
       <div class="detailsBox">
         <div class="row">
           <div class="col-sm-9">
-            <h3 class="instance-title">
-              <a href="javascript:void(0);" ng-click="backToEntity()">{{ instance.name }}</a> | {{ instance.instance }}
+            <h3 class="instance-title pl0px">
+              <a href="javascript:void(0);" ng-click="backToEntity()">{{ instance.name }}</a> | <span>{{ instance.instance }}</span>
             </h3>
           </div>
           <div class="col-sm-3 instance-status">
             <span class="text-success">STARTED</span><br/>
-            {{ instance.startTime | date :'MM/dd/yyyy HH:mm' }}
+            <span>{{ instance.startTime | date : dateFormat }}</span>
           </div>
           <div class="col-sm-5 border-left">
             <h4 class="instance-title">
               Status: <span ng-class="{
-              'blink-success': instance.status == 'RUNNING',
-              'text-success': instance.status == 'SUCCEEDED',
-              'blink-warning': instance.status == 'WAITING' || instance.status == 'UNKNOWN',
-              'blink-danger': instance.status == 'SUSPENDED',
-              'text-danger': instance.status == 'FAILED' || instance.status == 'KILLED',
+                'blink-success': instance.status == 'RUNNING',
+                'text-success': instance.status == 'SUCCEEDED',
+                'blink-warning': instance.status == 'WAITING' || instance.status == 'UNKNOWN',
+                'blink-danger': instance.status == 'SUSPENDED',
+                'text-danger': instance.status == 'FAILED' || instance.status == 'KILLED',
               }">{{ instance.status }}</span>
             </h4>
           </div>
@@ -49,11 +49,11 @@
               <span class="entypo play"></span> <div>Resume</div>
             </div>
             <div class="btn btn-big btn-xs buttons-to-show" ng-click="reRunInstance()"
-                 ng-disabled="!(instance.status === 'KILLED' || instance.status === 'SUCCEEDED' || instance.status === 'FAILED')">
-              <span class="entypo play"></span> <div>Rerun</div>
-            </div>
+                ng-disabled="!(instance.status === 'KILLED' || instance.status === 'SUCCEEDED' || instance.status === 'FAILED')">
+                <span class="entypo play"></span> <div>Rerun</div>
+              </div>
             <div class="btn btn-big btn-xs buttons-to-show" ng-click="suspendInstance()" ng-disabled="!(instance.status === 'RUNNING')">
-              <span class="entypo paus"></span> <div>Suspend</div>
+              <span class="entypo paus"></span> <div>Pause</div>
             </div>
             <div class="btn btn-big btn-xs buttons-to-show" ng-click="killInstance()" ng-disabled="!(instance.status === 'SUSPENDED' || instance.status === 'RUNNING')">
               <span class="entypo stop"></span> <div>Kill</div>
diff --git a/falcon-ui/app/html/mainTpl.html b/falcon-ui/app/html/mainTpl.html
index 890463f..963bfb0 100644
--- a/falcon-ui/app/html/mainTpl.html
+++ b/falcon-ui/app/html/mainTpl.html
@@ -17,59 +17,124 @@
  * limitations under the License.
  */
 -->
-
-<div class="col-sm-offset-1 col-sm-22">
-
-  <div class="row searchBoxContainer" id="searchBoxContainer">
-    <div class="col-sm-4"></div>
-    <div class="col-sm-16">
-
-      <img src="css/img/ajax-loader.gif" class="glyphicon search-loading-icon" ng-show="loading"/>
-      <i class="glyphicon glyphicon-search search-icon" ng-hide="loading"></i>
-
-      <tags-input ng-model="tags" min-length="1" add-on-space="true" add-from-autocomplete-only="true"
-                  on-tag-added="displayResults()" on-tag-removed="displayResults()" placeholder="Search">
-        <auto-complete source="loadTags($query)" min-length="0"></auto-complete>
-      </tags-input>
-
-      <i id="nsPopover" class="glyphicon glyphicon-question-sign" ng-class="tags.length > 0 ? 'question-icon' : 'remove-icon'"
-         ns-popover
-         ns-popover-template="menu"
-         ns-popover-trigger="click"
-         ns-popover-theme="ns-popover-tooltip-theme"
-         ns-popover-timeout="5"
-         ns-popover-placement="bottom|right"></i>
-      <script type="text/ng-template" id="menu">
-        <div class="triangle"></div>
-        <!--<div class="ns-popover-tooltip">-->
-          <!--<h5>Hey there! Want some search tips?</h5>-->
-          <!--The <strong>first word</strong> you type will be taken as the <strong>Name</strong> of the entity.-->
-          <!--<br/>-->
-          <!--You can search <strong>*</strong> for getting all the entities.-->
-          <!--<br/>-->
-          <!--The <strong>second and following</strong> words will be taken as <strong> Tags</strong>.-->
-          <!--<br/>-->
-          <!--For filtering by type, write <strong>type=feed|process|mirror</strong>-->
-        <!--</div>-->
-        <div class="ns-popover-tooltip">
-          <h5>Hey there! Want some search tips?</h5>
-          You can type <strong>*</strong> and select <strong>Name: *</strong> from the autocomplete for getting all the entities.
-        </div>
-      </script>
-      <i class="glyphicon glyphicon-remove remove-icon" ng-if="tags.length > 0" ng-click="clearTags()"></i>
-
-    </div>
-    <div class="col-sm-4"></div>
-  </div>
-
-  <div class="col-sm-24 dashboardBox" ng-show="searchList.length > 0" id="dashboardBox">
-    <div class="row">
-      <div class="col-sm-24">
+<div ng-show="!hasClusters" class="no-entity">
+  <span>
+    No Cluster Entity Defined. Please contact your Administrator or perform the steps described in
+    <a target="_blank" href='https://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.4.2/bk_data_governance/content/using_gui_to_define_data_pipelines.html'>
+    Falcon Documentation</a> to create a Cluster.
+  </span>
+</div>
+<div class="col-sm-24">
+  <div class="row searchResultContainer" ng-show="searchList.length > 0">
+    <div class="col-sm-offset-2 col-sm-20 dashboardBox">
         <entities-search-list input="searchList" entity-details="entityDetails" clone="cloneEntity" tags="tags"
                               remove="deleteEntity" edit="editEntity" schedule="scheduleEntity" suspend="suspendEntity"
                               resume="resumeEntity" focus-search="focusSearch" pages="pages" go-page="goPage"/>
-      </div>
     </div>
   </div>
 
-</div>
\ No newline at end of file
+</div>
+
+<!--<div class="col-xs-24" ng-hide="searchList.length > 0">-->
+  <!--<div class="row" ng-controller="chartCtrl">-->
+    <!--<div class="col-xs-20 chartCol">-->
+      <!--<div class="chartMenuBox">-->
+        <!--<div class="entityBox">-->
+          <!--<h5> Entity </h5>-->
+          <!--<div class="entityTypeButtons">-->
+            <!--<button class="btn"-->
+                    <!--ng-click="chartOptions.entity = 'feed'; requestNewData()"-->
+                    <!--ng-class="{active: chartOptions.entity === 'feed'}">-->
+              <!--Feeds-->
+            <!--</button>-->
+            <!--<button class="btn"-->
+                    <!--ng-click="chartOptions.entity = 'process'; requestNewData()"-->
+                    <!--ng-class="{active: chartOptions.entity === 'process'}">-->
+              <!--Processes-->
+            <!--</button>-->
+            <!--<button class="btn"-->
+                    <!--ng-click="chartOptions.entity = 'dataset'; requestNewData()"-->
+                    <!--ng-class="{active: chartOptions.entity === 'dataset'}">-->
+              <!--Dataset-->
+            <!--</button>-->
+          <!--</div>-->
+        <!--</div>-->
+        <!--<div class="timeBox">-->
+          <!--<h5>Time</h5>-->
+          <!--<label>-->
+            <!--<input type="radio" ng-model="chartOptions.mode" value="hourly" ng-change="requestNewData()">-->
+            <!--24 Hs-->
+          <!--</label>-->
+          <!--<label>-->
+            <!--<input type="radio" ng-model="chartOptions.mode" value="daily" ng-change="requestNewData()">-->
+            <!--14 Days-->
+          <!--</label>-->
+        <!--</div>-->
+        <!--<div class="dayBox">-->
+          <!--<h5>Day</h5>-->
+          <!--<input type="text"-->
+                 <!--ng-change="requestNewData()"-->
+                 <!--class="form-control dateInput"-->
+                 <!--placeholder="mm/dd/yyyy"-->
+                 <!--datepicker-popup="{{dateFormat}}"-->
+                 <!--ng-model="chartOptions.day"-->
+                 <!--is-open="opened"-->
+                 <!--ng-click="openDatePicker($event)"-->
+                 <!--ng-required="true"-->
+                 <!--simple-date />-->
+          <!--<span class="entypo calendar dateInputIcon"-->
+                <!--ng-click="openDatePicker($event)">-->
+          <!--</span>-->
+        <!--</div>-->
+      <!--</div>-->
+      <!--<chart class="chart"-->
+             <!--input="graphData"-->
+             <!--t="30"-->
+             <!--mode="chartOptions.mode"-->
+             <!--ng-class="{daily: chartOptions.mode === 'daily'}"-->
+             <!--details="details">-->
+      <!--</chart>-->
+
+    <!--</div>-->
+    <!--<div class="col-xs-4 chartSideBar" ng-show="chartSidebarModel">-->
+
+      <!--<h3> {{ chartSidebarDate.firstLeg }} </h3>-->
+      <!--<h4> {{ chartSidebarDate.secondLeg }}-->
+        <!--<span ng-if="chartOptions.mode === 'hourly'"> {{ chartSidebarDate.timeLeg }} </span>-->
+      <!--</h4>-->
+
+      <!--<hr />-->
+
+      <!--<h5 class="text-success"> Succeed </h5>-->
+      <!--<table class="table">-->
+        <!--<tr ng-repeat="item in chartSidebarModel.topSuccessfulEntities | orderBy:'-numberOfSuccessfulEntities'">-->
+          <!--<td> {{item.name}} </td>-->
+          <!--<td><span> {{item.numberOfSuccessfulEntities}} </span></td>-->
+        <!--</tr>-->
+      <!--</table>-->
+
+      <!--<hr />-->
+
+      <!--<h5 class="text-danger"> Failed </h5>-->
+      <!--<table class="table">-->
+        <!--<tr ng-repeat="item in chartSidebarModel.topFailedEntities | orderBy:'-numberOfFailedEntities'">-->
+          <!--<td> {{item.name}} </td>-->
+          <!--<td><span> {{item.numberOfFailedEntities}} </span></td>-->
+        <!--</tr>-->
+      <!--</table>-->
+
+      <!--<hr />-->
+
+      <!--<h5> Data Copied </h5>-->
+      <!--<table class="table">-->
+        <!--<tr ng-repeat="item in chartSidebarModel.topDataCopiedEntities | orderBy:'-dataCopied'">-->
+          <!--<td> {{item.name}} </td>-->
+          <!--<td><span> {{item.dataCopied}} </span></td>-->
+        <!--</tr>-->
+      <!--</table>-->
+
+    <!--</div>-->
+
+  <!--</div>-->
+<!--</div>-->
+
diff --git a/falcon-ui/app/html/process/processFormAdvancedStepTpl.html b/falcon-ui/app/html/process/processFormAdvancedStepTpl.html
new file mode 100644
index 0000000..ce5119d
--- /dev/null
+++ b/falcon-ui/app/html/process/processFormAdvancedStepTpl.html
@@ -0,0 +1,183 @@
+<!--
+/**
+ * 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.
+ */
+-->
+<form name="processForm" class="mt10" novalidate id="processFormAdvancedStep">
+  <div class="col-xs-24"><label>Retry Policy</label></div>
+  <div class="col-xs-24 plr0px">
+    <div class="col-xs-4 plr0px">
+      <div class="col-xs-24">
+        <label class="light" tooltip="process.properties.retryPolicy" tooltip-position="up">
+          Type
+        </label>
+      </div>
+      <div class="col-xs-24">
+        <select ng-model="process.retry.policy" ng-required="true" validation-message="{{validations.messages.option}}" ng-change="policyChange()">
+          <option value="" disabled selected style='display:none;'>-Select policy-</option>
+          <option value="periodic">Periodic</option>
+          <option value="exp-backoff">Exponential Backup</option>
+          <option value="final">None</option>
+        </select>
+      </div>
+    </div>
+    <div class="col-xs-offset-1 col-xs-5 plr0px">
+      <div class="col-xs-24">
+        <label class="light">Delay Up to</label>
+      </div>
+      <div class="col-xs-24 inlineInputsGroup">
+        <input type="text" class="form-control"
+               ng-model="process.retry.delay.quantity" validation-message="{{validations.messages.number}}"
+               id="delayQuantity" ng-keydown="validations.acceptOnlyNumber($event)"
+               ng-disabled = "process.retry.policy === 'final'"
+               ng-required="true"
+               ng-pattern="validations.patterns.twoDigits"/>
+
+        <select ng-model="process.retry.delay.unit" ng-required="true" ng-disabled = "process.retry.policy === 'final'" validation-message="{{validations.messages.option}}">
+          <option value="" disabled selected style='display:none;'>-Select delay-</option>
+          <option value="minutes">minutes</option>
+          <option value="hours">hours</option>
+          <option value="days">days</option>
+          <option value="months">months</option>
+        </select>
+      </div>
+    </div>
+    <div class="col-xs-4 plr0px">
+      <div class="col-xs-24">
+        <label class="light">Attempts</label>
+      </div>
+      <div class="col-xs-24">
+        <input type="text" class="form-control" validation-message="{{validations.messages.number}}"
+               ng-model="process.retry.attempts" ng-keydown="validations.acceptOnlyNumber($event)"
+               id="attemptsField"
+               ng-required="true"
+               ng-disabled = "process.retry.policy === 'final'"
+               ng-pattern="validations.patterns.twoDigits"/>
+      </div>
+    </div>
+  </div>
+
+  <div class="col-xs-24"><label>Performance & Ordering</label></div>
+  <div class="col-xs-24 plr0px">
+    <div class="col-xs-4 plr0px">
+      <div class="col-xs-24">
+        <label class="light">Max Parallel Instances</label>
+      </div>
+      <div class="col-xs-24">
+        <select ng-model="process.parallel" ng-required="true">
+          <option ng-repeat="value in [1,2,3,4,5,6,7,8,9,10,11,12] track by $index">{{value}}</option>
+        </select>
+      </div>
+    </div>
+    <div class="col-xs-offset-1 col-xs-4 plr0px">
+      <div class="col-xs-24">
+        <label class="light" tooltip="process.properties.order">Order</label>
+      </div>
+      <div class="col-xs-24">
+        <select ng-model="process.order" ng-required="true" validation-message="{{validations.messages.option}}">
+          <option value="" disabled selected style='display:none;'>-Select order-</option>
+          <option ng-repeat="value in ['FIFO', 'LIFO', 'LAST_ONLY'] track by $index">{{value}}</option>
+        </select>
+      </div>
+    </div>
+  </div>
+
+  <div class="col-xs-24">
+    <label>Properties</label>
+  </div>
+  <div ng-repeat="property in process.properties track by $index" class="col-xs-24 plr0px">
+      <div class="col-xs-6 dynamic-table-spacer">
+        <input type="text" class="form-control" ng-model="property.name"
+               ng-pattern="validations.patterns.propertyName"
+               validation-optional-message="{{validations.messages.name}}"
+               ng-disabled="xmlPreview.edit"
+               ng-required="property.value" placeholder="name" />
+      </div>
+      <div class="col-xs-6 dynamic-table-spacer">
+        <input type="text" class="form-control" ng-model="property.value"
+               validation-optional-message="{{validations.messages.value}}"
+               ng-disabled="xmlPreview.edit"
+               ng-required="property.name" placeholder="value" />
+      </div>
+      <div class="dynamic-table-spacer">
+        <button type="button" class="btn btn-default btn-xs" ng-click="removeProperty($index)" ng-if="!$first || !$last"
+             ng-disabled="xmlPreview.edit">
+          <span class="entypo minus"></span> delete
+        </button>
+        <button type="button" class="btn btn-default btn-xs" ng-click="addProperty()"
+            ng-disabled="xmlPreview.edit" ng-if="$last">
+            <span class="entypo plus"></span> ADD
+        </button>
+      </div>
+  </div>
+
+
+  <div class="col-xs-24"><label class="mt15">Access Control List</label></div>
+  <div class="col-xs-24 plr0px">
+    <div class="col-xs-4">
+        <label class="light">Owner<mandatory-field></mandatory-field></label>
+        <input type="text"
+               name="aclOwnerInput"
+               ng-model="process.ACL.owner"
+               ng-pattern="validations.patterns.unixId"
+               ng-required="true"
+               class="form-control"
+               validation-message="{{validations.messages.acl.owner}}"/>
+    </div>
+    <div class="col-xs-4">
+        <label class="light">Group<mandatory-field></mandatory-field></label>
+        <input type="text"
+               name="aclGroupInput"
+               ng-model="process.ACL.group"
+               ng-pattern="validations.patterns.unixId"
+               ng-required="true"
+               class="form-control"
+               validation-message="{{validations.messages.acl.group}}" />
+    </div>
+    <div class="col-xs-24">
+      <div class="col-xs-8 plr0px">
+        <label class="light">Permissions<mandatory-field></mandatory-field></label>
+        <acl-permissions acl-model="process.ACL.permission"></acl-permissions>
+      </div>
+    </div>
+  </div>
+
+  <div class="col-xs-24 pb15px mt35">
+    <button class="btn prevBtn" type="button"
+         ng-click="goBack()"
+         ng-disabled="buttonSpinners.backShow">
+      PREVIOUS <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.backShow" />
+    </button>
+
+    <div class="pull-right">
+      <a class="btn cnclBtn" ui-sref="main">
+        CANCEL
+      </a>
+      <button id="nextButton" class="btn nextBtn"
+           ng-disabled="buttonSpinners.show"
+           ng-click="goNext(processForm.$invalid)" scroll-to-error>
+        NEXT <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
+      </button>
+      <button class="btn advancedSaveBtn"
+           ng-disabled="processForm.$invalid || buttonSpinners.saveShow"
+           ng-click="saveEntity()" scroll-to-error>
+        SAVE ADVANCED OPTIONS <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.saveShow" />
+      </button>
+    </div>
+  </div>
+
+</form>
diff --git a/falcon-ui/app/html/process/processFormClustersStepTpl.html b/falcon-ui/app/html/process/processFormClustersStepTpl.html
index 21bf4bf..8f58504 100644
--- a/falcon-ui/app/html/process/processFormClustersStepTpl.html
+++ b/falcon-ui/app/html/process/processFormClustersStepTpl.html
@@ -17,95 +17,91 @@
  * limitations under the License.
  */
 -->
-<form name="processForm" class="mt10" novalidate id="processFormClusterStep">
-  <div class="col-xs-offset-1 col-xs-22">
+<form name="processForm" novalidate>
+  <div class="col-xs-24">
     <div ng-repeat="cluster in process.clusters" class="row">
       <div class="col-xs-24 detailsBox processCluster">
-
-        <h5>Cluster</h5>
-        <div class="row">
-          <div class="col-xs-24">
-            <label class="light">Name</label>
-            <select ng-model="cluster.name" ng-class="{firstSelectClusterStep: $index === 0}"
+        <div class="col-xs-24"><label class="mt15" tooltip="process.cluster">CLUSTER</label></div>
+        <div class="col-xs-24">
+          <label class="light">Cluster Name<mandatory-field></mandatory-field></label>
+          <select ng-model="cluster.name" ng-class="{firstSelectClusterStep: $index === 0}"
                     ng-required="true"
                     class="form-control padding0"
                     validation-message="{{validations.messages.cluster}}">
-              <option value="" disabled selected style='display:none;'>-Select cluster-</option>
-              <option ng-repeat="clusterItem in clusterList">{{clusterItem.name}}</option>
-            </select>
-          </div>
+            <option value="" disabled selected style='display:none;'>-Select cluster-</option>
+            <option ng-repeat="clusterItem in clusterList">{{clusterItem.name}}</option>
+          </select>
         </div>
-        <div class="clearfix"></div>
 
-        <label class="col-xs-24"> Validity </label>
-        <div class="col-xs-24 validityBox">
-          <div class="startDateBox">
-            <label>Start
+        <div class="col-xs-24"><label class="mt15">VALIDITY</label></div>
+        <div class="col-xs-24"><label class="mt15 light">Time Zone : <span>{{process.timezone}}</span></label></div>
+        <div class="col-xs-24 validityBox plr0px">
+          <div class="col-xs-24 plr0px">
+            <div class="col-xs-4 startDateBox">
+              <label class="light">Start<mandatory-field></mandatory-field></label>
               <input type="text"
                      name="startDateInput"
                      class="form-control dateInput"
-                     placeholder="mm/dd/yyyy"
+                     placeholder="{{dateFormat | lowercase}}"
                      datepicker-popup="{{dateFormat}}"
                      ng-model="cluster.validity.start.date"
                      is-open="cluster.validity.start.opened"
                      ng-click="openDatePicker($event, cluster.validity.start)"
+                     ng-change="constructDate()"
                      ng-required="true"
                      simple-date>
-            </label>
-            <label class="col-xs-24 custom-danger validationMessageGral"
-                   ng-if="!cluster.validity.start.date">
-              {{validations.messages.date.empty}}
-            </label>
-          </div>
-          <div class="startTimeBox">
-            <label>Time
-              <timepicker
+
+            </div>
+            <div class="col-xs-6 startTimeBox">
+              <label class="light">Time<mandatory-field></mandatory-field></label>
+              <timepicker ng-change="constructDate()"
                           ng-model="cluster.validity.start.time"
                           hour-step="1"
                           minute-step="1"
                           show-meridian="true">
               </timepicker>
-            </label>
+            </div>
           </div>
-          <div class="endDateBox">
-            <label>End
+          <label class="col-xs-24 custom-danger validationMessageGral"
+                 ng-if="!cluster.validity.start.date">
+            {{validations.messages.date.empty}}
+          </label>
+          <div class="col-xs-24 plr0px">
+            <div class="col-xs-4 endDateBox">
+              <label class="light">End<mandatory-field></mandatory-field></label>
               <input type="text"
                      name="endDateInput"
                      class="form-control dateInput"
-                     placeholder="mm/dd/yyyy"
+                     placeholder="{{dateFormat | lowercase}}"
                      datepicker-popup="{{dateFormat}}"
                      ng-model="cluster.validity.end.date"
                      is-open="cluster.validity.end.opened"
                      ng-click="openDatePicker($event, cluster.validity.end)"
+                     ng-change="constructDate()"
                      ng-required="true"
                      min-date="cluster.validity.start.date"
                      simple-date>
-            </label>
-            <label class="col-xs-24 custom-danger validationMessageGral"
-                   ng-if="!cluster.validity.end.date">
-              {{validations.messages.date.empty}}
-            </label>
-          </div>
-          <div class="endTimeBox">
-            <label>Time
-              <timepicker
+            </div>
+            <div class="col-xs-6 endTimeBox">
+              <label class="light">Time<mandatory-field></mandatory-field></label>
+              <timepicker ng-change="constructDate()"
                           ng-model="cluster.validity.end.time"
                           hour-step="1"
                           minute-step="1"
                           show-meridian="true">
               </timepicker>
-            </label>
+            </div>
           </div>
-
-          <div class="col-xs-24 mt10">
+          <label class="col-xs-24 custom-danger validationMessageGral"
+                 ng-if="!cluster.validity.end.date">
+            {{validations.messages.date.empty}}
+          </label>
+        </div>
+        <div class="col-xs-24 mt10">
             <button type="button" class="btn btn-default pull-right btn-xs" ng-click="removeCluster($index)" ng-if="!$first">
               <span class="entypo minus"></span> delete
             </button>
-          </div>
         </div>
-
-
-
       </div>
     </div>
   </div>
@@ -114,20 +110,23 @@
       <span class="entypo plus"></span> add cluster
     </button>
   </div>
-  <div class="col-xs-24 mt20">
+
+  <div class="col-xs-24 pb15px mt35">
     <button class="btn prevBtn" type="button"
-         ng-click="goBack('forms.process.properties')"
+         ng-click="goBack()"
          ng-disabled="buttonSpinners.backShow">
-      Previous <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.backShow" />
+      PREVIOUS <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.backShow" />
     </button>
-    <button class="btn nextBtn pull-right"
-         ng-disabled="buttonSpinners.show"
-            ng-click="goNext(processForm.$invalid, 'forms.process.io')" >
-      Next <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
-    </button>
-    <a class="pull-right" ui-sref="main">
-      Cancel
-    </a>
+    <div class="pull-right">
+        <a class="btn cnclBtn" ui-sref="main">
+            CANCEL
+        </a>
+        <button class="btn nextBtn"
+             ng-disabled="buttonSpinners.show"
+             ng-click="goNext(processForm.$invalid)" scroll-to-error>
+          NEXT <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
+        </button>
+    </div>
   </div>
 
-</form>
\ No newline at end of file
+</form>
diff --git a/falcon-ui/app/html/process/processFormGeneralStepTpl.html b/falcon-ui/app/html/process/processFormGeneralStepTpl.html
index cc21854..6665bb7 100644
--- a/falcon-ui/app/html/process/processFormGeneralStepTpl.html
+++ b/falcon-ui/app/html/process/processFormGeneralStepTpl.html
@@ -19,152 +19,522 @@
 -->
 <form name="processForm" class="mt10" novalidate id="processFormGeneralStep">
 
-    <div class="col-xs-24">
-      <label class="light">Name</label>
-      <input type="text" class="form-control" ng-keydown="validations.acceptNoSpaces($event)"
-             check-name="{type:'process', check:cloningMode}" ng-class="{fakeInvalid:!validations.nameAvailable}"
-             ng-disabled="!cloningMode" id="entityNameField" ng-model="process.name"
-             ng-required="true" ng-maxlength="100" ng-pattern="validations.patterns.name"/>
-    </div>
+  <div class="col-xs-24">
+    <label class="light" tooltip="process.name">Process Name<mandatory-field></mandatory-field></label>
+  </div>
 
-    <div class="col-xs-24">
-      <label class="light">Tags</label>
-    </div>
+  <div class="col-xs-6">
+    <input type="text" class="form-control" ng-keydown="validations.acceptNoSpaces($event)"
+           check-name="{type:'process', check:!editingMode}" ng-class="{fakeInvalid:!validations.nameAvailable}"
+           ng-disabled="editingMode" id="entityNameField" ng-model="process.name"
+           ng-required="true" ng-maxlength="100" ng-pattern="validations.patterns.name"/>
+  </div>
 
-    <div id="tagsSection" class="col-xs-24">
-      <div ng-repeat="tag in process.tags">
-        <div class="row dynamic-table-spacer">
-          <div class="col-xs-10">
-            <input type="text" class="form-control" ng-model="tag.key" placeholder="key"
-                   validation-optional-message="{{validations.messages.key}}"
-                   ng-pattern="validations.patterns.alpha" ng-required="tag.value"/>
-          </div>
-          <div class="col-xs-11">
-            <input type="text" class="form-control" placeholder="value"
-                   validation-optional-message="{{validations.messages.value}}"
-                   ng-model="tag.value" ng-pattern="validations.patterns.alpha" ng-required="tag.key"/>
-          </div>
-          <div class="col-xs-3">
-            <button type="button" class="btn btn-default btn-xs" ng-click="removeTag($index)" ng-if="$index>0">
-              <span class="entypo minus"></span> delete
-            </button>
-          </div>
+  <div class="col-xs-24">
+    <label class="light">Tags</label>
+  </div>
+
+  <div id="tagsSection" class="col-xs-12">
+    <div ng-repeat="tag in process.tags track by $index">
+      <div class="row dynamic-table-spacer">
+        <div class="col-xs-8">
+          <input type="text" class="form-control" ng-model="tag.key" placeholder="key"
+                 validation-optional-message="{{validations.messages.key}}"
+                 ng-pattern="validations.patterns.alpha" ng-required="tag.value"/>
+        </div>
+        <div class="col-xs-8">
+          <input type="text" class="form-control" ng-model="tag.value" placeholder="value"
+                 validation-optional-message="{{validations.messages.value}}"
+                 ng-pattern="validations.patterns.alpha" ng-required="tag.key"/>
+        </div>
+        <div class="col-xs-8">
+          <button type="button" class="btn btn-default btn-xs" ng-click="removeTag($index)" ng-if="!$first || !$last">
+            <span class="entypo minus"></span> delete
+          </button>
+          <button type="button" class="btn btn-default btn-xs" ng-click="addTag()" ng-if="$last">
+            <span class="entypo plus"></span> ADD
+          </button>
         </div>
       </div>
     </div>
-    <div class="col-xs-24 mt10 mb10">
-      <button type="button" class="btn btn-default btn-xs" ng-click="addTag()">
-        <span class="entypo plus"></span> add tag
+  </div>
+
+  <div class="col-xs-24">
+    <label>Details</label>
+  </div>
+
+  <div class="col-xs-5 plr0px">
+    <div class="col-xs-24">
+      <label class="light" tooltip="process.workflow.engine">Engine<mandatory-field></mandatory-field></label>
+      <select ng-model="process.workflow.engine"
+              class="form-control padding0"
+              ng-required="true"
+              validation-message="{{validations.messages.engine}}">
+        <option value="" disabled selected style='display:none;'>-Select engine-</option>
+        <option value="spark">Spark</option>
+        <option value="oozie">Oozie</option>
+        <option value="pig">Pig</option>
+        <option value="hive">Hive</option>
+      </select>
+    </div>
+
+    <div class="col-xs-24" ng-show="process.workflow.engine !== 'spark'">
+      <label class="light" tooltip="process.workflow.name">Workflow Name<mandatory-field></mandatory-field></label>
+      <input type="text" class="form-control"
+             id="workflowNameField"
+             ng-model="process.workflow.name"
+             ng-required="process.workflow.engine !== 'spark'"
+             ng-maxlength="100"
+             ng-pattern="validations.patterns.workflowName"
+             validation-optional-message="{{validations.messages.name}}" />
+    </div>
+
+    <div class="col-xs-24">
+      <label class="light" tooltip="process.workflow.path">Workflow Path<mandatory-field></mandatory-field></label>
+      <input type="text" class="form-control"
+             id="pathField"
+             ng-model="process.workflow.path"
+             ng-required="true"
+             ng-maxlength="200"
+             validation-message="{{validations.messages.path}}"
+             ng-pattern="validations.patterns.path"/>
+    </div>
+
+    <div class="col-xs-24">
+      <label class="light">Cluster<mandatory-field></mandatory-field></label>
+      <div ng-repeat="cluster in process.clusters track by $index">
+        <select ng-model="cluster.name"
+                  ng-required="true"
+                  ng-change="getSourceDefinition(cluster.name)"
+                  class="form-control padding0"
+                  validation-message="{{validations.messages.cluster}}">
+          <option value="" disabled selected style='display:none;'>-Select cluster-</option>
+          <option ng-repeat="clusterItem in clusterList track by $index">{{clusterItem.name}}</option>
+        </select>
+      </div>
+    </div>
+  </div>
+  <div class="col-xs-offset-1 col-xs-6 plr0px" ng-show="process.workflow.engine==='spark'">
+    <div class="col-xs-24">
+      <label class="light" tooltip="process.workflow.spark.name">Name<mandatory-field></mandatory-field></label>
+      <input type="text" class="form-control"
+             ng-model="process.workflow.spark.name"
+             ng-required="process.workflow.engine==='spark'"
+             ng-maxlength="100"
+             ng-pattern="validations.patterns.name"
+             validation-optional-message="{{validations.messages.name}}" />
+    </div>
+
+    <div class="col-xs-24">
+      <label class="light" tooltip="process.workflow.spark.application">Application<mandatory-field></mandatory-field></label>
+      <input type="text" class="form-control"
+             ng-model="process.workflow.spark.jar"
+             ng-required="process.workflow.engine==='spark'" />
+    </div>
+
+    <div class="col-xs-24">
+      <label class="light" tooltip="process.workflow.spark.class">Main Class</label>
+      <input type="text" class="form-control"
+             ng-model="process.workflow.spark.class"
+             ng-required="process.workflow.engine==='spark' && !isPython" ng-disabled='isPython'/>
+    </div>
+
+    <div class="col-xs-12">
+      <label class="light" tooltip="process.workflow.spark.master">Runs On</label>
+      <select ng-model="process.workflow.spark.master"
+                class="form-control padding0"
+                ng-required="process.workflow.engine==='spark'">
+        <option value="" disabled selected style='display:none;'>-Select Runs On-</option>
+        <option value="yarn">Yarn</option>
+        <option value="local">Local</option>
+      </select>
+    </div>
+
+    <div class="col-xs-12 plr0px" ng-if="process.workflow.spark.master === 'yarn'">
+      <div class="col-xs-24">
+        <label class="light" tooltip="process.workflow.spark.mode">Mode<mandatory-field></mandatory-field></label>
+      </div>
+      <div class="col-xs-24 pt3px">
+          <input type="radio" name="sparkMode" value="cluster" ng-model="process.workflow.spark.mode" />
+          Cluster
+          <input type="radio" name="sparkMode" value="client" ng-model="process.workflow.spark.mode" />
+          Client
+      </div>
+    </div>
+
+    <div class="col-xs-24">
+      <label class="light">Spark Options</label>
+      <input type="text" class="form-control" ng-model="process.workflow.spark.sparkOptions"/>
+    </div>
+
+    <div class="col-xs-24">
+      <label class="light">Spark Arguments</label>
+      <input type="text" class="form-control" ng-model="process.workflow.spark.arg"/>
+    </div>
+  </div>
+
+  <div class="col-xs-offset-1 col-xs-5 plr0px">
+    <div><label>INPUT(S)</label></div>
+
+    <div ng-repeat="input in process.inputs track by $index">
+      <div class="col-xs-24 detailsBox processCluster">
+        <div class="row">
+          <div class="col-xs-24">
+            <label class="light">Name<mandatory-field></mandatory-field></label>
+            <input type="text" class="form-control"
+                   ng-class="{firstInput: $index === 0}"
+                   validation-message="{{validations.messages.name}}"
+                   ng-model="input.name"
+                   ng-required="true"
+                   ng-maxlength="39"
+                   ng-pattern="validations.patterns.inputName"/>
+          </div>
+        </div>
+
+        <div class="row">
+          <div class="col-xs-24">
+            <label class="light">Feed<mandatory-field></mandatory-field></label>
+            <select ng-model="input.feed" ng-required="true" class="col-sm-24 form-control padding0"
+                    validation-message="{{validations.messages.feed}}">
+              <option value="" disabled selected style='display:none;'>-Select feed-</option>
+              <option ng-repeat="feedItem in feedsList track by $index">{{feedItem.name}}</option>
+            </select>
+          </div>
+        </div>
+
+        <div><label>INSTANCE</label></div>
+        <div class="row">
+          <div class="col-xs-12">
+            <label class="light">Start<mandatory-field></mandatory-field></label>
+            <input type="text" class="form-control" validation-message="{{validations.messages.value}}"
+                   ng-model="input.start"
+                   ng-required="true"
+                   ng-maxlength="39"/>
+          </div>
+          <div class="col-xs-12">
+            <label class="light">End<mandatory-field></mandatory-field></label>
+            <input type="text" class="form-control {{invalidEndDate}}" validation-message="{{validations.messages.value}}"
+                   ng-model="input.end"
+                   ng-required="true"
+                   ng-maxlength="100"
+                   on-blur="validateStartEndDate"/>
+            <label ng-show="invalidEndDate" class="custom-danger nameValidationMessage">End should be equal or greater than Start</label>
+          </div>
+        </div>
+        <div class="col-xs-24 mt10">
+            <button type="button" class="btn btn-default pull-right btn-xs" ng-click="removeInput($index)">
+              <span class="entypo minus"></span> delete
+            </button>
+        </div>
+      </div>
+    </div>
+
+    <button type="button" class="btn btn-default btn-xs mt10 mb10 addInputButton" ng-click="addInput()">
+      <span class="entypo plus"></span> ADD
+    </button>
+  </div>
+
+  <div class="col-xs-offset-1 col-xs-5 plr0px">
+    <div><label>OUTPUT(S)</label></div>
+    <div ng-repeat="output in process.outputs track by $index">
+      <div class="col-xs-24 detailsBox processCluster">
+        <div class="row">
+          <div class="col-xs-24">
+            <label class="light">Name<mandatory-field></mandatory-field></label>
+            <input type="text"
+                   ng-class="{firstOutput: $index === 0}"
+                   class="form-control"
+                   validation-message="{{validations.messages.name}}"
+                   ng-model="output.name"
+                   ng-required="true"
+                   ng-maxlength="39"
+                   ng-pattern="validations.patterns.id"/>
+          </div>
+        </div>
+        <div class="row">
+          <div class="col-xs-24">
+            <label class="light">Feed<mandatory-field></mandatory-field></label>
+            <select ng-model="output.feed" ng-required="true" class="col-sm-24 form-control padding0"
+                    validation-message="{{validations.messages.feed}}" >
+              <option value="" disabled selected style='display:none;'>-Select feed-</option>
+              <option ng-repeat="feedItem in feedsList track by $index">{{feedItem.name}}</option>
+            </select>
+          </div>
+        </div>
+        <div><label class="mt15">INSTANCE</label></div>
+        <div class="row">
+          <div class="col-xs-24">
+            <label class="light">Instance<mandatory-field></mandatory-field></label>
+            <input type="text" class="form-control" validation-message="{{validations.messages.value}}"
+                   ng-model="output.outputInstance" ng-required="true" ng-maxlength="39"/>
+          </div>
+        </div>
+        <div class="row mt10">
+          <button type="button" class="btn btn-default pull-right btn-xs" ng-click="removeOutput($index)">
+            <span class="entypo minus"></span> delete
+          </button>
+        </div>
+      </div>
+    </div>
+
+    <button type="button" class="btn btn-default btn-xs mb10 mt10" ng-click="addOutput()">
+      <span class="entypo plus"></span> ADD
+    </button>
+  </div>
+
+  <div class="col-xs-24">
+    <label>Run Duration<mandatory-field></mandatory-field></label>
+  </div>
+  <div class="col-xs-24" ng-repeat="cluster in process.clusters track by $index" class="validityBox">
+    <div class="col-xs-24 plr0px validityBox">
+      <div class="col-xs-24 plr0px">
+        <label class="light">Start</label>
+      </div>
+      <div class="plr0px col-xs-2 startDateBox">
+        <input type="text"
+          name="startDateInput"
+          class="form-control dateInput"
+          placeholder="{{dateFormat | lowercase}}"
+          ng-model="cluster.validity.start.date"
+          simple-date-picker />
+      </div>
+      <div class="col-xs-3 startTimeBox">
+        <timepicker ng-change="constructDate()"
+                    ng-model="cluster.validity.start.time"
+                    hour-step="1"
+                    minute-step="1"
+                    show-meridian="true">
+        </timepicker>
+      </div>
+      <label class="col-xs-24 custom-danger validationMessageGral"
+             ng-if="!cluster.validity.start.date">
+        {{validations.messages.date.empty}}
+      </label>
+    </div>
+    <div class="col-xs-24 plr0px validityBox">
+      <div class="col-xs-24 plr0px">
+        <label class="light">End</label>
+      </div>
+      <div class="plr0px col-xs-2 endDateBox">
+        <input type="text"
+          name="startDateInput"
+          class="form-control dateInput"
+          placeholder="{{dateFormat | lowercase}}"
+          ng-model="cluster.validity.end.date"
+          simple-date-picker />
+      </div>
+      <div class="col-xs-3 endTimeBox">
+        <timepicker ng-change="constructDate()"
+                    ng-model="cluster.validity.end.time"
+                    hour-step="1"
+                    minute-step="1"
+                    show-meridian="true">
+        </timepicker>
+      </div>
+      <label class="col-xs-24 custom-danger validationMessageGral"
+             ng-if="!cluster.validity.end.date">
+        {{validations.messages.date.empty}}
+      </label>
+    </div>
+  </div>
+
+  <div class="col-xs-24">
+    <label>Frequency</label>
+  </div>
+
+  <div class="col-xs-12 plr0px">
+    <div class="col-xs-24">
+      <label class="light">Repeat Every<mandatory-field></mandatory-field></label>
+    </div>
+    <div class="col-xs-24 inlineInputsGroup">
+      <input type="text" class="form-control" validation-message="{{validations.messages.number}}" name="frequencyQuantity"
+             ng-model="process.frequency.quantity" ng-keydown="validations.acceptOnlyNumber($event)"
+             ng-keyup="checkMininumFrequency(process.frequency.quantity,process.frequency.unit, processForm.frequencyQuantity)"
+             id="frequencyQuantity"
+             ng-required="true"
+             ng-pattern="validations.patterns.twoDigits"/>
+
+      <select ng-model="process.frequency.unit" ng-required="true"
+        ng-change="checkMininumFrequency(process.frequency.quantity,process.frequency.unit, processForm.frequencyQuantity)"
+        validation-message="{{validations.messages.number}}">
+        <option selected value="minutes">minutes</option>
+        <option value="hours">hours</option>
+        <option value="days">days</option>
+        <option value="months">months</option>
+      </select>
+      <div class="col-xs-24 custom-danger" ng-if="!isFrequencyValid">{{validations.messages.frequency.minimum}}</div>
+    </div>
+    <div class="col-xs-24">
+      <label class="light" tooltip="process.properties.timezone">Timezone<mandatory-field></mandatory-field></label>
+    </div>
+    <div class="col-xs-18">
+      <time-zone-select ng-model="process.timezone" id="timeZoneSelect" required="true">
+      </time-zone-select>
+    </div>
+  </div>
+
+  <div class="col-xs-24 advancedOption" ng-click="expandOptions = !expandOptions" id="processAdvancedOption">
+    <label class="mt15 pointer blink-success">ADVANCED OPTIONS</label>
+    <i class="glyphicon glyphicon-chevron-down mt15" ng-if="!expandOptions"></i>
+    <i class="glyphicon glyphicon-chevron-up mt15" ng-if="expandOptions"></i>
+  </div>
+
+	<div id="advancedOptionsBox" class="col-xs-24 plr0px" ng-class="{expanded:expandOptions}">
+    <div class="col-xs-24"><label>Retry Policy</label></div>
+    <div class="col-xs-24 plr0px">
+      <div class="col-xs-4 plr0px">
+        <div class="col-xs-24">
+          <label class="light" tooltip="process.properties.retryPolicy" tooltip-position="up">
+            Type
+          </label>
+        </div>
+        <div class="col-xs-24">
+          <select ng-model="process.retry.policy" ng-required="true" validation-message="{{validations.messages.option}}" ng-change="policyChange()">
+            <option value="" disabled selected style='display:none;'>-Select policy-</option>
+            <option value="periodic">Periodic</option>
+            <option value="exp-backoff">Exponential Backup</option>
+            <option value="final">None</option>
+          </select>
+        </div>
+      </div>
+      <div class="col-xs-offset-1 col-xs-5 plr0px">
+        <div class="col-xs-24">
+          <label class="light">Delay Up to</label>
+        </div>
+        <div class="col-xs-24 inlineInputsGroup">
+          <input type="text" class="form-control"
+                 ng-model="process.retry.delay.quantity" validation-message="{{validations.messages.number}}"
+                 id="delayQuantity" ng-keydown="validations.acceptOnlyNumber($event)"
+                 ng-disabled = "process.retry.policy === 'final'"
+                 ng-required="true"
+                 ng-pattern="validations.patterns.twoDigits"/>
+
+          <select ng-model="process.retry.delay.unit" ng-required="true" ng-disabled = "process.retry.policy === 'final'" validation-message="{{validations.messages.option}}">
+            <option value="" disabled selected style='display:none;'>-Select delay-</option>
+            <option value="minutes">minutes</option>
+            <option value="hours">hours</option>
+            <option value="days">days</option>
+            <option value="months">months</option>
+          </select>
+        </div>
+      </div>
+      <div class="col-xs-4 plr0px">
+        <div class="col-xs-24">
+          <label class="light">Attempts</label>
+        </div>
+        <div class="col-xs-24">
+          <input type="text" class="form-control" validation-message="{{validations.messages.number}}"
+                 ng-model="process.retry.attempts" ng-keydown="validations.acceptOnlyNumber($event)"
+                 id="attemptsField"
+                 ng-required="true"
+                 ng-disabled = "process.retry.policy === 'final'"
+                 ng-pattern="validations.patterns.twoDigits"/>
+        </div>
+      </div>
+    </div>
+
+    <div class="col-xs-24"><label>Performance & Ordering</label></div>
+    <div class="col-xs-24 plr0px">
+      <div class="col-xs-4 plr0px">
+        <div class="col-xs-24">
+          <label class="light">Max Parallel Instances</label>
+        </div>
+        <div class="col-xs-24">
+          <select ng-model="process.parallel" ng-required="true">
+            <option ng-repeat="value in [1,2,3,4,5,6,7,8,9,10,11,12] track by $index">{{value}}</option>
+          </select>
+        </div>
+      </div>
+      <div class="col-xs-offset-1 col-xs-4 plr0px">
+        <div class="col-xs-24">
+          <label class="light" tooltip="process.properties.order">Order</label>
+        </div>
+        <div class="col-xs-24">
+          <select ng-model="process.order" ng-required="true" validation-message="{{validations.messages.option}}">
+            <option value="" disabled selected style='display:none;'>-Select order-</option>
+            <option ng-repeat="value in ['FIFO', 'LIFO', 'LAST_ONLY'] track by $index">{{value}}</option>
+          </select>
+        </div>
+      </div>
+    </div>
+
+    <div class="col-xs-24">
+      <label>Properties</label>
+    </div>
+    <div ng-repeat="property in process.properties track by $index" class="col-xs-24 plr0px">
+        <div class="col-xs-6 dynamic-table-spacer">
+          <input type="text" class="form-control" ng-model="property.name"
+                 ng-pattern="validations.patterns.propertyName"
+                 validation-optional-message="{{validations.messages.name}}"
+                 ng-disabled="xmlPreview.edit"
+                 ng-required="property.value" placeholder="name" />
+        </div>
+        <div class="col-xs-6 dynamic-table-spacer">
+          <input type="text" class="form-control" ng-model="property.value"
+                 validation-optional-message="{{validations.messages.value}}"
+                 ng-disabled="xmlPreview.edit"
+                 ng-required="property.name" placeholder="value" />
+        </div>
+        <div class="dynamic-table-spacer">
+          <button type="button" class="btn btn-default btn-xs" ng-click="removeProperty($index)" ng-if="!$first || !$last"
+               ng-disabled="xmlPreview.edit">
+            <span class="entypo minus"></span> delete
+          </button>
+          <button type="button" class="btn btn-default btn-xs" ng-click="addProperty()"
+              ng-disabled="xmlPreview.edit" ng-if="$last">
+              <span class="entypo plus"></span> ADD
+          </button>
+        </div>
+    </div>
+
+
+    <div class="col-xs-24"><label class="mt15">Access Control List</label></div>
+    <div class="col-xs-24 plr0px">
+      <div class="col-xs-4">
+          <label class="light">Owner<mandatory-field></mandatory-field></label>
+          <input type="text"
+                 name="aclOwnerInput"
+                 ng-model="process.ACL.owner"
+                 ng-pattern="validations.patterns.unixId"
+                 ng-required="true"
+                 class="form-control"
+                 validation-message="{{validations.messages.acl.owner}}"/>
+      </div>
+      <div class="col-xs-4">
+          <label class="light">Group<mandatory-field></mandatory-field></label>
+          <input type="text"
+                 name="aclGroupInput"
+                 ng-model="process.ACL.group"
+                 ng-pattern="validations.patterns.unixId"
+                 ng-required="true"
+                 class="form-control"
+                 validation-message="{{validations.messages.acl.group}}" />
+      </div>
+      <div class="col-xs-24">
+        <div class="col-xs-8 plr0px">
+          <label class="light">Permissions<mandatory-field></mandatory-field></label>
+          <acl-permissions acl-model="process.ACL.permission"></acl-permissions>
+        </div>
+      </div>
+    </div>
+  </div>
+
+  <div class="col-xs-24 pb15px mt35">
+    <div class="pull-right">
+      <a class="btn cnclBtn" ui-sref="main">
+        CANCEL
+      </a>
+      <button id="nextButton" class="btn nextBtn"
+           ng-disabled="buttonSpinners.show"
+           ng-click="goNext(processForm.$invalid)" scroll-to-error>
+        NEXT <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
+      </button>
+      <button class="btn nextBtn"
+           ng-disabled="processForm.$invalid || buttonSpinners.saveShow"
+           ng-click="saveEntity(processForm.$invalid)" scroll-to-error>
+        SAVE <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.saveShow" />
       </button>
     </div>
-
-  <h4 class="col-xs-24">Workflow</h4>
-
-  <div class="col-xs-24">
-    <div class="light">Name</div>
-    <input type="text" class="form-control" validation-optional-message="{{validations.messages.name}}"
-           id="workflowNameField"
-           ng-model="process.workflow.name"
-           ng-maxlength="100"
-           ng-pattern="validations.patterns.name"/>
   </div>
 
-  <div id="engineSection" class="col-xs-24">
-    <label class="light">Engine</label>
-    <div class="row">
-      <div class="col-xs-4">
-        <input
-                type="radio" id="oozieEngineRadio"
-                ng-change="selectWorkflow()"
-                ng-model="process.workflow.engine"
-                value="oozie" /> Oozie
-      </div>
-      <div class="col-xs-4">
-        <input type="radio" id="pigEngineRadio"
-               ng-change="selectWorkflow()"
-               ng-model="process.workflow.engine"
-               value="pig" /> Pig
-      </div>
-      <div class="col-xs-4">
-        <input type="radio" id="hiveEngineRadio"
-               ng-change="selectWorkflow()"
-               ng-model="process.workflow.engine"
-               value="hive" /> Hive
-      </div>
-
-      <select id="engineVersionField"
-              ng-model="process.workflow.version"
-              ng-show="process.workflow.engine">
-
-        <option value="" disabled selected style='display:none;'>-Select {{process.workflow.engine}} version-</option>
-
-        <option ng-repeat="version in versions"
-          id="{{process.workflow.engine}}Version{{$index}}"
-          value="{{version}}"
-          ng-selected="process.workflow.version === version">
-          {{version}}
-        </option>
-      </select>
-
-    </div>
-  </div>
-  <div class="col-xs-24">
-    <label class="light">Path</label>
-    <input type="text" class="form-control"
-           id="pathField"
-           ng-model="process.workflow.path"
-           ng-required="true"
-           ng-maxlength="200"
-           validation-optional-message="{{validations.messages.path}}"
-           ng-pattern="validations.patterns.osPath"/>
-  </div>
-
-  <div class="aclBox col-xs-24">
-    <h4>Access Control List</h4>
-    <div>
-      <label>Owner
-        <input type="text"
-               name="aclOwnerInput"
-               ng-model="process.ACL.owner"
-               ng-pattern="validations.patterns.unixId"
-               ng-required="true"
-               class="form-control"
-               validation-message="{{validations.messages.acl.owner}}"/>
-      </label>
-    </div>
-    <div>
-      <label>Group
-        <input type="text"
-               name="aclGroupInput"
-               ng-model="process.ACL.group"
-               ng-pattern="validations.patterns.unixId"
-               ng-required="true"
-               class="form-control"
-               validation-message="{{validations.messages.acl.group}}" />
-      </label>
-    </div>
-    <div>
-      <label>Permissions
-        <input type="text"
-               name="aclPermissionsInput"
-               ng-model="process.ACL.permission"
-               ng-pattern="validations.patterns.unixPermissions"
-               ng-required="true"
-               class="form-control"
-               validation-message="{{validations.messages.acl.permission}}" />
-      </label>
-    </div>
-  </div>
-
-  <div class="col-xs-24 mt20">
-    <button id="nextButton" class="btn nextBtn pull-right"
-         ng-disabled="buttonSpinners.show"
-         ng-click="goNext(processForm.$invalid, 'forms.process.properties')" >
-      Next <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
-    </button>
-    <a class="pull-right" ui-sref="main">
-      Cancel
-    </a>
-  </div>
-
-</form>
\ No newline at end of file
+</form>
diff --git a/falcon-ui/app/html/process/processFormInputsAndOutputsStepTpl.html b/falcon-ui/app/html/process/processFormInputsAndOutputsStepTpl.html
index 528ce14..09b4aa2 100644
--- a/falcon-ui/app/html/process/processFormInputsAndOutputsStepTpl.html
+++ b/falcon-ui/app/html/process/processFormInputsAndOutputsStepTpl.html
@@ -17,31 +17,33 @@
  * limitations under the License.
  */
 -->
-<form name="processForm" novalidate id="processFormInOutStep">
-  <div class="col-sm-offset-1 col-sm-22">
-    <h4 ng-if="process.inputs.length === 0">Inputs</h4>
+<form name="processForm" novalidate>
+  <div class="col-sm-24">
+    <div ng-if="process.inputs.length === 0">
+      <label class="mt15">INPUTS</label>
+    </div>
 
-    <div ng-repeat="input in process.inputs" class="row">
-      <h4 class="col-xs-24">Input</h4>
+    <div ng-repeat="input in process.inputs">
+      <div><label class="mt15">INPUT</label></div>
 
       <div class="col-xs-24 detailsBox processCluster">
 
           <div class="row">
             <div class="col-xs-24">
-              <label class="light">Name</label>
+              <label class="light">Name<mandatory-field></mandatory-field></label>
               <input type="text" class="form-control"
                      ng-class="{firstInput: $index === 0}"
                      validation-message="{{validations.messages.name}}"
                      ng-model="input.name"
                      ng-required="true"
-                     ng-maxlength="100"
-                     ng-pattern="validations.patterns.name"/>
+                     ng-maxlength="39"
+                     ng-pattern="validations.patterns.inputName"/>
             </div>
           </div>
 
         <div class="row">
           <div class="col-xs-24">
-            <label class="light">Feed</label>
+            <label class="light">Feed<mandatory-field></mandatory-field></label>
 
             <select ng-model="input.feed" ng-required="true" class="col-sm-24 form-control padding0"
                     validation-message="{{validations.messages.feed}}">
@@ -51,22 +53,20 @@
           </div>
         </div>
 
-          <div class="clearfix"></div>
-          <h5>Instance</h5>
+          <div><label class="mt15">INSTANCE</label></div>
 
           <div class="row">
             <div class="col-xs-12">
-              <label class="light">Start</label>
+              <label class="light">Start<mandatory-field></mandatory-field></label>
 
               <input type="text" class="form-control" validation-message="{{validations.messages.value}}"
                      ng-model="input.start"
                      ng-required="true"
-                     ng-maxlength="100"
-                     on-blur="validateStartEndDate"/>
+                     ng-maxlength="39"/>
 
             </div>
             <div class="col-xs-12">
-              <label class="light">End</label>
+              <label class="light">End<mandatory-field></mandatory-field></label>
 
               <input type="text" class="form-control {{invalidEndDate}}" validation-message="{{validations.messages.value}}"
                      ng-model="input.end"
@@ -76,11 +76,11 @@
               <label ng-show="invalidEndDate" class="custom-danger nameValidationMessage">End should be equal or greater than Start</label>
             </div>
 
-            <div class="col-xs-24 mt10">
+          </div>
+          <div class="col-xs-24 mt10">
               <button type="button" class="btn btn-default pull-right btn-xs" ng-click="removeInput($index)">
                 <span class="entypo minus"></span> delete
               </button>
-            </div>
           </div>
       </div>
     </div>
@@ -89,28 +89,29 @@
       <span class="entypo plus"></span> add input
     </button>
 
-    <h4 ng-if="process.outputs.length === 0">Outputs</h4>
-
-    <div ng-repeat="output in process.outputs" class="row">
-      <h4 class="col-xs-24">Output</h4>
+    <div ng-if="process.outputs.length === 0">
+      <label class="mt15">OUTPUTS</label>
+    </div>
+    <div ng-repeat="output in process.outputs">
+      <div><label class="mt15">OUTPUT</label></div>
 
       <div class="col-xs-24 detailsBox processCluster">
         <div class="row">
           <div class="col-xs-24">
-            <label class="light">Name</label>
+            <label class="light">Name<mandatory-field></mandatory-field></label>
             <input type="text"
                    ng-class="{firstOutput: $index === 0}"
                    class="form-control"
                    validation-message="{{validations.messages.name}}"
                    ng-model="output.name"
                    ng-required="true"
-                   ng-maxlength="100"
+                   ng-maxlength="39"
                    ng-pattern="validations.patterns.id"/>
           </div>
         </div>
         <div class="row">
           <div class="col-xs-24">
-            <label class="light">Feed</label>
+            <label class="light">Feed<mandatory-field></mandatory-field></label>
             <select ng-model="output.feed" ng-required="true" class="col-sm-24 form-control padding0"
                     validation-message="{{validations.messages.feed}}" >
               <option value="" disabled selected style='display:none;'>-Select feed-</option>
@@ -118,16 +119,16 @@
             </select>
           </div>
         </div>
-        <div class="clearfix"></div>
-        <h5>Instance</h5>
+
+        <div><label class="mt15">INSTANCE</label></div>
         <div class="row">
           <div class="col-xs-24">
-            <label class="light">Instance</label>
+            <label class="light">Instance<mandatory-field></mandatory-field></label>
 
             <input type="text" class="form-control" validation-message="{{validations.messages.value}}"
                    ng-model="output.outputInstance"
                    ng-required="true"
-                   ng-maxlength="100"/>
+                   ng-maxlength="39"/>
           </div>
         </div>
         <div class="row mt10">
@@ -143,21 +144,21 @@
       <span class="entypo plus"></span> add output
     </button>
   </div>
-  <div class="row">
-    <div class="col-xs-24 mt20">
-      <button class="btn prevBtn" type="button"
-           ng-click="goBack('forms.process.clusters')"
-           ng-disabled="buttonSpinners.backShow">
-        Previous <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.backShow" />
-      </button>
-      <button class="btn nextBtn pull-right"
+  <div class="col-xs-24 pb15px mt35">
+    <button class="btn prevBtn" type="button"
+       ng-click="goBack()"
+       ng-disabled="buttonSpinners.backShow">
+    PREVIOUS <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.backShow" />
+    </button>
+    <div class="pull-right">
+        <a class="btn cnclBtn" ui-sref="main">
+            CANCEL
+        </a>
+        <button class="btn nextBtn"
            ng-disabled="invalidEndDate || buttonSpinners.show"
-           ng-click="goNext(processForm.$invalid, 'forms.process.summary')" >
-        Next <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
-      </button>
-      <a class="pull-right" ui-sref="main">
-        Cancel
-      </a>
+           ng-click="goNext(processForm.$invalid)" scroll-to-error>
+        NEXT <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
+        </button>
     </div>
   </div>
-</form>
\ No newline at end of file
+</form>
diff --git a/falcon-ui/app/html/process/processFormPropertiesStepTpl.html b/falcon-ui/app/html/process/processFormPropertiesStepTpl.html
index 657a1cb..1af0bdb 100644
--- a/falcon-ui/app/html/process/processFormPropertiesStepTpl.html
+++ b/falcon-ui/app/html/process/processFormPropertiesStepTpl.html
@@ -17,19 +17,19 @@
  * limitations under the License.
  */
 -->
-<form name="processForm" class="mt10" novalidate id="processFormPropsStep">
+<form name="processForm" novalidate>
 
-  <h5 class="col-xs-24">Timing</h5>
+  <div class="col-xs-24"><label class="mt15">TIMING</label></div>
 
   <div class="col-xs-24 mb10">
-    <label class="light">Timezone</label>
-    <time-zone-select ng-model="process.timezone" id="timeZoneSelect"></time-zone-select>
+    <label class="light" tooltip="process.properties.timezone">Timezone<mandatory-field></mandatory-field></label>
+    <time-zone-select ng-model="process.timezone" id="timeZoneSelect" required="true">
+    </time-zone-select>
   </div>
-
-  <div class="col-xs-9">
+  <div class="col-xs-24 plr0px">
+    <div class="col-xs-9">
     <div class="inlineInputsGroup">
-      <div>Frequency</div>
-      <span>Every</span>
+      <div><label class="light">Frequency Every<mandatory-field></mandatory-field></label></div>
       <input type="text" class="form-control" validation-message="{{validations.messages.number}}"
              ng-model="process.frequency.quantity" ng-keydown="validations.acceptOnlyNumber($event)"
              id="frequencyQuantity"
@@ -45,39 +45,48 @@
         <option value="months">months</option>
       </select>
     </div>
-  </div>
-  <div class="col-xs-7">
+    </div>
+    <div class="col-xs-7">
     <div class="inlineInputsGroup">
-      <div>Maximum Parallel Instances</div>
+      <div><label class="light">Maximum Parallel Instances<mandatory-field></mandatory-field></label></div>
       <select
         ng-model="process.parallel"
         ng-required="true">
         <option ng-repeat="value in [1,2,3,4,5,6,7,8,9,10,11,12]">{{value}}</option>
       </select>
     </div>
-  </div>
-  <div class="col-xs-8">
+    </div>
+    <div class="col-xs-8">
     <div class="inlineInputsGroup">
-      <div>Order</div>
+      <div>
+        <label class="light" tooltip="process.properties.order">
+          Instance Usage<mandatory-field></mandatory-field>
+        </label>
+      </div>
       <select ng-model="process.order" ng-required="true" validation-message="{{validations.messages.option}}">
         <option value="" disabled selected style='display:none;'>-Select order-</option>
         <option ng-repeat="value in ['FIFO', 'LIFO', 'LAST_ONLY']">{{value}}</option>
       </select>
     </div>
-  </div>
-  <div class="clearfix mb10"></div>
-  <h4 class="col-xs-24">Retry</h4>
-
-  <div class="col-xs-9 inlineInputsGroup">
-      <div class="mt10 mb10">Policy</div>
-      <select ng-model="process.retry.policy" ng-required="true" validation-message="{{validations.messages.option}}">
-        <option value="" disabled selected style='display:none;'>-Select policy-</option>
-        <option ng-repeat="value in ['periodic', 'exp-backoff', 'final']">{{value}}</option>
-      </select>
     </div>
   </div>
-  <div class="col-xs-7 inlineInputsGroup">
-      <div class="mt10">Attempts</div>
+  <div class="col-xs-24"><label class="mt15">RETRY</label></div>
+  <div class="col-xs-24 plr0px">
+    <div class="col-xs-9 inlineInputsGroup">
+      <div>
+        <label class="light" tooltip="process.properties.retryPolicy" tooltip-position="up">
+          Retry Policy<mandatory-field></mandatory-field>
+        </label>
+      </div>
+      <select ng-model="process.retry.policy" ng-required="true" validation-message="{{validations.messages.option}}">
+        <option value="" disabled selected style='display:none;'>-Select policy-</option>
+        <option value="periodic">Periodic</option>
+        <option value="exp-backoff">Exponential Backup</option>
+        <option value="final">None</option>
+      </select>
+    </div>
+    <div class="col-xs-7 inlineInputsGroup">
+      <div><label class="light">Attempts<mandatory-field></mandatory-field></label></div>
 
       <input type="text" class="form-control" validation-message="{{validations.messages.number}}"
              ng-model="process.retry.attempts" ng-keydown="validations.acceptOnlyNumber($event)"
@@ -85,11 +94,9 @@
              ng-required="true"
              ng-pattern="validations.patterns.twoDigits"/>
     </div>
-  </div>
-  <div class="col-xs-8">
+    <div class="col-xs-8">
     <div class="inlineInputsGroup">
-      <div class="mt10">Delay</div>
-      <span>Up to</span>
+      <div><label class="light">Delay Up to<mandatory-field></mandatory-field></label></div>
       <input type="text" class="form-control"
              ng-model="process.retry.delay.quantity" validation-message="{{validations.messages.number}}"
              id="delayQuantity" ng-keydown="validations.acceptOnlyNumber($event)"
@@ -104,23 +111,25 @@
         <option value="months">months</option>
       </select>
     </div>
+    </div>
   </div>
-
-  <div class="col-xs-24 mt20">
+  <div class="col-xs-24 mt35 pb15px pl0px">
     <button class="btn prevBtn"
          type="button"
-         ng-click="goBack('forms.process.general')"
+         ng-click="goBack()"
          ng-disabled="buttonSpinners.backShow">
-      Previous <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.backShow" />
+      PREVIOUS <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.backShow" />
     </button>
-    <button class="btn nextBtn pull-right"
+    <div class="pull-right">
+      <a class="btn cnclBtn" ui-sref="main">
+        CANCEL
+      </a>
+      <button class="btn nextBtn"
          ng-disabled="buttonSpinners.show"
-         ng-click="goNext(processForm.$invalid, 'forms.process.clusters')" >
-      Next <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
-    </button>
-    <a class="pull-right" ui-sref="main">
-      Cancel
-    </a>
+         ng-click="goNext(processForm.$invalid)" scroll-to-error>
+          NEXT <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
+      </button>
+    </div>
   </div>
 
-</form>
\ No newline at end of file
+</form>
diff --git a/falcon-ui/app/html/process/processFormSummaryStepTpl.html b/falcon-ui/app/html/process/processFormSummaryStepTpl.html
index b60dd4e..086e8fc 100644
--- a/falcon-ui/app/html/process/processFormSummaryStepTpl.html
+++ b/falcon-ui/app/html/process/processFormSummaryStepTpl.html
@@ -19,155 +19,192 @@
 -->
 <form name="processForm" class="mt10" novalidate id="processFormSummaryStep">
 
-  <div class="row">
-    <h4 class="col-sm-24">Process</h4>
+  <div class="row" id="processSummaryStep">
+    <h4 class="col-sm-24">General</h4>
 
-    <div class="clearfix hidden-md">&nbsp</div>
-
-    <label class="col-sm-24">Name</label>
-    <label class="col-sm-24 light">{{process.name}}</label>
-
-    <div class="clearfix hidden-md">&nbsp</div>
-
-    <label class="col-sm-24">Tags</label>
     <div class="col-sm-24">
-      <div ng-repeat="tag in process.tags | filter:{key: '!!'}">
-        {{tag.key}} = {{tag.value}}
-      </div>
-      <div ng-show="!hasTags()">No tags selected</div>
+      <label>Process Name</label>: <span data-qe-id="processName">{{process.name}}</span>
     </div>
 
-    <div class="clearfix hidden-md">&nbsp</div>
+    <div class="col-sm-24">
+      <label>Tags</label>:
+      <div ng-repeat="tag in process.tags | filter:{key: '!!'} track by $index">
+        <span data-qe-id="processTags">{{tag.key}} = {{tag.value}}</span>
+      </div>
+      <div ng-show="!hasTags()"><span data-qe-id="processTags">No tags selected</span></div>
+    </div>
+
+    <h4 class="col-sm-24">
+      Access Control List
+    </h4>
+    <div class="col-sm-24">
+      <label>Owner</label>: <span data-qe-id="processACLOwner">{{optional(process.ACL.owner)}}</span>
+      <label>Group</label>: <span data-qe-id="processACLGroup">{{optional(process.ACL.group)}}</span>
+      <label>Permissions</label>:<span data-qe-id="processACLPermission"> {{optional(process.ACL.permission)}}</span>
+    </div>
 
     <h4 class="col-sm-24">Workflow</h4>
-    <div class="clearfix hidden-md">&nbsp</div>
-    <div class="row">
-      <div class="col-sm-8">
-        <label class="col-sm-24">Name</label>
-        <label class="col-sm-24 light">{{process.workflow.name}}</label>
+    <div class="col-sm-24">
+      <label>Workflow Name</label>:
+      <label class="light" data-qe-id="processWorkflowName">{{process.workflow.name}}</label>
+    </div>
+    <div class="col-sm-24">
+      <label>Engine</label>:
+      <label class="light"  data-qe-id="processWorkflowEngine">{{process.workflow.engine}}</label>
+    </div>
+    <div class="col-sm-24">
+      <label>Workflow Path</label>:
+      <label class="light" data-qe-id="processWorkflowPath">{{process.workflow.path}}</label>
+    </div>
+
+    <div class="col-sm-24 plr0px" ng-show="process.workflow.engine==='spark'">
+      <h4 class="col-sm-24">Spark Attributes</h4>
+      <div class="col-sm-24">
+        <label>Aplication</label>:
+        <label class="light" data-qe-id="processSparkApplication">{{process.workflow.spark.name}}</label>
       </div>
-      <div class="col-sm-8">
-        <label class="col-sm-24">Engine</label>
-        <label class="col-sm-24 light">{{process.workflow.engine}}</label>
+      <div class="col-sm-24">
+        <label>Main Class</label>:
+        <label class="light"  data-qe-id="processSparkMainClass">{{process.workflow.spark.class}}</label>
       </div>
-      <div class="col-sm-8">
-        <label class="col-sm-24">Version</label>
-        <label class="col-sm-24 light">{{process.workflow.version}}</label>
+      <div class="col-sm-24">
+        <label>Runs On</label>:
+        <label class="light" data-qe-id="processSparkRunsOn">{{process.workflow.spark.master}}</label>
+      </div>
+      <div class="col-sm-24">
+        <label>Mode</label>:
+        <label class="light" data-qe-id="processSparkMode">{{process.workflow.spark.mode}}</label>
+      </div>
+      <div class="col-sm-24">
+        <label>Jar</label>:
+        <label class="light" data-qe-id="processSparkJar">{{process.workflow.spark.jar}}</label>
+      </div>
+      <div class="col-sm-24">
+        <label>Spark Options</label>:
+        <label class="light" data-qe-id="processSparkOpts">{{process.workflow.spark.sparkOptions}}</label>
+      </div>
+
+      <div class="col-sm-24">
+        <label>Spark Arguments</label>:
+        <label class="light" data-qe-id="processSparkOpts">{{process.workflow.spark.arg}}</label>
       </div>
     </div>
-    <label class="col-sm-24">Path</label>
-    <label class="col-sm-24 light">{{process.workflow.path}}</label>
-
 
     <h4 class="col-sm-24">Timing</h4>
-    <div class="clearfix hidden-md">&nbsp</div>
-    <label class="col-sm-24">Timezone</label>
-    <label class="col-sm-24 light">{{optional(process.timezone)}}</label>
-    <div class="row">
-      <div class="col-sm-8">
-        <label class="col-sm-24">Frequency</label>
-        <label class="col-sm-24 light">Every {{process.frequency.quantity}} {{process.frequency.unit}}</label>
-      </div>
-      <div class="col-sm-8">
-        <label class="col-sm-24">Max. parallel instances</label>
-        <label class="col-sm-24 light">{{process.parallel}}</label>
-      </div>
-      <div class="col-sm-8">
-        <label class="col-sm-24">Order</label>
-        <label class="col-sm-24 light">{{optional(process.order)}}</label>
-      </div>
+    <div class="col-sm-24">
+      <label>Timezone</label>:
+      <label class="light" data-qe-id="processTimezone">{{optional(process.timezone)}}</label>
     </div>
-    <div class="clearfix hidden-md">&nbsp</div>
+    <div class="col-sm-24">
+      <label>Frequency</label>:
+      <label class="light">Every
+        <span data-qe-id="processFrequencyQuantity">{{process.frequency.quantity}}</span>
+        <span data-qe-id="processFrequencyUnit">{{process.frequency.unit}}</span>
+      </label>
+    </div>
+    <div class="col-sm-24">
+      <label>Max. parallel instances</label>:
+      <label class="light" data-qe-id="processParallel">{{process.parallel}}</label>
+    </div>
+    <div class="col-sm-24">
+      <label>Instance Usage</label>:
+      <label class="light" data-qe-id="processOrder">{{optional(process.order)}}</label>
+    </div>
+
     <h4 class="col-sm-24">Retry</h4>
-    <div class="clearfix hidden-md">&nbsp</div>
-    <div class="row">
-      <div class="col-sm-8">
-        <label class="col-sm-24">Policy</label>
-        <label class="col-sm-24 light">{{process.retry.policy}}</label>
-      </div>
-      <div class="col-sm-8">
-        <label class="col-sm-24">Attempts</label>
-        <label class="col-sm-24 light">{{process.retry.attempts}}</label>
-      </div>
-      <div class="col-sm-8">
-        <label class="col-sm-24">Delay</label>
-        <label class="col-sm-24 light">Up to {{process.retry.delay.quantity}} {{process.retry.delay.unit}}</label>
-      </div>
+    <div class="col-sm-24">
+      <label>Retry Policy</label>:
+      <label class="light" data-qe-id="processRetryPolicy">{{process.retry.policy}}</label>
     </div>
-    <div class="clearfix hidden-md">&nbsp</div>
+    <div class="col-sm-24">
+      <label>Attempts</label>:
+      <label class="light" data-qe-id="processRetryAttempts">{{process.retry.attempts}}</label>
+    </div>
+    <div class="col-sm-24">
+      <label>Delay</label>:
+      <label class="light">Up to
+        <span data-qe-id="processRetryDelayQuantity">{{process.retry.delay.quantity}}</span>
+        <span data-qe-id="processRetryDelayUnit">{{process.retry.delay.unit}}</span>
+      </label>
+    </div>
+
+    <h4 class="col-sm-24" ng-if="(process.properties | filter:{name: '!!'}).length > 0">Properties</h4>
+    <div class="col-sm-24" ng-repeat="property in process.properties | filter:{name: '!!'} track by $index">
+      <label>{{property.name}}</label>:<span> {{property.value}}</span>
+    </div>
+
     <h4 class="col-sm-24">Clusters</h4>
-    <div ng-repeat="cluster in process.clusters">
+    <div ng-repeat="cluster in process.clusters track by $index" data-qe-id="processClusters">
       <div class="row col-sm-offset-1 col-sm-22 detailsBox">
-        <label class="col-sm-24">Name</label>
-        <label class="col-sm-24 light">{{cluster.name}}</label>
-        <div class="clearfix hidden-md">&nbsp</div>
-        <h4 class="col-sm-24">Validity</h4>
-        <div class="row">
-          <div class="col-sm-12">
-            <label class="col-sm-24">Start</label>
-            <label class="col-sm-24 light">{{cluster.validity.start.date|date:'yyyy-MM-dd'}} {{cluster.validity.start.time|date:'HH:mm'}}</label>
-          </div>
-          <div class="col-sm-12">
-            <label class="col-sm-24">End</label>
-            <label class="col-sm-24 light">{{cluster.validity.end.date|date:'yyyy-MM-dd'}} {{cluster.validity.end.time|date:'HH:mm'}}</label>
-          </div>
+        <div class="col-sm-24">
+          <label>Cluster Name</label>:
+          <label class="light" data-qe-id="processClusterName">{{cluster.name}}</label>
+        </div>
+        <label class="col-sm-24">Validity</label>
+        <div class="col-sm-24">
+          <label>Start</label>:
+          <label class="light" data-qe-id="processClusterStart">{{cluster.validity.start.date|date:'yyyy-MM-dd'}} {{cluster.validity.start.time|date:'HH:mm'}}</label>
+          <label>End</label>:
+          <label class="light" data-qe-id="processClusterEnd">{{cluster.validity.end.date|date:'yyyy-MM-dd'}} {{cluster.validity.end.time|date:'HH:mm'}}</label>
         </div>
       </div>
     </div>
-    <div class="clearfix hidden-md">&nbsp</div>
     <h4 class="col-sm-24">Inputs</h4>
-    <div ng-repeat="input in process.inputs">
+    <div ng-repeat="input in process.inputs track by $index" data-qe-id="processInputs">
       <div class="row col-sm-offset-1 col-sm-22 detailsBox">
-        <label class="col-sm-24">Name</label>
-        <label class="col-sm-24 light">{{input.name}}</label>
-        <label class="col-sm-24">Feed</label>
-        <label class="col-sm-24 light">{{input.feed}}</label>
-        <div class="clearfix hidden-md">&nbsp</div>
-        <h4 class="col-sm-24">Instance</h4>
-        <div class="row">
-          <div class="col-sm-12">
-            <label class="col-sm-24">Start</label>
-            <label class="col-sm-24 light">{{input.start}}</label>
-          </div>
-          <div class="col-sm-12">
-            <label class="col-sm-24">End</label>
-            <label class="col-sm-24 light">{{input.end}}</label>
-          </div>
+        <div class="col-sm-24">
+          <label>Name</label>:
+          <label class="light" data-qe-id="processInputName">{{input.name}}</label>
+        </div>
+        <div class="col-sm-24">
+          <label>Feed</label>:
+          <label class="light" data-qe-id="processInputFeed">{{input.feed}}</label>
+        </div>
+        <label class="col-sm-24">Instance</label>
+        <div class="col-sm-24">
+          <label>Start</label>:
+          <label class="light" data-qe-id="processInstanceStart">{{input.start}}</label>
+          <label>End</label>:
+          <label class="light" data-qe-id="processInstanceEnd">{{input.end}}</label>
         </div>
       </div>
     </div>
     <h4 class="col-sm-24">Outputs</h4>
-    <div ng-repeat="output in process.outputs">
+    <div ng-repeat="output in process.outputs track by $index" data-qe-id="processOutputs">
       <div class="row col-sm-offset-1 col-sm-22 detailsBox">
-        <label class="col-sm-24">Name</label>
-        <label class="col-sm-24 light">{{output.name}}</label>
-        <label class="col-sm-24">Feed</label>
-        <label class="col-sm-24 light">{{output.feed}}</label>
-        <div class="clearfix hidden-md">&nbsp</div>
-        <h4 class="col-sm-24">Instance</h4>
+        <div class="col-sm-24">
+          <label>Name</label>
+          <label class="light" data-qe-id="processOutputName">{{output.name}}</label>
+        </div>
+        <div class="col-sm-24">
+          <label>Feed</label>
+          <label class="light" data-qe-id="processOutputFeed">{{output.feed}}</label>
+        </div>
         <label class="col-sm-24">Instance</label>
-        <label class="col-sm-24 light">{{output.outputInstance}}</label>
+        <div class="col-sm-24">
+          <label>Instance</label>
+          <label class="light" data-qe-id="processOutputInstance">{{output.outputInstance}}</label>
+        </div>
       </div>
     </div>
   </div>
-  <div class="clearfix hidden-md">&nbsp</div>
 
-  <div class="row">
-    <div class="col-xs-24 mt20">
-      <button type="button" class="btn prevBtn"
-           ng-click="goBack('forms.process.io')"
-           ng-disabled="buttonSpinners.backShow">
-        Previous <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.backShow" />
-      </button>
-      <button class="btn nextBtn pull-right"
-           ng-disabled="processForm.$invalid || buttonSpinners.show"
-           ng-click="saveEntity()">
-        Save <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
-      </button>
-      <a class="pull-right" ui-sref="main">
-        Cancel
+  <div class="col-xs-24 mt35 pb15px pl0px">
+    <button type="button" class="btn prevBtn"
+         ng-click="goBack()"
+         ng-disabled="buttonSpinners.backShow">
+      PREVIOUS <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.backShow" />
+    </button>
+    <div class="pull-right">
+      <a class="btn cnclBtn" ui-sref="main">
+        CANCEL
       </a>
+      <button class="btn nextBtn"
+           ng-disabled="processForm.$invalid || buttonSpinners.show"
+           ng-click="saveEntity()" scroll-to-error>
+        SAVE <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
+      </button>
     </div>
   </div>
 
-</form>
\ No newline at end of file
+</form>
diff --git a/falcon-ui/app/html/process/processFormTpl.html b/falcon-ui/app/html/process/processFormTpl.html
index 00d2c66..7c4a9e1 100644
--- a/falcon-ui/app/html/process/processFormTpl.html
+++ b/falcon-ui/app/html/process/processFormTpl.html
@@ -17,90 +17,77 @@
  * limitations under the License.
  */
 -->
-<div class="col-xs-22 col-xs-offset-1 entityForm" id="processFormTmpl">
+<div class="entityForm">
   <div class="col-xs-24">
-    <div class="row">
-
-      <h3 id="formTitle" class="col-xs-24">
-        <span class="entypo cycle icon-lg"></span> New Process
-      </h3>
-
-      <div ng-class="{'col-xs-12' : propsOpen, 'col-xs-20' : !propsOpen}">
-        <div class="detailsBox">
-          <div class="processProgressBox" ng-class="{
-            general:isActive('forms.process.general'),
-            properties:isActive('forms.process.properties'),
-            clusters:isActive('forms.process.clusters'),
-            inputsAndOutputs: isActive('forms.process.io'),
-            summary:isActive('forms.process.summary')
-            }">
-            <div class="progressBar col-xs-24">
-              <div>
-                <span>
-                  <div class="fir">1<span class="entypo check"></span></div>
-                  <h6>General</h6>
-                </span>
-                <span>
-                  <div class="sec">2<span class="entypo check"></span></div>
-                  <h6>Properties</h6>
-                </span>
-                <span>
-                  <div class="thi">3<span class="entypo check"></span></div>
-                  <h6>Clusters</h6>
-                </span>
-                <span>
-                  <div class="fou">4<span class="entypo check"></span></div>
-                  <h6>Inputs & Outputs</h6>
-                </span>
-                <span>
-                  <div class="fif">5<span class="entypo check"></span></div>
-                  <h6>Summary</h6>
-                </span>
-              </div>
-            </div>
-          </div>
-
-          <div class="row">
-            <div class="col-xs-offset-1 col-xs-22">
-              <fieldset id="fieldWrapper" ng-disabled="!editXmlDisabled">
-                <div ui-view class="formViewContainer"></div>
-              </fieldset>
-            </div>
+      <div class="preview pullOver">
+          <button id="previewXMLBtn" type="button" class="btn btn-default btn-md pull-right nextBtn" ng-click="toggleclick()" >Preview XML</button>
+      </div>
+      <br/>
+    <div>
+      <div class=" formBoxContainer detailsBox">
+        <div class="row processProgressBox" ng-class="{
+          general:isActive('forms.process.general'),
+          summary:isActive('forms.process.summary')
+          }">
+          <div class="progressBar col-xs-24">
+            <div class="text-center fir" ng-class="{
+                active:isActive('forms.process.general'),
+                completed:isCompleted('forms.process.general')}">General</div>
+            <div class="text-center thi" ng-class="{
+                active:isActive('forms.process.summary'),
+                completed:isCompleted('forms.process.summary')}">Summary</div>
           </div>
         </div>
-      </div>
 
-      <div ng-class="{'col-xs-12' : propsOpen, 'col-xs-4' : !propsOpen}">
-        <div class="detailsBox">
-          <div class="row">
-
-            <div class="col-xs-13 col-xs-offset-1 noSpecial">
-              <h5><i class="pointer glyphicon" ng-click="propsOpen = !propsOpen" ng-class="propsOpen ? 'glyphicon-minus-sign':'glyphicon-plus-sign'"></i> XML Preview</h5>
+        <div class="row customContainer">
+          <div class="col-xs-offset-1 col-xs-22">
+            <fieldset id="fieldWrapper" ng-disabled="!editXmlDisabled">
+              <div class="formViewContainer">
+                <div class="col-xs-24">
+                  <label class="title"><span class="entypo cycle icon-lg entypo-align-sub"></span> NEW PROCESS</label>
+                </div>
+                <div ui-view></div>
+              </div>
+            </fieldset>
+          </div>
+        </div>
+	  </div>
+      <div class="hide xmlPreviewContainer detailsBox">
+        <div class="row dt">
+          <div class="col-xs-24 pt15px">
+            <div class="col-xs-13 noSpecial">
+                <h5>XML Preview</h5>
+                <label style="margin-top: -10px;margin-bottom: -2px;" ng-if="invalidXml" class="custom-danger">Invalid Xml</label>
             </div>
-
-            <div ng-if="propsOpen" class="col-xs-9">
+            <div class="pull-right">
               <button type="button"
                       id="editXmlButton"
-                      class="btn btn-default btn-xs pull-right"
+                      class="btn btn-default btn-xs"
                       ng-click="toggleEditXml()"
-                      ng-class="{'btn-warning':!editXmlDisabled}">
+                      ng-class="{'btn-warning':!editXmlDisabled}"
+                      ng-disabled="invalidXml">
                 <div ng-if="editXmlDisabled">Edit XML</div>
                 <div ng-if="!editXmlDisabled">Finish</div>
               </button>
-            </div>
 
-            <div ng-show="propsOpen" class="col-xs-24">
-              <div class="row">
-                <div class="col-xs-22 col-xs-offset-1" >
-                  <textarea ng-model="prettyXml" class="form-control prettyXml" elastic ng-disabled="editXmlDisabled"></textarea>
-                </div>
-              </div>
+              <button type="button"
+                      id="revertXMLBtn"
+                      class="btn btn-default btn-xs"
+                      ng-if="invalidXml"
+                      ng-click="revertXml()">
+                  <div>Revert</div>
+              </button>
             </div>
-
+          </div>
+          <div class="col-xs-24 showValidationStyle">
+            <textarea ng-model="prettyXml"
+                      class="form-control"
+                      elastic
+                      ng-disabled="editXmlDisabled"
+                      ng-class="{fakeInvalid:invalidXml}">
+            </textarea>
           </div>
         </div>
       </div>
-
-    </div>
   </div>
 </div>
diff --git a/falcon-ui/app/html/process/processSummary.html b/falcon-ui/app/html/process/processSummary.html
index e9eb4a4..cc4a1d9 100644
--- a/falcon-ui/app/html/process/processSummary.html
+++ b/falcon-ui/app/html/process/processSummary.html
@@ -30,7 +30,6 @@
       <div ng-repeat="tag in process.tags | filter:{key: '!!'}">
         {{tag.key}} = {{tag.value}}
       </div>
-      <div ng-show="!hasTags()">No tags selected</div>
     </div>
 
     <h5 class="col-sm-24">Access Control List</h5>
@@ -61,14 +60,41 @@
         <label class="col-sm-24">Engine</label>
         <label class="col-sm-24 light">{{process.workflow.engine}}</label>
       </div>
-      <div class="col-sm-8">
-        <label class="col-sm-24">Version</label>
-        <label class="col-sm-24 light">{{process.workflow.version}}</label>
-      </div>
     </div>
     <label class="col-sm-24">Path</label>
     <label class="col-sm-24 light">{{process.workflow.path}}</label>
 
+    <div class="col-sm-24 plr0px" ng-show="process.workflow.engine==='spark'">
+      <h5 class="col-sm-24">Spark Attributes</h4>
+      <div class="col-sm-24">
+        <label>Aplication</label>:
+        <label class="light" data-qe-id="processSparkApplication">{{process.workflow.spark.name}}</label>
+      </div>
+      <div class="col-sm-24">
+        <label>Main Class</label>:
+        <label class="light"  data-qe-id="processSparkMainClass">{{process.workflow.spark.class}}</label>
+      </div>
+      <div class="col-sm-24">
+        <label>Runs On</label>:
+        <label class="light" data-qe-id="processSparkRunsOn">{{process.workflow.spark.master}}</label>
+      </div>
+      <div class="col-sm-24">
+        <label>Mode</label>:
+        <label class="light" data-qe-id="processSparkMode">{{process.workflow.spark.mode}}</label>
+      </div>
+      <div class="col-sm-24">
+        <label>Jar</label>:
+        <label class="light" data-qe-id="processSparkJar">{{process.workflow.spark.jar}}</label>
+      </div>
+      <div class="col-sm-24">
+        <label>Spark Options</label>:
+        <label class="light" data-qe-id="processSparkOpts">{{process.workflow.spark.sparkOptions}}</label>
+      </div>
+      <div class="col-sm-24">
+        <label>Spark Arguments</label>:
+        <label class="light" data-qe-id="processSparkOpts">{{process.workflow.spark.arg}}</label>
+      </div>
+    </div>
 
     <h5 class="col-sm-24">Timing</h5>
     <label class="col-sm-24" ng-if="process.timezone">Timezone</label>
@@ -89,6 +115,11 @@
       </div>
     </div>
 
+    <h5 class="col-sm-24" ng-if="(process.properties | filter:{name: '!!'}).length > 0">Properties</h5>
+    <div class="col-sm-24" ng-repeat="property in process.properties  | filter:{name: '!!'}">
+      <label>{{property.name}}</label>:<span> {{property.value}}</span>
+    </div>
+
     <h5 class="col-sm-24">Retry</h5>
 
     <div class="row">
@@ -181,4 +212,4 @@
       </div>
     </div>
   </div>
-</div>
\ No newline at end of file
+</div>
diff --git a/falcon-ui/app/html/snapshot/snapshotFormAdvancedStepTpl.html b/falcon-ui/app/html/snapshot/snapshotFormAdvancedStepTpl.html
new file mode 100644
index 0000000..d0fb50b
--- /dev/null
+++ b/falcon-ui/app/html/snapshot/snapshotFormAdvancedStepTpl.html
@@ -0,0 +1,194 @@
+<!--
+/**
+ * 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.
+ */
+-->
+<form name="snapshotForm" novalidate id="snapshotFormAdvancedStep">
+
+	<div class="col-xs-24">
+		<label tooltip="dataset.tdeEncryptionEnabled">TDE Encryption</label>
+		<input type="checkbox" ng-model="snapshot.tdeEncryptionEnabled" ng-checked="snapshot.tdeEncryptionEnabled"/>
+	</div>
+	<hr class="col-xs-24" />
+
+	<div class="col-xs-24"><label>Retry Policy</label></div>
+  <div class="col-xs-24">
+		<label class="light" tooltip="snapshot.retryPolicy" tooltip-position="up">
+			Type
+		</label>
+	</div>
+	<div class="col-xs-6">
+    <select ng-model="snapshot.retry.policy" ng-required="true" validation-message="{{validations.messages.option}}"
+			ng-change="policyChange()">
+      <option value="" disabled selected style='display:none;'>-Select policy-</option>
+      <option value="periodic">Periodic</option>
+      <option value="exp-backoff">Exponential Backup</option>
+      <option value="final">None</option>
+    </select>
+	</div>
+	<div class="col-xs-24">
+		<label class="light">Delay Up to</label>
+	</div>
+	<div class="col-xs-3">
+		<input type="text" class="form-control"
+					 ng-model="snapshot.retry.delay.quantity" validation-message="{{validations.messages.number}}"
+					 id="delayQuantity" ng-keydown="validations.acceptOnlyNumber($event)"
+					 ng-required="true"
+					 ng-disabled = "snapshot.retry.policy === 'final'"
+					 ng-pattern="validations.patterns.twoDigits"/>
+	</div>
+	<div class="col-xs-3 plr0px">
+		<select ng-model="snapshot.retry.delay.unit" ng-required="true"
+			validation-message="{{validations.messages.option}}"
+			ng-disabled = "snapshot.retry.policy === 'final'">
+			<option value="" disabled selected style='display:none;'>-Select delay-</option>
+			<option value="minutes">minutes</option>
+			<option value="hours">hours</option>
+			<option value="days">days</option>
+			<option value="months">months</option>
+		</select>
+	</div>
+  <div class="col-xs-24">
+    <label class="light">Attempts</label>
+	</div>
+	<div class="col-xs-6">
+    <input type="text" class="form-control" validation-message="{{validations.messages.number}}"
+           ng-model="snapshot.retry.attempts" ng-keydown="validations.acceptOnlyNumber($event)"
+           id="attemptsField"
+					 ng-disabled = "snapshot.retry.policy === 'final'"
+           ng-required="true"
+           ng-pattern="validations.patterns.twoDigits"/>
+  </div>
+	<hr class="col-xs-24" />
+
+	<div class="col-xs-24"><label>Performance & Throttling - Distributed Copy</label></div>
+	<div class="col-xs-12 plr0px">
+		<div class="col-xs-12 plr0px">
+			<div class="col-xs-24 plr0px">
+				<div class="col-xs-24">
+					<label class="light" tooltip="dataset.distcpMapBandwidth">Max Bandwidth</label>
+				</div>
+				<div class="col-xs-20">
+					<input type="text"
+								 name="distcpMapBandwidth"
+								 ng-model="snapshot.allocation.distcpMapBandwidth"
+								 class="form-control" />
+				</div>
+				<label class="light bandwidth-label">MB</label>
+			</div>
+			<div class="col-xs-20">
+				<label class="light" tooltip="dataset.distcpMaxMaps">Max Map Jobs</label>
+				<input type="text"
+							 name="distcpMaxMaps"
+							 ng-model="snapshot.allocation.distcpMaxMaps"
+							 class="form-control" />
+			</div>
+		</div>
+	</div>
+	<hr class="col-xs-24" />
+
+	<div class="col-xs-24">
+    <label>Alerts</label>
+  </div>
+
+	<div class="col-xs-24">
+    <label class="light" tooltip="dataset.jobNotificationReceivers">Send alerts to</label>
+  </div>
+  <div class="col-xs-12 alertsBox plr0px">
+    <div class="emailBox">
+      <div class="col-xs-16">
+        <input class="form-control"
+               name="emailAlertInput"
+               ng-model="snapshot.alert.email"
+               type="text"
+               placeholder="Email"
+               ng-pattern="validations.patterns.email"
+               validation-optional-message="{{validations.messages.email}}">
+      </div>
+    </div>
+    <div class="addAlertBox col-xs-3">
+      <button class="btn btn-default btn-xs"
+              ng-disabled="!snapshot.alert.email"
+              type="button"
+              ng-click="addAlert()">
+        <span class="glyphicon glyphicon-plus"></span>add alert
+      </button>
+    </div>
+	</div>
+	<div class="col-xs-24">
+    <div class="col-xs-12 emailArrayRow mt10" ng-repeat="email in snapshot.alerts">
+      <span class="col-xs-16">{{email}}</span>
+      <div class="col-xs-3"><button class="btn btn-default btn-xs"
+              type="button"
+              ng-click="removeAlert()">
+        <span class="glyphicon glyphicon-minus"></span> delete
+      </button></div>
+    </div>
+  </div>
+	<hr class="col-xs-24" />
+
+	<div class="col-xs-24"><label>Access Control List</label></div>
+	<div class="col-xs-12 plr0px">
+		<div class="col-xs-24 plr0px">
+			<div class="col-xs-12">
+				<label class="light">Owner<mandatory-field></mandatory-field></label>
+				<input type="text"
+							 name="aclOwnerInput"
+							 ng-model="snapshot.ACL.owner"
+							 ng-pattern="validations.patterns.unixId"
+							 class="form-control"
+							 ng-required="true"
+							 validation-message="{{validations.messages.acl.owner}}"/>
+			</div>
+			<div class="col-xs-12 pl0px">
+				<label class="light">Group<mandatory-field></mandatory-field></label>
+				<input type="text"
+							 name="aclGroupInput"
+							 ng-model="snapshot.ACL.group"
+							 ng-pattern="validations.patterns.unixId"
+							 class="form-control"
+							 ng-required="true"
+							 validation-message="{{validations.messages.acl.group}}" />
+			</div>
+		</div>
+		<div class="col-xs-24">
+			<div class="col-xs-8 plr0px">
+				<label class="light">Permissions<mandatory-field></mandatory-field></label>
+				<acl-permissions acl-model="snapshot.ACL.permission"></acl-permissions>
+			</div>
+		</div>
+	</div>
+
+  <div class="col-xs-24 mt35 pb15px plr0px">
+		<button id="snapshot.backToStep1" class="btn prevBtn" type="button" ng-click="goBack()" ng-disabled="buttonSpinners.backShow">
+			PREVIOUS <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.backShow">
+		</button>
+		<div class="pull-right">
+			<a class="btn cnclBtn" ui-sref="main">
+				CANCEL
+			</a>
+			<button id="snapshot.step2" class="btn nextBtn" ng-click="goNext(snapshotForm.$invalid)" scroll-to-error>
+				NEXT <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show">
+			</button>
+			<button id="snapshot.step3" class="btn advancedSaveBtn" ng-click="save(snapshotForm.$invalid)"
+				ng-disabled="buttonSpinners.saveShow" scroll-to-error>
+				SAVE ADVANCED OPTIONS <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.saveShow">
+			</button>
+		</div>
+	</div>
+
+</form>
diff --git a/falcon-ui/app/html/snapshot/snapshotFormGeneralStepTpl.html b/falcon-ui/app/html/snapshot/snapshotFormGeneralStepTpl.html
new file mode 100644
index 0000000..9990554
--- /dev/null
+++ b/falcon-ui/app/html/snapshot/snapshotFormGeneralStepTpl.html
@@ -0,0 +1,505 @@
+<!--
+/**
+ * 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.
+ */
+-->
+<form id="snapshotFormGeneralStep" name="datasetForm" novalidate>
+
+  <div class="col-xs-6">
+    <label class="light" tooltip="dataset.name">Name<mandatory-field></mandatory-field></label>
+    <input type="text"
+           name="nameInput"
+           class="form-control"
+           ng-model="snapshot.name"
+           placeholder=""
+           ng-disabled="editingMode"
+           ng-pattern="validations.patterns.name"
+           ng-required="true"
+           check-name="{type:'process', check:!editingMode}"/>
+    </label>
+  </div>
+
+  <div class="col-xs-24">
+    <label class="light">Tags</label>
+  </div>
+
+  <div class="col-xs-12">
+    <div ng-repeat="tag in snapshot.tags">
+      <div class="row dynamic-table-spacer">
+        <div class="col-xs-8">
+          <input type="text" class="form-control" ng-model="tag.key"
+            validation-optional-message="{{validations.messages.key}}"
+              ng-pattern="validations.patterns.alpha" ng-required="tag.value" placeholder="name"/>
+        </div>
+        <div class="col-xs-8">
+          <input type="text" class="form-control" validation-optional-message="{{validations.messages.value}}"
+              ng-model="tag.value" ng-pattern="validations.patterns.alpha"
+              ng-required="tag.key" placeholder="value"/>
+        </div>
+        <div class="col-xs-8">
+          <button type="button" class="btn btn-default btn-xs" ng-click="removeTag($index)" ng-if="!$first || !$last">
+            <span class="entypo minus"></span> delete
+          </button>
+          <button type="button" class="btn btn-default btn-xs" ng-click="addTag()" ng-if="$last">
+            <span class="entypo plus"></span> add tag
+          </button>
+        </div>
+      </div>
+    </div>
+  </div>
+
+  <div class="col-xs-24 plr0px">
+    <div class="col-xs-12 plr0px">
+      <div class="col-xs-24 plr0px clusterBox">
+        <h3>Source</h3>
+        <div class="runJobOnBox">
+          <input type="radio" id="runJobOnSourceRadio" ng-model="snapshot.runOn" ng-rquired="true" value="source"/>
+          Run job here
+        </div>
+
+        <div class="col-xs-24 plr0px">
+          <div class="col-xs-6"><label class="light">Cluster<mandatory-field></mandatory-field></label></div>
+          <div class="col-xs-10 mt10">
+              <select ng-model="snapshot.source.cluster"
+                  ng-required="true" validation-message="{{validations.messages.cluster}}"
+                  name="sourceClusterSelect" class="form-control padding0"
+                  ng-change="validateCluster()">
+                <option value="" disabled style='display:none;'>-Select source cluster-</option>
+                <option ng-selected="snapshot.source.cluster === cluster.name"
+                        ng-repeat="cluster in clusterList"
+                        value="{{cluster.name}}">
+                  {{cluster.name}}
+                </option>
+              </select>
+          </div>
+        </div>
+        <div class="col-xs-24 plr0px">
+          <div class="col-xs-6">
+            <label class="light" tooltip="dataset.snapshot.sourceSnapshotDir">
+              Source Directory<mandatory-field></mandatory-field>
+            </label>
+          </div>
+          <div class="col-xs-10 mt10">
+            <input type="text"
+                   name="sourceDirectoryPath"
+                   ng-model="snapshot.source.directoryPath"
+                   ng-pattern="validations.patterns.path"
+                   class="form-control"
+                   ng-required="true"
+                   validation-message="{{validations.messages.path}}" />
+          </div>
+        </div>
+        <div class="col-xs-24 plr0px">
+          <div class="col-xs-6">
+            <label class="light" tooltip="dataset.snapshot.sourceSnapshotRetentionAgeLimit">Delete Snapshot After</label>
+          </div>
+          <div class="col-xs-4 mt10">
+            <input type="text"
+                   name="sourceDeleteFrequency"
+                   ng-model="snapshot.source.deleteFrequency.quantity"
+                   ng-pattern="validations.patterns.twoDigits"
+                   ng-keydown="validations.acceptOnlyNumber($event)"
+                   class="form-control"
+                   ng-rquired="true"
+                   validation-message="{{validations.messages.number}}" />
+          </div>
+          <div class="col-xs-8 mt10">
+            <select ng-model="snapshot.source.deleteFrequency.unit"
+              class="form-control padding0" ng-rquired="true">
+              <option selected value="minutes">minutes</option>
+              <option value="hours">hours</option>
+              <option value="days">days</option>
+              <option value="months">months</option>
+            </select>
+          </div>
+        </div>
+        <div class="col-xs-24 plr0px">
+          <div class="col-xs-6">
+            <label class="light" tooltip="dataset.snapshot.sourceSnapshotRetentionNumber">Keep Last</label>
+          </div>
+          <div class="col-xs-4 mt10">
+            <input type="text"
+                   name="sourceRetentionNumber"
+                   ng-model="snapshot.source.retentionNumber"
+                   ng-pattern="validations.patterns.twoDigits"
+                   ng-keydown="validations.acceptOnlyNumber($event)"
+                   class="form-control"
+                   ng-rquired="true"
+                   validation-message="{{validations.messages.number}}" />
+          </div>
+          <label class="light">snapshots</label>
+        </div>
+      </div>
+    </div>
+
+    <div class="col-xs-12 plr0px pl5">
+      <div class="col-xs-24 plr0px clusterBox">
+        <h3>Target</h3>
+        <div class="runJobOnBox">
+          <input type="radio" id="runJobOnTargetRadio" ng-model="snapshot.runOn" value="target" ng-rquired="true" />
+          Run job here
+        </div>
+
+        <div class="col-xs-24 plr0px">
+          <div class="col-xs-6"><label class="light">Cluster<mandatory-field></mandatory-field></label></div>
+          <div class="col-xs-10 mt10">
+              <select ng-model="snapshot.target.cluster"
+                  ng-required="true" validation-message="{{validations.messages.cluster}}"
+                  name="targetClusterSelect" class="form-control padding0"
+                  ng-change="validateCluster()">
+                <option value="" disabled style='display:none;'>-Select target cluster-</option>
+                <option ng-selected="snapshot.target.cluster === cluster.name"
+                        ng-repeat="cluster in clusterList"
+                        value="{{cluster.name}}">
+                  {{cluster.name}}
+                </option>
+              </select>
+              <div class="custom-danger" ng-show="clusterErrorMessage != ''">
+                {{clusterErrorMessage}}
+              </div>
+          </div>
+        </div>
+
+        <div class="col-xs-24 plr0px">
+          <div class="col-xs-6">
+            <label class="light" tooltip="dataset.snapshot.targetSnapshotDir">
+              Target Directory<mandatory-field></mandatory-field>
+            </label>
+          </div>
+          <div class="col-xs-10 mt10">
+            <input type="text"
+                   name="targetDirectoryPath"
+                   ng-model="snapshot.target.directoryPath"
+                   ng-pattern="validations.patterns.path"
+                   class="form-control"
+                   ng-required="true"
+                   validation-message="{{validations.messages.path}}" />
+          </div>
+        </div>
+        <div class="col-xs-24 plr0px">
+          <div class="col-xs-6">
+            <label class="light" tooltip="dataset.snapshot.targetSnapshotRetentionAgeLimit">Delete Snapshot After</label>
+          </div>
+          <div class="col-xs-4 mt10">
+            <input type="text"
+                   name="targetDeleteFrequency"
+                   ng-model="snapshot.target.deleteFrequency.quantity"
+                   ng-pattern="validations.patterns.twoDigits"
+                   ng-keydown="validations.acceptOnlyNumber($event)"
+                   class="form-control"
+                   ng-rquired="true"
+                   validation-message="{{validations.messages.number}}" />
+          </div>
+          <div class="col-xs-8 mt10">
+            <select ng-model="snapshot.target.deleteFrequency.unit" class="form-control padding0" ng-rquired="true">
+              <option selected value="minutes">minutes</option>
+              <option value="hours">hours</option>
+              <option value="days">days</option>
+              <option value="months">months</option>
+            </select>
+          </div>
+        </div>
+        <div class="col-xs-24 plr0px">
+          <div class="col-xs-6">
+            <label class="light" tooltip="dataset.snapshot.targetSnapshotRetentionNumber">Keep Last</label>
+          </div>
+          <div class="col-xs-4 mt10">
+            <input type="text"
+                   name="targetRetentionNumber"
+                   ng-model="snapshot.target.retentionNumber"
+                   ng-pattern="validations.patterns.twoDigits"
+                   ng-keydown="validations.acceptOnlyNumber($event)"
+                   class="form-control"
+                   ng-rquired="true"
+                   validation-message="{{validations.messages.number}}" />
+          </div>
+          <label class="light">snapshots</label>
+        </div>
+      </div>
+    </div>
+  </div>
+
+  <div class="col-xs-24"><label>Run Duration</label></div>
+	<div class="col-xs-24 validityBox plr0px">
+		<div class="col-xs-24 plr0px">
+			<div class="startDateBox col-xs-4">
+				<label class="light">Start</label>
+				<input type="text"
+					name="startDateInput"
+					class="form-control dateInput"
+					placeholder="{{dateFormat | lowercase}}"
+					ng-model="snapshot.validity.start.date"
+					ng-required="true"
+					simple-date-picker />
+
+			</div>
+			<div class="startTimeBox col-xs-4">
+				<label class="light">Begin Time</label>
+				<timepicker ng-change="constructDate()"
+										ng-model="snapshot.validity.start.time"
+										ng-required="true"
+										hour-step="1"
+										minute-step="1"
+										show-meridian="true">
+				</timepicker>
+			</div>
+		</div>
+		<div class="col-xs-24 plr0px">
+			<div class="endDateBox col-xs-4">
+				<label class="light">End</label>
+				<input type="text"
+					name="startDateInput"
+					class="form-control dateInput"
+					placeholder="{{dateFormat | lowercase}}"
+					ng-model="snapshot.validity.end.date"
+					ng-required="true"
+					simple-date-picker />
+
+			</div>
+			<div class="endTimeBox col-xs-4">
+				<label class="light">End Time<mandatory-field></mandatory-field></label>
+				<timepicker ng-change="constructDate()"
+										ng-model="snapshot.validity.end.time"
+										ng-required="true"
+										hour-step="1"
+										minute-step="1"
+										show-meridian="true">
+				</timepicker>
+			</div>
+		</div>
+	</div>
+
+  <div class="col-xs-12 frequencyBox plr0px">
+    <div class="col-xs-24">
+      <label>Frequency</label>
+    </div>
+    <div class="col-xs-24">
+      <label class="light">Repeat Every</label>
+    </div>
+    <div class="col-xs-24 plr0px">
+      <div class="col-xs-8">
+        <input type="text"
+               name="frequencyQuantity"
+               ng-model="snapshot.frequency.quantity"
+               ng-pattern="validations.patterns.twoDigits"
+               ng-keydown="validations.acceptOnlyNumber($event)"
+               ng-keyup="checkMininumFrequency(snapshot.frequency.quantity, snapshot.frequency.unit, datasetForm.frequencyQuantity)"
+               class="form-control"
+               ng-required="true"
+               validation-message="{{validations.messages.number}}" />
+      </div>
+      <div class="col-xs-8">
+        <select ng-model="snapshot.frequency.unit" class="form-control padding0" ng-required="true"
+          ng-change="checkMininumFrequency(snapshot.frequency.quantity, snapshot.frequency.unit, datasetForm.frequencyQuantity)">
+          <option selected value="minutes">minutes</option>
+          <option value="hours">hours</option>
+          <option value="days">days</option>
+          <option value="months">months</option>
+        </select>
+      </div>
+      <div class="col-xs-24 custom-danger" ng-if="!isFrequencyValid">{{validations.messages.frequency.minimum}}</div>
+    </div>
+
+    <div class="col-xs-24">
+      <label class="light">Timezone</label>
+    </div>
+    <div class="col-xs-24">
+      <time-zone-select ng-model="snapshot.validity.timezone"></time-zone-select>
+    </div>
+  </div>
+
+  <div class="col-xs-24 advancedOption" ng-click="expandOptions = !expandOptions" id="snapshotAdvancedOption">
+    <label class="mt15 pointer blink-success">ADVANCED OPTIONS</label>
+    <i class="glyphicon glyphicon-chevron-down mt15" ng-if="!expandOptions"></i>
+    <i class="glyphicon glyphicon-chevron-up mt15" ng-if="expandOptions"></i>
+  </div>
+
+	<div id="advancedOptionsBox" class="col-xs-24 plr0px" ng-class="{expanded:expandOptions}">
+    <div class="col-xs-24">
+		<label tooltip="dataset.tdeEncryptionEnabled">TDE Encryption</label>
+		<input type="checkbox" ng-model="snapshot.tdeEncryptionEnabled" ng-checked="snapshot.tdeEncryptionEnabled"/>
+	</div>
+	<hr class="col-xs-24" />
+
+	<div class="col-xs-24"><label>Retry Policy</label></div>
+    <div class="col-xs-24">
+		<label class="light" tooltip="snapshot.retryPolicy" tooltip-position="up">
+			Type
+		</label>
+	</div>
+	<div class="col-xs-6">
+      <select ng-model="snapshot.retry.policy" ng-required="true" validation-message="{{validations.messages.option}}"
+			ng-change="policyChange()">
+        <option value="" disabled selected style='display:none;'>-Select policy-</option>
+        <option value="periodic">Periodic</option>
+        <option value="exp-backoff">Exponential Backup</option>
+        <option value="final">None</option>
+      </select>
+	</div>
+	<div class="col-xs-24">
+		<label class="light">Delay Up to</label>
+	</div>
+	<div class="col-xs-3">
+		<input type="text" class="form-control"
+					 ng-model="snapshot.retry.delay.quantity" validation-message="{{validations.messages.number}}"
+					 id="delayQuantity" ng-keydown="validations.acceptOnlyNumber($event)"
+					 ng-required="true"
+					 ng-disabled = "snapshot.retry.policy === 'final'"
+					 ng-pattern="validations.patterns.twoDigits"/>
+	</div>
+	<div class="col-xs-3 plr0px">
+		<select ng-model="snapshot.retry.delay.unit" ng-required="true"
+			validation-message="{{validations.messages.option}}"
+			ng-disabled = "snapshot.retry.policy === 'final'">
+			<option value="" disabled selected style='display:none;'>-Select delay-</option>
+			<option value="minutes">minutes</option>
+			<option value="hours">hours</option>
+			<option value="days">days</option>
+			<option value="months">months</option>
+		</select>
+	</div>
+    <div class="col-xs-24">
+      <label class="light">Attempts</label>
+	</div>
+	<div class="col-xs-6">
+      <input type="text" class="form-control" validation-message="{{validations.messages.number}}"
+             ng-model="snapshot.retry.attempts" ng-keydown="validations.acceptOnlyNumber($event)"
+             id="attemptsField"
+					 ng-disabled = "snapshot.retry.policy === 'final'"
+             ng-required="true"
+             ng-pattern="validations.patterns.twoDigits"/>
+    </div>
+	<hr class="col-xs-24" />
+
+	<div class="col-xs-24"><label>Performance & Throttling - Distributed Copy</label></div>
+	<div class="col-xs-12 plr0px">
+		<div class="col-xs-12 plr0px">
+			<div class="col-xs-24 plr0px">
+				<div class="col-xs-24">
+					<label class="light" tooltip="dataset.distcpMapBandwidth">Max Bandwidth</label>
+				</div>
+				<div class="col-xs-20">
+					<input type="text"
+								 name="distcpMapBandwidth"
+								 ng-model="snapshot.allocation.distcpMapBandwidth"
+								 class="form-control" />
+				</div>
+				<label class="light bandwidth-label">MB</label>
+			</div>
+			<div class="col-xs-20">
+				<label class="light" tooltip="dataset.distcpMaxMaps">Max Map Jobs</label>
+				<input type="text"
+							 name="distcpMaxMaps"
+							 ng-model="snapshot.allocation.distcpMaxMaps"
+							 class="form-control" />
+			</div>
+		</div>
+	</div>
+	<hr class="col-xs-24" />
+
+	<div class="col-xs-24">
+      <label>Alerts</label>
+    </div>
+
+	<div class="col-xs-24">
+      <label class="light" tooltip="dataset.jobNotificationReceivers">Send alerts to</label>
+    </div>
+    <div class="col-xs-12 alertsBox plr0px">
+      <div class="emailBox">
+        <div class="col-xs-16">
+          <input class="form-control"
+                 name="emailAlertInput"
+                 ng-model="snapshot.alert.email"
+                 type="text"
+                 placeholder="Email"
+                 ng-pattern="validations.patterns.email"
+                 validation-optional-message="{{validations.messages.email}}">
+        </div>
+      </div>
+      <div class="addAlertBox col-xs-3">
+        <button class="btn btn-default btn-xs"
+                ng-disabled="!snapshot.alert.email"
+                type="button"
+                ng-click="addAlert()">
+          <span class="glyphicon glyphicon-plus"></span>add alert
+        </button>
+      </div>
+	</div>
+	<div class="col-xs-24">
+      <div class="col-xs-12 emailArrayRow mt10" ng-repeat="email in snapshot.alerts">
+        <span class="col-xs-16">{{email}}</span>
+        <div class="col-xs-3"><button class="btn btn-default btn-xs"
+                type="button"
+                ng-click="removeAlert()">
+          <span class="glyphicon glyphicon-minus"></span> delete
+        </button></div>
+      </div>
+    </div>
+	<hr class="col-xs-24" />
+
+	<div class="col-xs-24"><label>Access Control List</label></div>
+	<div class="col-xs-12 plr0px">
+		<div class="col-xs-24 plr0px">
+			<div class="col-xs-12">
+				<label class="light">Owner<mandatory-field></mandatory-field></label>
+				<input type="text"
+							 name="aclOwnerInput"
+							 ng-model="snapshot.ACL.owner"
+							 ng-pattern="validations.patterns.unixId"
+							 class="form-control"
+							 ng-required="true"
+							 validation-message="{{validations.messages.acl.owner}}"/>
+			</div>
+			<div class="col-xs-12 pl0px">
+				<label class="light">Group<mandatory-field></mandatory-field></label>
+				<input type="text"
+							 name="aclGroupInput"
+							 ng-model="snapshot.ACL.group"
+							 ng-pattern="validations.patterns.unixId"
+							 class="form-control"
+							 ng-required="true"
+							 validation-message="{{validations.messages.acl.group}}" />
+			</div>
+		</div>
+		<div class="col-xs-24">
+			<div class="col-xs-8 plr0px">
+				<label class="light">Permissions<mandatory-field></mandatory-field></label>
+				<acl-permissions acl-model="snapshot.ACL.permission"></acl-permissions>
+			</div>
+		</div>
+	</div>
+  </div>
+
+  <div class="col-xs-24 pb15px mt35">
+    <div class="pull-right">
+      <a class="btn cnclBtn" ui-sref="main">
+        CANCEL
+      </a>
+      <button class="btn nextBtn"
+            ng-disabled="buttonSpinners.show"
+            ng-click="goNext(datasetForm.$invalid)" scroll-to-error>
+      NEXT <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
+      </button>
+      <button class="btn nextBtn"
+            ng-disabled="datasetForm.$invalid || buttonSpinners.saveShow"
+            ng-click="save(datasetForm.$invalid)" scroll-to-error>
+      SAVE <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.saveShow" />
+      </button>
+    </div>
+  </div>
+
+</form>
diff --git a/falcon-ui/app/html/snapshot/snapshotFormSummaryStepTpl.html b/falcon-ui/app/html/snapshot/snapshotFormSummaryStepTpl.html
new file mode 100644
index 0000000..8329aa2
--- /dev/null
+++ b/falcon-ui/app/html/snapshot/snapshotFormSummaryStepTpl.html
@@ -0,0 +1,157 @@
+<!--
+/**
+ * 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.
+ */
+-->
+<div id="formSummaryBox" class="col-xs-24">
+  <h4>General</h4>
+  <div>
+    <label>Name</label>:
+    <span>{{snapshot.name}}</span>
+  </div>
+  <div>
+    <label>Type</label> :
+    <span>{{snapshot.type}}</span>
+  </div>
+  <div>
+    <label>Tags</label>:
+    <div ng-repeat="tag in snapshot.tags"><span>{{tag.key}}</span> - <span>{{tag.value}}</span></div>
+  </div>
+
+  <div class="col-xs-12 plr0px mb15">
+    <div>
+      <h4>Source</h4>
+    </div>
+    <div class="box">
+      <h3>{{snapshot.source.cluster}}</h3>
+      <div>
+        <label class="locationBox">Source Directory</label>:
+        <span>{{snapshot.source.directoryPath}}</span>
+      </div>
+      <div>
+        <label>Delete Snapshot After</label>:
+        <span>{{snapshot.source.deleteFrequency.quantity}} {{snapshot.source.deleteFrequency.unit}}</span>
+      </div>
+      <div>
+        <label>Keep Last</label>:
+        <span>{{snapshot.source.retentionNumber}} snapshots</span>
+      </div>
+    </div>
+  </div>
+
+  <div class="col-xs-12 mb15">
+    <div>
+      <h4>Target</h4>
+    </div>
+    <div class="box">
+      <h3>{{snapshot.target.cluster}}</h3>
+      <div>
+        <label class="locationBox">Target Directory</label>:
+        <span>{{snapshot.target.directoryPath}}</span>
+      </div>
+      <div>
+        <label>Delete Snapshot After</label>:
+        <span>{{snapshot.target.deleteFrequency.quantity}} {{snapshot.source.deleteFrequency.unit}}</span>
+      </div>
+      <div>
+        <label>Keep Last</label>:
+        <span>{{snapshot.target.retentionNumber}} snapshots</span>
+      </div>
+    </div>
+  </div>
+
+  <div>
+    <h4 class="lightSubtitle">Run On</h4>
+    <div ng-if="snapshot.runOn === 'source'"><span>{{snapshot.source.cluster}}</span></div>
+    <div ng-if="snapshot.runOn === 'target'"><span>{{snapshot.target.cluster}}</span></div>
+  </div>
+
+  <hr />
+
+  <div>
+    <h4 class="lightSubtitle">Run Duration</h4>
+    <div><label>Start on</label>: <span>{{snapshot.validity.start.date|date:'yyyy-MM-dd'}} {{snapshot.validity.start.time|date:'HH:mm'|date:'HH:mm'}}</span></div>
+    <div><label>End on</label>: <span>{{snapshot.validity.end.date|date:'yyyy-MM-dd'}} {{snapshot.validity.end.time|date:'HH:mm'}}</span></div>
+  </div>
+
+  <div>
+    <h4 class="lightSubtitle">Frequency</h4>
+    <div><span>{{snapshot.frequency.quantity}} {{snapshot.frequency.unit}}</span></div>
+  </div>
+
+  <div>
+    <h4 class="lightSubtitle">Timezone</h4>
+    <div><span>{{snapshot.validity.timezone}}</span></div>
+  </div>
+
+  <div>
+    <h4 class="lightSubtitle">TDE Encryption</h4>
+    <span>{{snapshot.tdeEncryptionEnabled}}</span>
+  <div>
+
+  <div>
+    <h4 class="lightSubtitle">Retry</h4>
+    <label>Policy</label>: <span>{{snapshot.retry.policy}}</span>
+    <label>delay</label>: <span>{{snapshot.retry.delay.quantity}} {{snapshot.retry.delay.unit}}</span>
+    <label>Attempts</label>: <span>{{snapshot.retry.attempts}}</span>
+  </div>
+  <hr />
+
+  <div>
+    <h4 class="lightSubtitle">Allocation</h4>
+    <div>
+      <label>Max Bandwidth</label>:
+      <span>{{snapshot.allocation.distcpMapBandwidth}} MB</span>
+    </div>
+    <div>
+      <label>Max Map Jobs</label>:
+      <span>{{snapshot.allocation.distcpMaxMaps}}</span>
+    </div>
+  </div>
+
+  <div>
+    <h4 ng-if="snapshot.alerts.length > 0" class="lightSubtitle">Alerts</h4>
+    <span>{{ snapshot.alerts.join() }}</span>
+  </div>
+
+  <hr />
+  <h4 class="lightSubtitle">Access Control List</h4>
+  <div>
+    <label>Owner</label>: <span>{{snapshot.ACL.owner}}</span>
+    <label>Group</label>: <span>{{snapshot.ACL.group}}</span>
+    <label>Permissions</label>: <span>{{snapshot.ACL.permission}}</span>
+  </div>
+
+  <div class="col-xs-24 mt35 pb15px plr0px">
+    <button type="button" class="btn prevBtn"
+            ng-click="goBack()"
+            ng-disabled="buttonSpinners.backShow">
+      Previous <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.backShow" />
+    </button>
+    <div class="pull-right">
+      <a class="btn cnclBtn" ui-sref="main">
+        CANCEL
+      </a>
+      <button class="btn nextBtn"
+              ng-disabled="buttonSpinners.saveShow"
+              ng-click="save()">
+        SAVE <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.saveShow" />
+      </button>
+    </div>
+  </div>
+
+</div>
diff --git a/falcon-ui/app/html/snapshot/snapshotFormTpl.html b/falcon-ui/app/html/snapshot/snapshotFormTpl.html
new file mode 100644
index 0000000..121e82e
--- /dev/null
+++ b/falcon-ui/app/html/snapshot/snapshotFormTpl.html
@@ -0,0 +1,50 @@
+<!--
+/**
+ * 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.
+ */
+-->
+<div id="formBox" class="snapshotForm">
+  <div class="col-xs-24">
+    <div class="formBoxContainer detailsBox">
+      <div class="row snapshotProgressBox" ng-class="{ general:isActive('forms.snapshot.general'),
+                                                 summary:isActive('forms.snapshot.summary')}">
+        <div class="progressBar col-xs-24">
+          <div class="text-center" ng-class="{
+                active:isActive('forms.snapshot.general'),
+                completed:isCompleted('forms.snapshot.general')}">General</div>
+          <div class="text-center" ng-class="{
+                active:isActive('forms.snapshot.summary'),
+                completed:isCompleted('forms.snapshot.summary')}">Summary</div>
+        </div>
+      </div>
+
+      <div class="row customContainer">
+        <div class="col-xs-offset-1 col-xs-22">
+          <fieldset ng-disabled="!editXmlDisabled">
+            <div class="formViewContainer">
+              <div class="col-xs-24">
+                <label class="title">
+                  <span class="entypo cycle icon-lg entypo-align-sub"></span> NEW SNAPSHOT BASED MIRROR</label>
+              </div>
+              <div ui-view></div>
+            </div>
+          </fieldset>
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
diff --git a/falcon-ui/app/html/snapshot/snapshotSummary.html b/falcon-ui/app/html/snapshot/snapshotSummary.html
new file mode 100644
index 0000000..5762680
--- /dev/null
+++ b/falcon-ui/app/html/snapshot/snapshotSummary.html
@@ -0,0 +1,133 @@
+<!--
+/**
+ * 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.
+ */
+-->
+<div id="formSummaryBox" class="summaryBox">
+  <h4>General</h4>
+  <div>
+    <label>Name</label>:
+    <span>{{extension.name}}</span>
+  </div>
+  <div>
+    <label>Type</label> :
+    <span>{{extension.type}}</span>
+  </div>
+  <div>
+    <label>Tags</label>:
+    <div ng-repeat="tag in extension.tags"><span>{{tag.key}}</span> - <span>{{tag.value}}</span></div>
+  </div>
+
+  <div>
+    <h4>Source</h4>
+  </div>
+  <div class="box">
+    <h3>{{extension.source.cluster}}</h3>
+    <div>
+      <label class="locationBox">Source Directory</label>:
+      <span>{{extension.source.directoryPath}}</span>
+    </div>
+    <div>
+      <label>Delete Snapshot After</label>:
+      <span>{{extension.source.deleteFrequency.quantity}} {{extension.source.deleteFrequency.unit}}</span>
+    </div>
+    <div>
+      <label>Keep Last</label>:
+      <span>{{extension.source.retentionNumber}} extensions</span>
+    </div>
+  </div>
+
+  <div>
+    <h4>Target</h4>
+  </div>
+  <div class="box">
+    <h3>{{extension.target.cluster}}</h3>
+    <div>
+      <label class="locationBox">Target Directory</label>:
+      <span>{{extension.target.directoryPath}}</span>
+    </div>
+    <div>
+      <label>Delete Snapshot After</label>:
+      <span>{{extension.target.deleteFrequency.quantity}} {{extension.source.deleteFrequency.unit}}</span>
+    </div>
+    <div>
+      <label>Keep Last</label>:
+      <span>{{extension.target.retentionNumber}} extensions</span>
+    </div>
+  </div>
+
+  <div>
+    <h4 class="lightSubtitle">Run On</h4>
+    <div ng-if="extension.runOn === 'source'"><span>{{extension.source.cluster}}</span></div>
+    <div ng-if="extension.runOn === 'target'"><span>{{extension.target.cluster}}</span></div>
+  </div>
+
+  <hr class="col-xs-24" />
+
+  <div>
+    <h4 class="lightSubtitle">Run Duration</h4>
+    <div><label>Start on</label>: <span>{{extension.validity.start.date|date:'yyyy-MM-dd'}} {{extension.validity.start.time|date:'HH:mm'|date:'HH:mm'}}</span></div>
+    <div><label>End on</label>: <span>{{extension.validity.end.date|date:'yyyy-MM-dd'}} {{extension.validity.end.time|date:'HH:mm'}}</span></div>
+  </div>
+
+  <div>
+    <h4 class="lightSubtitle">Frequency</h4>
+    <div><span>{{extension.frequency.quantity}} {{extension.frequency.unit}}</span></div>
+  </div>
+
+  <div>
+    <h4 class="lightSubtitle">Timezone</h4>
+    <div><span>{{extension.validity.timezone}}</span></div>
+  </div>
+
+  <div>
+    <h4 class="lightSubtitle">TDE Encryption</h4>
+    <span>{{extension.tdeEncryptionEnabled}}</span>
+  <div>
+  <div>
+    <h4 class="lightSubtitle">Retry</h4>
+    <label>Policy</label>: <span>{{extension.retry.policy}}</span>
+    <label>delay</label>: <span>{{extension.retry.delay.quantity}} {{extension.retry.delay.unit}}</span>
+    <label>Attempts</label>: <span>{{extension.retry.attempts}}</span>
+  </div>
+  <hr class="col-xs-24" />
+
+  <div>
+    <h4 class="lightSubtitle">Allocation</h4>
+    <div>
+      <label>Max Bandwidth</label>:
+      <span>{{extension.allocation.distcpMapBandwidth}} MB</span>
+    </div>
+    <div>
+      <label>Max Map Jobs</label>:
+      <span>{{extension.allocation.distcpMaxMaps}}</span>
+    </div>
+  </div>
+
+  <div>
+    <h4 ng-if="extension.alerts.length > 0" class="lightSubtitle">Alerts</h4>
+    <span>{{ extension.alerts.join() }}</span>
+  </div>
+
+  <hr class="col-xs-24" />
+  <h4 class="lightSubtitle">Access Control List</h4>
+  <div>
+    <label>Owner</label>: <span>{{extension.ACL.owner}}</span>
+    <label>Group</label>: <span>{{extension.ACL.group}}</span>
+    <label>Permissions</label>: <span>{{extension.ACL.permission}}</span>
+  </div>
+</div>
diff --git a/falcon-ui/app/index.html b/falcon-ui/app/index.html
index 13fbe35..89ca4a9 100644
--- a/falcon-ui/app/index.html
+++ b/falcon-ui/app/index.html
@@ -18,12 +18,14 @@
  */
 -->
 <!DOCTYPE html>
-<html ng-app="app">
+<html ng-app="app" data-ng-controller="ThemeController">
   <head>
     <title>Falcon Web UI</title>
     <meta charset="utf-8">
     <meta name="viewport" content="user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
-    <link rel="stylesheet" href="css/main.css"/>
+    <link rel="stylesheet" ng-href="css/{{theme}}-theme.css"/>
+    <link rel="stylesheet" href="css/jquery-ui.css">
+
     <link rel="icon" type="image/x-icon"
       href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAKL2lDQ1BJQ0MgUHJvZmlsZQAASMedlndUVNcWh8+9d3qhzTDSGXqTLjCA9C4gHQRRGGYGGMoAwwxNbIioQEQREQFFkKCAAaOhSKyIYiEoqGAPSBBQYjCKqKhkRtZKfHl57+Xl98e939pn73P32XuftS4AJE8fLi8FlgIgmSfgB3o401eFR9Cx/QAGeIABpgAwWempvkHuwUAkLzcXerrICfyL3gwBSPy+ZejpT6eD/0/SrFS+AADIX8TmbE46S8T5Ik7KFKSK7TMipsYkihlGiZkvSlDEcmKOW+Sln30W2VHM7GQeW8TinFPZyWwx94h4e4aQI2LER8QFGVxOpohvi1gzSZjMFfFbcWwyh5kOAIoktgs4rHgRm4iYxA8OdBHxcgBwpLgvOOYLFnCyBOJDuaSkZvO5cfECui5Lj25qbc2ge3IykzgCgaE/k5XI5LPpLinJqUxeNgCLZ/4sGXFt6aIiW5paW1oamhmZflGo/7r4NyXu7SK9CvjcM4jW94ftr/xS6gBgzIpqs+sPW8x+ADq2AiB3/w+b5iEAJEV9a7/xxXlo4nmJFwhSbYyNMzMzjbgclpG4oL/rfzr8DX3xPSPxdr+Xh+7KiWUKkwR0cd1YKUkpQj49PZXJ4tAN/zzE/zjwr/NYGsiJ5fA5PFFEqGjKuLw4Ubt5bK6Am8Kjc3n/qYn/MOxPWpxrkSj1nwA1yghI3aAC5Oc+gKIQARJ5UNz13/vmgw8F4psXpjqxOPefBf37rnCJ+JHOjfsc5xIYTGcJ+RmLa+JrCdCAACQBFcgDFaABdIEhMANWwBY4AjewAviBYBAO1gIWiAfJgA8yQS7YDApAEdgF9oJKUAPqQSNoASdABzgNLoDL4Dq4Ce6AB2AEjIPnYAa8AfMQBGEhMkSB5CFVSAsygMwgBmQPuUE+UCAUDkVDcRAPEkK50BaoCCqFKqFaqBH6FjoFXYCuQgPQPWgUmoJ+hd7DCEyCqbAyrA0bwwzYCfaGg+E1cBycBufA+fBOuAKug4/B7fAF+Dp8Bx6Bn8OzCECICA1RQwwRBuKC+CERSCzCRzYghUg5Uoe0IF1IL3ILGUGmkXcoDIqCoqMMUbYoT1QIioVKQ21AFaMqUUdR7age1C3UKGoG9QlNRiuhDdA2aC/0KnQcOhNdgC5HN6Db0JfQd9Dj6DcYDIaG0cFYYTwx4ZgEzDpMMeYAphVzHjOAGcPMYrFYeawB1g7rh2ViBdgC7H7sMew57CB2HPsWR8Sp4sxw7rgIHA+XhyvHNeHO4gZxE7h5vBReC2+D98Oz8dn4Enw9vgt/Az+OnydIE3QIdoRgQgJhM6GC0EK4RHhIeEUkEtWJ1sQAIpe4iVhBPE68QhwlviPJkPRJLqRIkpC0k3SEdJ50j/SKTCZrkx3JEWQBeSe5kXyR/Jj8VoIiYSThJcGW2ChRJdEuMSjxQhIvqSXpJLlWMkeyXPKk5A3JaSm8lLaUixRTaoNUldQpqWGpWWmKtKm0n3SydLF0k/RV6UkZrIy2jJsMWyZf5rDMRZkxCkLRoLhQWJQtlHrKJco4FUPVoXpRE6hF1G+o/dQZWRnZZbKhslmyVbJnZEdoCE2b5kVLopXQTtCGaO+XKC9xWsJZsmNJy5LBJXNyinKOchy5QrlWuTty7+Xp8m7yifK75TvkHymgFPQVAhQyFQ4qXFKYVqQq2iqyFAsVTyjeV4KV9JUCldYpHVbqU5pVVlH2UE5V3q98UXlahabiqJKgUqZyVmVKlaJqr8pVLVM9p/qMLkt3oifRK+g99Bk1JTVPNaFarVq/2ry6jnqIep56q/ojDYIGQyNWo0yjW2NGU1XTVzNXs1nzvhZei6EVr7VPq1drTltHO0x7m3aH9qSOnI6XTo5Os85DXbKug26abp3ubT2MHkMvUe+A3k19WN9CP16/Sv+GAWxgacA1OGAwsBS91Hopb2nd0mFDkqGTYYZhs+GoEc3IxyjPqMPohbGmcYTxbuNe408mFiZJJvUmD0xlTFeY5pl2mf5qpm/GMqsyu21ONnc332jeaf5ymcEyzrKDy+5aUCx8LbZZdFt8tLSy5Fu2WE5ZaVpFW1VbDTOoDH9GMeOKNdra2Xqj9WnrdzaWNgKbEza/2BraJto22U4u11nOWV6/fMxO3Y5pV2s3Yk+3j7Y/ZD/ioObAdKhzeOKo4ch2bHCccNJzSnA65vTC2cSZ79zmPOdi47Le5bwr4urhWuja7ybjFuJW6fbYXd09zr3ZfcbDwmOdx3lPtKe3527PYS9lL5ZXo9fMCqsV61f0eJO8g7wrvZ/46Pvwfbp8Yd8Vvnt8H67UWslb2eEH/Lz89vg98tfxT/P/PgAT4B9QFfA00DQwN7A3iBIUFdQU9CbYObgk+EGIbogwpDtUMjQytDF0Lsw1rDRsZJXxqvWrrocrhHPDOyOwEaERDRGzq91W7109HmkRWRA5tEZnTdaaq2sV1iatPRMlGcWMOhmNjg6Lbor+wPRj1jFnY7xiqmNmWC6sfaznbEd2GXuKY8cp5UzE2sWWxk7G2cXtiZuKd4gvj5/munAruS8TPBNqEuYS/RKPJC4khSW1JuOSo5NP8WR4ibyeFJWUrJSBVIPUgtSRNJu0vWkzfG9+QzqUvia9U0AV/Uz1CXWFW4WjGfYZVRlvM0MzT2ZJZ/Gy+rL1s3dkT+S453y9DrWOta47Vy13c+7oeqf1tRugDTEbujdqbMzfOL7JY9PRzYTNiZt/yDPJK817vSVsS1e+cv6m/LGtHlubCyQK+AXD22y31WxHbedu799hvmP/jk+F7MJrRSZF5UUfilnF174y/ariq4WdsTv7SyxLDu7C7OLtGtrtsPtoqXRpTunYHt897WX0ssKy13uj9l4tX1Zes4+wT7hvpMKnonO/5v5d+z9UxlfeqXKuaq1Wqt5RPXeAfWDwoOPBlhrlmqKa94e4h+7WetS212nXlR/GHM44/LQ+tL73a8bXjQ0KDUUNH4/wjowcDTza02jV2Nik1FTSDDcLm6eORR67+Y3rN50thi21rbTWouPguPD4s2+jvx064X2i+yTjZMt3Wt9Vt1HaCtuh9uz2mY74jpHO8M6BUytOdXfZdrV9b/T9kdNqp6vOyJ4pOUs4m3924VzOudnzqeenL8RdGOuO6n5wcdXF2z0BPf2XvC9duex++WKvU++5K3ZXTl+1uXrqGuNax3XL6+19Fn1tP1j80NZv2d9+w+pG503rm10DywfODjoMXrjleuvyba/b1++svDMwFDJ0dzhyeOQu++7kvaR7L+9n3J9/sOkh+mHhI6lH5Y+VHtf9qPdj64jlyJlR19G+J0FPHoyxxp7/lP7Th/H8p+Sn5ROqE42TZpOnp9ynbj5b/Wz8eerz+emCn6V/rn6h++K7Xxx/6ZtZNTP+kv9y4dfiV/Kvjrxe9rp71n/28ZvkN/NzhW/l3x59x3jX+z7s/cR85gfsh4qPeh+7Pnl/eriQvLDwG/eE8/s3BCkeAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QoRBwcQl9gdLAAAFKZJREFUeNrtWnl8VuWVft57vy8LoCCrhCVBAgkJYO04rVinFbVacUck7IshZF9YYlgCWQgge8hGQhLZNwHHilW72epo1bZCHQgJSdg3WXREyPZ99z3P/HFvAlqt1VHAmXl/v/vL78td3vc87znPec65F/j/8X97qKs9Yb/EMpgmXf4uf/2XpWP4RdfcmvKcy0tt7V8Z9b8HgPCk1ajImwwA+EHaJpflaeiroAYrqH8D4AZAAPWEvGIp/Wrl8ugL9n1lqMib9P0FIDyhGBUFMc0gPKKglkAh5PLErCXhBWAAMJRSfQCA5CGh+cD+/MjaAQnF2Os843sFQHBCEWoL4hAev2oglHpdKXQgsQtQ60Xkrcqi2A+/MEwSVvc3FZMBToLIzH2Fcc9eeT40Kh9VpYnXNwC3PbMaexZPRmhc4UoFJCmo8g+r/2vyx7+bLZ/xkMQSVORH27E/vRQfLL0c9/1i84OhjBoB/mgQvyfUb6tWxb133XtASGyucWBVioRE5+8DGKQo4VWrU44CQFhMEfYXx33pvQOnlfcSU87sWxxVDwB9o3J7GoY5g4qdQfQA8CMFfABhelVp8svXHQD9IpepyvJp7Bu14ryieudAWcojABAanYeqkqS/u77PpFxVU5bCsISSO5Shtiuo7gAglF/6+7jHvr/s6YsAcP+snb6nLp5PJXC6qb6x0jBkFYiBVBhUUzrl3d4xK3GwOPnaAhA8cYmqXZPKPhOXfqqUsaL6uakZ/WJylbfJYO2aJATHF8Dfx99UUAagoAyFD5ZN8PaZtGKTUhgF4Ncg74RSN0AZZYryMKB+I+QAZaj2IAMB9WZ1acrPAKD35GUdDQt/JLmuds30JX3GL0LNurSvtWbj2zK+54hM1K5JZe8JS97WZEr1c1Mz+k7KNcQC3f72NLWFCdi7IlK37RPO1l0DVasuPe0NUGpaU10dGi5dXOxt8vzWU3epXryeNU0N9S96GurGWh7P0976unu9jY2fNNRfHAIAvZJXwrT4Sc1z0/oTbAyesGRczbo0hKeUXH0P6DV2IQ5vmIle4xZmQKmbDq+bkdJ70nKlRLP2uVQnHa66hSLLDMP4OZRqrZypRaS6ojA2pNvw7P4CvRCG8lFwbTm1NX1t0Jj5/Y9snL3vJwDedubqO34Z6j2XcGJLBvpELoMGcKh8GgInLr6pTbubdMWKqE+vSQj0Gr9oAEWWHNkw8xdB4xapT+vr+PGObIREr+jiaWj8jWm4BkKp9QDeh+J5EAYAAVVHGCqCWp+gwmsH16SuUerrLeuWCctwaO00hKeUJlTkRhWEJ5ehYuV3J54+MwJH5SgA6Dky583PnwsYlXNj4Mh5ZT3GPtvlfzJHWFLZowPiV7X6quv6J5XeF5ZcNvaqe0DgqJwyuF2ZR9fNONFjxCIc32oTUZeR89SZLXMIAD3HLMSxjTO/fPGJJdiXH42whNIQAO0Mhc4EHleKTysoCBApovYY4AVqNijArDjR8SR2Df1MPTEgqfRPe/Oi7uwXX4zKwq9Wj65vTHqjcgDxmjB9A4Xy3vF1M04EjV2IIxsus3Dbzh3YOaXc3JsbqW/o2P6fY2Vl9SaMpwHcrICDJH5JSpBSqtBU8AMA5bJt7h90DkgsOaopiZUFsbtsCS03OOyunPriu8sCx7ZmaWqdcnxzeikAHNkw05Gy5QCA6pVxUErdFJa8+taK3Oi/rxOSr2Bsw8CAxELsy499xWLdCK2xQESqQb4sxOsU+pHynkXebllys1jSV4tMIaW1AfVSeHxxiVNDmLZv85+y4Rt7AAj0GDGvk3K5VrTEauJq7M+fjMqCSPRPKr8NSuYQXFt/ts2u5mt+GvMy3ix+GABQsTIa/aeUdoGg476VURV2tihCRUGcBeAVAK+ExxYNVwpTNPBQVWHcK+GJ5YDhMWi6zlXmReUCyA2LK5oNMCc8vsiPoisAAJZFXK0RllByJRH9y4Ck1bXhSaUtRt+aWvq5CrG818CU8mUDU8o/GTil/O+IITQ6z/4bWxgTGlfIfnH5A1vujS1ouW70oHSExxTZXhdXmBYaV8h+0QUDr2qDIyzOXtCt8Rvd4Yklvw1PLGZ4QtGPv5ily6YPSCk7OjCljANSyhmWVPrTFkkcs8KpI/IUAIROXnlfaEw+Q2Ly4myQV365/I4rtAGLyd8DAP1iCr57w0PiChAWV2AAQFhswcNh8UUMiy862QXpyq79SxUAdHmiSPVPWr1iQHIZBySXXXD+sn9C6UMAEJ5Self/pHJfx/hHr/AChkbnnQKAkJj8r8xWoTH5TgX59Yz/xiSoYBj7ixKkX1xBPoFdpLy1vzCu2xnkcEDyaqMiL4oDkkqf6dTDVUfAf+/KSYqU/wQEFF22ryDqV/1TyqYbUD7K4ICB09a0o2acXQGuTKUItGA+ABwoTvzKeK4qtvsDlasSvnsA+kzOV1VFcRISk/+yaEkg+V5lUcK/hcWvMgGAWrqFJ5acJtl6X97kVhV5k2PCE0umAbiLAs++/OioPtHFvorI3Js76XUI2tFjtQYlxJ5BxpNETWlS4XftyV8bgOCJy1GzOpF9o/O2Q/RDJPZUFSfe0S+2wNxfGKvD41dNAHDQUNZt+/InZ4SnlN4BzIQClioKFPUcAPD1NX9FSoFT+t4tYrWlsGfgzgZQGE6i+mpw2NdKg30il6OmfCr6TFoxg5Y1jAqXaspSfhgSm29UrkrQ4QnFawn+tKIgxgcA+ieXPbcvd9LT4fGr8kiCgLeiIHZx/8SSjgq8l8QCO2XL/XD75aKhHj6vFo8HBQDevO4AqCmfiuDIFb0heqECAGX+EAAOrEqU8Piilyly5/6iuPa2JC1bD2G5IxkSQYLgDtgVUKlBQlHvdX6HKk0fUi5ASwoIKKDqagDwT4fALZFLnfC0fg0t0IKi6rIpNXYaKtpC8qH9nZo6OHo8jtS3782PeiM8rvAZW5ESJJf2inxOgfyFkNhbEH/O9gDeoJTVSwmrIfIDUACF+usKgEPl09ErcukD1Lq3gDi4dnq8owOmKnCEAI8iawpD44o6kVKovd77bWmKp0GCJKqK4nf7+TUOVkI/Cg83P1tEINpzp1bqDyICEYEGjesGgL6Ry22P93gzKAICafbOF4SRWEbKu1VF8bsAwDSMPxCsrCxOOBEaW+JLMIQkQL7t7PYkglCgT4uqJiGaQ9jUWAT7Wigt6roBwOPxuABAUwYJiUPr0hYDAIV/IgmAUQAQGl/4AMhwaD5rG+uZQGf3IdzrGHuv/T+pAYCQ6BU3Otf0M0JCTrIFEN3+ugHgyIYZ3lvGLhohloamTWyhMflzSLQlcahyVdI++2GqhCDE/eFGO73hcWdDQWC3A0B722CEAMCBkimfOrve5WDmcBHyPzQIKnXndcUBQv2oFg1fl88aZ/ezQYGCJNvStfBHFAmkyP7KlVnOyw/eCggBgYDVfaILO5Bw2U4DT0sIiAZFI2RS7sOmy5VNLSDlAQAIGrfo+gCg0eMJBAzUrn/m7b6TV8YTdl636HrD1sYy1Yn1d+3ipqANya7NHgDijAErQEGgICQl8DIABIUUSvahdWm/g8KnlmXhlqeX3XZkfdp14gHaaq0MtcVZ8RyIBii7a1fHX3SYLAJCkNgDAPB6O0I0IFpBNKpXJ1WRdDvG2qh0f6u5tXAaoALltp+vPmG4TPccEvDW1yVf8xAIGrOgeZGBWnvXhSYUdqSwCwkA6iUACI7Ju8NWeoRX0fEI9bOW+OflEsohQJCCkCG773B8oLIZmMPvbBt/eOPMPCp4LJHxANB/3IprB8CRjbPsDRU57u/jf1wam4Y1WyWWtRUADOHwZqMOFiftdUwdiM8jQN3CiCCgLd3H8Z63QYFzLAcAH9M1SWsLgaPnx+5bP+Xah4CCaji8adZ+EQmlsndbUZ2yw0Pf1uLaLXEt/aiI5qNXXK4bMM/Yd1IIQine5zQy/+ikQlJ0u96RS+85ujl9gzJdf2toalzmNGHNawqA28dd7fTRw5UQimhobNvK6+x2SMu2trQM6a+EUAIoIQwvgsXvxjMQCoSECCAyAgBcbv/dDgCaJOi1ygEgoEPHu7SIf8DI7GnHNqfrawpA30EPjHUYW1MIUs4eXxmre8YW+UDYxTaILakNWgIp9FIEFMIQHVabP9GiyHmKkEJSxKdvVG7vA6VJnxCopohBEVLroF7jnx29Z1VCXWv/Vo81NDYu/VnyZr+uT2WpruMWXn0Auo6ch7dSBl0RDQSAOgDw0U0mKYbj/meviBmBgoICoQgRuc1pf/8VoBvKbl1rj9d5e6FSNWhoUGlbCa4HgGObZr/kdrlzK05U/vn09gxePHfq6gNwesucK1xb6mxes4sVNjb5NGcAUrpfqe+dQ5EARIIAQENW2REgSoQgJBEAhsxM26XISxBqkKTWRtDo+dsA4Oz2rCkCnu0SkZF86dV89J645Np1hET4V5vx2VysKJKg2KF9GQD57AEMtic03wV4GSHRvr0nLnmgMExRGa65mmJqUmmCXm0Nv2XMosEA8PHOnPu04P7uoxcMPLgm9doBYJjmYSe1CQBoBWlJc3LF5z9XpkASEAkAgINrpp0neYg2CygSEMubZqfcmSsUYDnSUIEUj9X4OgC0ezzVPL8966Emj8fvmvYED65J3WJXgOhyV+4rhr/LbTsyBUJB36ilHZwQULSHnd4oCJ645EEAME3XaoiYjhcAwsG9Ji7pap9z3y1CJUKK0NBa0C0ia98nLy7RAcOy1LntmX/u/i0S4dcCoM+E5Y7TGyeF0v5sRY2P+LTytmQGIbyadzjK8QJJ8zIPEJZlTQCA2rXPLBKloEGlQWoS9Hp2AsDRTbPeNl2u1XYY2Oe8Wod3i8h66dSODHZ/Kgsn1s+8NgDUrJ0Kpy+QRxJNTY3GgVWxTQCPOHEN5bV+bCth9aGQhoBoPkgZwss88e+QlkqJFA4KHvdscEBElnliy5xoH9N8WyiqmUo92vtIj5HZy05sz0BARPa1CwEAaNWqzToK4QL/1U75rNBCaBKW19vP9hJzd3MrsKUlqKVN8LhFfQHAz+eGWAK2JiKVFhGPZf3+1LYM7bonDie2ZdzlNl1/0iLKbpNR6puapnYbkb3w1La56D4iW10TAIInLkXV6uQzSqm9mhxnKzmfV1rYXikbFK+3yE6NzRxACAlNnQsAB9YknYHCC6QoJ40qLbpn0JgFT1ivF+Hm4Vnq9POZP/Fxu3fYKVMsEWF9U+OMgIjMRSe2zmXn4XONqw5A7Zrpzga7xmuv924AGD44qARQsNO9BI5K+T3atr3pIgDPFRygAGrLsu65b+EuFwDc2KrdeCcjEk4qtSzvCwDw4fMZ7DEqx/xwW+ZTbh/fJ5Rh+AihhJC6Js8zHYfNWX/2+Wy5JiHgtMn2GC7j47DYfL9FEyNA4AMRwhKNdz76y5C9xfEXSbzfXCE4h0nSt7Zi73gAqChLvGSYrgwRKi2AUMHSgu4j570IANrj0Y/NegFnn8988dTOHMPX7d5EEUNE0NTkGdth6Jy/5T1fbQJAtxHZVw+AW8YvRMfHMmAarlENFy/dDABu01UkQlAAj6cpGgB83b4Z1FS27ndqQMKyvN6lzc86vjk92zTMKmkOBZJer/VY4KicYad2ZGPv8SqETFyM4KcyeXZH9phuXbv2cLldiw3TRL2n6db0zWutmyMyHz+5da4t278mQX5jIgmeMB+1a2cDAHqMnIfjW+agy/AMj9babRjGmTPPZ92slEJARNZ5EelwxUwEoHzcPncf2zT7DQCImPmC683aD7xaRAMw7ZJBoWfnTp3+XJh4Pmj0AhzZNAsBI7JxyjEUAALHLHjs/KefDnKbZprL5drtY5hRp7bN3X1VAPii0W1E1rgmj2edUgpul6vfqW2ZVb1Gzp9Q521aA6XYMh8Jl2mePrUtI6BvxCJUb0tDzzGLejQ21h0TinY8UyllnD+3I7vT5+cJGPcs2p47h8pXl322aIvINk5vmyvXBoB7ooDXS9HxyfTzlmV1aOXn/+KpbRlPAEDA8IyTWusA2B9A0gFB+fr6P3hs8+zXuk8owIm1Ceg1dknnS/WfntEiopw60mW69p/ZkRXe6cnZ5rmd87/1nsC39/rpdfs7oNat2jwMw0C9xzO45Q2sr9/DohQ0SUf9KQ3Ao735AKAazwMADm9IPduq9Y3dTdNQIqIEpMfyhHUaNvcvzcb3HLvoOgUAQHDCEhzdMONdH5dPIUXadonI/HGHYXPVsQ0z97hN12KSqqUjRNLr8QYHjp4/5PjWTHQbvQgPvkocXZ968v0F2aZhut4nqQjAo63bOwxNryGJYxvS0H3kvOsTgNqCVASNWajObs9MMAzzhGVZ6z7akc02Q9JwaltGmmkYv7pCHiuCqG9q3AAATY0X1asP2hEZlprGj3bOu93fzy8FUKAmvJYV3H5oel1o5NLeJ7bMgfnAt9Mo/U5eQHYYNtf8aEe2bvv4LHZse0PIwXUzq/1/MRUNry1Hp2Fzq72Wt88VDUTl7+uXdnpbxuIWkhuRA69uwLnt83Hv9DWt/3b4UL6lrYlaCwzDgK+v7/Rzz2cuu24BaB7dxy1sU9/QMPrj7dklPUcvwLFNdou907C57zdZ3h8299YMpVRQ1+7tKw7VXPC8tryFxbuOexan189oeV67oekrSUnyWF64Xe6Pb2rdaujRjelvtGShiGyc3Db3+gCg66gcnN6cbi/8ydn4ZOf8z3nJnDLLa0UC0CRNt8t14KMXckKDxy5RtRtS/+FXYT3HLPjRhbq6DK31YB+321+0TLvBz/fl41vnVgNAj1ELcXzzzGvvAV86Bo0D3lmPbiPnjbtUX79OnE5SK1//hWd2ZM76h1pjVA5OOsACwI1D026EmP3a+rd60ivicbvcG49vmlmF6310Gz1fAcAdc9b6tB+afqD1o2ls/cgzDBiVfR8AdInI+spn9ByZY7Qflu5y/XzKZ16a9Bi9EN+b0fmpDBMAbo7IfKTtE7MutHl0BruNyhnwvTPkm46eoxd85neX4ZlPdBw294OQyLw2V2P+/waCldfgs3UggwAAAABJRU5ErkJggg=="/>
   </head>
@@ -34,11 +36,11 @@
     </section>
 
     <section class="container-fluid">
-      <div class="row mainUIView" ui-view id="mainUIView"></div>
+      <div ng-if="!httpError" class="row mainUIView" ui-view id="mainUIView"></div>
+      <div ng-if="httpError" class="row mainUIView" error-nav id="errorView"></div>
     </section>
 
     <script src="js/vendor.min.js"></script>
     <script src="js/main.min.js"></script>
-
   </body>
 </html>
diff --git a/falcon-ui/app/js/app.js b/falcon-ui/app/js/app.js
index 5ae7eb6..1d781bc 100644
--- a/falcon-ui/app/js/app.js
+++ b/falcon-ui/app/js/app.js
@@ -23,26 +23,36 @@
     'ui.router',
     'ngCookies',
     'ngAnimate',
+    'ngStorage',
     'ngMessages',
     'checklist-model',
     'app.controllers',
     'app.directives',
     'app.services',
     'ngTagsInput',
-    'nsPopover', 'ngAnimate', 'ngMask', 'dateHelper'
+    'nsPopover',
+    'ngMask',
+    'dateHelper',
+    'focus-if',
+	'routeHelper'
   ]);
-
-  app.config(["$stateProvider", "$urlRouterProvider", "$httpProvider", function ($stateProvider, $urlRouterProvider, $httpProvider) {
+  app.constant('APP_CONSTANTS',{
+    enableXSRFHeader : true
+  });
+  app.config(["$stateProvider", "$urlRouterProvider", "$httpProvider", 'APP_CONSTANTS', function ($stateProvider, $urlRouterProvider, $httpProvider, AppConstants) {
 
     $httpProvider.defaults.headers.common['X-CSRF-Token'] = $('meta[name=csrf-token]').attr('content');
 
+    if (AppConstants.enableXSRFHeader ){
+      $httpProvider.defaults.headers.common['X-XSRF-HEADER'] = Math.round(Math.random()*100000);
+    }
     $httpProvider.defaults.headers.common["X-Requested-By"] = 'X-Requested-By';
 
     $urlRouterProvider.otherwise("/");
 
     $stateProvider
       .state('main', {
-        url: '/',
+        url: '/?fromAction',
         templateUrl: 'html/mainTpl.html',
         controller: 'DashboardCtrl'
       })
@@ -61,8 +71,16 @@
         templateUrl: 'html/formsTpl.html'
       })
       .state('forms.cluster', {
+        url : '/cluster?name&action',
         controller: 'ClusterFormCtrl',
-        templateUrl: 'html/cluster/clusterFormTpl.html'
+        templateUrl: 'html/cluster/clusterFormTpl.html',
+        resolve : {
+          ClusterModel : ['$stateParams', 'EntityDetails', function($stateParams, EntityDetails){
+            if($stateParams.name !== null){
+              return EntityDetails.getEntityDefinition("cluster", $stateParams.name);
+            }
+          }]
+        }
       })
       .state('forms.cluster.general', {
         templateUrl: 'html/cluster/clusterFormGeneralStepTpl.html'
@@ -71,12 +89,50 @@
         templateUrl: 'html/cluster/clusterFormSummaryStepTpl.html'
       })
       .state('forms.feed', {
+        url : '/feed?name&action',
         templateUrl: 'html/feed/feedFormTpl.html',
-        controller: 'FeedController'
+        controller: 'FeedController',
+        resolve : {
+          FeedModel : ['$stateParams', 'EntityDetails', 'FileApi','X2jsService', function($stateParams, EntityDetails, FileApi, X2jsService){
+            if($stateParams.action === 'import'){
+              var feedJson = X2jsService.xml_str2json(FileApi.fileRaw);
+              return feedJson;
+            }
+            if($stateParams.name !== null){
+              var modelPromise = EntityDetails.getEntityDefinition("feed", $stateParams.name);
+              return modelPromise.then(function(model){
+                if($stateParams.action === "edit"){
+                  model.edit = true;
+                }else if($stateParams.action === "clone"){
+                  model.clone = true;
+                }
+                return model;
+              });
+            }
+          }],
+          datasourcesList: ['Falcon', function (Falcon) {
+            return Falcon.getEntities('datasource').then(
+              function (response) {
+                return response.data;
+              });
+          }]
+        }
       })
       .state('forms.feed.general', {
         templateUrl: 'html/feed/feedFormGeneralStepTpl.html',
-        controller: 'FeedGeneralInformationController'
+        controller: 'FeedGeneralInformationController',
+        resolve: {
+          clustersList: ['Falcon', function (Falcon) {
+            return Falcon.getEntities('cluster').then(
+              function (response) {
+                return response.data;
+              });
+          }]
+        }
+      })
+      .state('forms.feed.advanced', {
+        templateUrl: 'html/feed/feedFormAdvancedStepTpl.html',
+        controller: 'FeedAdvancedController'
       })
       .state('forms.feed.properties', {
         templateUrl: 'html/feed/feedFormPropertiesStepTpl.html',
@@ -103,33 +159,39 @@
         controller: 'FeedSummaryController'
       })
       .state('forms.process', {
+        url : '/process?name&action',
         templateUrl: 'html/process/processFormTpl.html',
-        controller: 'ProcessRootCtrl'
+        controller: 'ProcessRootCtrl',
+        resolve : {
+          ProcessModel : ['$stateParams', 'EntityDetails', 'FileApi','X2jsService', function($stateParams, EntityDetails, FileApi, X2jsService){
+            if($stateParams.action === 'import'){
+              var processJson = X2jsService.xml_str2json(FileApi.fileRaw);
+              return processJson;
+            }
+            if($stateParams.name !== null){
+              var modelPromise = EntityDetails.getEntityDefinition("process", $stateParams.name);
+              return modelPromise.then(function(model){
+                if($stateParams.action === "edit"){
+                  model.edit = true;
+                }else if($stateParams.action === "clone"){
+                  model.clone = true;
+                }
+                return model;
+              });
+            }
+          }]
+        }
       })
       .state('forms.process.general', {
         templateUrl: 'html/process/processFormGeneralStepTpl.html',
-        controller: 'ProcessGeneralInformationCtrl'
-      })
-      .state('forms.process.properties', {
-        templateUrl: 'html/process/processFormPropertiesStepTpl.html',
-        controller: 'ProcessPropertiesCtrl'
-      })
-      .state('forms.process.clusters', {
-        templateUrl: 'html/process/processFormClustersStepTpl.html',
-        controller: 'ProcessClustersCtrl',
+        controller: 'ProcessGeneralInformationCtrl',
         resolve: {
           clustersList: ['Falcon', function (Falcon) {
             return Falcon.getEntities('cluster').then(
               function (response) {
                 return response.data;
               });
-          }]
-        }
-      })
-      .state('forms.process.io', {
-        templateUrl: 'html/process/processFormInputsAndOutputsStepTpl.html',
-        controller: 'ProcessInputsAndOutputsCtrl',
-        resolve: {
+          }],
           feedsList: ['Falcon', function (Falcon) {
             return Falcon.getEntities('feed').then(
               function (response) {
@@ -138,11 +200,16 @@
           }]
         }
       })
+      .state('forms.process.advanced', {
+        templateUrl: 'html/process/processFormAdvancedStepTpl.html',
+        controller: 'ProcessAdvancedCtrl'
+      })
       .state('forms.process.summary', {
         templateUrl: 'html/process/processFormSummaryStepTpl.html',
         controller: 'ProcessSummaryCtrl'
       })
       .state('entityDetails', {
+        url : '/entity?name&type',
         views: {
           '': {
             controller: 'EntityDetailsCtrl',
@@ -153,10 +220,25 @@
           },
           'processSummary@entityDetails': {
             templateUrl: 'html/process/processSummary.html'
+          },
+          'clusterSummary@entityDetails': {
+            templateUrl: 'html/cluster/clusterSummary.html'
+          },
+          'snapshotSummary@entityDetails': {
+            templateUrl: 'html/snapshot/snapshotSummary.html'
+          },
+          'datasetSummary@entityDetails': {
+            templateUrl: 'html/dataset/datasetSummary.html'
           }
+        },
+        resolve : {
+          entity : ['$stateParams', 'EntityDetails', function($stateParams, EntityDetails){
+            return EntityDetails.getEntityDetails($stateParams.name, $stateParams.type.toLowerCase());
+          }]
         }
       })
       .state('forms.dataset', {
+        url : '/dataset?name&action',
         controller: 'DatasetCtrl',
         templateUrl: 'html/dataset/datasetFormTpl.html',
         resolve: {
@@ -165,6 +247,19 @@
               function (response) {
                 return response.data.entity;
               });
+          }],
+          DatasetModel : ['$stateParams', 'EntityDetails', function($stateParams, EntityDetails){
+            if($stateParams.name !== null){
+              var modelPromise = EntityDetails.getEntityDefinition("process", $stateParams.name);
+              return modelPromise.then(function(model){
+                if($stateParams.action === "edit"){
+                  model.edit = true;
+                }else if($stateParams.action === "clone"){
+                  model.clone = true;
+                }
+                return model;
+              });
+            }
           }]
         }
       })
@@ -174,10 +269,81 @@
       .state('forms.dataset.summary', {
         templateUrl: 'html/dataset/datasetFormSummaryStepTpl.html'
       })
+      .state('forms.snapshot', {
+	url : '/snapshot?name&action',
+	controller: 'SnapshotController',
+	templateUrl: 'html/snapshot/snapshotFormTpl.html',
+	resolve: {
+	  clustersList: ['Falcon', function (Falcon) {
+			return Falcon.getEntities('cluster').then(
+			  function (response) {
+				  return response.data;
+			  });
+	  }],
+	  SnapshotModel : ['$stateParams', 'EntityDetails', function($stateParams, EntityDetails){
+			if ($stateParams.name !== null) {
+			  var modelPromise = EntityDetails.getEntityDefinition("process", $stateParams.name);
+			  return modelPromise.then(function(model){
+				if ($stateParams.action === "edit") {
+				  model.edit = true;
+				} else if($stateParams.action === "clone") {
+				  model.clone = true;
+				}
+				return model;
+			  });
+			}
+		}]
+	}
+      })
+      .state('forms.snapshot.general', {
+        templateUrl: 'html/snapshot/snapshotFormGeneralStepTpl.html'
+      })
+      .state('forms.snapshot.advanced', {
+        templateUrl: 'html/snapshot/snapshotFormAdvancedStepTpl.html'
+      })
+      .state('forms.snapshot.summary', {
+        templateUrl: 'html/snapshot/snapshotFormSummaryStepTpl.html'
+      })
       .state('instanceDetails', {
         templateUrl: 'html/instanceDetails.html',
         controller: 'InstanceDetailsCtrl'
       })
+      .state('forms.datasource', {
+        url : '/datasource?name&action',
+        templateUrl: 'html/datasource/datasourceFormTpl.html',
+        controller: 'DatasourceController',
+        resolve : {
+          DatasourceModel : ['$stateParams', 'EntityDetails', 'FileApi', 'X2jsService', function($stateParams, EntityDetails, FileApi, X2jsService){
+            if($stateParams.action === 'import'){
+              var dataSourceJson = X2jsService.xml_str2json(FileApi.fileRaw);
+              return dataSourceJson;
+            }
+            if($stateParams.name !== null){
+              var modelPromise = EntityDetails.getEntityDefinition("datasource", $stateParams.name);
+              return modelPromise.then(function(model){
+                if($stateParams.action === "edit"){
+                  model.edit = true;
+                } else if($stateParams.action === "clone"){
+                  model.clone = true;
+                }
+                return model;
+              });
+            }
+          }]
+        }
+      })
+      .state('forms.datasource.general', {
+        templateUrl: 'html/datasource/datasourceFormGeneralStepTpl.html',
+        controller: 'DatasourceGeneralInformationController'
+      })
+      .state('forms.datasource.advanced', {
+        templateUrl: 'html/datasource/datasourceFormAdvancedStepTpl.html',
+        controller: 'DatasourceAdvancedController'
+      })
+      .state('forms.datasource.summary', {
+        templateUrl: 'html/datasource/datasourceFormSummaryStepTpl.html',
+        controller: 'DatasourceSummaryController'
+      })
     ;
 
   }]);
@@ -185,6 +351,25 @@
   app.run(['$rootScope', '$state', '$location', '$http', '$stateParams', '$cookieStore', 'SpinnersFlag', 'ServerAPI', '$timeout', '$interval',
     function ($rootScope, $state, $location, $http, $stateParams, $cookieStore, SpinnersFlag, ServerAPI, $timeout, $interval) {
 
+      $rootScope.ambariView = function () {
+        var location_call = $location.absUrl();
+        var index_call = location_call.indexOf("views/");
+        if (index_call !== -1) {
+          return true;
+        } else {
+          return false;
+        }
+      };
+
+      var location = $location.absUrl();
+      var index = location.indexOf("views/");
+      if (index !== -1) {
+        index = index + 6;
+        var path = location.substring(index);
+        var servicePaths = path.split("/");
+        $rootScope.serviceURI = '/api/v1/views/' + servicePaths[0] + '/versions/' + servicePaths[1] + '/instances/' + servicePaths[2] + '/resources/proxy';
+      }
+
       if(!$rootScope.secureModeDefined){
         $rootScope.secureMode = false;
         ServerAPI.clearUser().then(function() {
@@ -196,6 +381,13 @@
                     $rootScope.secureMode = true;
                   }
                 }
+                if (property.key == 'safemode') {
+                  if (property.value == 'true') {
+                    $rootScope.safeMode = true;
+                  } else {
+                    $rootScope.safeMode = false;
+                  }
+                }
               });
             }
             $rootScope.secureModeDefined = true;
@@ -203,25 +395,6 @@
         });
       }
 
-      var location = $location.absUrl();
-      var index = location.indexOf("views/");
-      if (index !== -1) {
-        index = index + 6;
-        var path = location.substring(index);
-        var servicePaths = path.split("/");
-        $rootScope.serviceURI = '/api/v1/views/' + servicePaths[0] + '/versions/' + servicePaths[1] + '/instances/' + servicePaths[2] + '/resources/proxy';
-      }
-
-      $rootScope.ambariView = function () {
-        var location_call = $location.absUrl();
-        var index_call = location_call.indexOf("views/");
-        if (index_call !== -1) {
-          return true;
-        } else {
-          return false;
-        }
-      };
-
       $rootScope.isSecureMode = function () {
         if(!$rootScope.secureModeDefined){
           return false;
@@ -233,14 +406,10 @@
       };
 
       $rootScope.userLogged = function () {
-        if($rootScope.ambariView()){
+        if (angular.isDefined($cookieStore.get('userToken')) && $cookieStore.get('userToken') !== null) {
           return true;
         } else {
-          if (angular.isDefined($cookieStore.get('userToken')) && $cookieStore.get('userToken') !== null) {
-            return true;
-          } else {
-            return false;
-          }
+          return false;
         }
       };
 
@@ -338,4 +507,4 @@
 
     }]);
 
-})();
\ No newline at end of file
+})();
diff --git a/falcon-ui/app/js/controllers/cluster/cluster-module.js b/falcon-ui/app/js/controllers/cluster/cluster-module.js
index d0fdf86..1f54756 100644
--- a/falcon-ui/app/js/controllers/cluster/cluster-module.js
+++ b/falcon-ui/app/js/controllers/cluster/cluster-module.js
@@ -26,19 +26,58 @@
    */
   var clusterModule = angular.module('app.controllers.cluster', [ 'app.services' ]);
 
-  clusterModule.controller('ClusterFormCtrl', [ "$scope", "$interval", "Falcon", "EntityModel", "$state",
-                                                "X2jsService", "ValidationService", "SpinnersFlag", "$timeout", "$rootScope", "$cookieStore",
-                                              function ($scope, $interval, Falcon, EntityModel, $state,
-                                                        X2jsService, validationService, SpinnersFlag, $timeout, $rootScope, $cookieStore) {
+  clusterModule.controller('ClusterFormCtrl', [
+    "$scope", "$interval", "Falcon", "EntityModel", "$state", "FileApi", "X2jsService", "ValidationService",
+    "SpinnersFlag", "$timeout", "$rootScope", "$cookieStore", "$stateParams", "ClusterModel",
+    function ($scope, $interval, Falcon, EntityModel, $state, FileApi, X2jsService, validationService,
+      SpinnersFlag, $timeout, $rootScope, $cookieStore, $stateParams, clusterModel) {
 
-      $scope.clusterEntity = EntityModel;
+      if (clusterModel && $stateParams.action === 'clone') {
+        $scope.cloningMode = true;
+        $scope.editingMode = false;
+        $scope.clusterEntity = { 'clusterModel' : clusterModel };
+        $scope.clusterEntity.clusterModel.name = "";
+      } else if(clusterModel && $stateParams.action === 'edit') {
+        $scope.editingMode = true;
+        $scope.cloningMode = false;
+        $scope.clusterEntity = { 'clusterModel' : clusterModel };
+      } else{
+        $scope.editingMode = false;
+        $scope.cloningMode = false;
+        $scope.clusterEntity = EntityModel;
+      }
+
+      if ($rootScope.secureMode) {
+        $scope.clusterEntity.clusterModel.cluster.properties.property[0]
+          = {_name : 'dfs.namenode.kerberos.principal', _value : 'nn/_HOST@EXAMPLE.COM'}
+      }
+      $scope.$watch("clusterEntity.clusterModel.cluster._name",function(){
+        if ($scope.editingMode) {
+          return;
+        }
+        $scope.clusterEntity.clusterModel.cluster.locations.location.forEach (function(loc, index) {
+          if (loc._name === "staging") {
+            loc._path = "/apps/falcon/"
+              + ($scope.clusterEntity.clusterModel.cluster._name ? $scope.clusterEntity.clusterModel.cluster._name + "/" : "")
+              + "staging";
+          } else if (loc._name === "working") {
+            loc._path = "/apps/falcon/"
+              + ($scope.clusterEntity.clusterModel.cluster._name ? $scope.clusterEntity.clusterModel.cluster._name + "/" : "")
+              + "working";
+          }
+        });
+      });
+
       $scope.xmlPreview = { edit: false };
       $scope.secondStep = false;
 
+      $scope.enableCustomSparkInterface = function() {
+        $scope.customSparkInterfaceEnabled = !$scope.customSparkInterfaceEnabled;
+      }
       function normalizeModel() {
         //------------INTERFACE-----------//
-        var requiredInterfaceFields = ["readonly", "write", "execute", "workflow", "messaging", "registry"],
-          requiredLocationFields = ["staging", "temp", "working", ""],
+        var requiredInterfaceFields = ["readonly", "write", "execute", "workflow", "messaging", "registry", "spark"],
+          requiredLocationFields = ["staging", "temp", "working"],
           modelInterfaceArray = $scope.clusterEntity.clusterModel.cluster.interfaces.interface,
           modelLocationsArray = $scope.clusterEntity.clusterModel.cluster.locations.location;
 
@@ -47,10 +86,12 @@
             if (element._type === requiredField) { requiredInterfaceFields.splice(requiredField, 1); }
           });
         });
-        $scope.registry = { check: true };
+        $scope.registry = { check: false };
+        $scope.spark = { check: false };
+        $scope.customSparkInterfaceEnabled = false;
         requiredInterfaceFields.forEach(function (fieldToPush) {
           var fieldObject = { _type: fieldToPush, _endpoint: "", _version: "" };
-          if (fieldToPush === "registry") { $scope.registry = { check: false }; }
+          //if (fieldToPush === "registry") { $scope.registry = { check: true }; }
           modelInterfaceArray.push(fieldObject);
         });
         //--------------TAGS--------------//
@@ -64,15 +105,17 @@
         //-------------ACL----------------//
         if (!$scope.clusterEntity.clusterModel.cluster.ACL) {
           angular.copy(EntityModel.defaultValues.cluster.cluster.ACL, $scope.clusterEntity.clusterModel.cluster.ACL);
-          $scope.clusterEntity.clusterModel.cluster.ACL._owner = $cookieStore.get('userToken').user;
           /*$scope.clusterEntity.clusterModel.cluster.ACL = {
             _owner: "", _group: "", _permission: ""
           };*/
         }
+        if ($cookieStore.get('userToken') && !$scope.clusterEntity.clusterModel.cluster.ACL._owner) {
+          $scope.clusterEntity.clusterModel.cluster.ACL._owner = $cookieStore.get('userToken').user;
+        }
         //------------Location------------//
         modelLocationsArray.forEach(function(element) {
-          requiredLocationFields.forEach(function(requiredField) {
-            if(element._name === requiredField) { requiredLocationFields.splice(requiredField, 1); }
+          requiredLocationFields.forEach(function(requiredField, index) {
+            if(element._name === requiredField) { requiredLocationFields.splice(index, 1); }
           });
         });
         requiredLocationFields.forEach(function(fieldToPush) {
@@ -87,8 +130,13 @@
       }
 
       function cleanModel() {
+
+         if (!$scope.clusterEntity.clusterModel.cluster._description) {
+          $scope.clusterEntity.clusterModel.cluster._description = '';
+        }
+
         //if registry check is false backups the object and removes it from array
-        if (!$scope.registry.check) {
+        if ($scope.registry && !$scope.registry.check) {
           $scope.clusterEntity.clusterModel.cluster.interfaces.interface.forEach(function(registry, index) {
             if (registry._type === "registry") {
               $scope.backupRegistryObject = $scope.clusterEntity.clusterModel.cluster.interfaces.interface[index];
@@ -96,20 +144,31 @@
             }
           });
         }
+        if ($scope.spark && !$scope.spark.check) {
+          $scope.clusterEntity.clusterModel.cluster.interfaces.interface.forEach(function(spark, index) {
+            if (spark._type === "spark") {
+              $scope.backupSparkObject = $scope.clusterEntity.clusterModel.cluster.interfaces.interface[index];
+              $scope.clusterEntity.clusterModel.cluster.interfaces.interface.splice(index, 1);
+            }
+          });
+        }
         //deletes property empty last object and array if empty
-        var lastOne = $scope.clusterEntity.clusterModel.cluster.properties.property.length - 1;
-        if (
-          $scope.clusterEntity.clusterModel.cluster.properties.property[lastOne]._name === "" ||
-          $scope.clusterEntity.clusterModel.cluster.properties.property[lastOne]._name === undefined ||
-          $scope.clusterEntity.clusterModel.cluster.properties.property[lastOne]._value === "" ||
-          $scope.clusterEntity.clusterModel.cluster.properties.property[lastOne]._value === undefined
-        ) {
+        if($scope.clusterEntity.clusterModel.cluster.properties){
+          var lastOne = $scope.clusterEntity.clusterModel.cluster.properties.property.length - 1;
+          if (
+            $scope.clusterEntity.clusterModel.cluster.properties.property[lastOne]._name === "" ||
+            $scope.clusterEntity.clusterModel.cluster.properties.property[lastOne]._name === undefined ||
+            $scope.clusterEntity.clusterModel.cluster.properties.property[lastOne]._value === "" ||
+            $scope.clusterEntity.clusterModel.cluster.properties.property[lastOne]._value === undefined
+          ) {
 
-          $scope.removeProperty(lastOne);
+            $scope.removeProperty(lastOne);
+          }
+          if ($scope.clusterEntity.clusterModel.cluster.properties.property.length === 0) {
+            delete $scope.clusterEntity.clusterModel.cluster.properties;
+          }
         }
-        if ($scope.clusterEntity.clusterModel.cluster.properties.property.length === 0) {
-          delete $scope.clusterEntity.clusterModel.cluster.properties;
-        }
+
         var lastLocationIndex = $scope.clusterEntity.clusterModel.cluster.locations.location.length - 1;
         if (
           $scope.clusterEntity.clusterModel.cluster.locations.location[lastLocationIndex]._name === "" ||
@@ -161,11 +220,13 @@
 
       $scope.convertTags = function () {
         var result = [];
-        $scope.tagsArray.forEach(function(element) {
-          if(element.key && element.value) {
-            result.push(element.key + "=" + element.value);
-          }
-        });
+        if($scope.tagsArray) {
+          $scope.tagsArray.forEach(function(element) {
+            if(element.key && element.value) {
+              result.push(element.key + "=" + element.value);
+            }
+          });
+        }
         result = result.join(",");
         $scope.clusterEntity.clusterModel.cluster.tags = result;
       };
@@ -188,6 +249,14 @@
           $scope.convertTags();
         }
       };
+       $scope.toggleclick = function () {
+         $('.formBoxContainer').toggleClass('col-xs-14 ');
+         $('.xmlPreviewContainer ').toggleClass('col-xs-10 hide');
+         $('.preview').toggleClass('pullOver pullOverXml');
+         ($('.preview').hasClass('pullOver')) ? $('.preview').find('button').html('Preview XML') : $('.preview').find('button').html('Hide XML');
+         ($($("textarea")[0]).attr("ng-model") == "prettyXml" ) ? $($("textarea")[0]).css("min-height", $(".formBoxContainer").height() - 40 ) : '';
+       };
+
       //-------------------------------------//
       //----------LOCATION-------------------//
 
@@ -219,10 +288,45 @@
           $scope.clusterEntity.clusterModel.cluster.properties.property.splice(index, 1);
         }
       };
-      //--------------------------------------//
+
+      $scope.isActive = function (route) {
+          return route === $state.current.name;
+      };
+
+      $scope.isCompleted = function (route) {
+          return $state.get(route).data && $state.get(route).data.completed;
+      };
+
+      $scope.validateLocations = function(){
+        var stagingLoc;
+        var workingLoc;
+        $scope.clusterEntity.clusterModel.cluster.locations.location.forEach(function(location){
+          if(location._name == "staging"){
+            stagingLoc = location._path;
+          }
+          if(location._name == "working"){
+            workingLoc = location._path;
+          }
+        });
+        if(stagingLoc && workingLoc && stagingLoc == workingLoc){
+          $scope.locationsEqualError = true;
+        }else{
+          $scope.locationsEqualError = false;
+        }
+        return $scope.locationsEqualError;
+      };
+                                                  //--------------------------------------//
       $scope.goSummaryStep = function (formInvalid) {
-        SpinnersFlag.show = true;
-        if (!$scope.validations.nameAvailable || formInvalid) {
+          $state.current.data = $state.current.data || {};
+          $state.current.data.completed = !formInvalid;
+
+          SpinnersFlag.show = true;
+          if($scope.validateLocations()){
+          SpinnersFlag.show = false;
+          return;
+        }
+
+          if (!$scope.validations.nameAvailable || formInvalid) {
           validationService.displayValidations.show = true;
           validationService.displayValidations.nameShow = true;
           SpinnersFlag.show = false;
@@ -236,6 +340,12 @@
         }, 500);
 
       };
+
+      $scope.hideMessage = function (){
+        angular.element('.nameValidationMessage').hide();
+      };
+
+
       $scope.goGeneralStep = function () {
         SpinnersFlag.backShow = true;
         $scope.secondStep = false;
@@ -244,7 +354,15 @@
         $scope.validations.nameAvailable = true;
         if(!$scope.registry.check) {
           //recovers previously deleted registry object
-          $scope.clusterEntity.clusterModel.cluster.interfaces.interface.push($scope.backupRegistryObject);
+          if($scope.backupRegistryObject){
+            $scope.clusterEntity.clusterModel.cluster.interfaces.interface.push($scope.backupRegistryObject);
+          }
+        }
+        if(!$scope.spark.check) {
+          //recovers previously deleted spark object
+          if($scope.backupSparkObject){
+            $scope.clusterEntity.clusterModel.cluster.interfaces.interface.push($scope.backupSparkObject);
+          }
         }
         if(!$scope.clusterEntity.clusterModel.cluster.tags) {
           $scope.clusterEntity.clusterModel.cluster.tags = "";
@@ -261,23 +379,48 @@
         SpinnersFlag.show = true;
         $scope.saveModelBuffer();
         Falcon.logRequest();
-        Falcon.postSubmitEntity($scope.jsonString, "cluster").success(function (response) {
-           $scope.skipUndo = true;
-           Falcon.logResponse('success', response, false);
-           $state.go('main');
-         }).error(function (err) {
-           SpinnersFlag.show = false;
-           Falcon.logResponse('error', err, false);
-           angular.element('body, html').animate({scrollTop: 0}, 300);
-         });
+        if($scope.editingMode) {
+          Falcon.postUpdateEntity($scope.jsonString, "cluster", $scope.clusterEntity.clusterModel.cluster._name)
+            .success(function (response) {
+              $scope.skipUndo = true;
+              Falcon.logResponse('success', response, false);
+              $state.go('main');
+            })
+            .error(function(err) {
+              SpinnersFlag.show = false;
+              Falcon.logResponse('error', err, false);
+              angular.element('body, html').animate({scrollTop: 0}, 300);
+            });
+        } else {
+          Falcon.postSubmitEntity($scope.jsonString, "cluster")
+            .success(function (response) {
+              $scope.skipUndo = true;
+              Falcon.logResponse('success', response, false);
+              $state.go('main');
+            })
+            .error(function(err) {
+              SpinnersFlag.show = false;
+              Falcon.logResponse('error', err, false);
+              angular.element('body, html').animate({scrollTop: 0}, 300);
+            });
+        }
       };
 
       //--------------------------------------//
       //----------XML preview-----------------//
 
       $scope.xmlPreview.editXML = function () {
-        $scope.xmlPreview.edit = !$scope.xmlPreview.edit;
+          $scope.xmlPreview.edit = !$scope.xmlPreview.edit;
       };
+
+      $scope.revertXml = function() {
+        if($scope.clusterEntity.clusterModel.cluster.tags !== undefined) {
+            $scope.convertTags();
+        }
+        $scope.showInPreview();
+        $scope.invalidXml = false;
+      };
+
       $scope.showInPreview = function() {
         var xmlStr = X2jsService.json2xml_str(angular.copy($scope.clusterEntity.clusterModel));
         $scope.prettyXml = X2jsService.prettifyXml(xmlStr);
@@ -290,6 +433,7 @@
 
           if (!xmlObj.cluster.ACL || !xmlObj.cluster.ACL._owner || !xmlObj.cluster.ACL._group || !xmlObj.cluster.ACL._permission) {
             xmlObj.cluster.ACL = angular.copy(EntityModel.defaultValues.cluster.cluster.ACL);
+            xmlObj.cluster.ACL._owner = EntityModel.getUserNameFromCookie();
           }
 
           $scope.arrangeFieldsOrder(xmlObj);
@@ -297,8 +441,10 @@
           if($scope.clusterEntity.clusterModel.cluster.properties && $scope.clusterEntity.clusterModel.cluster.properties.property[0] === '') {
             $scope.clusterEntity.clusterModel.cluster.properties.property=[];
           }
+          $scope.invalidXml = false;
         }
         catch(err) {
+          $scope.invalidXml = true;
           console.log('xml malformed');
         }
 
@@ -310,9 +456,6 @@
         $scope.jsonString = X2jsService.json2xml_str($scope.jsonString);
       };
       function xmlPreviewCallback() {
-        if ($state.current.name !== 'forms.cluster.general' && $state.current.name !== 'forms.cluster.summary') {
-          $interval.cancel(refresher);
-        }
         if(!$scope.xmlPreview.edit) {
           if($scope.clusterEntity.clusterModel.cluster.tags !== undefined) { $scope.convertTags(); }
           $scope.showInPreview();
@@ -322,7 +465,9 @@
           $scope.transformBack();
         }
       }
-      var refresher = $interval(xmlPreviewCallback, 1000);
+      $scope.$watch('clusterEntity.clusterModel.cluster', xmlPreviewCallback, true);
+      $scope.$watch('tagsArray', xmlPreviewCallback, true);
+      $scope.$watch('prettyXml', xmlPreviewCallback, true);
 
       $scope.skipUndo = false;
       $scope.$on('$destroy', function () {
@@ -338,17 +483,29 @@
         model = angular.toJson(model);
 
         if (!$scope.skipUndo && !angular.equals(model, defaultModel)) {
-          $interval.cancel(refresher);
           $scope.$parent.cancel('cluster', $rootScope.previousState);
         }
       });
 
       //------------init------------//
-      normalizeModel();
+      if($state.params && $state.params.action === 'import'){
+          $scope.prettyXml = FileApi.fileRaw;
+          $scope.transformBack();
+      }else{
+        normalizeModel();
+      }
+      if($state.current.name !=="forms.cluster.general"){
+        $state.go("forms.cluster.general");
+      }
+
+      $scope.capitalize = function(input) {
+          return input ? input.charAt(0).toUpperCase() + input.slice(1) : "";
+      };
+
+      $scope.upperCase = function(input) {
+          return input ? input.toUpperCase() : "";
+      };
+
     }
   ]);
 })();
-
-
-
-
diff --git a/falcon-ui/app/js/controllers/controllers.js b/falcon-ui/app/js/controllers/controllers.js
index 4867851..869e055 100644
--- a/falcon-ui/app/js/controllers/controllers.js
+++ b/falcon-ui/app/js/controllers/controllers.js
@@ -19,6 +19,7 @@
   'use strict';
 
   angular.module('app.controllers', [
+                                      'app.controllers.theme',
                                       'app.controllers.login',
                                       'app.controllers.navHeader',
                                       'app.controllers.rootCtrl',
@@ -29,7 +30,9 @@
                                       'app.controllers.process',
                                       'app.controllers.entity',
                                       'app.controllers.instance',
-                                      'app.controllers.dataset'
+                                      'app.controllers.dataset',
+                                      'app.controllers.snapshot',
+                                      'app.controllers.datasource'
                                     ]);
 
 })();
diff --git a/falcon-ui/app/js/controllers/dashboard-controller.js b/falcon-ui/app/js/controllers/dashboard-controller.js
index 7a8d1b4..66e3aa9 100644
--- a/falcon-ui/app/js/controllers/dashboard-controller.js
+++ b/falcon-ui/app/js/controllers/dashboard-controller.js
@@ -20,11 +20,29 @@
 
   var dashboardCtrlModule = angular.module('app.controllers.dashboardCtrl', ['app.services']);
 
-  dashboardCtrlModule.controller('DashboardCtrl', [ "$scope", "Falcon", "EntityModel", "FileApi", "$state", "X2jsService",
-      "$timeout", function ($scope, Falcon, EntityModel, FileApi, $state, X2jsService, $timeout) {
+  dashboardCtrlModule.controller('DashboardCtrl', [ "$scope", "$q", "Falcon", "EntityFalcon", "EntityModel",
+    "EntityScheduler", "FileApi", "$state", "X2jsService", "$timeout", "ServerAPI",
+    function ($scope, $q, Falcon, EntityFalcon, EntityModel,
+      EntityScheduler, FileApi, $state, X2jsService, $timeout, ServerAPI) {
 
-      $scope.$parent.refreshList();
+      ServerAPI.getRuntimeConfig(EntityModel.getUserNameFromCookie());
 
+      if(!($state.params && $state.params.fromAction === 'listEntities')){
+        $scope.$parent.refreshList($scope.tags);
+      }
+      var searchPromise = $scope.$parent.goPage(1, 'list');
+      searchPromise.then(function(){
+        if($scope.$parent.searchList.length > 0){
+          return;
+        }
+        EntityFalcon.searchEntities('', '', 'cluster', 0).then(function(){
+          if(EntityFalcon.data !== null && EntityFalcon.data.entity && EntityFalcon.data.entity.length >0){
+            $scope.$parent.hasClusters = true;
+          }else{
+            $scope.$parent.hasClusters = false;
+          }
+        });
+      });
       $timeout(function() {
         angular.element('#nsPopover').trigger('click');
       }, 1000);
@@ -33,77 +51,24 @@
         $scope.$parent.refreshList($scope.tags);
       };
 
+      $scope.backToListing = function(type){
+        if($scope.tags && $scope.tags.length > 0){
+          $scope.$parent.refreshList($scope.tags);
+        }else if(type === 'cluster'){
+          $scope.$parent.goPage($scope.$parent.currentPage, 'cluster');
+        }else{
+          $scope.$parent.goPage($scope.$parent.currentPage, 'list');
+        }
+      }
+
       $scope.deleteEntity = function (type, name) {
-        type = type.toLowerCase(); //new sandbox returns uppercase type
-        Falcon.logRequest();
-        Falcon.deleteEntity(type, name)
-          .success(function (data) {
-            Falcon.logResponse('success', data, type);
-            $scope.$parent.refreshList($scope.tags);
-          })
-          .error(function (err) {
-
-            Falcon.logResponse('error', err, type);
-          });
-      };
-      $scope.cloneEntity = function (type, name) {
-        type = type.toLowerCase(); //new sandbox returns uppercase type
-
-        Falcon.logRequest();
-        Falcon.getEntityDefinition(type, name)
-          .success(function (data) {
-            Falcon.logResponse('success', data, false, true);
-            var modelName = type + "Model",
-                entityModel = X2jsService.xml_str2json(data);
-
-            if (entityModel.process && entityModel.process.tags && entityModel.process.tags.search('_falcon_mirroring_type') !== -1) {
-
-              entityModel.process.name = "";
-              EntityModel.datasetModel.toImportModel = entityModel;
-              $scope.$parent.cloningMode = true;
-              $state.go('forms.dataset.general');
-
-            } else {
-              EntityModel[modelName] = entityModel;
-              EntityModel[modelName][type]._name = "";
-              $scope.models[modelName] = angular.copy(entityModel);
-              $scope.cloningMode = true; // dont know utility of this
-              $scope.$parent.cloningMode = true;
-              $state.go('forms.' + type + ".general");
+        EntityScheduler.deleteEntity(type, name).then(function(status){
+            if(status === "DELETED"){
+              $scope.backToListing(type);
             }
-          })
-          .error(function (err) {
-            Falcon.logResponse('error', err, false, true);
-          });
+        });
       };
-      $scope.editEntity = function (type, name) {
-        type = type.toLowerCase(); //new sandbox returns uppercase type
 
-        Falcon.logRequest();
-        Falcon.getEntityDefinition(type, name)
-          .success(function (data) {
-            Falcon.logResponse('success', data, false, true);
-            var entityModel = X2jsService.xml_str2json(data);
-            var modelName = type + "Model";
-
-            if (entityModel.process && entityModel.process.tags.search('_falcon_mirroring_type') !== -1) {
-
-              EntityModel.datasetModel.toImportModel = entityModel;
-              $scope.$parent.cloningMode = false;
-              $state.go('forms.dataset.general');
-
-            } else {
-              EntityModel[modelName] = entityModel;
-              $scope.models[modelName] = angular.copy(entityModel);
-              $scope.editingMode = true;// dont know utility of this
-              $scope.$parent.cloningMode = false;
-              $state.go('forms.' + type + ".general");
-            }
-          })
-          .error(function (err) {
-            Falcon.logResponse('error', err, false, true);
-          });
-      };
       //-----------------------------------------//
       $scope.entityDefinition = function (name, type) {
 
@@ -125,37 +90,27 @@
       };
       //----------------------------------------//
       $scope.resumeEntity = function (type, name) {
-        Falcon.logRequest();
-        Falcon.postResumeEntity(type, name).success(function (data) {
-          Falcon.logResponse('success', data, type);
-          $scope.$parent.refreshList($scope.tags);
-        })
-        .error(function (err) {
-          Falcon.logResponse('error', err, type);
+        EntityScheduler.resumeEntity(type, name).then(function(status){
+          if(status === "RUNNING"){
+            $scope.backToListing(type);
+          }
         });
       };
+
       $scope.scheduleEntity = function (type, name) {
-        Falcon.logRequest();
-        Falcon.postScheduleEntity(type, name).success(function (data) {
-          Falcon.logResponse('success', data, type);
-          $scope.$parent.refreshList($scope.tags);
-        })
-        .error(function (err) {
-          Falcon.logResponse('error', err, type);
+        EntityScheduler.scheduleEntity(type, name).then(function(status){
+          if(status === "RUNNING"){
+            $scope.backToListing(type);
+          }
         });
       };
 
       $scope.suspendEntity = function (type, name) {
-        Falcon.logRequest();
-        Falcon.postSuspendEntity(type, name)
-          .success(function (message) {
-            Falcon.logResponse('success', message, type);
-              $scope.$parent.refreshList($scope.tags);
-          })
-          .error(function (err) {
-            Falcon.logResponse('error', err, type);
-
-          });
+        EntityScheduler.suspendEntity(type, name).then(function(status){
+          if(status === "SUSPENDED"){
+            $scope.backToListing(type);
+          }
+        });
       };
 
       $scope.loadTags = function(query) {
@@ -196,18 +151,21 @@
         type = type.toLowerCase(); //new sandbox returns uppercase type
 
         Falcon.logRequest();
-        Falcon.getEntityDefinition(type, name)
-            .success(function (data) {
-              Falcon.logResponse('success', data, false, true);
-              var entityModel = X2jsService.xml_str2json(data);
+        var entityDetailsPromise = Falcon.getEntityDefinition(type, name);
+        var entityStatusPromise = Falcon.getEntityStatus(type, name);
+        $q.all([entityDetailsPromise,entityStatusPromise]).then(function(responses){
+              Falcon.logResponse('success', responses[0].data, false, true);
+              Falcon.logResponse('success', responses[1].data, false, true);
+              var entityModel = X2jsService.xml_str2json(responses[0].data);
               EntityModel.type = type;
               EntityModel.name = name;
+              var status = responses[1].data.message;
+              EntityModel.status = status.substr(status.indexOf("/") + 1, status.length - 1).trim();
               EntityModel.model = entityModel;
               $state.go('entityDetails');
-            })
-            .error(function (err) {
-              Falcon.logResponse('error', err, false, true);
-            });
+        },function(err){
+              Falcon.logResponse('error', err, type);
+        });
       };
 
       $scope.clearTags = function(){
@@ -217,4 +175,4 @@
 
     }]);
 
-})();
\ No newline at end of file
+})();
diff --git a/falcon-ui/app/js/controllers/dataset/dataset-controller.js b/falcon-ui/app/js/controllers/dataset/dataset-controller.js
index a28cd77..2dafbe0 100644
--- a/falcon-ui/app/js/controllers/dataset/dataset-controller.js
+++ b/falcon-ui/app/js/controllers/dataset/dataset-controller.js
@@ -21,20 +21,47 @@
   var datasetModule = angular.module('app.controllers.dataset', [ 'app.services' ]);
 
   datasetModule.controller('DatasetCtrl', [
-    "$scope", "$interval", "Falcon", "EntityModel", "$state", "X2jsService", "DateHelper",
-    "ValidationService", "SpinnersFlag", "$timeout", "$rootScope", "clustersList", "$cookieStore",
-    function ($scope, $interval, Falcon, EntityModel, $state, X2jsService, DateHelper,
-              validationService, SpinnersFlag, $timeout, $rootScope, clustersList, $cookieStore) {
+    "$scope", "$interval", "Falcon", "EntityModel", "$state", "X2jsService", "DateHelper", "RouteHelper",
+    "ValidationService", "SpinnersFlag", "$timeout", "$rootScope", "clustersList", "$cookieStore", "DatasetModel",
+    "ExtensionSerializer",
+    function ($scope, $interval, Falcon, EntityModel, $state, X2jsService, DateHelper, RouteHelper,
+              validationService, SpinnersFlag, $timeout, $rootScope, clustersList, $cookieStore, datasetModel,
+              extensionSerializer) {
 
+      var stateMatrix = {
+        general : {previous : '', next : 'summary'},
+        summary : {previous : 'general', next : ''}
+      };
 
       $scope.skipUndo = false;
+      $scope.secureMode = $rootScope.secureMode;
+      $scope.clusterErrorMessage = '';
       $scope.$on('$destroy', function () {
 
         if (!$scope.skipUndo && !angular.equals($scope.UIModel, EntityModel.defaultValues.MirrorUIModel)) {
+          if($scope.clone){
+            EntityModel.datasetModel.UIModel.clone = true;
+          }
+          if($scope.editingMode){
+            EntityModel.datasetModel.UIModel.edit = true;
+          }
           $scope.$parent.cancel('dataset', $rootScope.previousState);
         }
       });
 
+      $scope.isFrequencyValid = true;
+      $scope.checkMininumFrequency = function(quantity, unit, field) {
+        $scope.isFrequencyValid = quantity ? true : false;
+        if (quantity && unit === 'minutes') {
+          $scope.isFrequencyValid = validationService.checkMininum(quantity);
+        } else if (unit !== 'minutes' && quantity && parseInt(quantity) === 0) {
+          $scope.isFrequencyValid = false;
+        }
+        if (field) {
+          field.$setValidity('required', $scope.isFrequencyValid);
+        }
+      };
+
       $scope.isActive = function (route) {
         return route === $state.current.name;
       };
@@ -43,8 +70,6 @@
         return $state.get(route).data && $state.get(route).data.completed;
       };
 
-      $scope.clone = $scope.$parent.cloningMode;
-
       if (!clustersList) {
         $scope.clustersList = [];
       } else if (clustersList.type) { // is an object
@@ -55,23 +80,33 @@
 
       $scope.switchModel = function (type) {
         $scope.model = EntityModel.datasetModel[type].process;
-        $scope.UIModel.formType = type;
+        $scope.UIModel.type = type;
         $scope.completeModel = EntityModel.datasetModel[type];
-        switchTag(type);
         checkClusters();
       };
       $scope.model = EntityModel.datasetModel.HDFS.process;
       $scope.UIModel = EntityModel.datasetModel.UIModel;
       $scope.completeModel = EntityModel.datasetModel.HDFS;
 
-      $scope.UIModel.acl.owner = $cookieStore.get('userToken').user;
+      if($scope.UIModel.clone === true || (datasetModel && datasetModel.clone === true)){
+        $scope.clone = true;
+        $scope.editingMode = false;
+      }else if($scope.UIModel.edit === true || (datasetModel && datasetModel.edit === true)){
+        $scope.editingMode = true;
+        $scope.clone = false;
+      }else{
+        $scope.editingMode = false;
+        $scope.clone = false;
+      }
+
+      $scope.UIModel.ACL.owner = $cookieStore.get('userToken').user;
 
       //-------------------------//
       function checkClusters() {
-        if ($scope.UIModel.source.cluster && $scope.UIModel.formType === 'HIVE') {
+        if ($scope.UIModel.source.cluster && $scope.UIModel.type === 'HIVE') {
           $scope.getSourceDefinition();
         }
-        if ($scope.UIModel.target.cluster && $scope.UIModel.formType === 'HIVE') {
+        if ($scope.UIModel.target.cluster && $scope.UIModel.type === 'HIVE') {
           $scope.getTargetDefinition();
         }
       }
@@ -89,51 +124,24 @@
       };
       //----------------TAGS---------------------//
       $scope.addTag = function () {
-        if ($scope.UIModel.tags.newTag.value === "_falcon_mirroring_type") {
-          return;
-        }
-        $scope.UIModel.tags.tagsArray.push($scope.UIModel.tags.newTag);
-        $scope.UIModel.tags.newTag = {value: "", key: ""};
-        $scope.convertTags();
+        $scope.UIModel.tags.push({key: null, value: null});
       };
       $scope.removeTag = function (index) {
-        $scope.UIModel.tags.tagsArray.splice(index, 1);
-        $scope.convertTags();
-      };
-      function switchTag (type) {
-        $scope.UIModel.tags.tagsArray.forEach(function (item) {
-          if (item.key === "_falcon_mirroring_type") {
-            item.value = type;
-          }
-        });
-      }
-      $scope.convertTags = function () {
-        var result = [];
-        $scope.UIModel.tags.tagsArray.forEach(function (element) {
-          if (element.key && element.value) {
-            result.push(element.key + "=" + element.value);
-          }
-        });
-        result = result.join(",");
-        $scope.UIModel.tags.tagsString = result;
-      };
-      $scope.splitTags = function () {
-        $scope.UIModel.tags.tagsArray = [];
-        $scope.UIModel.tags.tagsString.split(",").forEach(function (fieldToSplit) {
-          var splittedString = fieldToSplit.split("=");
-          $scope.UIModel.tags.tagsArray.push({key: splittedString[0], value: splittedString[1]});
-        });
+        if (index >= 0 && $scope.UIModel.tags.length > 1) {
+          $scope.UIModel.tags.splice(index, 1);
+        }
       };
       //----------- Alerts -----------//
       $scope.addAlert = function () {
-        $scope.UIModel.alerts.alertsArray.push($scope.UIModel.alerts.alert.email);
-        $scope.UIModel.alerts.alert = {email: ""};
+        $scope.UIModel.alerts.push($scope.UIModel.alert.email);
+        $scope.UIModel.alert = {email: ""};
       };
       $scope.removeAlert = function (index) {
-        $scope.UIModel.alerts.alertsArray.splice(index, 1);
+        $scope.UIModel.alerts.splice(index, 1);
       };
+
       //----------------- DATE INPUTS -------------------//
-      $scope.dateFormat = 'MM/dd/yyyy';
+      $scope.dateFormat = DateHelper.getLocaleDateFormat();
 
       $scope.openStartDatePicker = function ($event) {
         $event.preventDefault();
@@ -148,21 +156,21 @@
 
       $scope.constructDate = function () {
 
-        if ($scope.UIModel.validity.start && $scope.UIModel.validity.end && $scope.UIModel.validity.startTime && $scope.UIModel.validity.endTime) {
-          $scope.UIModel.validity.startISO = DateHelper.createISO($scope.UIModel.validity.start, $scope.UIModel.validity.startTime, $scope.UIModel.validity.tz);
-          $scope.UIModel.validity.endISO = DateHelper.createISO($scope.UIModel.validity.end, $scope.UIModel.validity.endTime, $scope.UIModel.validity.tz);
+        if ($scope.UIModel.validity.start.date && $scope.UIModel.validity.end.date && $scope.UIModel.validity.start.time && $scope.UIModel.validity.end.time) {
+          $scope.UIModel.validity.startISO = DateHelper.createISO($scope.UIModel.validity.start.date, $scope.UIModel.validity.start.time, $scope.UIModel.validity.timezone);
+          $scope.UIModel.validity.endISO = DateHelper.createISO($scope.UIModel.validity.end.date, $scope.UIModel.validity.end.time, $scope.UIModel.validity.timezone);
         }
 
       };
       $scope.$watch(function () {
-        return $scope.UIModel.validity.tz;
+        return $scope.UIModel.validity.timezone;
       }, function () {
         return $scope.constructDate();
       });
 
       //-------------------------------------//
 
-      $scope.goNext = function (formInvalid, stateName) {
+      $scope.goNext = function (formInvalid) {
         $state.current.data = $state.current.data || {};
         $state.current.data.completed = !formInvalid;
 
@@ -171,22 +179,25 @@
           validationService.displayValidations.show = true;
           validationService.displayValidations.nameShow = true;
           SpinnersFlag.show = false;
-          angular.element('body, html').animate({scrollTop: 0}, 500);
           return;
         }
+
+        if ($scope.clusterErrorMessage !== '') {
+          SpinnersFlag.show = false;
+          return;
+        }
+
         validationService.displayValidations.show = false;
         validationService.displayValidations.nameShow = false;
-        $scope.convertTags();
-        createXML();
-        $state.go(stateName);
+        $state.go(RouteHelper.getNextState($state.current.name, stateMatrix));
         angular.element('body, html').animate({scrollTop: 0}, 500);
       };
 
-      $scope.goBack = function (stateName) {
+      $scope.goBack = function () {
         SpinnersFlag.backShow = true;
         validationService.displayValidations.show = false;
         validationService.displayValidations.nameShow = false;
-        $state.go(stateName);
+        $state.go(RouteHelper.getPreviousState($state.current.name, stateMatrix));
         angular.element('body, html').animate({scrollTop: 0}, 500);
       };
 
@@ -197,34 +208,49 @@
         Falcon.getEntityDefinition("cluster", $scope.UIModel.source.cluster)
           .success(function (data) {
             $scope.sourceClusterModel = X2jsService.xml_str2json(data);
-            if (!EntityModel.datasetModel.UIModel.hiveOptions.source.stagingPath && EntityModel.datasetModel.UIModel.formType === 'HIVE') {
-              EntityModel.datasetModel.UIModel.hiveOptions.source.stagingPath = findLocation($scope.sourceClusterModel.cluster.locations.location, 'staging');
+            if (EntityModel.datasetModel.UIModel.type === 'HIVE') {
+              EntityModel.datasetModel.UIModel.hiveOptions.source.stagingPath
+                = findLocation($scope.sourceClusterModel.cluster.locations.location, 'staging');
+              EntityModel.datasetModel.UIModel.hiveOptions.source.hiveServerToEndpoint
+                = replaceHive(findInterface($scope.sourceClusterModel.cluster.interfaces.interface, 'registry'));
             }
-            if (!EntityModel.datasetModel.UIModel.hiveOptions.source.hiveServerToEndpoint && EntityModel.datasetModel.UIModel.formType === 'HIVE') {
-              EntityModel.datasetModel.UIModel.hiveOptions.source.hiveServerToEndpoint = replaceHive(findInterface($scope.sourceClusterModel.cluster.interfaces.interface, 'registry'));
-            }
-
           })
           .error(function (err) {
             $scope.UIModel.source.cluster = "";
             Falcon.logResponse('error', err, false, true);
           });
+
+          if ($scope.UIModel.source.cluster === $scope.UIModel.target.cluster) {
+            $scope.clusterErrorMessage = 'Target cannot be the same as the Source';
+          } else {
+            $scope.clusterErrorMessage = '';
+            return;
+          }
       };
       $scope.getTargetDefinition = function () {
         Falcon.getEntityDefinition("cluster", $scope.UIModel.target.cluster)
           .success(function (data) {
             $scope.targetClusterModel = X2jsService.xml_str2json(data);
-            if (!EntityModel.datasetModel.UIModel.hiveOptions.target.stagingPath && EntityModel.datasetModel.UIModel.formType === 'HIVE') {
-              EntityModel.datasetModel.UIModel.hiveOptions.target.stagingPath = findLocation($scope.targetClusterModel.cluster.locations.location, 'staging');
+            if (EntityModel.datasetModel.UIModel.type === 'HIVE') {
+              EntityModel.datasetModel.UIModel.hiveOptions.target.stagingPath
+                = findLocation($scope.targetClusterModel.cluster.locations.location, 'staging');
             }
-            if (!EntityModel.datasetModel.UIModel.hiveOptions.target.hiveServerToEndpoint && EntityModel.datasetModel.UIModel.formType === 'HIVE') {
-              EntityModel.datasetModel.UIModel.hiveOptions.target.hiveServerToEndpoint = replaceHive(findInterface($scope.targetClusterModel.cluster.interfaces.interface, 'registry'));
+            if (EntityModel.datasetModel.UIModel.type === 'HIVE') {
+              EntityModel.datasetModel.UIModel.hiveOptions.target.hiveServerToEndpoint
+                = replaceHive(findInterface($scope.targetClusterModel.cluster.interfaces.interface, 'registry'));
             }
           })
           .error(function (err) {
             $scope.UIModel.target.cluster = "";
             Falcon.logResponse('error', err, false, true);
           });
+
+          if ($scope.UIModel.source.cluster === $scope.UIModel.target.cluster) {
+            $scope.clusterErrorMessage = 'Target cannot be the same as the Source';
+          } else {
+            $scope.clusterErrorMessage = '';
+            return;
+          }
       };
 
       function findLocation (array, locationString) {
@@ -254,177 +280,13 @@
         }
       }
 
-      function createXML() {
-        $scope.model._name = $scope.UIModel.name;
-        $scope.model.tags = $scope.UIModel.tags.tagsString;
-        $scope.model.retry._policy = $scope.UIModel.retry.policy;
-        $scope.model.retry._delay = $scope.UIModel.retry.delay.unit + '(' + $scope.UIModel.retry.delay.number + ')';
-        $scope.model.retry._attempts = $scope.UIModel.retry.attempts;
-        $scope.model.ACL._owner = $scope.UIModel.acl.owner;
-        $scope.model.ACL._group = $scope.UIModel.acl.group;
-        $scope.model.ACL._permission = $scope.UIModel.acl.permissions;
-        $scope.model.frequency = $scope.UIModel.frequency.unit + '(' + $scope.UIModel.frequency.number + ')';
-        $scope.model.clusters.cluster[0].validity._start = $scope.UIModel.validity.startISO;
-        $scope.model.clusters.cluster[0].validity._end = $scope.UIModel.validity.endISO;
-        $scope.model.timezone = $scope.UIModel.validity.tz;
-        if ($scope.UIModel.formType === 'HDFS') {
-
-          if ($scope.UIModel.runOn === "source") {
-            $scope.model.clusters.cluster[0]._name = $scope.UIModel.source.cluster;
-          } else {
-            $scope.model.clusters.cluster[0]._name = $scope.UIModel.target.cluster;
-          }
-
-          $scope.model.workflow._name = $scope.UIModel.name + '-WF';
-
-          $scope.model.properties.property.forEach(function (item) {
-            if (item._name === 'distcpMaxMaps') {
-              item._value = $scope.UIModel.allocation.hdfs.maxMaps;
-            }
-            if (item._name === 'distcpMapBandwidth') {
-              item._value = $scope.UIModel.allocation.hdfs.maxBandwidth;
-            }
-            if (item._name === 'drSourceDir') {
-              item._value = $scope.UIModel.source.path;
-            }
-            if (item._name === 'drTargetDir') {
-              item._value = $scope.UIModel.target.path;
-            }
-            if (item._name === 'drSourceClusterFS') {
-              if ($scope.UIModel.source.location === 'HDFS') {
-                item._value = findInterface($scope.sourceClusterModel.cluster.interfaces.interface, 'write');
-              } else {
-                item._value = $scope.UIModel.source.url;
-              }
-            }
-            if (item._name === 'drTargetClusterFS') {
-              if ($scope.UIModel.target.location === 'HDFS') {
-                item._value = findInterface($scope.targetClusterModel.cluster.interfaces.interface, 'write');
-              } else {
-                item._value = $scope.UIModel.target.url;
-              }
-            }
-            if (item._name === 'drNotificationReceivers') {
-              item._value = (function () {
-                if ($scope.UIModel.alerts.alertsArray.length === 0) {
-                  return "NA";
-                } else {
-                  return $scope.UIModel.alerts.alertsArray.join();
-                }
-              }());
-            }
-            if (item._name === 'sourceCluster') {
-              if ($scope.UIModel.source.location === 'HDFS') { item._value = $scope.UIModel.source.cluster; }
-              else { item._value = ""; }
-            }
-            if (item._name === 'targetCluster') {
-              if ($scope.UIModel.target.location === 'HDFS') { item._value = $scope.UIModel.target.cluster; }
-              else { item._value = ""; }
-            }
-          });
-
-        } else if ($scope.UIModel.formType === 'HIVE') {
-
-          $scope.model.clusters.cluster[0]._name = $scope.UIModel.source.cluster;
-          $scope.model.properties.property.forEach(function (item) {
-            if (item._name === 'distcpMaxMaps') {
-              item._value = $scope.UIModel.allocation.hive.maxMapsDistcp;
-            }
-            if (item._name === 'distcpMapBandwidth') {
-              item._value = $scope.UIModel.allocation.hive.maxBandwidth;
-            }
-            if (item._name === 'sourceCluster') {
-              item._value = $scope.UIModel.source.cluster;
-            }
-            if (item._name === 'targetCluster') {
-              item._value = $scope.UIModel.target.cluster;
-            }
-            if (item._name === 'sourceHiveServer2Uri') {
-              item._value = $scope.UIModel.hiveOptions.source.hiveServerToEndpoint;
-            }
-            if (item._name === 'targetHiveServer2Uri') {
-              item._value = $scope.UIModel.hiveOptions.target.hiveServerToEndpoint;
-            }
-            if (item._name === 'sourceStagingPath') {
-              item._value = $scope.UIModel.hiveOptions.source.stagingPath;
-            }
-            if (item._name === 'targetStagingPath') {
-              item._value = $scope.UIModel.hiveOptions.target.stagingPath;
-            }
-            if (item._name === 'sourceNN') {
-              item._value = findInterface($scope.sourceClusterModel.cluster.interfaces.interface, 'write');
-            }
-            if (item._name === 'targetNN') {
-              item._value = findInterface($scope.targetClusterModel.cluster.interfaces.interface, 'write');
-            }
-            if (item._name === 'sourceMetastoreUri') {
-              item._value = findInterface($scope.sourceClusterModel.cluster.interfaces.interface, 'registry');
-            }
-            if (item._name === 'targetMetastoreUri') {
-              item._value = findInterface($scope.targetClusterModel.cluster.interfaces.interface, 'registry');
-            }
-            if (item._name === 'sourceTable') {
-              if ($scope.UIModel.source.hiveDatabaseType === "databases") {
-                item._value = "*";
-              } else {
-                item._value = $scope.UIModel.source.hiveTables;
-              }
-            }
-            if (item._name === 'sourceDatabase') {
-              if ($scope.UIModel.source.hiveDatabaseType === "databases") {
-                item._value = $scope.UIModel.source.hiveDatabases;
-              } else {
-                item._value = $scope.UIModel.source.hiveDatabase;
-              }
-            }
-            if (item._name === 'maxEvents') {
-              item._value = $scope.UIModel.allocation.hive.maxMapsEvents;
-            }
-            if (item._name === 'replicationMaxMaps') {
-              item._value = $scope.UIModel.allocation.hive.maxMapsMirror;
-            }
-            if (item._name === 'clusterForJobRun') {
-              if ($scope.UIModel.runOn === "source") {
-                item._value = $scope.UIModel.source.cluster;
-              } else {
-                item._value = $scope.UIModel.target.cluster;
-              }
-            }
-            if (item._name === 'clusterForJobRunWriteEP') {
-              if ($scope.UIModel.runOn === "source") {
-                item._value = findInterface($scope.sourceClusterModel.cluster.interfaces.interface, 'write');
-              } else {
-                item._value = findInterface($scope.targetClusterModel.cluster.interfaces.interface, 'write');
-              }
-            }
-            if (item._name === 'drJobName') {
-              item._value = $scope.UIModel.name;
-            }
-            if (item._name === 'drNotificationReceivers') {
-              item._value = (function () {
-                if ($scope.UIModel.alerts.alertsArray.length === 0) {
-                  return "NA";
-                } else {
-                  return $scope.UIModel.alerts.alertsArray.join();
-                }
-              }());
-            }
-
-          });
-
-        } else {
-          console.log('error in form type');
-        }
-
-        $scope.xmlString = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' + X2jsService.json2xml_str($scope.completeModel);
-
-      }
-
       $scope.save = function () {
         SpinnersFlag.show = true;
+        var extensionData = extensionSerializer.convertObjectToString(
+          extensionSerializer.serializeExtensionProperties($scope.UIModel, $scope.UIModel.type + '-MIRROR'));
 
-        if(!$scope.$parent.cloningMode) {
-          Falcon.postUpdateEntity($scope.xmlString, 'process', $scope.model._name)
+        if($scope.editingMode) {
+          Falcon.postUpdateExtension(extensionData, $scope.UIModel.type + '-MIRRORING')
             .success(function (response) {
               $scope.skipUndo = true;
               Falcon.logResponse('success', response, false);
@@ -437,7 +299,7 @@
               angular.element('body, html').animate({scrollTop: 0}, 300);
             });
         } else {
-          Falcon.postSubmitEntity($scope.xmlString, 'process')
+            Falcon.postSubmitExtension(extensionData, $scope.UIModel.type + '-MIRRORING')
             .success(function (response) {
               $scope.skipUndo = true;
               Falcon.logResponse('success', response, false);
@@ -462,181 +324,27 @@
         }
       }
 
-      function importModel(model) {
-
-        var mirrorType;
-
-        if (model.process.tags.search('_falcon_mirroring_type=HDFS') !== -1) {
-          mirrorType = 'HDFS';
-        } else {
-          mirrorType = 'HIVE';
-        }
-        $scope.switchModel(mirrorType);
-        EntityModel.datasetModel.UIModel.formType = mirrorType;
-        EntityModel.datasetModel.UIModel.name = (function () { if (!$scope.clone) { return model.process._name; } else { return ""; } }());
-        EntityModel.datasetModel.UIModel.retry.policy = model.process.retry._policy;
-        EntityModel.datasetModel.UIModel.retry.attempts = model.process.retry._attempts;
-        EntityModel.datasetModel.UIModel.retry.delay.number = (function () {
-          return parseInt(model.process.retry._delay.split('(')[1]);
-        }());
-        EntityModel.datasetModel.UIModel.retry.delay.unit = (function () {
-          return model.process.retry._delay.split('(')[0];
-        }());
-        EntityModel.datasetModel.UIModel.frequency.number = (function () {
-          return parseInt(model.process.frequency.split('(')[1]);
-        }());
-        EntityModel.datasetModel.UIModel.frequency.unit = (function () {
-          return model.process.frequency.split('(')[0];
-        }());
-        EntityModel.datasetModel.UIModel.acl.owner = model.process.ACL._owner;
-        EntityModel.datasetModel.UIModel.acl.group = model.process.ACL._group;
-        EntityModel.datasetModel.UIModel.acl.permissions = model.process.ACL._permission;
-
-        EntityModel.datasetModel.UIModel.validity.startISO = model.process.clusters.cluster[0].validity._start;
-        EntityModel.datasetModel.UIModel.validity.endISO = model.process.clusters.cluster[0].validity._end;
-        EntityModel.datasetModel.UIModel.validity.tz = model.process.timezone;
-        EntityModel.datasetModel.UIModel.validity.start = DateHelper.importDate (model.process.clusters.cluster[0].validity._start, model.process.timezone);
-        EntityModel.datasetModel.UIModel.validity.startTime = DateHelper.importDate (model.process.clusters.cluster[0].validity._start, model.process.timezone);
-        EntityModel.datasetModel.UIModel.validity.end = DateHelper.importDate (model.process.clusters.cluster[0].validity._end, model.process.timezone);
-        EntityModel.datasetModel.UIModel.validity.endTime = DateHelper.importDate (model.process.clusters.cluster[0].validity._end, model.process.timezone);
-
-        EntityModel.datasetModel.UIModel.tags.tagsString = model.process.tags;
-        EntityModel.datasetModel.UIModel.tags.tagsArray = (function () {
-          var array = [];
-          model.process.tags.split(',').forEach(function (fieldToSplit) {
-            var splittedString = fieldToSplit.split("=");
-            array.push({key: splittedString[0], value: splittedString[1]});
-          });
-          return array;
-        }());
-
-        if (mirrorType === 'HDFS') {
-          model.process.properties.property.forEach(function (item) {
-            if (item._name === 'distcpMaxMaps') {
-              EntityModel.datasetModel.UIModel.allocation.hdfs.maxMaps = item._value;
-            }
-            if (item._name === 'distcpMapBandwidth') {
-              EntityModel.datasetModel.UIModel.allocation.hdfs.maxBandwidth = item._value;
-            }
-            if (item._name === 'drSourceDir') {
-              EntityModel.datasetModel.UIModel.source.path = item._value;
-            }
-            if (item._name === 'drTargetDir') {
-              EntityModel.datasetModel.UIModel.target.path = item._value;
-            }
-            if (item._name === 'drNotificationReceivers') {
-              EntityModel.datasetModel.UIModel.alerts.alertsArray = (function () {
-                if (item._value !== "NA") {
-                  return item._value.split(',');
-                } else {
-                  return [];
-                }
-              }());
-            }
-            if (item._name === 'targetCluster') {
-              EntityModel.datasetModel.UIModel.target.cluster = item._value;
-            }
-            if (item._name === 'sourceCluster') {
-              EntityModel.datasetModel.UIModel.source.cluster = item._value;
-            }
-            if (item._name === 'drSourceClusterFS') {
-              EntityModel.datasetModel.UIModel.source.url = item._value;
-            }
-            if (item._name === 'drTargetClusterFS') {
-              EntityModel.datasetModel.UIModel.target.url = item._value;
-            }
-          });
-
-          if (EntityModel.datasetModel.UIModel.source.cluster === model.process.clusters.cluster[0]._name) {
-            EntityModel.datasetModel.UIModel.runOn = "source";
-          }
-          if (EntityModel.datasetModel.UIModel.target.cluster === model.process.clusters.cluster[0]._name) {
-            EntityModel.datasetModel.UIModel.runOn = "target";
-          }
-
-          EntityModel.datasetModel.UIModel.source.location = identifyLocationType(EntityModel.datasetModel.UIModel.source.url);
-          EntityModel.datasetModel.UIModel.target.location = identifyLocationType(EntityModel.datasetModel.UIModel.target.url);
-
-        } else if (mirrorType === 'HIVE') {
-
-          model.process.properties.property.forEach(function (item) {
-            if (item._name === 'distcpMaxMaps') {
-              EntityModel.datasetModel.UIModel.allocation.hive.maxMapsDistcp = item._value;
-            }
-            if (item._name === 'distcpMapBandwidth') {
-              EntityModel.datasetModel.UIModel.allocation.hive.maxBandwidth = item._value;
-            }
-            if (item._name === 'sourceCluster') {
-              EntityModel.datasetModel.UIModel.source.cluster = item._value;
-            }
-            if (item._name === 'targetCluster') {
-              EntityModel.datasetModel.UIModel.target.cluster = item._value;
-            }
-            if (item._name === 'sourceStagingPath') {
-              EntityModel.datasetModel.UIModel.hiveOptions.source.stagingPath = item._value;
-            }
-            if (item._name === 'targetStagingPath') {
-              EntityModel.datasetModel.UIModel.hiveOptions.target.stagingPath = item._value;
-              if (item._value === "*") {
-                EntityModel.datasetModel.UIModel.source.hiveDatabaseType = "databases";
-              } else {
-                EntityModel.datasetModel.UIModel.source.hiveDatabaseType = "tables";
-              }
-            }
-            if (item._name === 'sourceHiveServer2Uri') {
-              EntityModel.datasetModel.UIModel.hiveOptions.source.hiveServerToEndpoint = item._value;
-            }
-            if (item._name === 'targetHiveServer2Uri') {
-              EntityModel.datasetModel.UIModel.hiveOptions.target.hiveServerToEndpoint = item._value;
-            }
-            if (item._name === 'sourceTable') {
-              EntityModel.datasetModel.UIModel.source.hiveTables = item._value;
-              if (EntityModel.datasetModel.UIModel.source.hiveDatabaseType === "databases") {
-                EntityModel.datasetModel.UIModel.source.hiveTables = "*";
-              }
-              else {
-                EntityModel.datasetModel.UIModel.source.hiveTables = item._value;
-              }
-            }
-            if (item._name === 'sourceDatabase') {
-              if (EntityModel.datasetModel.UIModel.source.hiveDatabaseType === "databases") {
-                EntityModel.datasetModel.UIModel.source.hiveDatabases = item._value;
-              } else {
-                EntityModel.datasetModel.UIModel.source.hiveDatabase = item._value;
-              }
-            }
-            if (item._name === 'maxEvents') {
-              EntityModel.datasetModel.UIModel.allocation.hive.maxMapsEvents = item._value;
-            }
-            if (item._name === 'replicationMaxMaps') {
-              EntityModel.datasetModel.UIModel.allocation.hive.maxMapsMirror = item._value;
-            }
-            if (item._name === 'clusterForJobRun') {
-              if (EntityModel.datasetModel.UIModel.source.cluster === item._value) {
-                EntityModel.datasetModel.UIModel.runOn = "source";
-              } else {
-                EntityModel.datasetModel.UIModel.runOn = "target";
-              }
-            }
-            if (item._name === 'drNotificationReceivers') {
-              EntityModel.datasetModel.UIModel.alerts.alertsArray = (function () {
-                if (item._value !== "NA") {
-                  return item._value.split(',');
-                } else {
-                  return [];
-                }
-              }());
-            }
-
-          });
-        }
-
-        if(EntityModel.datasetModel.UIModel.source.cluster) { $scope.getSourceDefinition(); }
-        if(EntityModel.datasetModel.UIModel.target.cluster) { $scope.getTargetDefinition(); }
-
+      var extensionModel;
+      if (datasetModel) {
+        extensionModel = datasetModel;
+      } else if (EntityModel.datasetModel.toImportModel) {
+        extensionModel = EntityModel.datasetModel.toImportModel;
       }
-      if (EntityModel.datasetModel.toImportModel) {
-        importModel(EntityModel.datasetModel.toImportModel);
+      if (extensionModel && extensionModel.process.tags) {
+        var datasetType;
+        if (extensionModel.process.tags.indexOf('_falcon_extension_name=HDFS-MIRRORING') !== -1) {
+          datasetType = 'hdfs-mirror';
+          $scope.UIModel = extensionSerializer.serializeExtensionModel(extensionModel, datasetType, $scope.secureMode);
+        } else if (extensionModel.process.tags.indexOf('_falcon_extension_name=HIVE-MIRRORING') !== -1) {
+          datasetType = 'hive-mirror';
+          $scope.UIModel = extensionSerializer.serializeExtensionModel(extensionModel, datasetType, $scope.secureMode);
+        }
+      }
+      if ($scope.clone) {
+        $scope.UIModel.name = "";
+      }
+      if($state.current.name !== "forms.dataset.general"){
+        $state.go("forms.dataset.general");
       }
     }]);
 }());
diff --git a/falcon-ui/app/js/controllers/datasource/datasource-advanced-controller.js b/falcon-ui/app/js/controllers/datasource/datasource-advanced-controller.js
new file mode 100644
index 0000000..a9f975b
--- /dev/null
+++ b/falcon-ui/app/js/controllers/datasource/datasource-advanced-controller.js
@@ -0,0 +1,34 @@
+/**
+ * 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.
+ */
+(function () {
+  'use strict';
+
+  /***
+   * @ngdoc controller
+   * @name app.controllers.datasource.DatasourceGeneralInformationController
+   * @requires EntityModel the entity model to copy the datasource entity from
+   * @requires Falcon the falcon entity service
+   */
+  var datasourceModule = angular.module('app.controllers.datasource');
+
+  datasourceModule.controller('DatasourceAdvancedController', [ "$scope", function ($scope) {
+
+  }]);
+
+
+}());
diff --git a/falcon-ui/app/js/controllers/datasource/datasource-general-information-controller.js b/falcon-ui/app/js/controllers/datasource/datasource-general-information-controller.js
new file mode 100644
index 0000000..1299b15
--- /dev/null
+++ b/falcon-ui/app/js/controllers/datasource/datasource-general-information-controller.js
@@ -0,0 +1,141 @@
+/**
+ * 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.
+ */
+(function () {
+  'use strict';
+
+  /***
+   * @ngdoc controller
+   * @name app.controllers.datasource.DatasourceGeneralInformationController
+   * @requires EntityModel the entity model to copy the datasource entity from
+   * @requires Falcon the falcon entity service
+   */
+  var datasourceModule = angular.module('app.controllers.datasource');
+
+  datasourceModule.controller('DatasourceGeneralInformationController', [ "$scope", function ($scope) {
+    $scope.addTag = function () {
+      $scope.datasource.tags.push({key: null, value: null});
+    };
+
+    $scope.removeTag = function (index) {
+      if (index >= 0 && $scope.datasource.tags.length > 1) {
+        $scope.datasource.tags.splice(index, 1);
+      }
+    };
+
+    $scope.addParameter = function () {
+      $scope.datasource.parameters.push({name: null, value: null});
+    };
+
+    $scope.removeParameter = function (index) {
+      if (index >= 0 && $scope.datasource.parameters.length > 0) {
+        $scope.datasource.parameters.splice(index, 1);
+      }
+    };
+
+    $scope.addProperty = function () {
+      $scope.datasource.customProperties.push({name: null, value: null});
+    };
+
+    $scope.removeProperty = function (index) {
+      if (index >= 0 && $scope.datasource.customProperties.length > 0) {
+        $scope.datasource.customProperties.splice(index, 1);
+      }
+    };
+
+    $scope.addDriverJar = function () {
+      var lastOne = $scope.datasource.driver.jar.length - 1;
+      if($scope.datasource.driver.jar[lastOne].value) {
+        $scope.datasource.driver.jar.push({value:""});
+      }
+    };
+
+    $scope.removeDriverJar = function(index) {
+      if(index !== null && $scope.datasource.driver.jar[index]) {
+        $scope.datasource.driver.jar.splice(index, 1);
+      }
+    };
+
+    $scope.getDatabaseDefaultDetails = function() {
+      switch ($scope.datasource.type) {
+        case "postgres":
+          $scope.datasource.interfaces.interfaces[0].endpoint = "jdbc:postgresql://db_host:5433/test";
+          $scope.datasource.driver.clazz = "org.postgresql.Driver";
+          return;
+        case "mysql":
+          $scope.datasource.interfaces.interfaces[0].endpoint = "jdbc:mysql://db_host:3306";
+          $scope.datasource.driver.clazz = "com.mysql.jdbc.Driver";
+          return;
+        case "hsql":
+          $scope.datasource.interfaces.interfaces[0].endpoint = "jdbc:hsqldb:hsql://db_host:9001";
+          $scope.datasource.driver.clazz = "org.hsqldb.jdbcDriver";
+          return;
+        case "oracle":
+          $scope.datasource.interfaces.interfaces[0].endpoint = "jdbc:oracle:thin@db_host:1526:oracle_sid";
+          $scope.datasource.driver.clazz = "oracle.jdbc.driver.OracleDriver";
+          return;
+        case "teradata":
+          $scope.datasource.interfaces.interfaces[0].endpoint = "jdbc:teradata://db_host";
+          $scope.datasource.driver.clazz = "com.teradata.jdbc.TeraDriver";
+          return;
+        case "db2":
+          $scope.datasource.interfaces.interfaces[0].endpoint = "jdbc:db2://db_host:50000/SAMPLE";
+          $scope.datasource.driver.clazz = "com.ibm.db2.jcc.DB2Driver";
+          return;
+        case "netezza":
+          $scope.datasource.interfaces.interfaces[0].endpoint = "jdbc:netezza://db_host:5480/test";
+          $scope.datasource.driver.clazz = "org.netezza.Driver";
+          return;
+        default:
+          $scope.datasource.interfaces.interfaces[0].endpoint = "jdbc:"
+          $scope.datasource.driver.clazz = "org.apache.sqoop.connector.jdbc.GenericJdbcConnector";
+          return;
+      }
+    }
+
+  //   $scope.datasource.interfaces.interfaces[0].endpoint = $scope.datasource.type;
+
+  //   $scope.$watchCollection(
+  //     "[datasource.type, datasource.host, datasource.port, datasource.databaseName]", function() {
+  //     var connectionString;
+  //     switch ($scope.datasource.type) {
+  //       case "sqlserver":
+  //         connectionString = "jdbc:jtds:sqlserver://";
+  //       case "mysql":
+  //         connectionString = "jdbc:mysql://";
+  //       case "postgresql":
+  //         connectionString = "jdbc:postgresql://";
+  //       case "oracle":
+  //         connectionString = "jdbc:oracle:thin:@//";
+  //       case "teradata":
+  //         connectionString = "jdbc:teradata://";
+  //       case "db2":
+  //         connectionString = "jdbc:db2://";
+  //       default:
+  //         connectionString = "jdbc://";
+  //     };
+  //     $scope.datasource.interfaces.interfaces[0].endpoint = connectionString
+  //         + $scope.datasource.host + ":"
+  //         + $scope.datasource.port + "/"
+  //         + $scope.datasource.databaseName;
+  //
+  //   });
+  //
+  }]);
+
+
+}());
diff --git a/falcon-ui/app/js/controllers/datasource/datasource-module.js b/falcon-ui/app/js/controllers/datasource/datasource-module.js
new file mode 100644
index 0000000..c8b40f3
--- /dev/null
+++ b/falcon-ui/app/js/controllers/datasource/datasource-module.js
@@ -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.
+ */
+(function () {
+  'use strict';
+
+  /***
+   * @ngdoc controller
+   * @name app.controllers.datasouurce.DatasourceController
+   * @requires EntityModel the entity model to copy the datasource entity from
+   * @requires Falcon the falcon entity service
+   */
+  angular.module('app.controllers.datasource',
+    [
+     'app.controllers.entity',
+     'app.services'
+    ]);
+
+})();
diff --git a/falcon-ui/app/js/controllers/datasource/datasource-root-ctrl.js b/falcon-ui/app/js/controllers/datasource/datasource-root-ctrl.js
new file mode 100644
index 0000000..2d38208
--- /dev/null
+++ b/falcon-ui/app/js/controllers/datasource/datasource-root-ctrl.js
@@ -0,0 +1,249 @@
+/**
+ * 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.
+ */
+(function () {
+  'use strict';
+
+  /***
+   * @ngdoc controller
+   * @name app.controllers.datasource.DatasourceController
+   * @requires EntityModel the entity model to copy the datasource entity from
+   * @requires Falcon the falcon entity service
+   */
+  var datasourceModule = angular.module('app.controllers.datasource');
+
+  datasourceModule.controller('DatasourceController',
+    [ '$scope', '$state', '$timeout', "RouteHelper",
+      'Falcon', 'X2jsService',
+      'JsonTransformerFactory', 'EntityFactory',
+      'EntitySerializer', '$interval',
+      '$controller', "ValidationService",
+      "SpinnersFlag", "$rootScope", "DatasourceModel",
+      function($scope, $state, $timeout, RouteHelper, Falcon,
+               X2jsService, transformerFactory, entityFactory,
+               serializer, $interval, $controller,
+               validationService, SpinnersFlag, $rootScope, datasourceModel) {
+
+         $scope.entityType = 'datasource';
+         var stateMatrix = {
+                 general : {previous : '', next : 'summary'},
+                 summary : {previous : 'general', next : ''}
+         };
+         //extending root controller
+         $controller('EntityRootCtrl', {
+           $scope: $scope
+         });
+
+         $scope.skipUndo = false;
+         $scope.secureMode = $rootScope.secureMode;
+
+         $scope.$on('$destroy', function () {
+
+          //  if (!$scope.skipUndo && !angular.equals($scope.UIModel, EntityModel.defaultValues.datasourceModel)) {
+          //    if($scope.clone){
+          //      EntityModel.datasourceModel.UIModel.clone = true;
+          //    }
+          //    if($scope.editingMode){
+          //      EntityModel.datasourceModel.UIModel.edit = true;
+          //    }
+          //    $scope.$parent.cancel('datasource', $rootScope.previousState);
+          //  }
+         });
+
+         $scope.loadOrCreateEntity = function() {
+           var type = $scope.entityType;
+           if(!datasourceModel && $scope.$parent.models.datasourceModel){
+             datasourceModel = $scope.$parent.models.datasourceModel;
+           }
+           $scope.$parent.models.datasourceModel = null;
+           return datasourceModel ? serializer.preDeserialize(datasourceModel, type) : entityFactory.newEntity(type);
+         };
+
+         $scope.init = function() {
+           $scope.baseInit();
+           var type = $scope.entityType;
+           $scope[type] = $scope.loadOrCreateEntity();
+           if(datasourceModel && datasourceModel.clone === true){
+             $scope.cloningMode = true;
+             $scope.editingMode = false;
+             $scope[type].name = "";
+           }else if(datasourceModel && datasourceModel.edit === true){
+             $scope.editingMode = true;
+             $scope.cloningMode = false;
+           }else{
+             $scope.editingMode = false;
+             $scope.cloningMode = false;
+           }
+         }
+
+         $scope.init();
+
+         $scope.transform = function() {
+           var type = $scope.entityType;
+           var xml = serializer.serialize($scope[type], $scope.entityType);
+           $scope.prettyXml = X2jsService.prettifyXml(xml);
+           $scope.xml = xml;
+           return xml;
+         };
+
+         var xmlPreviewCallback = function() {
+           var type = $scope.entityType;
+           if($scope.editXmlDisabled) {
+             try {
+               $scope.transform();
+             } catch (exception) {
+               console.log('error when transforming xml');
+               console.log(exception);
+             }
+           } else {
+             try {
+               $scope[type] = serializer.deserialize($scope.prettyXml, type);
+               $scope.invalidXml = false;
+             } catch (exception) {
+               $scope.invalidXml = true;
+               console.log('user entered xml incorrect format');
+               console.log(exception);
+             }
+           }
+         };
+
+         $scope.$watch('datasource', xmlPreviewCallback, true);
+         $scope.$watch('prettyXml', xmlPreviewCallback, true);
+         $scope.$watch('datasource.interfaces', function() {
+           if ($scope.datasource.interfaces.interfaces[0]
+             && $scope.datasource.interfaces.interfaces[0].credential) {
+            $scope.datasource.interfaces.credential = $scope.datasource.interfaces.interfaces[0].credential;
+           }
+         }, true);
+
+         $scope.toggleclick = function () {
+              $('.formBoxContainer').toggleClass('col-xs-14 ');
+              $('.xmlPreviewContainer ').toggleClass('col-xs-10 hide');
+              $('.preview').toggleClass('pullOver pullOverXml');
+              ($('.preview').hasClass('pullOver')) ? $('.preview').find('button').html('Preview XML') : $('.preview').find('button').html('Hide XML');
+              ($($("textarea")[0]).attr("ng-model") == "prettyXml" ) ? $($("textarea")[0]).css("min-height", $(".formBoxContainer").height() - 40 ) : '';
+          };
+
+          $scope.isActive = function (route) {
+              return route === $state.current.name;
+          };
+
+          $scope.isCompleted = function (route) {
+              return $state.get(route).data && $state.get(route).data.completed;
+          };
+
+          $scope.goNext = function (formInvalid) {
+            $state.current.data = $state.current.data || {};
+            $state.current.data.completed = !formInvalid;
+
+            SpinnersFlag.show = true;
+            if (!validationService.nameAvailable || formInvalid) {
+              validationService.displayValidations.show = true;
+              validationService.displayValidations.nameShow = true;
+              SpinnersFlag.show = false;
+              return;
+            }
+            validationService.displayValidations.show = false;
+            validationService.displayValidations.nameShow = false;
+            $state.go(RouteHelper.getNextState($state.current.name, stateMatrix));
+            angular.element('body, html').animate({scrollTop: 0}, 500);
+          };
+
+          $scope.goBack = function () {
+            SpinnersFlag.backShow = true;
+            validationService.displayValidations.show = false;
+            validationService.displayValidations.nameShow = false;
+            $state.go(RouteHelper.getPreviousState($state.current.name, stateMatrix));
+            angular.element('body, html').animate({scrollTop: 0}, 500);
+          };
+
+          function cleanXml (xml) {
+            var obj = X2jsService.xml_str2json(xml);
+            //feed properties
+            // if (obj.datasource.properties.property.length === 1 && obj.feed.properties.property[0] === "") {
+            //   delete obj.datasource.properties;
+            // }
+
+            return X2jsService.json2xml_str(obj);
+          }
+
+          $scope.validate = function() {
+            var type = $scope.entityType;
+            var cleanedXml = cleanXml($scope.xml);
+            SpinnersFlag.validateShow = true;
+            Falcon.logRequest();
+
+            Falcon.postValidateEntity('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' + cleanedXml, $scope.entityType, $scope[type].name)
+              .success(function (response) {
+                Falcon.logResponse('success', response, false);
+                SpinnersFlag.validateShow = false;
+                angular.element('body, html').animate({scrollTop: 0}, 300);
+              })
+              .error(function(err) {
+                Falcon.logResponse('error', err, false);
+                SpinnersFlag.validateShow = false;
+                angular.element('body, html').animate({scrollTop: 0}, 300);
+              });
+          }
+
+          $scope.saveEntity = function() {
+            var type = $scope.entityType;
+            var cleanedXml = cleanXml($scope.xml);
+            SpinnersFlag.show = true;
+
+            if($scope.editingMode) {
+              Falcon.logRequest();
+
+              Falcon.postUpdateEntity('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' + cleanedXml, $scope.entityType, $scope[type].name)
+                .success(function (response) {
+                  $scope.skipUndo = true;
+                  Falcon.logResponse('success', response, false);
+                  $state.go('main');
+                })
+                .error(function(err) {
+                  Falcon.logResponse('error', err, false);
+                  SpinnersFlag.show = false;
+                  angular.element('body, html').animate({scrollTop: 0}, 300);
+                });
+            } else {
+              Falcon.logRequest();
+              Falcon.postSubmitEntity('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' + cleanedXml, $scope.entityType)
+                .success(function (response) {
+                  $scope.skipUndo = true;
+                  Falcon.logResponse('success', response, false);
+                  $state.go('main');
+                })
+                .error(function(err) {
+                  Falcon.logResponse('error', err, false);
+                  SpinnersFlag.show = false;
+                  angular.element('body, html').animate({scrollTop: 0}, 300);
+                });
+            }
+
+            $scope.editingMode = false;
+            $scope.cloningMode = false;
+          };
+
+          if($state.current.name !== "forms.datasource.general"){
+            $state.go("forms.datasource.general");
+          }
+
+      }
+    ]);
+
+
+})();
diff --git a/falcon-ui/app/js/controllers/datasource/datasource-summary-controller.js b/falcon-ui/app/js/controllers/datasource/datasource-summary-controller.js
new file mode 100644
index 0000000..8440f13
--- /dev/null
+++ b/falcon-ui/app/js/controllers/datasource/datasource-summary-controller.js
@@ -0,0 +1,39 @@
+/**
+ * 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.
+ */
+(function () {
+  'use strict';
+
+  /***
+   * @ngdoc controller
+   * @name app.controllers.datasource.DatasourceSummaryController
+   * @requires EntityModel the entity model to copy the datasource entity from
+   * @requires Falcon the falcon entity service
+   */
+  var datasourceModule = angular.module('app.controllers.datasource');
+
+  datasourceModule.controller('DatasourceSummaryController', [ "$scope", "$timeout",
+                                                function($scope, $timeout) {
+
+    if($scope.transform) {
+      $scope.transform();
+    }
+
+  }]);
+
+
+})();
diff --git a/falcon-ui/app/js/controllers/entity/entity-details.js b/falcon-ui/app/js/controllers/entity/entity-details.js
index 217bb9b..6670dbb 100644
--- a/falcon-ui/app/js/controllers/entity/entity-details.js
+++ b/falcon-ui/app/js/controllers/entity/entity-details.js
@@ -27,10 +27,12 @@
   var clusterModule = angular.module('app.controllers.view', [ 'app.services' ]);
 
   clusterModule.controller('EntityDetailsCtrl', [
-    "$scope", "$timeout", "$interval", "Falcon", "EntityModel", "$state", "X2jsService", 'EntitySerializer', 'InstanceFalcon',
-    function ($scope, $timeout, $interval, Falcon, EntityModel, $state, X2jsService, serializer, InstanceFalcon) {
+    "$scope", "$timeout","$window", "$interval", "Falcon", "EntityModel","EntityScheduler", "$state",
+    "X2jsService", 'EntitySerializer', 'InstanceFalcon', 'entity', 'ExtensionSerializer', '$rootScope',
+    function ($scope, $timeout, $window, $interval, Falcon, EntityModel, EntityScheduler,
+      $state, X2jsService, serializer, InstanceFalcon, entity, extensionSerializer, $rootScope) {
 
-      $scope.entity = EntityModel;
+      $scope.entity = entity;
 
       var resultsPerPage = 10;
       var visiblePages = 3;
@@ -39,7 +41,15 @@
 
       $scope.pages = [];
       $scope.nextPages = false;
-      $scope.mirrorTag = "_falcon_mirroring_type";
+      $scope.mirrorTag = "_falcon_extension_name";
+
+      $scope.isSafeMode = function() {
+        return $rootScope.safeMode;
+      };
+
+      $scope.isSuperUser = function() {
+        return $rootScope.superUser;
+      };
 
       $scope.isMirror = function(tags){
         var flag = false;
@@ -49,22 +59,49 @@
         return flag;
       };
 
+      $scope.getMirrorType = function(tags) {
+        if (tags.search('_falcon_extension_name=HDFS-MIRRORING') !== -1) {
+          return "hdfs-mirror";
+        } else if (tags.search('_falcon_extension_name=HDFS-SNAPSHOT-MIRRORING') !== -1) {
+          return "snapshot";
+        } else if (tags.search('_falcon_extension_name=HIVE-MIRRORING') !== -1) {
+          return "hive-mirror";
+        }
+      };
+
       if($scope.entity.type === "feed"){
+        $scope.entityTypeLabel = "Feed";
         $scope.feed = serializer.preDeserialize($scope.entity.model, "feed");
         $scope.feed.name = $scope.entity.name;
         $scope.feed.type = $scope.entity.type;
         $scope.entity.start = $scope.entity.model.feed.clusters.cluster[0].validity._start;
         $scope.entity.end = $scope.entity.model.feed.clusters.cluster[0].validity._end;
-      }else{
+      } else if($scope.entity.type === "cluster"){
+        $scope.entityTypeLabel = "Cluster";
+        $scope.cluster = serializer.preDeserialize($scope.entity.model, "cluster");
+        $scope.cluster.name = $scope.entity.name;
+        $scope.cluster.type = $scope.entity.type;
+      }else if($scope.entity.type === "process"){
         var tags = $scope.entity.model.process.tags;
         if($scope.isMirror(tags)){
-          $scope.entityTypeLabel = "Mirror";
+          var mirrorType = $scope.getMirrorType(tags);
+          if (mirrorType === "snapshot") {
+            $scope.entityTypeLabel = "Snapshot";
+          } if (mirrorType === "hdfs-mirror") {
+            $scope.entityTypeLabel = "HDFS Mirror";
+          } else if (mirrorType === "hive-mirror") {
+            $scope.entityTypeLabel = "Hive Mirror";
+          }
+          $scope.extension = extensionSerializer.serializeExtensionModel(
+            $scope.entity.model, mirrorType, $rootScope.secureMode);
+        } else {
+          $scope.entityTypeLabel = "Process";
+          $scope.process = serializer.preDeserialize($scope.entity.model, "process");
+          $scope.process.name = $scope.entity.name;
+          $scope.process.type = $scope.entity.type;
+          $scope.entity.start = $scope.entity.model.process.clusters.cluster[0].validity._start;
+          $scope.entity.end = $scope.entity.model.process.clusters.cluster[0].validity._end;
         }
-        $scope.process = serializer.preDeserialize($scope.entity.model, "process");
-        $scope.process.name = $scope.entity.name;
-        $scope.process.type = $scope.entity.type;
-        $scope.entity.start = $scope.entity.model.process.clusters.cluster[0].validity._start;
-        $scope.entity.end = $scope.entity.model.process.clusters.cluster[0].validity._end;
       }
 
       $scope.capitalize = function(input) {
@@ -141,7 +178,10 @@
         if(type === "FEED"){
           $scope.entityTypeLabel = "Feed";
           return "entypo download";
-        }else if(type === "PROCESS"){
+        } else if(type === "CLUSTER"){
+          $scope.entityTypeLabel = "Cluster";
+          return "entypo archive";
+        } else if(type === "PROCESS"){
           var tags = model.process.tags;
           if($scope.isMirror(tags)){
             $scope.entityTypeLabel = "Mirror";
@@ -156,6 +196,62 @@
         }
       };
 
+      $scope.deleteEntity = function () {
+        EntityScheduler.deleteEntity($scope.entity.type, $scope.entity.name).then(function(status){
+            if(status === "DELETED"){
+                $state.go("main");
+            }
+        });
+      };
+      $scope.cloneEntity = function () {
+        var type = $scope.entity.type.toLowerCase();
+        if(type === 'process' && $scope.isMirror($scope.entity.model.process.tags)){
+            type = $scope.getMirrorType($scope.entity.model.process.tags);
+            if (type === 'hdfs-mirror' || type === 'hive-mirror') {
+              type = 'dataset';
+            }
+        }
+        var state = 'forms.' + type;
+        $state.go(state, {'name' : $scope.entity.name, 'action' : 'clone'});
+      };
+
+      $scope.editEntity = function () {
+        var type = $scope.entity.type.toLowerCase();
+        if (type === 'cluster' && (!$rootScope.safeMode || !$rootScope.superUser)) {
+          return;
+        }
+        if(type === 'process' && $scope.isMirror($scope.entity.model.process.tags)){
+            type = $scope.getMirrorType($scope.entity.model.process.tags);
+            if (type === 'hdfs-mirror' || type === 'hive-mirror') {
+              type = 'dataset';
+            }
+        }
+        var state = 'forms.' + type;
+        $state.go(state, {'name' : $scope.entity.name, 'action' : 'edit'});
+      };
+
+      $scope.resumeEntity = function () {
+        EntityScheduler.resumeEntity($scope.entity.type, $scope.entity.name).then(function(status){
+            $scope.entity.status = status;
+        });
+      };
+
+      $scope.scheduleEntity = function () {
+        EntityScheduler.scheduleEntity($scope.entity.type, $scope.entity.name).then(function(status){
+            $scope.entity.status = status;
+        });
+      };
+
+      $scope.suspendEntity = function () {
+        EntityScheduler.suspendEntity($scope.entity.type, $scope.entity.name).then(function(status){
+            $scope.entity.status = status;
+        });
+      };
+
+      $scope.downloadEntity = function () {
+        EntityScheduler.downloadEntity($scope.entity.type, $scope.entity.name);
+      };
+
     }
   ]);
 
diff --git a/falcon-ui/app/js/controllers/entity/entity-module.js b/falcon-ui/app/js/controllers/entity/entity-module.js
index cb36b45..aa5a4fd 100644
--- a/falcon-ui/app/js/controllers/entity/entity-module.js
+++ b/falcon-ui/app/js/controllers/entity/entity-module.js
@@ -21,8 +21,21 @@
   var entityModule = angular.module('app.controllers.entity',[ 'app.services' ]);
 
   entityModule.controller('EntityRootCtrl',
-    [ '$scope',
-      function($scope) {
+    [ '$scope', 'ValidationService',
+      function($scope, validationService) {
+
+        $scope.invalidXml = false;
+        $scope.isFrequencyValid = true;
+
+        $scope.checkMininumFrequency = function(quantity, unit, field){
+          $scope.isFrequencyValid = quantity ? true : false;
+          if (quantity && unit === 'minutes') {
+            $scope.isFrequencyValid = validationService.checkMininum(quantity);
+          } else if (unit !== 'minutes' && quantity && parseInt(quantity) === 0) {
+            $scope.isFrequencyValid = false;
+          }
+          field.$setValidity('required', $scope.isFrequencyValid);
+        };
 
         $scope.baseInit = function() {
           $scope.editXmlDisabled = true;
@@ -32,6 +45,11 @@
           $scope.editXmlDisabled = !$scope.editXmlDisabled;
         };
 
+        $scope.revertXml = function() {
+          $scope.transform();
+          $scope.invalidXml = false;
+        };
+
         $scope.capitalize = function(input) {
             return input.charAt(0).toUpperCase() + input.slice(1);
         };
diff --git a/falcon-ui/app/js/controllers/entity/instance-details.js b/falcon-ui/app/js/controllers/entity/instance-details.js
index 0775d61..5800aba 100644
--- a/falcon-ui/app/js/controllers/entity/instance-details.js
+++ b/falcon-ui/app/js/controllers/entity/instance-details.js
@@ -27,12 +27,13 @@
   var clusterModule = angular.module('app.controllers.instance', ['app.services']);
 
   clusterModule.controller('InstanceDetailsCtrl', [
-    "$scope", "$interval", "Falcon", "EntityModel", "$state", "X2jsService", 'EntitySerializer',
-    function ($scope, $interval, Falcon, EntityModel, $state, X2jsService) {
+    "$scope", "$interval", "Falcon", "EntityModel", "$state", "X2jsService", 'DateHelper',
+    function ($scope, $interval, Falcon, EntityModel, $state, X2jsService, DateHelper) {
 
       $scope.instance = EntityModel.model;
       $scope.instance.type = EntityModel.type;
       $scope.instance.name = EntityModel.name;
+      $scope.dateFormat = DateHelper.getLocaleDateFormat() +'HH:mm';
 
       $scope.backToEntity = function () {
         var type = $scope.instance.type.toLowerCase();
@@ -45,7 +46,7 @@
             EntityModel.type = type;
             EntityModel.name = name;
             EntityModel.model = entityModel;
-            $state.go('entityDetails');
+            $state.go('entityDetails',{'name' : name, 'type' : type});
           })
           .error(function (err) {
             Falcon.logResponse('error', err, false, true);
diff --git a/falcon-ui/app/js/controllers/feed/feed-advanced-controller.js b/falcon-ui/app/js/controllers/feed/feed-advanced-controller.js
new file mode 100644
index 0000000..4d80cc7
--- /dev/null
+++ b/falcon-ui/app/js/controllers/feed/feed-advanced-controller.js
@@ -0,0 +1,34 @@
+/**
+ * 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.
+ */
+(function () {
+  'use strict';
+
+  /***
+   * @ngdoc controller
+   * @name app.controllers.feed.FeedAdvancedController
+   * @requires clusters the list of clusters to display for selection of source
+   * @requires EntityModel the entity model to copy the feed entity from
+   * @requires Falcon the falcon entity service
+   */
+  var feedModule = angular.module('app.controllers.feed');
+
+  feedModule.controller('FeedAdvancedController', [ "$scope",function($scope) {
+
+  }]);
+
+})();
diff --git a/falcon-ui/app/js/controllers/feed/feed-clusters-controller.js b/falcon-ui/app/js/controllers/feed/feed-clusters-controller.js
index 64c6892..6d829b9 100644
--- a/falcon-ui/app/js/controllers/feed/feed-clusters-controller.js
+++ b/falcon-ui/app/js/controllers/feed/feed-clusters-controller.js
@@ -30,14 +30,38 @@
   feedModule.controller('FeedClustersController', [ "$scope", "clustersList", "EntityFactory", "$timeout",
                                             function($scope, clustersList, entityFactory, $timeout) {
 
-      function focusOnElement () {
-        $timeout(function () {
-          angular.element('#clusterNameSelect').trigger('focus');
-        }, 500);
-      }
-      focusOnElement();
-
       unwrapClusters(clustersList);
+      $scope.sourceClusterName;
+      $scope.sourceClusterNotSelected = false;
+      $scope.sourceClusterExists = false;
+      $scope.targetClusterName;
+      $scope.targetClusterNotSelected = false;
+      $scope.targetClusterExists = false;
+
+      function preparePartitionString() {
+        $scope.feedPartitions = "";
+        $scope.feed.partitions.forEach(function(partition, index){
+          $scope.feedPartitions = $scope.feedPartitions.concat(partition.name);
+          if (index < $scope.feed.partitions.length - 1) {
+            $scope.feedPartitions = $scope.feedPartitions.concat(",");
+          }
+        });
+      }
+
+      $scope.$watch("feed.partitions",function(){
+        preparePartitionString();
+        $scope.$broadcast("createClusterPartitions");
+      }, true);
+
+      $scope.createFeedClusterPartitions = function() {
+        if ($scope.feedPartitions != undefined) {
+          var currentPartitions = ($scope.feedPartitions.trim() === "") ? [] : $scope.feedPartitions.split(",");
+          $scope.feed.partitions = [];
+          currentPartitions.forEach(function(element) {
+            $scope.feed.partitions.push(entityFactory.newPartition(element));
+          });
+        }
+      };
 
       $scope.updateRetention = function() {
         if($scope.selectedCluster.retention.action === 'archive' && $scope.selectedCluster.type === 'source') {
@@ -64,15 +88,75 @@
         }
       };
 
-      $scope.addCluster = function() {
-        $scope.selectedCluster.selected = false;
-        var cluster = $scope.newCluster(true);
-        $scope.feed.clusters.push(cluster);
-        $scope.selectedCluster = cluster;
+      function openClusterInAccordion(object, flagValue) {
+        object.isAccordionOpened = flagValue;
+      }
+
+      $scope.feed.clusters.forEach(function(cluster) {
+        openClusterInAccordion(cluster, false);
+      });
+
+      function findClusterExists(clusterList, newClusterName, newClusterType) {
+        var clusterExists = false;
+        clusterList.forEach(function (cluster) {
+          if (cluster.name === newClusterName && cluster.type === newClusterType) {
+            clusterExists = true;
+            return;
+          }
+        });
+        return clusterExists;
+      }
+
+      $scope.clearSourceClusterFlags = function() {
+        $scope.sourceClusterNotSelected = false;
+        $scope.sourceClusterExists = false;
+      }
+
+      $scope.clearTargetClusterFlags = function() {
+        $scope.targetClusterNotSelected = false;
+        $scope.targetClusterExists = false;
+      }
+
+      $scope.addSourceCluster = function() {
+        $scope.clearSourceClusterFlags();
+        if ($scope.sourceClusterName == undefined) {
+          $scope.sourceClusterNotSelected = true;
+        } else if (!findClusterExists($scope.feed.clusters, $scope.sourceClusterName, 'source')) {
+          $scope.addCluster('source', $scope.sourceClusterName);
+        } else {
+          $scope.sourceClusterExists = true;
+        }
       };
 
-      $scope.newCluster = function(selected) {
-        return entityFactory.newCluster('target', selected);
+      $scope.addTargetCluster = function() {
+        if ($scope.targetClusterName == undefined) {
+          $scope.targetClusterNotSelected = true;
+        } else if (!findClusterExists($scope.feed.clusters, $scope.targetClusterName, 'target')) {
+          $scope.addCluster('target', $scope.targetClusterName);
+        } else {
+          $scope.targetClusterExists = true;
+        }
+      };
+
+      $scope.addCluster = function(clusterType, clusterName) {
+        var cluster = $scope.newCluster(clusterType, true, clusterName);
+        if($scope.feed.storage.catalog.active){
+          cluster.storage.catalog.catalogTable.uri = $scope.feed.storage.catalog.catalogTable.uri
+        }
+        cluster.storage.fileSystem.locations.forEach(function (location) {
+          if (location.type === 'data') {
+            var dataLocation = $scope.feed.storage.fileSystem.locations.filter(function(obj) {
+              return obj.type == 'data';
+            })[0];
+            location.path = (dataLocation != undefined) ? dataLocation.path : '';
+          }
+        });
+        openClusterInAccordion(cluster, true);
+        $scope.feed.clusters.push(cluster);
+      };
+
+      $scope.newCluster = function(clusterType, selected, clusterName, partition) {
+        return entityFactory.newCluster(clusterType, selected, clusterName, partition);
       };
 
       $scope.handleCluster = function(cluster, index) {
@@ -89,12 +173,27 @@
         $scope.selectedCluster = cluster;
       };
 
-      $scope.removeCluster = function(index) {
-        if(index >= 0 && $scope.feed.clusters.length > 1 &&
-          $scope.feed.clusters[index].type !== 'source' &&
-          !$scope.archiveCluster.active) {
-          $scope.feed.clusters.splice(index, 1);
-          $scope.selectCluster($scope.sourceCluster);
+      function findClusterIndex(atIndex, ofType) {
+        var index = -1;
+        for (var i=0,len=$scope.feed.clusters.length;i<len;i++){
+          var cluster=$scope.feed.clusters[i];
+          if (cluster.type === ofType) {
+            index++;
+            if (index === atIndex) {
+              return i;
+            }
+          }
+        }
+        return -1;
+      };
+
+      $scope.removeCluster = function(clusterIndex, clusterType) {
+        if (clusterIndex >= 0 && $scope.feed.clusters.length > 0
+          && !$scope.archiveCluster.active) {
+          var clusterTypeIndex = findClusterIndex(clusterIndex, clusterType);
+          if (clusterTypeIndex > -1) {
+            $scope.feed.clusters.splice(clusterTypeIndex, 1);
+          }
         }
       };
 
diff --git a/falcon-ui/app/js/controllers/feed/feed-general-information-controller.js b/falcon-ui/app/js/controllers/feed/feed-general-information-controller.js
index 40dbdbc..bb45bbd 100644
--- a/falcon-ui/app/js/controllers/feed/feed-general-information-controller.js
+++ b/falcon-ui/app/js/controllers/feed/feed-general-information-controller.js
@@ -28,8 +28,18 @@
   var feedModule = angular.module('app.controllers.feed');
 
 
-  feedModule.controller('FeedGeneralInformationController', [ "$scope", function ($scope) {
+  feedModule.controller('FeedGeneralInformationController', [ "$scope","clustersList",'EntityFactory',
+    function ($scope, clustersList, entityFactory) {
 
+    $scope.propPlaceholders = {
+      queueName: 'default',
+      jobPriority: '',
+      parallel: 3,
+      maxMaps: 8,
+      mapBandwidthKB: 1024
+    };
+
+    unwrapClusters(clustersList);
     $scope.nameValid = false;
 
     $scope.addTag = function () {
@@ -42,7 +52,120 @@
       }
     };
 
+    function unwrapClusters(clusters) {
+      if(clusters !== undefined && clusters !== null && clusters !== "null"){
+        $scope.clustersList = [];
+        var typeOfData = Object.prototype.toString.call(clusters.entity);
+        if(typeOfData === "[object Array]") {
+          $scope.clustersList = clusters.entity;
+        } else if(typeOfData === "[object Object]") {
+          $scope.clustersList = [clusters.entity];
+        } else {
+          //console.log("type of data not recognized");
+        }
+      }
+    }
+
+    function findClusterExists(clusterList, newClusterName, newClusterType) {
+      var clusterExists = false;
+      clusterList.forEach(function (cluster) {
+        if (cluster.name === newClusterName && cluster.type === newClusterType) {
+          clusterExists = true;
+          return;
+        }
+      });
+      return clusterExists;
+    }
+
+    $scope.onTypeChange = function(value){
+      $scope.feed.clusters = [];
+      if (value === 'hive' || value ==='hdfs') {
+        $scope.feed.sourceClusterLocationType = value;
+        $scope.feed.targetClusterLocationType = value;
+        $scope.feed.clusters.push(
+          entityFactory.newCluster('source', $scope.feed.sourceClusterLocationType, "", null));
+        $scope.feed.clusters.push(
+            entityFactory.newCluster('target', $scope.feed.targetClusterLocationType, "", null));
+      } else if (value === 'import') {
+        $scope.feed.targetClusterLocationType = "hdfs";
+        $scope.feed.clusters.push(
+            entityFactory.newCluster('source', $scope.feed.targetClusterLocationType, "", null))
+      } else if (value === 'export') {
+          $scope.feed.sourceClusterLocationType = "hdfs";
+        $scope.feed.clusters.push(
+          entityFactory.newCluster('source', $scope.feed.sourceClusterLocationType, "", null));
+      }
+    };
+
+    $scope.addClusterStorage = function(clusterDetails){
+      var cluster = entityFactory.newCluster(clusterDetails.type, clusterDetails.dataTransferType, "", null);
+      if($scope.feed.clusters.length > 1
+        && findClusterExists($scope.feed.clusters,cluster.name,cluster.type)){
+        if(cluster.type === 'source'){
+          $scope.sourceClusterExists = true;
+        }else{
+          $scope.targetClusterExists = true;
+        }
+        return;
+      }else{
+          $scope.sourceClusterExists = false;
+          $scope.targetClusterExists = false;
+      }
+      if(cluster.storage.fileSystem) {
+        cluster.storage.fileSystem.locations = [];
+        cluster.storage.fileSystem.locations.push({'type':'data','path':''});
+        cluster.storage.fileSystem.locations.push({'type':'stats','path':'/'});
+      }
+      $scope.feed.clusters.unshift(cluster);
+    };
+
+    $scope.toggleClusterStorage = function(type){
+      if(type === 'source'){
+        $scope.showSourceClusterStorage = !$scope.showSourceClusterStorage;
+      }else if(type === 'target'){
+        $scope.showTargetClusterStorage = !$scope.showTargetClusterStorage;
+      }
+    };
+
+    $scope.$watch("feed.import.source.includesCSV",function(){
+      if($scope.feed.dataTransferType === 'import' && $scope.feed.import.source.includesCSV){
+        $scope.feed.import.source.fields = { 'includes' : $scope.feed.import.source.includesCSV.split(",") };
+      }
+    }, true);
+    $scope.$watch("feed.import.source.excludesCSV",function(){
+      if($scope.feed.dataTransferType === 'import' && $scope.feed.import.source.excludesCSV){
+        $scope.feed.import.source.fields = { 'excludes' : $scope.feed.import.source.excludesCSV.split(",") };
+      }
+    }, true);
+    $scope.$watch("feed.export.target.includesCSV",function(){
+      if($scope.feed.dataTransferType === 'export' && $scope.feed.export.target.includesCSV){
+        $scope.feed.export.target.fields = { 'includes' : $scope.feed.export.target.includesCSV.split(",") };
+      }
+    }, true);
+    $scope.$watch("feed.export.target.excludesCSV",function(){
+      if($scope.feed.dataTransferType === 'export' && $scope.feed.export.target.excludesCSV){
+        $scope.feed.export.target.fields = { 'excludes' : $scope.feed.export.target.excludesCSV.split(",") };
+      }
+    }, true);
+
+    $scope.$watch("feed.sourceClusterLocationType", function(){
+      var sourceClusters = $scope.feed.clusters.filter(function(obj) {
+        return obj.type == 'source';
+      });
+      if(sourceClusters.length < 1){
+        var cluster = entityFactory.newCluster('source', $scope.feed.sourceClusterLocationType, "", null);
+        $scope.feed.clusters.push(cluster)
+      }
+    });
+
+    $scope.$watch("feed.targetClusterLocationType", function(){
+      var targetClusters = $scope.feed.clusters.filter(function(obj) {
+        return obj.type == 'target';
+      });
+      if(targetClusters.length < 1 && $scope.feed.dataTransferType !== 'import'){
+        var cluster = entityFactory.newCluster('target', $scope.feed.targetClusterLocationType, "", null);
+        $scope.feed.clusters.push(cluster)
+      }
+    });
   }]);
-
-
 }());
diff --git a/falcon-ui/app/js/controllers/feed/feed-location-controller.js b/falcon-ui/app/js/controllers/feed/feed-location-controller.js
index 055436d..7030be4 100644
--- a/falcon-ui/app/js/controllers/feed/feed-location-controller.js
+++ b/falcon-ui/app/js/controllers/feed/feed-location-controller.js
@@ -29,22 +29,9 @@
 
   feedModule.controller('FeedLocationController', [ "$scope", "$timeout", function ($scope, $timeout) {
 
-    function focusOnElement () {
-      $timeout(function () {
-        if ($scope.feed.storage.catalog.active) {
-          angular.element('.catalogStorageInput').trigger('focus');
-        }
-        else {
-          angular.element('.firstInput').trigger('focus');
-        }
-      }, 500);
-    }
-    focusOnElement();
-
     $scope.toggleStorage = function() {
       toggle($scope.feed.storage.fileSystem);
       toggle($scope.feed.storage.catalog);
-      focusOnElement();
     };
 
     function toggle(storage) {
diff --git a/falcon-ui/app/js/controllers/feed/feed-root-ctrl.js b/falcon-ui/app/js/controllers/feed/feed-root-ctrl.js
index 9282ea4..4be1360 100644
--- a/falcon-ui/app/js/controllers/feed/feed-root-ctrl.js
+++ b/falcon-ui/app/js/controllers/feed/feed-root-ctrl.js
@@ -28,36 +28,63 @@
   var feedModule = angular.module('app.controllers.feed');
 
   feedModule.controller('FeedController',
-    [ '$scope', '$state', '$timeout',
+    [ '$scope', '$state', '$timeout', "RouteHelper", "DateHelper",
       'Falcon', 'X2jsService',
       'JsonTransformerFactory', 'EntityFactory',
       'EntitySerializer', '$interval',
       '$controller', "ValidationService",
-      "SpinnersFlag", "$rootScope",
-      function($scope, $state, $timeout, Falcon,
+      "SpinnersFlag", "$rootScope", "FeedModel", "datasourcesList",
+      function($scope, $state, $timeout, RouteHelper, DateHelper, Falcon,
                X2jsService, transformerFactory, entityFactory,
                serializer, $interval, $controller,
-               validationService, SpinnersFlag, $rootScope) {
+               validationService, SpinnersFlag, $rootScope, feedModel, datasourcesList) {
 
         $scope.entityType = 'feed';
-
+        var stateMatrix = {
+                general : {previous : '', next : 'summary'},
+                summary : {previous : 'general', next : ''}
+        };
         //extending root controller
         $controller('EntityRootCtrl', {
           $scope: $scope
         });
+        unwrapDatasources(datasourcesList);
 
         $scope.loadOrCreateEntity = function() {
           var type = $scope.entityType;
-          var model = $scope.models[type + 'Model'];
-          $scope.models[type + 'Model'] = null;
-          return model ? serializer.preDeserialize(model, type) : entityFactory.newEntity(type);
+          if(!feedModel && $scope.$parent.models.feedModel){
+            feedModel = $scope.$parent.models.feedModel;
+          }
+          $scope.$parent.models.feedModel = null;
+          if (feedModel) {
+            var feedEntity = serializer.preDeserialize(feedModel, type);
+            // if (feedEntity && feedEntity.clusters) {
+            //   feedEntity.clusters.forEach(function (feedCluster) {
+            //     feedCluster.storage = feedEntity.storage;
+            //   });
+            // }
+            return feedEntity;
+          } else {
+            return entityFactory.newEntity(type)
+          }
         };
 
         $scope.init = function() {
           $scope.baseInit();
           var type = $scope.entityType;
           $scope[type] = $scope.loadOrCreateEntity();
-          $scope.dateFormat ='MM/dd/yyyy';
+          if(feedModel && feedModel.clone === true){
+            $scope.cloningMode = true;
+            $scope.editingMode = false;
+            $scope[type].name = "";
+          }else if(feedModel && feedModel.edit === true){
+            $scope.editingMode = true;
+            $scope.cloningMode = false;
+          }else{
+            $scope.editingMode = false;
+            $scope.cloningMode = false;
+          }
+          $scope.dateFormat = DateHelper.getLocaleDateFormat();
         };
 
         $scope.openDatePicker = function($event, container) {
@@ -68,6 +95,19 @@
 
         $scope.init();
 
+        // $scope.$watch("feed.storage.fileSystem.locations",function(){
+        //   $scope.feed.clusters.forEach(function (feedCluster) {
+        //     feedCluster.storage.fileSystem.locations.forEach(function (location) {
+        //       if (location.type === 'data') {
+        //         var dataLocation = $scope.feed.storage.fileSystem.locations.filter(function(obj) {
+        //           return obj.type == 'data';
+        //         })[0];
+        //         location.path = (dataLocation != undefined) ? dataLocation.path : '';
+        //       }
+        //     });
+        //   });
+        // }, true);
+
         $scope.transform = function() {
           var type = $scope.entityType;
           var xml = serializer.serialize($scope[type], $scope.entityType);
@@ -76,23 +116,28 @@
           return xml;
         };
 
-        $scope.saveEntity = function() {
+        $scope.saveEntity = function(formInvalid) {
           var type = $scope.entityType;
           var cleanedXml = cleanXml($scope.xml);
-          SpinnersFlag.show = true;
+          SpinnersFlag.saveShow = true;
+          if (!validateFeedForm(formInvalid)) {
+            SpinnersFlag.saveShow = false;
+            return;
+          }
 
-          if(!$scope.$parent.cloningMode) {
+          if($scope.editingMode) {
             Falcon.logRequest();
 
             Falcon.postUpdateEntity('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' + cleanedXml, $scope.entityType, $scope[type].name)
               .success(function (response) {
                 $scope.skipUndo = true;
                 Falcon.logResponse('success', response, false);
+                SpinnersFlag.saveShow = false;
                 $state.go('main');
               })
               .error(function(err) {
                 Falcon.logResponse('error', err, false);
-                SpinnersFlag.show = false;
+                SpinnersFlag.saveShow = false;
                 angular.element('body, html').animate({scrollTop: 0}, 300);
               });
           } else {
@@ -101,21 +146,23 @@
               .success(function (response) {
                 $scope.skipUndo = true;
                 Falcon.logResponse('success', response, false);
+                SpinnersFlag.saveShow = false;
                 $state.go('main');
               })
               .error(function(err) {
                 Falcon.logResponse('error', err, false);
-                SpinnersFlag.show = false;
+                SpinnersFlag.saveShow = false;
                 angular.element('body, html').animate({scrollTop: 0}, 300);
               });
           }
-
-          $scope.editingMode = false;
-          $scope.cloningMode = false;
         };
 
         $scope.isActive = function (route) {
-          return route === $state.$current.name;
+          return route === $state.current.name;
+        };
+
+        $scope.isCompleted = function (route) {
+          return $state.get(route).data && $state.get(route).data.completed;
         };
 
         $scope.parseDate = function(input) {
@@ -141,6 +188,7 @@
           if($scope.editXmlDisabled) {
             try {
               $scope.transform();
+              $scope.feed.storage = $scope.feed.clusters[0].storage;
             } catch (exception) {
               console.log('error when transforming xml');
               console.log(exception);
@@ -148,7 +196,10 @@
           } else {
             try {
               $scope[type] = serializer.deserialize($scope.prettyXml, type);
+              $scope.invalidXml = false;
+              joinIncludesExcludes();
             } catch (exception) {
+              $scope.invalidXml = true;
               console.log('user entered xml incorrect format');
               console.log(exception);
             }
@@ -156,7 +207,38 @@
 
         };
 
-        var xmlPreviewWorker = $interval(xmlPreviewCallback, 1000);
+        var joinIncludesExcludes = function(){
+          if($scope.feed.dataTransferType === 'import'){
+            $scope.dataSourceType = 'source';
+            if($scope.feed.import.source.includesCSV){
+              $scope.feed.import.source.columnsType = 'include';
+            } else if($scope.feed.import.source.excludesCSV){
+              $scope.feed.import.source.columnsType = 'exclude';
+            } else {
+              $scope.feed.import.source.columnsType = 'all';
+            }
+          }
+          if($scope.feed.dataTransferType === 'export'){
+            $scope.dataSourceType = 'target';
+            if($scope.feed.export.target.includesCSV){
+              $scope.feed.export.target.columnsType = 'include';
+            } else if($scope.export.import.target.excludesCSV){
+              $scope.feed.export.target.columnsType = 'exclude';
+            } else {
+              $scope.feed.export.target.columnsType = 'all';
+            }
+          }
+        };
+        $scope.$watch('feed', function(){
+          if($scope.editXmlDisabled) {
+            xmlPreviewCallback();
+          }
+        }, true);
+       $scope.$watch('prettyXml', function(){
+         if(!$scope.editXmlDisabled) {
+           xmlPreviewCallback();
+         }
+        }, true);
         $scope.skipUndo = false;
         $scope.$on('$destroy', function () {
 
@@ -168,38 +250,72 @@
               ACLIsEqual = angular.equals($scope.feed.ACL, defaultFeed.ACL),
               schemaIsEqual = angular.equals($scope.feed.schema, defaultFeed.schema);
 
-          $interval.cancel(xmlPreviewWorker);
-
           if (!$scope.skipUndo && (!nameIsEqual || !groupsIsEqual || !descriptionIsEqual || !ACLIsEqual || !schemaIsEqual)) {
             $scope.$parent.models.feedModel = angular.copy(X2jsService.xml_str2json($scope.xml));
+            if($scope.cloningMode){
+              $scope.$parent.models.feedModel.clone = true;
+            }
+            if($scope.editingMode){
+              $scope.$parent.models.feedModel.edit = true;
+            }
             $scope.$parent.cancel('feed', $rootScope.previousState);
           }
         });
-        $scope.goNext = function (formInvalid, stateName) {
-
-          SpinnersFlag.show = true;
+        function validateFeedForm(formInvalid) {
+          $state.current.data = $state.current.data || {};
+          $state.current.data.completed = !formInvalid;
 
           if (!validationService.nameAvailable || formInvalid) {
             validationService.displayValidations.show = true;
             validationService.displayValidations.nameShow = true;
-            SpinnersFlag.show = false;
-            return;
+            if ($scope.currentState == 'forms.feed.clusters') {
+              $scope.$broadcast('forms.feed.clusters:submit');
+            }
+            return false;
+          }
+
+          // Duplicate Cluster Check
+          if ($scope.feed.clusters) {
+            var clusterNames = $scope.feed.clusters.map(function(item){ return item.name });
+            var isDuplicateClusterExists = clusterNames.some(function(item, index){
+                return clusterNames.indexOf(item) != index
+            });
+            if(isDuplicateClusterExists) {
+              return false;
+            }
           }
           validationService.displayValidations.show = false;
           validationService.displayValidations.nameShow = false;
-
-          $state.go(stateName);
-
-
+          return true;
+        }
+        $scope.goNext = function (formInvalid) {
+          SpinnersFlag.show = true;
+          if (validateFeedForm(formInvalid)) {
+            SpinnersFlag.show = false;
+            $state.go(RouteHelper.getNextState($state.current.name, stateMatrix));
+          }
+          SpinnersFlag.show = false;
         };
-        $scope.goBack = function (stateName) {
+        $scope.goBack = function () {
           SpinnersFlag.backShow = true;
           validationService.displayValidations.show = false;
           validationService.displayValidations.nameShow = false;
-          $state.go(stateName);
+          $state.go(RouteHelper.getPreviousState($state.current.name, stateMatrix));
         };
 
-
+        function unwrapDatasources(datasources) {
+		if(datasources !== undefined && datasources !== null && datasources !== "null"){
+			$scope.datasourceList = [];
+            var typeOfData = Object.prototype.toString.call(datasources.entity);
+            if(typeOfData === "[object Array]") {
+              $scope.datasourceList = datasources.entity;
+            } else if(typeOfData === "[object Object]") {
+              $scope.datasourceList = [datasources.entity];
+            } else {
+              //console.log("type of data not recognized");
+            }
+		}
+        }
 
         function cleanXml (xml) {
 
@@ -208,11 +324,13 @@
               feedLocationsArray = [];
 
           // cluster locations
-          obj.feed.clusters.cluster[0].locations.location.forEach(function (item) {
-            if (item._path) {
-              clusterLocationsArray.push(item);
-            }
-          });
+          if(obj.feed.clusters.cluster[0].locations){
+            obj.feed.clusters.cluster[0].locations.location.forEach(function (item) {
+              if (item._path) {
+                clusterLocationsArray.push(item);
+              }
+            });
+          }
 
           if (clusterLocationsArray.length === 0) {
             delete obj.feed.clusters.cluster[0].locations;
@@ -221,11 +339,13 @@
           }
 
           // feed locations
-          obj.feed.locations.location.forEach(function (item) {
-            if (item._path) {
-              feedLocationsArray.push(item);
-            }
-          });
+          if(obj.feed.locations){
+            obj.feed.locations.location.forEach(function (item) {
+              if (item._path) {
+                feedLocationsArray.push(item);
+              }
+            });
+          }
 
           if (feedLocationsArray.length === 0) {
             delete obj.feed.locations;
@@ -234,7 +354,8 @@
           }
 
           //feed properties
-          if (obj.feed.properties.property.length === 1 && obj.feed.properties.property[0] === "") {
+          if (obj.feed.properties && obj.feed.properties.property.length === 1
+              && obj.feed.properties.property[0] === "") {
             delete obj.feed.properties;
           }
 
@@ -242,6 +363,21 @@
 
         }
 
+         $scope.toggleclick = function () {
+              $('.formBoxContainer').toggleClass('col-xs-14 ');
+              $('.xmlPreviewContainer ').toggleClass('col-xs-10 hide');
+              $('.preview').toggleClass('pullOver pullOverXml');
+              ($('.preview').hasClass('pullOver')) ? $('.preview').find('button').html('Preview XML') : $('.preview').find('button').html('Hide XML');
+              ($($("textarea")[0]).attr("ng-model") == "prettyXml" ) ? $($("textarea")[0]).css("min-height", $(".formBoxContainer").height() - 40 ) : '';
+          };
+
+          $scope.emptyClusterName = function (cluster) {
+            return !(cluster.name === null || cluster.name.trim().length === 0);
+          };
+
+          if($state.current.name !== "forms.feed.general"){
+            $state.go("forms.feed.general");
+          }
       }]);
 
 
diff --git a/falcon-ui/app/js/controllers/feed/feed-summary-controller.js b/falcon-ui/app/js/controllers/feed/feed-summary-controller.js
index 249b8da..1eb6c90 100644
--- a/falcon-ui/app/js/controllers/feed/feed-summary-controller.js
+++ b/falcon-ui/app/js/controllers/feed/feed-summary-controller.js
@@ -27,12 +27,8 @@
    */
   var feedModule = angular.module('app.controllers.feed');
 
-  feedModule.controller('FeedSummaryController', [ "$scope", "$filter", "$timeout",
-                                                function($scope, $filter, $timeout) {
-
-    $timeout(function () {
-      angular.element('.nextBtn').trigger('focus');
-    }, 500);
+  feedModule.controller('FeedSummaryController', [ "$scope", "$filter", "$timeout", "DateHelper",
+                                                function($scope, $filter, $timeout, DateHelper) {
 
     if($scope.transform) {
       $scope.transform();
@@ -47,6 +43,10 @@
       return input ? (output || input) : 'Not specified';
     };
 
+    $scope.getDateTimeString = function (date,time) {
+      return DateHelper.getDateTimeString(date,time);
+    };
+
   }]);
 
 
diff --git a/falcon-ui/app/js/controllers/header-controller.js b/falcon-ui/app/js/controllers/header-controller.js
index b2dcaea..a0a0a20 100644
--- a/falcon-ui/app/js/controllers/header-controller.js
+++ b/falcon-ui/app/js/controllers/header-controller.js
@@ -41,36 +41,67 @@
       };
 
       $scope.resetCluster = function () {
+        $scope.clearTags();
         validationService.displayValidations = {show: false, nameShow: false};
         angular.copy(EntityModel.defaultValues.cluster, EntityModel.clusterModel);
-        $state.go("forms.cluster.general");
+        $state.go("forms.cluster");
       };
 
       $scope.resetProcess = function () {
+        $scope.clearTags();
         validationService.displayValidations = {show: false, nameShow: false};
         $scope.cloningMode = true;
         $scope.models.processModel = null;
-        $state.go("forms.process.general");
+        $state.go("forms.process");
       };
 
       $scope.resetFeed = function () {
+        $scope.clearTags();
         validationService.displayValidations = {show: false, nameShow: false};
         $scope.cloningMode = true;
         $scope.models.feedModel = null;
-        $state.go("forms.feed.general");
+        $state.go("forms.feed");
       };
 
-      $scope.resetDataset = function () {
+      $scope.resetDataset = function (mirrorType) {
+        $scope.clearTags();
         validationService.displayValidations = {show: false, nameShow: false};
         EntityModel.datasetModel.toImportModel = undefined;
         angular.copy(EntityModel.defaultValues.MirrorUIModel, EntityModel.datasetModel.UIModel);
+        EntityModel.datasetModel.UIModel.type = mirrorType;
         $scope.cloningMode = true;
-        $scope.models.feedModel = null;
-        $state.go("forms.dataset.general");
+        if($rootScope.currentState === 'forms.dataset.general') {
+          $state.reload("forms.dataset");
+        } else if($rootScope.currentState === 'forms.dataset.summary') {
+          EntityModel.datasetModel.UIModel.ACL.owner = $cookieStore.get('userToken').user;
+          $state.go("forms.dataset.general");
+        } else {
+          $state.go("forms.dataset");
+        }
+      };
+
+      $scope.resetSnapshot = function () {
+        $scope.clearTags();
+        validationService.displayValidations = {show: false, nameShow: false};
+        $scope.cloningMode = true;
+        $scope.models.snapshotModel = null;
+        $state.go("forms.snapshot");
+      };
+
+      $scope.isMirror = function(mirrorType) {
+        return EntityModel.datasetModel.UIModel && EntityModel.datasetModel.UIModel.type === mirrorType;
+      };
+
+      $scope.resetDatasource = function () {
+        $scope.clearTags();
+        validationService.displayValidations = {show: false, nameShow: false};
+        $scope.cloningMode = true;
+        $scope.models.dataSource = null;
+        $state.go("forms.datasource");
       };
 
       $scope.userLogged = function () {
-        if($rootScope.isSecureMode()){
+        if($rootScope.isSecureMode() || $rootScope.ambariView()){
           return true;
         }else if($rootScope.userLogged()){
 		if(angular.isDefined($cookieStore.get('userToken')) && $cookieStore.get('userToken') !== null){
@@ -94,7 +125,7 @@
       };
 
       $scope.restore = function(state) {
-        $state.go(state);
+        $state.go(state, {name : null, action : null});
       };
 
       $scope.notify = function() {
diff --git a/falcon-ui/app/js/controllers/process/process-advanced-ctrl.js b/falcon-ui/app/js/controllers/process/process-advanced-ctrl.js
new file mode 100644
index 0000000..a5c871b
--- /dev/null
+++ b/falcon-ui/app/js/controllers/process/process-advanced-ctrl.js
@@ -0,0 +1,34 @@
+/**
+ * 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.
+ */
+(function () {
+  'use strict';
+
+  /***
+   * @ngdoc controller
+   * @name app.controllers.process.ProcessAdvancedCtrl
+   * @requires EntityModel the entity model to copy the process entity from
+   * @requires Falcon the falcon entity service
+   */
+  var processModule = angular.module('app.controllers.process');
+
+  processModule.controller('ProcessAdvancedCtrl', ['$scope', 'EntityFactory', '$timeout', 'DateHelper',
+                                              function($scope, entityFactory, $timeout, DateHelper) {
+
+  }]);
+
+})();
diff --git a/falcon-ui/app/js/controllers/process/process-clusters-ctrl.js b/falcon-ui/app/js/controllers/process/process-clusters-ctrl.js
index 5605268..4f93dc8 100644
--- a/falcon-ui/app/js/controllers/process/process-clusters-ctrl.js
+++ b/falcon-ui/app/js/controllers/process/process-clusters-ctrl.js
@@ -27,15 +27,15 @@
    */
   var feedModule = angular.module('app.controllers.process');
 
-  feedModule.controller('ProcessClustersCtrl', ['$scope', 'clustersList', 'EntityFactory', '$timeout',
-                                              function($scope, clustersList, entityFactory, $timeout) {
+  feedModule.controller('ProcessClustersCtrl', ['$scope', 'clustersList', 'EntityFactory', '$timeout', 'DateHelper',
+                                              function($scope, clustersList, entityFactory, $timeout, DateHelper) {
 
     $timeout(function () {
       angular.element('.firstSelectClusterStep').trigger('focus');
     }, 500);
 
     $scope.init = function() {
-      $scope.dateFormat = 'MM/dd/yyyy';
+      $scope.dateFormat = DateHelper.getLocaleDateFormat();
     };
 
     $scope.openDatePicker = function($event, container) {
diff --git a/falcon-ui/app/js/controllers/process/process-general-information-ctrl.js b/falcon-ui/app/js/controllers/process/process-general-information-ctrl.js
index bda465d..9ded878 100644
--- a/falcon-ui/app/js/controllers/process/process-general-information-ctrl.js
+++ b/falcon-ui/app/js/controllers/process/process-general-information-ctrl.js
@@ -27,18 +27,46 @@
    */
   var feedModule = angular.module('app.controllers.process');
 
-  feedModule.controller('ProcessGeneralInformationCtrl', [ '$scope', function($scope) {
-    var availableVerions = {
-      oozie: ['3.1.3-incubating', '3.2.0-incubating', '3.3.0', '3.3.1', '3.3.2', '4.0.0', '4.0.1'],
-      pig: ['pig-0.10.0', 'pig-0.10.1', 'pig-0.11.0', 'pig-0.11.1', 'pig-0.12.0', 'pig-0.12.1', 'pig-0.13.0', 'pig-0.8.0', 'pig-0.8.1', ' pig-0.9.0', ' pig-0.9.1', 'pig-0.9.2'],
-      hive: ['hive-0.10.0', 'hive-0.11.0', 'hive-0.12.0', 'hive-0.13.0', 'hive-0.13.1', 'hive-0.6.0', 'hive-0.7.0', 'hive-0.8.0', 'hive-0.8.1', 'hive-0.9.0']
-    };
+  feedModule.controller('ProcessGeneralInformationCtrl', [
+    '$scope', 'clustersList', 'feedsList', 'EntityFactory', 'Falcon', 'X2jsService','DateHelper',
+    function($scope, clustersList, feedsList, entityFactory, Falcon, X2jsService, DateHelper) {
+
     $scope.nameValid = false;
-    
+
+    $scope.$watch('process.workflow.spark.jar',function(){
+      if($scope.process.workflow.spark.jar && $scope.process.workflow.spark.jar.endsWith('.py')){
+        $scope.isPython = true;
+      }else{
+        $scope.isPython = false;
+      }
+    },true);
+
     $scope.init = function() {
-      $scope.versions = [];
+      unwrapClusters(clustersList);
+      unwrapFeeds(feedsList);
+      $scope.dateFormat = DateHelper.getLocaleDateFormat();
     };
 
+    $scope.openDatePicker = function($event, container) {
+      $event.preventDefault();
+      $event.stopPropagation();
+      container.opened = true;
+    };
+
+    $scope.validateStartEndDate = function () {
+      delete $scope.invalidEndDate;
+      if (this.input.start && this.input.end) {
+        var startDate = new Date(this.input.start),
+          endDate = new Date(this.input.end);
+        if (endDate.toString !== 'Invalid Date' && startDate.toString !== 'Invalid Date') {
+          if (startDate > endDate) {
+            $scope.invalidEndDate = "ng-dirty ng-invalid";
+          }
+        }
+      }
+    };
+
+    // TAGS
     $scope.addTag = function() {
       $scope.process.tags.push({key: null, value: null});
     };
@@ -49,16 +77,101 @@
       }
     };
 
-    $scope.selectWorkflow = function() {
-      if($scope.process.workflow) {        
-        var engine = $scope.process.workflow.engine;
-        $scope.process.workflow.version = "";
-        $scope.versions = availableVerions[engine];
+    // inputs
+    $scope.addInput = function () {
+      $scope.process.inputs.push(entityFactory.newInput());
+    };
+
+    $scope.removeInput = function (index) {
+      if (index >= 0) {
+        $scope.process.inputs.splice(index, 1);
+      }
+    };
+
+    // OUTPUTS
+    $scope.addOutput = function () {
+      $scope.process.outputs.push(entityFactory.newOutput());
+    };
+
+    $scope.removeOutput = function (index) {
+      if (index >= 0) {
+        $scope.process.outputs.splice(index, 1);
       }
     };
 
     $scope.init();
-    $scope.selectWorkflow();
+
+    $scope.getSourceDefinition = function (clusterName) {
+      Falcon.getEntityDefinition("cluster", clusterName)
+        .success(function (data) {
+          $scope.sourceClusterModel = X2jsService.xml_str2json(data);
+          var sparkInterface = $scope.sourceClusterModel.cluster.interfaces.interface.filter(
+            function(clusterInterface) { return clusterInterface._type === 'spark'; }
+          )[0];
+          if (sparkInterface) {
+            var sparkEndpoint = sparkInterface._endpoint.trim();
+            if (sparkEndpoint.indexOf('yarn') != '-1') {
+              $scope.process.workflow.spark.master = 'yarn';
+              $scope.process.workflow.spark.mode = sparkEndpoint.substring(5);
+            } else if (sparkEndpoint === 'local') {
+              $scope.process.workflow.spark.master = 'local';
+            }
+          }
+        })
+        .error(function (err) {
+          Falcon.logResponse('error', err, false, true);
+        });
+    };
+
+    //-----------PROPERTIES----------------//
+    $scope.addProperty = function () {
+      var lastOne = $scope.process.properties.length - 1;
+      if($scope.process.properties[lastOne].name && $scope.process.properties[lastOne].value) {
+        $scope.process.properties.push(entityFactory.newProperty("", ""));
+      }
+    };
+
+    $scope.removeProperty = function(index) {
+      if(index !== null && $scope.process.properties[index]) {
+        $scope.process.properties.splice(index, 1);
+      }
+    };
+
+    $scope.policyChange = function(){
+      if($scope.process.retry.policy === 'final'){
+       $scope.process.retry.delay.quantity = '0';
+       $scope.process.retry.delay.unit = 'minutes';
+       $scope.process.retry.attempts = '0';
+      }else{
+        $scope.process.retry.delay.quantity = '30';
+        $scope.process.retry.delay.unit = 'minutes';
+        $scope.process.retry.attempts = '3';
+      }
+    }
+
+    function unwrapClusters(clusters) {
+      $scope.clusterList = [];
+      var typeOfData = Object.prototype.toString.call(clusters.entity);
+      if(typeOfData === "[object Array]") {
+        $scope.clusterList = clusters.entity;
+      } else if(typeOfData === "[object Object]") {
+        $scope.clusterList = [clusters.entity];
+      } else {
+        //console.log("type of data not recognized");
+      }
+    }
+
+    function unwrapFeeds(feeds) {
+      $scope.feedsList = [];
+      var typeOfData = Object.prototype.toString.call(feeds.entity);
+      if (typeOfData === "[object Array]") {
+        $scope.feedsList = feeds.entity;
+      } else if (typeOfData === "[object Object]") {
+        $scope.feedsList = [feeds.entity];
+      } else {
+        //console.log("type of data not recognized");
+      }
+    }
 
   }]);
 
diff --git a/falcon-ui/app/js/controllers/process/process-root-ctrl.js b/falcon-ui/app/js/controllers/process/process-root-ctrl.js
index 7d461ba..f527383 100644
--- a/falcon-ui/app/js/controllers/process/process-root-ctrl.js
+++ b/falcon-ui/app/js/controllers/process/process-root-ctrl.js
@@ -28,13 +28,18 @@
   var processModule = angular.module('app.controllers.process');
 
   processModule.controller('ProcessRootCtrl', [
-    '$scope', '$state', '$interval', '$controller', 'EntityFactory',
-    'EntitySerializer', 'X2jsService', 'ValidationService', 'SpinnersFlag', '$rootScope',
-    function ($scope, $state, $interval, $controller, entityFactory,
-              serializer, X2jsService, validationService, SpinnersFlag, $rootScope) {
+    '$scope', '$state', '$interval', '$controller', 'EntityFactory', 'RouteHelper',
+    'EntitySerializer', 'X2jsService', 'ValidationService', 'SpinnersFlag', '$rootScope', 'ProcessModel', 'Falcon',
+    function ($scope, $state, $interval, $controller, entityFactory, RouteHelper,
+              serializer, X2jsService, validationService, SpinnersFlag, $rootScope, processModel, Falcon) {
 
       $scope.entityType = 'process';
 
+      var stateMatrix = {
+              general : {previous : '', next : 'summary'},
+              summary : {previous : 'general', next : ''}
+      };
+
         //extending root controller
       $controller('EntityRootCtrl', {
         $scope: $scope
@@ -44,20 +49,34 @@
         $scope.baseInit();
         var type = $scope.entityType;
         $scope[type] = $scope.loadOrCreateEntity();
+        if(processModel && processModel.clone === true){
+          $scope.cloningMode = true;
+          $scope.editingMode = false;
+          $scope[type].name = "";
+        }else if(processModel && processModel.edit === true){
+          $scope.editingMode = true;
+          $scope.cloningMode = false;
+        }else{
+          $scope.editingMode = false;
+          $scope.cloningMode = false;
+        }
       };
 
       $scope.isActive = function (route) {
-        return route === $state.$current.name;
+        return route === $state.current.name;
+      };
+
+      $scope.isCompleted = function (route) {
+        return $state.get(route).data && $state.get(route).data.completed;
       };
 
       $scope.loadOrCreateEntity = function() {
         var type = $scope.entityType;
-        var model = $scope.models[type + 'Model'];
-        $scope.models[type + 'Model'] = null;
-        if(model) {
-          return serializer.preDeserialize(model, type);
+        if(!processModel && $scope.$parent.models.processModel){
+          processModel = $scope.$parent.models.processModel;
         }
-        return entityFactory.newEntity(type);
+        $scope.$parent.models.processModel = null;
+        return processModel ? serializer.preDeserialize(processModel, type) : entityFactory.newEntity(type);
       };
 
       $scope.init();
@@ -82,7 +101,9 @@
         } else {
           try {
             $scope[type] = serializer.deserialize($scope.prettyXml, type);
+            $scope.invalidXml = false;
           } catch (exception) {
+            $scope.invalidXml = true;
             console.log('user entered xml incorrect format');
             console.log(exception);
           }
@@ -90,7 +111,17 @@
 
       };
 
-      var xmlPreviewWorker = $interval(xmlPreviewCallback, 1000);
+      $scope.$watch('process', function(){
+        if($scope.editXmlDisabled) {
+          xmlPreviewCallback();
+        }
+      }, true);
+     $scope.$watch('prettyXml', function(){
+       if(!$scope.editXmlDisabled) {
+         xmlPreviewCallback();
+       }
+      }, true);
+
       $scope.skipUndo = false;
       $scope.$on('$destroy', function() {
 
@@ -100,16 +131,22 @@
           ACLIsEqual = angular.equals($scope.process.ACL, defaultProcess.ACL),
           workflowIsEqual = angular.equals($scope.process.workflow, defaultProcess.workflow);
 
-        $interval.cancel(xmlPreviewWorker);
-
         if (!$scope.skipUndo && (!nameIsEqual || !ACLIsEqual || !workflowIsEqual)) {
           $scope.$parent.models.processModel = angular.copy(X2jsService.xml_str2json($scope.xml));
+          if($scope.cloningMode){
+            $scope.$parent.models.processModel.clone = true;
+          }
+          if($scope.editingMode){
+            $scope.$parent.models.processModel.edit = true;
+          }
           $scope.$parent.cancel('process', $rootScope.previousState);
         }
       });
 
       //---------------------------------//
-      $scope.goNext = function (formInvalid, stateName) {
+      $scope.goNext = function (formInvalid) {
+        $state.current.data = $state.current.data || {};
+        $state.current.data.completed = !formInvalid;
         SpinnersFlag.show = true;
         if (!validationService.nameAvailable || formInvalid) {
           validationService.displayValidations.show = true;
@@ -119,20 +156,69 @@
         }
         validationService.displayValidations.show = false;
         validationService.displayValidations.nameShow = false;
-        $state.go(stateName);
+        $state.go(RouteHelper.getNextState($state.current.name, stateMatrix));
       };
 
-      $scope.goBack = function (stateName) {
+      $scope.goBack = function () {
         SpinnersFlag.backShow = true;
         validationService.displayValidations.show = false;
         validationService.displayValidations.nameShow = false;
-        $state.go(stateName);
+        $state.go(RouteHelper.getPreviousState($state.current.name, stateMatrix));
       };
 
       $scope.goTest = function (formInvalid) {
         console.log(formInvalid);
       };
 
+      $scope.toggleclick = function () {
+        $('.formBoxContainer').toggleClass('col-xs-14 ');
+        $('.xmlPreviewContainer ').toggleClass('col-xs-10 hide');
+        $('.preview').toggleClass('pullOver pullOverXml');
+        ($('.preview').hasClass('pullOver')) ? $('.preview').find('button').html('Preview XML') : $('.preview').find('button').html('Hide XML');
+        ($($("textarea")[0]).attr("ng-model") == "prettyXml" ) ? $($("textarea")[0]).css("min-height", $(".formBoxContainer").height() - 40 ) : '';
+      };
+
+      $scope.saveEntity = function() {
+        var type = $scope.entityType;
+        SpinnersFlag.saveShow = true;
+
+        if($scope.editingMode) {
+          Falcon.logRequest();
+          Falcon.postUpdateEntity('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'  + $scope.xml, $scope.entityType, $scope[type].name)
+            .success(function (response) {
+               $scope.skipUndo = true;
+               Falcon.logResponse('success', response, false);
+               SpinnersFlag.saveShow = false;
+               $state.go('main');
+
+            })
+            .error(function (err) {
+              Falcon.logResponse('error', err, false);
+              SpinnersFlag.saveShow = false;
+              angular.element('body, html').animate({scrollTop: 0}, 300);
+            });
+        }
+        else {
+          Falcon.logRequest();
+          Falcon.postSubmitEntity('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' + $scope.xml, $scope.entityType)
+            .success(function (response) {
+               $scope.skipUndo = true;
+               Falcon.logResponse('success', response, false);
+               SpinnersFlag.saveShow = false;
+               $state.go('main');
+
+            })
+            .error(function (err) {
+              Falcon.logResponse('error', err, false);
+              SpinnersFlag.saveShow = false;
+              angular.element('body, html').animate({scrollTop: 0}, 300);
+            });
+        }
+      };
+
+      if($state.current.name !== "forms.process.general"){
+        $state.go("forms.process.general");
+      }
     }
   ]);
 
diff --git a/falcon-ui/app/js/controllers/process/process-summary-ctrl.js b/falcon-ui/app/js/controllers/process/process-summary-ctrl.js
index 494c249..b68b055 100644
--- a/falcon-ui/app/js/controllers/process/process-summary-ctrl.js
+++ b/falcon-ui/app/js/controllers/process/process-summary-ctrl.js
@@ -49,45 +49,6 @@
       return input ? (output || input) : 'Not specified';
     };
 
-    $scope.saveEntity = function() {
-      var type = $scope.entityType;
-      SpinnersFlag.show = true;
-
-      if(!$scope.$parent.cloningMode) {
-        Falcon.logRequest();
-        Falcon.postUpdateEntity('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'  + $scope.xml, $scope.entityType, $scope[type].name)
-          .success(function (response) {
-             $scope.$parent.skipUndo = true;
-             Falcon.logResponse('success', response, false);
-             $state.go('main');
-
-          })
-          .error(function (err) {
-            SpinnersFlag.show = false;
-            Falcon.logResponse('error', err, false);
-            angular.element('body, html').animate({scrollTop: 0}, 300);
-          });
-      }
-      else {
-        Falcon.logRequest();
-        Falcon.postSubmitEntity('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' + $scope.xml, $scope.entityType)
-          .success(function (response) {
-             $scope.$parent.skipUndo = true;
-             Falcon.logResponse('success', response, false);
-             $state.go('main');
-
-          })
-          .error(function (err) {
-            Falcon.logResponse('error', err, false);
-            SpinnersFlag.show = false;
-            angular.element('body, html').animate({scrollTop: 0}, 300);
-          });
-      }
-
-      $scope.editingMode = false;
-      $scope.cloningMode = false;
-    };
-
     $scope.init();
 
   }]);
diff --git a/falcon-ui/app/js/controllers/root-controller.js b/falcon-ui/app/js/controllers/root-controller.js
index 709f6b2..b5dadaa 100644
--- a/falcon-ui/app/js/controllers/root-controller.js
+++ b/falcon-ui/app/js/controllers/root-controller.js
@@ -22,11 +22,11 @@
 
   app.controller('RootCtrl', [
     "$scope", "$timeout", "Falcon", "FileApi", "EntityModel",
-    "$state", "X2jsService", "ValidationService", "SpinnersFlag", "EntityFalcon",
+    "$state", "X2jsService", "ValidationService", "SpinnersFlag", "EntityFalcon", '$localStorage',
     function ($scope, $timeout, Falcon, FileApi,
-              EntityModel, $state, X2jsService, validationService, SpinnersFlag, EntityFalcon) {
+              EntityModel, $state, X2jsService, validationService, SpinnersFlag, EntityFalcon, $localStorage) {
 
-      var resultsPerPage = 10;
+      var resultsPerPage = 20;
 
       $scope.server = Falcon;
       $scope.validations = validationService;
@@ -35,28 +35,28 @@
 
       $scope.pages = [];
       $scope.nextPages = false;
+      $scope.hasClusters = true;
 
       $scope.handleFile = function (evt) {
         Falcon.logRequest();
         FileApi.loadFile(evt).then(function () {
           if (EntityModel.type === 'Type not recognized') {
-            Falcon.logResponse('error', {status: 'ERROR', message:'Invalid xml. File not uploaded'}, false);
+            Falcon.logResponse('error', {status: 'ERROR', message:"Entity type not recognized"}, false);
           } else {
-            Falcon.postSubmitEntity(FileApi.fileRaw, EntityModel.type).success(function (response) {
-              Falcon.logResponse('success', response, false);
-              $scope.refreshList($scope.tags);
-            }).error(function (err) {
-              Falcon.logResponse('error', err, false);
-            });
+            var entityType = EntityModel.type;
+            $state.go("forms." + entityType + ".general", {'action':'import'}, {reload: true});
           }
-
         });
       };
 
-      $scope.goPage = function(page){
-        $scope.loading = true;
+      $scope.goPage = function(page, type){
+        $scope.currentPage = page;
+        if (!(type && type == 'list')) {
+          $scope.loading = true;
+        }
+
         var offset = (page-1) * resultsPerPage;
-        EntityFalcon.searchEntities($scope.entityName, $scope.entityTags, $scope.entityType, offset).then(function() {
+        return EntityFalcon.searchEntities($scope.entityName, $scope.entityTags, $scope.entityType, offset).then(function() {
           if (EntityFalcon.data !== null) {
             $scope.actualPage = page;
             $scope.searchList = EntityFalcon.data.entity;
@@ -72,14 +72,16 @@
                 $scope.pages[i].enabled = true;
               }
             }
-            if($scope.searchList.length === 0){
+            if($scope.searchList.length === 0 && !(type && type == 'list')){
               Falcon.warningMessage("No results matched the search criteria.");
             }
             $timeout(function() {
               angular.element('#tagsInput').focus();
             }, 0, false);
             Falcon.responses.listLoaded = true;
-            $scope.loading = false;
+            if (!(type && type == 'list')) {
+              $scope.loading = false;
+            }
           }
         });
       };
@@ -128,13 +130,134 @@
       };
 
       $scope.cancel = function (type, state) {
+        var message = type + ' edition cancelled';
+        if(type === 'cluster'){
+          message = 'Create New Cluster operation cancelled'
+        }
         var cancelInfo = {
           state: state || $state.current.name,
-          message: type + ' edition canceled '
+          message: message
         };
         Falcon.logResponse('cancel', cancelInfo, type, false);
       };
 
+      $scope.displayResults = function (remove) {
+        $state.go("main");
+        $scope.refreshList($scope.tags);
+        (!remove) ? $scope.persistSearch($scope.tags) : '';
+
+      };
+
+      $scope.persistSearch = function(newTag){
+        var storedTags = $localStorage['SearchedTag'],
+            flagExit = false,
+            newval = newTag[newTag.length -1].text;
+
+
+        if(storedTags !== undefined && newTag !== undefined && newTag.length > 0){
+
+          for(var t=0; t<storedTags.length; t++){
+            if(storedTags[t].toLowerCase() === newval.toLowerCase()) {
+              flagExit = true;
+              break;
+            }
+          }
+          if(!flagExit ) {
+            storedTags.push(newval);
+            $localStorage['SearchedTag'] = storedTags;
+          }
+
+          if(storedTags.length > 5) { storedTags.splice(0,1); $localStorage['SearchedTag'] = storedTags; }
+
+        } else if(newTag !== undefined && newTag.length > 0) {
+          $localStorage['SearchedTag'] = [newval];
+        }
+
+      };
+
+      $scope.clearTags = function(){
+        $scope.tags = [];
+        $scope.refreshList($scope.tags);
+      };
+
+$scope.loadTags = function(query) {
+        var tags = new Array(), storedTags = $localStorage['SearchedTag'], tagAdded = false, tempTags = [];
+        if(!$scope.$parent.nameFounded){
+          tags.push({ text: 'Name:' + query });
+          tempTags.push('Name:' + query);
+        }
+
+        if(storedTags != undefined && storedTags.length > 0){
+          for(var e=0; e < storedTags.length; e++){
+              if(storedTags[e].toLowerCase().indexOf(query.toLowerCase()) != -1){
+                 if(tempTags.indexOf(storedTags[e]) == -1) {
+                    tags.push({ text: storedTags[e] });
+                    tempTags.push('Name:' + query);
+                    tagAdded = true;
+               }
+              }
+          }
+        }
+
+
+        if(!$scope.$parent.typeFounded && !tagAdded){
+          var queryAux = query.toUpperCase();
+          if(queryAux === "F" || queryAux === "FE" || queryAux === "FEE" || queryAux === "FEED"){
+            tags.push({ text: 'Type:feed'});
+          }
+          if(queryAux === "P" || queryAux === "PR" || queryAux === "PRO" || queryAux === "PROC" || queryAux === "PROCE"
+              || queryAux === "PROCES" || queryAux === "PROCESS"){
+            tags.push({ text: 'Type:process'});
+          }
+          if(queryAux === "M" || queryAux === "MI" || queryAux === "MIR" || queryAux === "MIRR" || queryAux === "MIRRO"
+              || queryAux === "MIRROR"){
+            tags.push({ text: 'Type:mirror'});
+          }
+        }
+        if(query !== "*"){
+          tags.push({ text: 'Tag:' + query });
+        }
+        return tags;
+      };
+
+      $scope.clusterInterfaceLabels = function(interfaceType) {
+        switch (interfaceType) {
+          case "readonly":
+            return "File System Read Endpoint Address";
+          case "write":
+            return "File System Default Address";
+          case "execute":
+            return "Yarn Resource Manager Address";
+          case "workflow":
+            return "Workflow Address";
+          case "messaging":
+            return "Message Broker Address";
+          case "registry":
+            return "Metadata Catalog Registry";
+          case "spark":
+            return "Spark";
+          default:
+            return "";
+        }
+      };
+
+      $scope.displayEntities = function (type) {
+        $state.go("main", { 'fromAction' : 'listEntities'});
+        $scope.entityType = type;
+        $scope.entityName = '';
+        $scope.entityTags = '';
+        $scope.goPage(1, 'list');
+      };
+
+      $scope.feedPropertiesLabels = {
+        queueName: 'Queue Name',
+        jobPriority: 'Job Priority',
+        timeout: 'Timeout',
+        parallel: 'Parallel',
+        maxMaps: 'Max Maps',
+        mapBandwidthKB: 'Map Bandwidth KB'
+      };
+
     }]);
 
 }());
\ No newline at end of file
diff --git a/falcon-ui/app/js/controllers/snapshot/snapshot-controller.js b/falcon-ui/app/js/controllers/snapshot/snapshot-controller.js
new file mode 100644
index 0000000..3f047ce
--- /dev/null
+++ b/falcon-ui/app/js/controllers/snapshot/snapshot-controller.js
@@ -0,0 +1,262 @@
+/**
+ * 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.
+ */
+(function () {
+  'use strict';
+
+  var snapshotModule = angular.module('app.controllers.snapshot', [ 'app.services' ]);
+
+  snapshotModule.controller('SnapshotController', [
+    "$scope", "$interval", "$controller", "Falcon", "EntityModel", "$state", "X2jsService", "DateHelper",
+    "RouteHelper", "ValidationService", "SpinnersFlag", "$timeout", "$rootScope", "clustersList",
+    "$cookieStore", "SnapshotModel", "EntityFactory", "ExtensionSerializer",
+    function ($scope, $interval, $controller, Falcon, EntityModel, $state, X2jsService, DateHelper,
+       RouteHelper, validationService, SpinnersFlag, $timeout, $rootScope, clustersList,
+       $cookieStore, snapshotModel, entityFactory, extensionSerializer) {
+
+      var stateMatrix = {
+        general : {previous : '', next : 'summary'},
+        summary : {previous : 'general', next : ''}
+      };
+
+      $scope.entityType = 'snapshot';
+      $scope.skipUndo = false;
+      $scope.clusterErrorMessage = '';
+      unwrapClusters(clustersList);
+
+      //extending root controller
+      $controller('EntityRootCtrl', {
+        $scope: $scope
+      });
+
+      $scope.$on('$destroy', function() {
+        var defaultProcess = entityFactory.newEntity('snapshot'),
+          nameIsEqual = ($scope.snapshot.name == null || $scope.snapshot.name === ""),
+          ACLIsEqual = angular.equals($scope.snapshot.ACL, defaultProcess.ACL);
+
+        if (!$scope.skipUndo && (!nameIsEqual || !ACLIsEqual)) {
+          $scope.$parent.models.snapshotModel = $scope.snapshot;
+          if ($scope.cloningMode) {
+            $scope.$parent.models.snapshotModel.clone = true;
+          }
+          if ($scope.editingMode) {
+            $scope.$parent.models.snapshotModel.edit = true;
+          }
+          $scope.$parent.cancel('snapshot', $rootScope.previousState);
+        }
+      });
+
+       $scope.isActive = function (route) {
+        return route === $state.current.name;
+      };
+
+      $scope.isCompleted = function (route) {
+        return $state.get(route).data && $state.get(route).data.completed;
+      };
+
+      $scope.loadOrCreateEntity = function() {
+        var type = $scope.entityType;
+
+        if(!snapshotModel && $scope.$parent.models.snapshotModel) {
+          var snapshotObj = $scope.$parent.models.snapshotModel;
+          $scope.$parent.models.snapshotModel = null;
+          return snapshotObj;
+        }
+        $scope.$parent.models.snapshotModel = null;
+        return snapshotModel ? extensionSerializer.serializeExtensionModel(snapshotModel, 'snapshot')
+          : entityFactory.newEntity(type);
+      };
+
+      $scope.init = function() {
+        $scope.baseInit();
+        var type = $scope.entityType;
+        $scope[type] = $scope.loadOrCreateEntity();
+        if(snapshotModel && snapshotModel.clone === true) {
+          $scope.cloningMode = true;
+          $scope.editingMode = false;
+          $scope[type].name = "";
+        } else if(snapshotModel && snapshotModel.edit === true) {
+          $scope.editingMode = true;
+          $scope.cloningMode = false;
+        } else{
+          $scope.editingMode = false;
+          $scope.cloningMode = false;
+        }
+        console.log($scope.editingMode);
+      }
+
+      $scope.init();
+
+      //----------------TAGS---------------------//
+      $scope.addTag = function () {
+        $scope.snapshot.tags.push({key: null, value: null});
+      };
+
+      $scope.removeTag = function (index) {
+        if (index >= 0 && $scope.snapshot.tags.length > 1) {
+          $scope.snapshot.tags.splice(index, 1);
+        }
+      };
+
+      //----------- Alerts -----------//
+      $scope.addAlert = function () {
+        $scope.snapshot.alerts.push($scope.snapshot.alert.email);
+        $scope.snapshot.alert = {email: ""};
+      };
+      $scope.removeAlert = function (index) {
+        $scope.snapshot.alerts.splice(index, 1);
+      };
+
+      //----------------- DATE INPUTS -------------------//
+      $scope.dateFormat = 'MM/dd/yyyy';
+
+      $scope.openStartDatePicker = function ($event) {
+        $event.preventDefault();
+        $event.stopPropagation();
+        $scope.startOpened = true;
+      };
+
+      $scope.openEndDatePicker = function ($event) {
+        $event.preventDefault();
+        $event.stopPropagation();
+        $scope.endOpened = true;
+      };
+
+      $scope.constructDate = function () {
+        if ($scope.snapshot.validity.start && $scope.snapshot.validity.end
+          && $scope.snapshot.validity.startTime && $scope.snapshot.validity.endTime) {
+          $scope.snapshot.validity.startISO = DateHelper.createISO(
+            $scope.snapshot.validity.start, $scope.snapshot.validity.startTime, $scope.snapshot.validity.timezone);
+          $scope.snapshot.validity.endISO = DateHelper.createISO(
+            $scope.snapshot.validity.end, $scope.snapshot.validity.endTime, $scope.snapshot.validity.timezone);
+        }
+      };
+
+      $scope.$watch(function () {
+        return $scope.snapshot.validity.timezone;
+      }, function () {
+        return $scope.constructDate();
+      });
+
+      $scope.validateCluster = function() {
+        if ($scope.snapshot.source.cluster === $scope.snapshot.target.cluster) {
+          $scope.clusterErrorMessage = 'Target cannot be the same as the Source';
+        } else {
+          $scope.clusterErrorMessage = '';
+        }
+      };
+
+      $scope.goNext = function (formInvalid) {
+        $state.current.data = $state.current.data || {};
+        $state.current.data.completed = !formInvalid;
+
+        SpinnersFlag.show = true;
+        if (!validationService.nameAvailable || formInvalid) {
+          validationService.displayValidations.show = true;
+          validationService.displayValidations.nameShow = true;
+          SpinnersFlag.show = false;
+          return;
+        }
+        if ($scope.clusterErrorMessage !== '') {
+          SpinnersFlag.show = false;
+          return;
+        }
+        validationService.displayValidations.show = false;
+        validationService.displayValidations.nameShow = false;
+        $state.go(RouteHelper.getNextState($state.current.name, stateMatrix));
+        angular.element('body, html').animate({scrollTop: 0}, 500);
+      };
+
+      $scope.goBack = function () {
+        SpinnersFlag.backShow = true;
+        validationService.displayValidations.show = false;
+        validationService.displayValidations.nameShow = false;
+        $state.go(RouteHelper.getPreviousState($state.current.name, stateMatrix));
+        angular.element('body, html').animate({scrollTop: 0}, 500);
+      };
+
+      $scope.save = function (formInvalid) {
+        SpinnersFlag.saveShow = true;
+
+        $state.current.data = $state.current.data || {};
+        $state.current.data.completed = !formInvalid;
+        if (!validationService.nameAvailable || formInvalid) {
+          validationService.displayValidations.show = true;
+          validationService.displayValidations.nameShow = true;
+          SpinnersFlag.saveShow = false;
+          return;
+        }
+        if ($scope.clusterErrorMessage !== '') {
+          SpinnersFlag.saveShow = false;
+          return;
+        }
+        validationService.displayValidations.show = false;
+        validationService.displayValidations.nameShow = false;
+
+        var snapshotData = extensionSerializer.convertObjectToString(
+          extensionSerializer.serializeExtensionProperties($scope.snapshot, 'snapshot'));
+
+        if($scope.editingMode) {
+          Falcon.postUpdateExtension(snapshotData, 'HDFS-SNAPSHOT-MIRRORING')
+            .success(function (response) {
+              $scope.skipUndo = true;
+              Falcon.logResponse('success', response, false);
+              SpinnersFlag.saveShow = false;
+              $state.go('main');
+
+            })
+            .error(function (err) {
+              Falcon.logResponse('error', err, false);
+              SpinnersFlag.saveShow = false;
+              angular.element('body, html').animate({scrollTop: 0}, 300);
+            });
+        } else {
+          Falcon.postSubmitExtension(snapshotData, 'HDFS-SNAPSHOT-MIRRORING')
+            .success(function (response) {
+              $scope.skipUndo = true;
+              Falcon.logResponse('success', response, false);
+              SpinnersFlag.saveShow = false;
+              $state.go('main');
+            })
+            .error(function (err) {
+              Falcon.logResponse('error', err, false);
+              SpinnersFlag.saveShow = false;
+              angular.element('body, html').animate({scrollTop: 0}, 300);
+            });
+        }
+      };
+
+      function unwrapClusters(clusters) {
+	if(clusters !== undefined && clusters !== null && clusters !== "null"){
+		$scope.clusterList = [];
+          var typeOfData = Object.prototype.toString.call(clusters.entity);
+          if(typeOfData === "[object Array]") {
+            $scope.clusterList = clusters.entity;
+          } else if(typeOfData === "[object Object]") {
+            $scope.clusterList = [clusters.entity];
+          } else {
+            console.log("type of data not recognized");
+          }
+	}
+      }
+
+      if($state.current.name !== "forms.snapshot.general"){
+        $state.go("forms.snapshot.general");
+      }
+
+    }]);
+}());
diff --git a/falcon-ui/app/js/controllers/themeController.js b/falcon-ui/app/js/controllers/themeController.js
new file mode 100644
index 0000000..513b19e
--- /dev/null
+++ b/falcon-ui/app/js/controllers/themeController.js
@@ -0,0 +1,31 @@
+/**
+ * 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.
+ */
+(function() {
+    'use strict';
+
+    var app = angular.module('app.controllers.theme', []);
+
+    app.controller('ThemeController', ["$scope", function($scope) {
+
+        $scope.theme = 'default';
+        $scope.themeChange = function(theme) {
+            $scope.theme = theme;
+        };
+    }]);
+
+}());
diff --git a/falcon-ui/app/js/directives/acl-permissions.js b/falcon-ui/app/js/directives/acl-permissions.js
new file mode 100644
index 0000000..98ef508
--- /dev/null
+++ b/falcon-ui/app/js/directives/acl-permissions.js
@@ -0,0 +1,103 @@
+/**
+ * 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.
+ */
+(function () {
+  'use strict';
+
+  var aclPermissionsModule = angular.module('app.directives.acl-permissions',[]);
+
+  aclPermissionsModule.directive('aclPermissions', ['$timeout',function ($timeout) {
+      return {
+          restrict : 'EA',
+          templateUrl: 'html/directives/aclPermissions.html',
+          link: function ($scope, element, attrs) {
+
+            var permission = {
+              'owner' : 0,
+              'groups' : 0,
+              'others' : 0
+            }
+
+            function getNestedProperty(obj, path) {
+              var paths = path.split('.'),
+              current = obj;
+              for (var i = 0; i < paths.length; i++) {
+                if (current[paths[i]] == undefined) {
+                  return undefined;
+                } else {
+                  current = current[paths[i]];
+                }
+              }
+              return current;
+            };
+
+            function setNestedProperty(obj, path, value) {
+              var paths = path.split('.'),
+              current = obj;
+              for (var i = 0; i < paths.length -1; i++) {
+                  current = current[paths[i]];
+              }
+              current[paths[paths.length - 1]] = value;
+            };
+
+            var defaultPermission = getNestedProperty($scope, attrs.aclModel);
+
+            function setPermission() {
+              if(defaultPermission){
+                var permissionArray = defaultPermission.substring(2).split("");
+                permissionArray.forEach(function(value, index){
+                  var permissionValue = parseInt(value);
+                  var type = Object.keys(permission)[index];
+                  permission[type] = value;
+                  var checked = element.find('input[name=' + type + ']');
+                  var readPermission = 4,
+                      writePermission = 2,
+                      executePermission = 1;
+                  if(permissionValue & readPermission){
+                    angular.element(checked[0]).attr('checked','checked');
+                  }
+                  if(permissionValue & writePermission){
+                    angular.element(checked[1]).attr('checked','checked');
+                  }
+                  if(permissionValue & executePermission){
+                    angular.element(checked[2]).attr('checked','checked');
+                  }
+                });
+              }
+            };
+
+            $scope.calculatePermission = function(type){
+              var checked = element.find('input[name=' + type + ']:checked');
+              var total = 0;
+              angular.forEach(checked,function(element){
+                total += parseInt(element.value);
+              });
+              permission[type] = total;
+              var effectivePermission = '0x';
+              angular.forEach(permission, function(value,key){
+                effectivePermission = effectivePermission + value;
+              });
+              setNestedProperty($scope, attrs.aclModel, effectivePermission);
+            };
+
+            $timeout(function () {
+              setPermission();
+            }, 0);
+          }
+      };
+  }]);
+})();
diff --git a/falcon-ui/app/js/directives/chart.js b/falcon-ui/app/js/directives/chart.js
index f9d6983..f630a9f 100644
--- a/falcon-ui/app/js/directives/chart.js
+++ b/falcon-ui/app/js/directives/chart.js
@@ -453,7 +453,7 @@
   });
 
 
-  d3Module.controller('chartCtrl', [ "$scope", "Falcon", function($scope, Falcon) {
+  d3Module.controller('chartCtrl', [ "$scope", "Falcon", "DateHelper", function($scope, Falcon, DateHelper) {
 
     var formatFL = d3.time.format.utc("%A %d"),
         formatSL = d3.time.format.utc("%b %Y"),
@@ -500,7 +500,7 @@
 
     };
 
-    $scope.dateFormat ='MM/dd/yyyy';
+    $scope.dateFormat = DateHelper.getLocaleDateFormat();
     $scope.openDatePicker = function($event) {
       $event.preventDefault();
       $event.stopPropagation();
diff --git a/falcon-ui/app/js/directives/check-name.js b/falcon-ui/app/js/directives/check-name.js
index bea0e22..edb3697 100644
--- a/falcon-ui/app/js/directives/check-name.js
+++ b/falcon-ui/app/js/directives/check-name.js
@@ -20,24 +20,28 @@
 
   var checkNameModule = angular.module('app.directives.check-name', ['app.services.falcon', 'app.services.validation']);
 
-  checkNameModule.directive('checkName', [ "ValidationService", "$timeout", "Falcon", "EntityFalcon", function (validationService, $timeout, Falcon, EntityFalcon) {
+  checkNameModule.directive('checkName', [ "ValidationService", "$timeout", "Falcon", "EntityFalcon","$q", function (validationService, $timeout, Falcon, EntityFalcon,$q) {
     return {
-      replace: false,
       scope: {
         checkName: "="
       },
-      restrict: 'A',
-      link: function (scope, element) {
-
-        var options = scope.checkName,
-          //entities = scope.$parent.lists[options.type + 'List'],
-          type = options.type,
-          name = element[0].value;
-
+    require: ['ngModel','^form'],
+    link: function(scope, element, attrs, ctrls) {
+      var options = scope.checkName,
+        //entities = scope.$parent.lists[options.type + 'List'],
+        type = options.type,
+        name = element[0].value,
+        errorMsg,
+        ngModelCtrl = ctrls[0],
+        formCtrl = ctrls[1];
         if (!options.check) {
           return;
         }
 
+        element.parent()
+          .append("<div class='nameInputDisplay hidden'>" +
+              "</div><label class='custom-danger nameValidationMessage'></label>");
+
         scope.$watch(function () {
           return element[0].value;
         }, function () {
@@ -45,121 +49,81 @@
             if (element[0].value.length === 0) {
               element.addClass('empty');
             }
-            getNameAvailability(function() {
-              getMessage();
-              if (element.hasClass('ng-valid') && validationService.nameAvailable) {
-                angular.element('.nameValidationMessage').addClass('hidden');
-              } else {
-                element.parent().addClass("showValidationStyle");
-                angular.element('.nameValidationMessage').removeClass('hidden');
-                element.removeClass('empty');
-              }
-            });
           }
-
-
         });
 
-        function getLabels() {
-          element.parent()
-            .append("<div class='nameInputDisplay hidden'>" +
-                "</div><label class='custom-danger nameValidationMessage'></label>");
-        }
-
-        function getNameAvailability(fn) {
-          name = element[0].value;
-          if (name.length === 0) {
-            angular.element('.nameInputDisplay').addClass('hidden');
-          }else{
-            Falcon.logRequest();
-            Falcon.getEntityDefinition(type, name).success(function (data) {
-              Falcon.logResponse('success', data, false, true);
-              validationService.nameAvailable = false;
-              if (name.length === 0) {
-                angular.element('.nameInputDisplay').addClass('hidden');
-              } else if (!validationService.nameAvailable && name.length > 0 && element.hasClass('ng-valid')) {
-                angular.element('.nameInputDisplay').html('Name unavailable')
-                    .removeClass('custom-success hidden').addClass('custom-danger');
-              } else if (validationService.nameAvailable && name.length > 0 && element.hasClass('ng-valid')) {
-                angular.element('.nameInputDisplay').html('Name available')
-                    .removeClass('custom-danger hidden').addClass('custom-success');
-              } else if (element.hasClass('ng-invalid-pattern') && name.length > 0) {
-                angular.element('.nameInputDisplay').addClass('hidden');
+        scope.$watch(function(){
+          return ngModelCtrl.$valid;
+        }, function(newValue, oldValue){
+          if(ngModelCtrl.$dirty && newValue){
+            errorMsg = "Name available";
+            validationService.nameAvailable = true;
+          }else {
+              if(ngModelCtrl.$error.uniqueName){
+                  errorMsg = validationService.messages.name.unavailable;
+                  validationService.nameAvailable = false;
+              }else if(ngModelCtrl.$error.required){
+                  errorMsg = validationService.messages.name.empty;
+              }else if(ngModelCtrl.$error.pattern){
+                  errorMsg = validationService.messages.name.patternInvalid;
               }
-              if (fn) { fn(); } //>callback
-            }).error(function (err) {
-              Falcon.logResponse('error', err, false, true);
-              validationService.nameAvailable = true;
-              if (name.length === 0) {
-                angular.element('.nameInputDisplay').addClass('hidden');
-              } else if (!validationService.nameAvailable && name.length > 0 && element.hasClass('ng-valid')) {
-                angular.element('.nameInputDisplay').html('Name unavailable')
-                    .removeClass('custom-success hidden').addClass('custom-danger');
-              } else if (validationService.nameAvailable && name.length > 0 && element.hasClass('ng-valid')) {
-                angular.element('.nameInputDisplay').html('Name available')
-                    .removeClass('custom-danger hidden').addClass('custom-success');
-              } else if (element.hasClass('ng-invalid-pattern') && name.length > 0) {
-                angular.element('.nameInputDisplay').addClass('hidden');
-              }
-              if (fn) { fn(); } //>callback
-            });
           }
+        });
 
-        }
-
-        function getMessage() {
-          if (name.length === 0) {
-            element.addClass('empty');
-            angular.element('.nameValidationMessage').html(validationService.messages.name.empty).addClass('hidden');
-
-          } else if (!validationService.nameAvailable && name.length > 0 && element.hasClass('ng-valid')) {
-            element.addClass('empty');
-            angular.element('.nameValidationMessage')
-              .html(validationService.messages.name.unavailable).addClass('hidden');
-
-          } else if (element.hasClass('ng-invalid-pattern') && name.length > 0) {
-            element.removeClass('empty');
+        scope.$watch(function(){
+          return errorMsg;
+        },function(newValue, oldValue){
+          if(newValue && newValue.length > 0){
             element.parent().addClass("showValidationStyle");
-            angular.element('.nameValidationMessage')
-              .html(validationService.messages.name.patternInvalid).removeClass('hidden');
-
-          } else if (element.hasClass('ng-valid') && name.length > 0) {
-            element.parent().removeClass("showValidationStyle");
-            angular.element('.nameValidationMessage').addClass('hidden');
-          }
-        }
-        function addListeners() {
-          element.bind('keyup', function () {
-            getNameAvailability();
-            getMessage();
-          });
-          element.bind('focus', function () {
             element.removeClass('empty');
-          });
-          element.bind('blur', function () {
-            if (element.hasClass('ng-valid') && validationService.nameAvailable) {
-              angular.element('.nameValidationMessage').addClass('hidden');
-
-            } else {
-              element.parent().addClass("showValidationStyle");
-              angular.element('.nameValidationMessage').removeClass('hidden');
-              element.removeClass('empty');
+            if(errorMsg ==='Name available'){
+              angular.element('.nameInputDisplay').removeClass('custom-danger hidden').addClass('custom-success');
+              angular.element('.nameInputDisplay').text(newValue);
+              angular.element('.nameValidationMessage').addClass("hidden");
+            }else{
+              angular.element('.nameValidationMessage').text(newValue);
+              angular.element('.nameValidationMessage').removeClass('hidden').addClass('custom custom-danger');
+              angular.element('.nameInputDisplay').addClass("hidden");
             }
+          }else{
+            element.parent().removeClass("showValidationStyle");
+          }
+        });
+
+        ngModelCtrl.$asyncValidators.uniqueName = function isNameAvailable(modelValue,viewValue) {
+          Falcon.logRequest();
+          var def = $q.defer();
+          Falcon.getEntityDefinition(type, modelValue).success(function (data) {
+            Falcon.logResponse('success', data, false, true);
+            def.reject();
+          }).error(function (err) {
+            Falcon.logResponse('error', err, false, true);
+            def.resolve();
           });
+          return def.promise;
         }
 
-        function init() {
-          getLabels();
-          addListeners();
-          getNameAvailability();
-          getMessage();
+        element.bind('blur',function(event){
+            if(ngModelCtrl.$valid){
+              angular.element('.nameValidationMessage').addClass('hidden');
+            }else{
+              angular.element('.nameValidationMessage').removeClass('hidden');
+            }
+        });
 
-          $timeout(function () { element.trigger('focus'); }, 20);
-        }
+        element.bind('focus',function(event){
+            if(formCtrl.$submitted && ngModelCtrl.$pristine && ngModelCtrl.$error.required){
+              angular.element('.nameValidationMessage').removeClass('hidden');
+              element.parent().addClass('showValidationStyle');
+            }else{
+              angular.element('.nameValidationMessage').addClass('hidden');
+              element.parent().removeClass('showValidationStyle');
+            }
+        });
 
-        init();
+        $timeout(function () { element.trigger('focus'); }, 0);
       }
-    };
+    }
   }]);
 
-}());
\ No newline at end of file
+}());
diff --git a/falcon-ui/app/js/directives/dependencies-graph.js b/falcon-ui/app/js/directives/dependencies-graph.js
index c8faa74..bd37358 100644
--- a/falcon-ui/app/js/directives/dependencies-graph.js
+++ b/falcon-ui/app/js/directives/dependencies-graph.js
@@ -18,17 +18,16 @@
 (function () {
   'use strict';
 
-	var entitiesListModule = angular.module('app.directives.dependencies-graph', ['app.services' ]);
+  var entitiesListModule = angular.module('app.directives.dependencies-graph', ['app.services' ]);
 
-  entitiesListModule.controller('DependenciesGraphCtrl', ['$scope', 'Falcon', 'X2jsService', '$window', 'EncodeService', 'EntityModel',
-                                      function($scope, Falcon, X2jsService, $window, encodeService, EntityModel) {
+  entitiesListModule.controller('DependenciesGraphCtrl', ['$scope', 'Falcon', 'X2jsService', '$window', 'EncodeService',
+    function($scope, Falcon, X2jsService, $window, encodeService) {
 
 
 
-  }]);
+    }]);
 
-  entitiesListModule.directive('dependenciesGraph', ["$timeout", 'Falcon', '$filter', '$state', 'X2jsService', 'EntityModel',
-                                              function($timeout, Falcon, $filter, $state, X2jsService, EntityModel) {
+  entitiesListModule.directive('dependenciesGraph', ["$timeout", 'Falcon', '$filter', function($timeout, Falcon, $filter) {
     return {
       scope: {
         type: "=",
@@ -49,16 +48,17 @@
             return type + '/' + name;
           }
 
-          function getOrCreateNode(type, name) {
+          function getOrCreateNode(type, name, tag) {
             var k = key(type, name);
             if (nodes[k] !== undefined)
               return nodes[k];
 
             var n = {
-              "id": next_node_id++,
+              "guid": next_node_id++,
               "type": type,
               "name": name,
-              "dependency": []
+              "arrowDirections": tag,
+              "children": []
             };
             nodes[k] = n;
             return n;
@@ -81,7 +81,8 @@
                   var l = data.entity.length;
                   for (var i = 0; i < l; ++i) {
                     var e = data.entity[i];
-                    var d = getOrCreateNode(e.type, e.name);
+                    var tag = e.hasOwnProperty('tags') && e.tags !== null ? e.tags.tag : "Input";
+                    var d = getOrCreateNode(e.type, e.name, tag);
                     var src = null, dst = null;
                     if (d.type === "cluster") {
                       src = node; dst = d;
@@ -94,11 +95,10 @@
                         src = node; dst = d;
                       }
                     }
-                    //console.log(src.name + '->' + dst.name);
-                    src.dependency.push(dst.id);
+                    src.children.push(d);
                   }
 
-                  done_callback(nodes);
+                  done_callback(node);
                 })
                 .error(function (err) {
                   Falcon.logResponse('error', err, false, true);
@@ -106,181 +106,141 @@
           }
 
           function load() {
-            var n = getOrCreateNode(entity_type, entity_name);
+            var n = getOrCreateNode(entity_type, entity_name, "Input");
             loadEntry(n);
           }
           load();
         };
 
-        var plotDependencyGraph = function(nodes, element) {
-          var NODE_WIDTH  = 150;
-          var NODE_HEIGHT = 50;
-          var RECT_ROUND  = 10;
-          var SEPARATION  = 40;
-          var UNIVERSAL_SEP = 80;
+        var plotDependencyGraph = function(nodes, container) {
+          var element = d3.select(container.element),
+              width = Math.max(container.width, 960),
+              height = Math.max(container.height, 300);
 
-          var svg = d3.select(element).append("svg");
-
+          var margin = {
+            top: 30,
+            right: 30,
+            bottom: 30,
+            left: 80
+          };
+          width = width - margin.right - margin.left;
+          height = height - margin.top - margin.bottom;
           // Function to draw the lines of the edge
-          var LINE_FUNCTION = d3.svg.line()
-              .x(function(d) { return d.x; })
-              .y(function(d) { return d.y; })
-              .interpolate('basis');
-
-          // Mappining from id to a node
-          var node_by_id = {};
-
-          var layout = null;
-
-          /**
-           * Calculate the intersection point between the point p and the edges of the rectangle rect
-           **/
-          function intersectRect(rect, p) {
-            var cx = rect.x, cy = rect.y, dx = p.x - cx, dy = p.y - cy, w = rect.width / 2, h = rect.height / 2;
-
-            if (dx == 0)
-              return { "x": p.x, "y": rect.y + (dy > 0 ? h : -h) };
-
-            var slope = dy / dx;
-
-            var x0 = null, y0 = null;
-            if (Math.abs(slope) < rect.height / rect.width) {
-              // intersect with the left or right edges of the rect
-              x0 = rect.x + (dx > 0 ? w : -w);
-              y0 = cy + slope * (x0 - cx);
-            } else {
-              y0 = rect.y + (dy > 0 ? h : -h);
-              x0 = cx + (y0 - cy) / slope;
-            }
-
-            return { "x": x0, "y": y0 };
-          }
-
-          function drawNode(u, value) {
-            var root = svg.append('g').classed('node', true)
-                .attr('transform', 'translate(' + -value.width/2 + ',' + -value.height/2 + ')');
-
-            var node = node_by_id[u];
+          var i = 0;
 
 
+          var tree = d3.layout.tree()
+              .size([height, width]);
 
-
-            var fo = root.append('foreignObject')
-                .attr('x', value.x)
-                .attr('y', value.y)
-                .attr('width', value.width)
-                .attr('height', value.height)
-                .attr('class', 'foreignObject');
-
-
-            var txt = fo.append('xhtml:div')
-                .text(node.name)
-                .classed('node-name', true)
-                .classed('node-name-' + node.type, true);
-
-            var rect = root.append('rect')
-              .attr('width', value.width)
-              .attr('height', value.height)
-              .attr('x', value.x)
-              .attr('y', value.y)
-              .attr('rx', RECT_ROUND)
-              .attr('ry', RECT_ROUND)
-
-              .on('click', function () {
-
-                Falcon.logRequest();
-                Falcon.getEntityDefinition(node.type.toLowerCase(), node.name)
-                  .success(function (data) {
-                    Falcon.logResponse('success', data, false, true);
-                    var entityModel = X2jsService.xml_str2json(data);
-                    EntityModel.type = node.type.toLowerCase();
-                    EntityModel.name = node.name;
-                    EntityModel.model = entityModel;
-                    $state.go('entityDetails');
-                  })
-                  .error(function (err) {
-                    Falcon.logResponse('error', err, false, false);
-                  });
-
-
+          var diagonal = d3.svg.diagonal()
+              .projection(function(d) {
+                return [d.y, d.x];
               });
 
-          }
+          var svg = element.select('svg')
+              .attr('width', width + margin.right + margin.left)
+              .attr('height', height + margin.top + margin.bottom)
+              .select('g')
+              .attr('transform',
+              'translate(' + margin.left + ',' + margin.right + ')');
 
-          function drawEdge(e, u, v, value) {
-            var root = svg.append('g').classed('edge', true);
+          svg.append("svg:defs").append("svg:marker").attr("id", "output-arrow").attr("viewBox", "0 0 10 10")
+              .attr("refX", 20).attr("refY", 5).attr("markerUnits", "strokeWidth").attr("markerWidth", 6)
+              .attr("markerHeight", 9).attr("orient", "auto").append("svg:path").attr("d", "M 0 0 L 10 5 L 0 10 z");
 
-            root.append('path')
-                .attr('marker-end', 'url(#arrowhead)')
-                .attr('d', function() {
-                  var points = value.points;
+          //marker for input type graph
+          svg.append("svg:defs")
+              .append("svg:marker")
+              .attr("id", "input-arrow")
+              .attr("viewBox", "0 0 10 10")
+              .attr("refX", -7)
+              .attr("refY", 5)
+              .attr("markerUnits", "strokeWidth")
+              .attr("markerWidth", 6)
+              .attr("markerHeight", 9)
+              .attr("orient", "auto")
+              .append("svg:path")
+              .attr("d", "M -2 5 L 8 0 L 8 10 z");
 
-                  var source = layout.node(u);
-                  var target = layout.node(v);
+          var root = nodes;
+          function update(source) {
 
-                  var p0 = points.length === 0 ? target : points[0];
-                  var p1 = points.length === 0 ? source : points[points.length - 1];
+            // Compute the new tree layout.
+            var nodes1 = tree.nodes(source).reverse(),
+                links = tree.links(nodes1);
+            // Normalize for fixed-depth.
+            nodes1.forEach(function(d) {
+              d.y = d.depth * 180;
+            });
 
-                  points.unshift(intersectRect(source, p0));
-                  points.push(intersectRect(target, p1));
+            // Declare the nodes�
+            var node = svg.selectAll('g.node')
+                .data(nodes1, function(d) {
 
-                  return LINE_FUNCTION(points);
+                  return d.id || (d.id = ++i);
                 });
+            // Enter the nodes.
+            var nodeEnter = node.enter().append('g')
+                .attr('class', 'node')
+                .attr('transform', function(d) {
+                  return 'translate(' + d.y + ',' + d.x + ')';
+                });
+
+            nodeEnter.append("image")
+                .attr("xlink:href", function(d) {
+                  //return d.icon;
+                  return d.type === 'cluster' ? 'css/img/cloud.png' : 'css/img/feed.png';
+                })
+                .attr("x", "-18px")
+                .attr("y", "-18px")
+                .attr("width", "34px")
+                .attr("height", "34px");
+
+            nodeEnter.append('text')
+                .attr('x', function(d) {
+                  return d.children || d._children ?
+                  (5) * -1 : +15;
+                })
+                .attr('dy', '-1.75em')
+                .attr('text-anchor', function(d) {
+                  return d.children || d._children ? 'middle' : 'middle';
+                })
+                .text(function(d) {
+                  return d.name;
+                })
+
+                .style('fill-opacity', 1);
+
+            // Declare the links�
+            var link = svg.selectAll('path.link')
+                .data(links, function(d) {
+                  return d.target.id;
+                });
+
+            link.enter().insert('path', 'g')
+                .attr('class', 'link')
+              //.style('stroke', function(d) { return d.target.level; })
+                .style('stroke', 'green')
+                .attr('d', diagonal);
+            link.attr("marker-start", function (d) {
+              if(d.target.arrowDirections==="Input")
+                return "url(#input-arrow)";
+            }); //if input
+            link.attr("marker-end", function (d) {
+              if(d.target.arrowDirections==="Output")
+                return "url(#output-arrow)";
+            }); //if outPut
+
           }
 
-          function postRender() {
-            svg
-                .append('svg:defs')
-                .append('svg:marker')
-                .attr('id', 'arrowhead')
-                .attr('viewBox', '0 0 10 10')
-                .attr('refX', 8)
-                .attr('refY', 5)
-                .attr('markerUnits', 'strokewidth')
-                .attr('markerWidth', 8)
-                .attr('markerHeight', 5)
-                .attr('orient', 'auto')
-                .attr('style', 'fill: #333')
-                .append('svg:path')
-                .attr('d', 'M 0 0 L 10 5 L 0 10 z');
-          }
+          update(root);
 
-          function plot() {
-            var g = new dagre.Digraph();
 
-            for (var key in nodes) {
-              var n = nodes[key];
-              node_by_id[n.id] = n;
-              g.addNode(n.id, { "width": NODE_WIDTH, "height": NODE_HEIGHT });
-            }
-
-            for (var key in nodes) {
-              var n = nodes[key];
-              for (var i = 0, l = n.dependency.length; i < l; ++i) {
-                var d = n.dependency[i];
-                g.addEdge(null, n.id, d);
-              }
-            }
-
-            layout = dagre.layout()
-                .universalSep(UNIVERSAL_SEP).rankSep(SEPARATION)
-                .run(g);
-            layout.eachEdge(drawEdge);
-            layout.eachNode(drawNode);
-
-            var graph = layout.graph();
-
-            svg.attr("width", graph.width);
-            svg.attr("height", graph.height);
-
-            postRender();
-          }
-          plot();
         };
 
         var visualizeDependencyGraph = function(type, name) {
           loadDependencyGraph(type, name, function(nodes) {
-            plotDependencyGraph(nodes, element[0]);
+            plotDependencyGraph(nodes, {element:element[0], height:element[0].offsetHeight,width:element[0].offsetWidth});
           });
         };
 
diff --git a/falcon-ui/app/js/directives/directives.js b/falcon-ui/app/js/directives/directives.js
index 9c388ea..e1366b6 100644
--- a/falcon-ui/app/js/directives/directives.js
+++ b/falcon-ui/app/js/directives/directives.js
@@ -29,9 +29,21 @@
     'app.directives.validation-message',
     'chart-module',
     'app.directives.dependencies-graph',
-    'app.directives.lineage-graph'
+    'app.directives.lineage-graph',
+    'tooltip',
+    'app.directives.feed-cluster-partitions',
+    'app.directives.acl-permissions',
+    'app.directives.interface-endpoint'
   ]);
 
+  directivesModule.directive('errorNav', function () {
+    return {
+      replace: false,
+      restrict: 'A',
+      templateUrl: 'html/error.html'
+    };
+  });
+
   directivesModule.directive('navHeader', function () {
     return {
       replace: false,
@@ -74,7 +86,7 @@
       template: '{{output}}',
       link: function (scope) {
         if (scope.value.quantity) {
-          scope.output = scope.prefix + ' ' + scope.value.quantity + ' ' + scope.value.unit;
+          scope.output = (scope.prefix ? scope.prefix + ' ' : '') + scope.value.quantity + ' ' + scope.value.unit;
         } else {
           scope.output = 'Not specified';
         }
@@ -87,16 +99,21 @@
       restrict: 'E',
       replace: false,
       scope: {
-        ngModel: '='
+        ngModel: '=',
+        required: '='
       },
       templateUrl: 'html/directives/timeZoneSelectDv.html'
     };
   });
 
-  directivesModule.directive('simpleDate', ['$filter', function ($filter) {
+  directivesModule.directive('simpleDate', ['$filter','DateHelper', function ($filter, DateHelper) {
     return {
       require: 'ngModel',
       link: function (scope, element, attrs, ngModelController) {
+        var dateFormat = DateHelper.getLocaleDateFormat();
+
+        element.attr('title','Date should be entered in '+ dateFormat.toLowerCase() + ' format.');
+
         ngModelController.$parsers.push(function (data) {
           //convert data from view format to model format
           return data;
@@ -104,7 +121,7 @@
         ngModelController.$formatters.push(function (date) {
           //convert data from model format to view format
           if (date !== "") {
-            date = $filter('date')(date, 'MM/dd/yyyy');
+            date = $filter('date')(date, dateFormat);
           }
           return date;
         });
@@ -135,6 +152,7 @@
           resize();
         });
         var resize = function () {
+          element[0].style.resize = "vertical";
           element[0].style.height = "250px";
           return element[0].style.height = "" + element[0].scrollHeight + "px";
         };
@@ -179,4 +197,259 @@
     };
   }]);
 
-}());
\ No newline at end of file
+  directivesModule.directive('scrollToError', ['$timeout',function ($timeout) {
+      return {
+          require : "^form",
+          restrict : 'A',
+          link: function (scope, element,attrs,form) {
+              element.on('mousedown',function(event){
+                event.preventDefault();
+              });
+              element.on('click', function () {
+                  var formElement = angular.element('form[name="' + form.$name + '"]');
+                  var firstInvalid = formElement[0].querySelector('.ng-invalid');
+                  $timeout(function() {
+                    if (firstInvalid) {
+                      firstInvalid.blur();
+                      firstInvalid.focus();
+                    }
+                  },0)
+              });
+          }
+      };
+  }]);
+
+  directivesModule.directive('feedFormClusterDetails', function () {
+    return {
+      replace: false,
+      restrict: 'EA',
+      templateUrl: 'html/feed/feedFormClusterDetailsTpl.html',
+      link: function ($scope, $element) {
+        $scope.$on('forms.feed.clusters:submit', function() {
+          $scope.cluster.isAccordionOpened = $element.find('.ng-invalid').length > 0;
+        });
+      }
+    };
+  });
+
+  directivesModule.directive('feedFormDataSource', function () {
+    return {
+      replace: false,
+      restrict: 'EA',
+      templateUrl: 'html/feed/feedFormDataSourceTpl.html',
+      link: function ($scope, $element) {
+        if($scope.feed.dataTransferType === 'import'){
+          $scope.dataSourceType = 'source';
+          $scope.dataTransferAction = 'extract';
+          if ($scope.feed.import === undefined) {
+            $scope.feed.import = { 'source' : {
+              'extract' : {'type' : 'full', 'mergepolicy' : 'snapshot'}, 'columnsType' : 'all', 'fields' : {} } };
+          } else {
+            if ($scope.feed.import.source.fields && $scope.feed.import.source.fields.exlcudes) {
+              $scope.feed.import.source.columnsType = 'exclude';
+            } else if ($scope.feed.import.source.fields && $scope.feed.import.source.fields.includes) {
+              $scope.feed.import.source.columnsType = 'include';
+            } else {
+              $scope.feed.import.source.columnsType = 'all';
+            }
+          }
+        } else {
+          $scope.dataSourceType = 'target';
+          $scope.dataTransferAction = 'load';
+          if ($scope.feed.export === undefined) {
+            $scope.feed.export = { 'target' : {
+              'load' : {'type' : 'updateonly' }, 'columnsType' : 'all', 'fields' : {} } };
+          } else {
+            if ($scope.feed.export.target.fields && $scope.feed.export.target.fields.exlcudes) {
+              $scope.feed.export.target.columnsType = 'exclude';
+            } else if ($scope.feed.export.target.fields && $scope.feed.export.target.fields.includes) {
+              $scope.feed.export.target.columnsType = 'include';
+            } else {
+              $scope.feed.export.target.columnsType = 'all';
+            }
+          }
+        }
+      }
+    };
+  });
+
+  directivesModule.directive('feedFormHiveStorage', ['EntityFactory',function (entityFactory) {
+    return {
+      replace: false,
+      scope: {
+        storageInfo:"=",
+        add:"&",
+        show:'&',
+        toggleAdvancedOptions:'&',
+        openDatePicker:'&',
+        constructDate:'&',
+        reset:'&',
+        validations:'=',
+        required:'='
+      },
+      restrict: 'EA',
+      templateUrl: 'html/directives/feedFormHiveStorage.html',
+      link: function ($scope) {
+        $scope.valiationMessage= JSON.stringify($scope.validations.messages.number);
+        if($scope.storageInfo.type ==='target'){
+          $scope.buttonText = 'Destination';
+        }else{
+          $scope.buttonText = 'Source'
+        }
+        if(!$scope.storageInfo.clusterStorage){
+          $scope.cluster = entityFactory.newCluster($scope.storageInfo.type, 'hive', "", null);
+        }else{
+          $scope.cluster = $scope.storageInfo.clusterStorage;
+        }
+        $scope.toggleAdvancedOptions = function(){
+          $scope.showingAdvancedOptions = !$scope.showingAdvancedOptions;
+        };
+        $scope.reset = function(){
+          $scope.storageInfo.feedClusters.forEach(function (cluster, index) {
+            if (cluster.name === $scope.cluster.name && cluster.type === $scope.cluster.type) {
+              $scope.storageInfo.feedClusters[index]
+                = entityFactory.newCluster($scope.storageInfo.type, 'hive', '', null);
+            }
+          });
+        };
+        $scope.checkDuplicateClusterOnTarget = function() {
+          if ($scope.cluster.type === 'target'
+            && $scope.cluster.name !== ''
+            && $scope.storageInfo.feedClusters.filter(function (cluster) {
+            return cluster.name === $scope.cluster.name && cluster.type === 'source';
+          }).length > 0) {
+            return true;
+          }
+          return false;
+        };
+        $scope.findClusterExists = function(newClusterName, newClusterType, clusterList) {
+          $scope.clusterExists = clusterList.filter(function (cluster) {
+            return cluster.name === newClusterName && cluster.type === newClusterType;
+          }).length > 1;
+        };
+        $scope.addCluster = function(clusterDetails){
+          var cluster = entityFactory.newCluster(clusterDetails.type, clusterDetails.dataTransferType, "", null);
+          $scope.storageInfo.feedClusters.unshift(cluster);
+          //$scope.add({value : clusterDetails});
+          //$scope.reset();
+        };
+        $scope.deleteCluster = function() {
+          $scope.storageInfo.feedClusters.forEach(function (cluster, index) {
+            if (cluster.name === $scope.cluster.name && cluster.type === $scope.cluster.type) {
+              $scope.storageInfo.feedClusters.splice(index, 1);
+            }
+          });
+        };
+      }
+    };
+  }]);
+
+  directivesModule.directive('feedFormHdfsStorage', ['EntityFactory',function (entityFactory) {
+    return {
+      replace: false,
+      scope: {
+        storageInfo:"=",
+        add:"&",
+        show:'&',
+        toggleAdvancedOptions:'&',
+        openDatePicker:'&',
+        constructDate:'&',
+        reset:'&',
+        validations:'=',
+        required:'='
+      },
+      restrict: 'EA',
+      templateUrl: 'html/directives/feedFormHdfsStorage.html',
+      require:"^form",
+      link: function ($scope, $element, $attrs, $form) {
+        $scope.valiationMessage= JSON.stringify($scope.validations.messages.number);
+        if($scope.storageInfo.type ==='target'){
+          $scope.buttonText = 'Destination';
+        }else{
+          $scope.buttonText = 'Source'
+        }
+        if(!$scope.storageInfo.clusterStorage){
+          $scope.cluster = entityFactory.newCluster($scope.storageInfo.type, 'hdfs', "", null);
+        }else{
+          $scope.cluster = $scope.storageInfo.clusterStorage;
+          if (!$scope.cluster.storage.fileSystem) {
+            $scope.cluster.storage = { 'fileSystem' : entityFactory.newClusterFileSystem() };
+          }
+        }
+        $scope.toggleAdvancedOptions = function(){
+          $scope.showingAdvancedOptions = !$scope.showingAdvancedOptions;
+        };
+        $scope.reset = function(){
+          $scope.storageInfo.feedClusters.forEach(function (cluster, index) {
+            if (cluster.name === $scope.cluster.name && cluster.type === $scope.cluster.type) {
+              $scope.storageInfo.feedClusters[index]
+                = entityFactory.newCluster($scope.storageInfo.type, 'hdfs', '', null);
+            }
+          });
+        };
+        $scope.checkDuplicateClusterOnTarget = function() {
+          if ($scope.cluster.type === 'target'
+            && $scope.cluster.name !== ''
+            && $scope.storageInfo.feedClusters.filter(function (cluster) {
+            return cluster.name === $scope.cluster.name && cluster.type === 'source';
+          }).length > 0) {
+            return true;
+          }
+          return false;
+        };
+        $scope.findClusterExists = function(newClusterName, newClusterType, clusterList) {
+          $scope.clusterExists = clusterList.filter(function (cluster) {
+            return cluster.name === newClusterName && cluster.type === newClusterType;
+          }).length > 1;
+        };
+        $scope.addCluster = function(clusterDetails, feedForm){
+          var cluster = entityFactory.newCluster(clusterDetails.type, clusterDetails.dataTransferType, "", null);
+          $scope.storageInfo.feedClusters.unshift(cluster);
+          //$scope.add({value : clusterDetails});
+          //$scope.reset();
+        };
+        $scope.deleteCluster = function() {
+          $scope.storageInfo.feedClusters.forEach(function (cluster, index) {
+            if (cluster.name === $scope.cluster.name && cluster.type === $scope.cluster.type) {
+              $scope.storageInfo.feedClusters.splice(index, 1);
+            }
+          });
+        };
+      }
+    };
+  }]);
+
+  directivesModule.directive('simpleDatePicker', ['$filter','DateHelper', function ($filter, DateHelper) {
+    return {
+      require: 'ngModel',
+      link: function ($scope, $element, $attrs, ngModelController) {
+        $element.datepicker();
+
+        var dateFormat = DateHelper.getLocaleDateFormat();
+
+        $element.attr('title','Date should be entered in '+ dateFormat.toLowerCase() + ' format.');
+
+        ngModelController.$parsers.push(function (date) {
+          //convert data from view format to model format
+          return new Date(date);
+        });
+        ngModelController.$formatters.push(function (date) {
+          //convert data from model format to view format
+          if (date !== "") {
+            date = $filter('date')(date, dateFormat);
+          }
+          return date;
+        });
+      }
+    };
+  }]);
+
+  directivesModule.directive('mandatoryField', function () {
+    return {
+      replace: false,
+      restrict: 'E',
+      template: '<span>*</span>'
+    };
+  });
+
+}());
diff --git a/falcon-ui/app/js/directives/entities-search-list.js b/falcon-ui/app/js/directives/entities-search-list.js
index 3e76f63..9171fbd 100644
--- a/falcon-ui/app/js/directives/entities-search-list.js
+++ b/falcon-ui/app/js/directives/entities-search-list.js
@@ -20,8 +20,16 @@
 
 	var entitiesListModule = angular.module('app.directives.entities-search-list', ['app.services' ]);
 
-  entitiesListModule.controller('EntitiesSearchListCtrl', ['$scope', 'Falcon', 'X2jsService', '$window', 'EncodeService',
-                                      function($scope, Falcon, X2jsService, $window, encodeService) {
+  entitiesListModule.controller('EntitiesSearchListCtrl', ['$scope', 'Falcon', 'X2jsService', '$window', 'EncodeService', '$rootScope',
+                                      function($scope, Falcon, X2jsService, $window, encodeService, $rootScope) {
+
+    $scope.isSafeMode = function() {
+      return $rootScope.safeMode;
+    };
+
+    $scope.isSuperUser = function() {
+      return $rootScope.superUser;
+    };
 
     $scope.downloadEntity = function(type, name) {
       Falcon.logRequest();
@@ -47,7 +55,7 @@
     };
   });
 
-  entitiesListModule.directive('entitiesSearchList', ["$timeout", 'Falcon', function($timeout, Falcon) {
+  entitiesListModule.directive('entitiesSearchList', ["$timeout", 'Falcon', "$state", "$rootScope", function($timeout, Falcon, $state, $rootScope) {
     return {
       scope: {
         input: "=",
@@ -78,7 +86,7 @@
         }, true);
 
         scope.selectedRows = [];
-        scope.mirrorTag = "_falcon_mirroring_type";
+        scope.mirrorTag = "_falcon_extension_name";
 
         scope.checkedRow = function (name) {
           var isInArray = false;
@@ -159,6 +167,17 @@
               scope.selectedDisabledButtons = { schedule:true, suspend:true, resume:true };
             }
 
+            var selectedClusterRows = scope.selectedRows.filter(function(entity) {
+              return entity.type == 'cluster' || entity.type == 'CLUSTER';
+            });
+            if (selectedClusterRows && selectedClusterRows.length > 0) {
+              scope.selectedDisabledButtons = {
+                schedule:true,
+                suspend:true,
+                resume:true
+              };
+            }
+
             if(scope.selectedRows.length === 0) {
               scope.selectedDisabledButtons = {
                 schedule:true,
@@ -166,6 +185,7 @@
                 resume:true
               };
             }
+
           }, 50);
         };
 
@@ -209,16 +229,48 @@
         };
 
         scope.scopeEdit = function () {
-          scope.edit(scope.selectedRows[0].type, scope.selectedRows[0].name);
+          var selectedRow = scope.selectedRows[0];
+          if (selectedRow.type.toLowerCase() === 'cluster' && (!$rootScope.safeMode || !$rootScope.superUser)) {
+            return;
+          }
+          var state = 'forms.' + selectedRow.type.toLowerCase();
+          var selectedEntity = scope.input.filter(function(value){
+            return value.name === selectedRow.name;
+          });
+          if(selectedRow.type.toLowerCase() === 'process' && selectedEntity[0].tags
+            && scope.isMirror(selectedEntity[0].tags.tag)){
+            var mirrorType = scope.getMirrorType(selectedEntity[0].tags.tag);
+            if (mirrorType === 'hdfs-mirror' || mirrorType === 'hive-mirror') {
+              state = 'forms.dataset';
+            } else {
+              state = 'forms.snapshot';
+            }
+          }
+          $state.go(state, {'name' : selectedRow.name, 'action' : 'edit'});
         };
+
         scope.scopeClone = function () {
-          scope.clone(scope.selectedRows[0].type, scope.selectedRows[0].name);
+          var selectedRow = scope.selectedRows[0];
+          var state = 'forms.' + selectedRow.type.toLowerCase();
+          var selectedEntity = scope.input.filter(function(value){
+            return value.name === selectedRow.name;
+          });
+          if(selectedRow.type.toLowerCase() === 'process' && selectedEntity[0].tags
+            && scope.isMirror(selectedEntity[0].tags.tag)){
+            var mirrorType = scope.getMirrorType(selectedEntity[0].tags.tag);
+            if (mirrorType === 'hdfs-mirror' || mirrorType === 'hive-mirror') {
+              state = 'forms.dataset';
+            } else {
+              state = 'forms.snapshot';
+            }
+          }
+          $state.go(state, {'name' : selectedRow.name, 'action' : 'clone'});
         };
         scope.goEntityDefinition = function(name, type) {
           scope.entityDefinition(name, type);
         };
         scope.goEntityDetails = function(name, type) {
-          scope.entityDetails(name, type);
+          $state.go('entityDetails',{'name' : name, 'type' : type});
         };
 
         scope.scopeRemove = function () {
@@ -279,19 +331,31 @@
           return flag;
         };
 
+        scope.getMirrorType = function(tags) {
+          if (tags.indexOf('_falcon_extension_name=HDFS-MIRRORING') !== -1) {
+            return "hdfs-mirror";
+          } else if (tags.indexOf('_falcon_extension_name=HDFS-SNAPSHOT-MIRRORING') !== -1) {
+            return "snapshot";
+          } else if (tags.indexOf('_falcon_extension_name=HIVE-MIRRORING') !== -1) {
+            return "hive-mirror";
+          }
+        };
+
         scope.displayIcon = function (type, tags) {
           if(type === "FEED"){
             return "entypo download";
-          }else if(type === "PROCESS" && scope.isMirror(tags)){
+          } else if(type === "CLUSTER"){
+            return "entypo archive";
+          } else if(type === "PROCESS" && scope.isMirror(tags)){
             return "glyphicon glyphicon-duplicate";
-          }else{
+          } else{
             return "entypo cycle";
           }
         };
 
         scope.displayType = function (tag) {
           var tagKeyVal = tag.split("=");
-          if(tagKeyVal[0] === "_falcon_mirroring_type"){
+          if(tagKeyVal[0] === "_falcon_extension_name"){
             return tagKeyVal[1];
           }else{
             return "";
@@ -302,4 +366,4 @@
     };
   }]);
 
-})();
\ No newline at end of file
+})();
diff --git a/falcon-ui/app/js/directives/feed-cluster-partitions.js b/falcon-ui/app/js/directives/feed-cluster-partitions.js
new file mode 100644
index 0000000..8fadb90
--- /dev/null
+++ b/falcon-ui/app/js/directives/feed-cluster-partitions.js
@@ -0,0 +1,119 @@
+/**
+ * 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.
+ */
+(function () {
+  'use strict';
+
+  var module = angular.module('app.directives.feed-cluster-partitions', []);
+
+  module.directive('feedFormClusterPartitions', function () {
+    return {
+      replace: false,
+      restrict: 'EA',
+      templateUrl: 'html/feed/feedFormClusterPartitionsTpl.html',
+      link: function ($scope, $element) {
+        function addFeedPartitionsIfNotExists(partitions, existingPartitions) {
+          var runningPartition;
+          for (var i=0;i<partitions.length;i++) {
+            runningPartition = partitions[i];
+            if (runningPartition.trim() != "") {
+              var matchedPartitions = existingPartitions.filter(function(element) {
+                return element.partitionName === runningPartition;
+              });
+              if (matchedPartitions.length < 1) {
+                existingPartitions.splice(i, 0, {"partitionName" : runningPartition,
+                  "partitionText" : "",
+                  "mapping" : "any"});
+              }
+            }
+          }
+        }
+
+        function removeClusterPartitionsIfNotExists(existingPartitions, partitions) {
+          var runningPartition;
+          var updatedExistingParititons = [];
+          for (var i=0;i<existingPartitions.length;i++) {
+            runningPartition = existingPartitions[i];
+            var matchedPartitions = partitions.filter(function(element) {
+              return element === runningPartition.partitionName;
+            });
+            if (matchedPartitions.length > 0) {
+              updatedExistingParititons.push(runningPartition);
+            }
+          }
+          return updatedExistingParititons;
+        }
+
+        function createDefaultClusterPartitions() {
+          var currentPartitions = ($scope.feedPartitions.trim() === "") ? [] : $scope.feedPartitions.split(",");
+          addFeedPartitionsIfNotExists(currentPartitions, $scope.partitionList);
+          $scope.partitionList = removeClusterPartitionsIfNotExists($scope.partitionList, currentPartitions);
+        }
+
+        function createSpecificClusterPartitions() {
+          var partitionExpressions = $scope.cluster.partition.split("/");
+          var currentPartitions = ($scope.feedPartitions.trim() === "") ? [] : $scope.feedPartitions.split(",");
+          partitionExpressions.forEach(function(partitionExpression, index) {
+            $scope.partitionList.push({"partitionName" : currentPartitions[index],
+              "partitionText" : (partitionExpression == "*") ? "" : partitionExpression,
+              "mapping" : (partitionExpression == "*") ? "any" : "mappedPartition"
+            });
+          });
+        }
+
+        $scope.preparePartitionExpression = function(partitionList) {
+          var partitionExpression = "";
+          for(var i=0;i<partitionList.length;i++) {
+            var partition = partitionList[i];
+            if (partition.mapping === 'any') {
+              partitionExpression = partitionExpression.concat("*");
+            } else if (partition.mapping === 'mappedPartition') {
+              partitionExpression = partitionExpression.concat(partition.partitionText);
+            }
+            if (i < partitionList.length-1) {
+              partitionExpression = partitionExpression.concat("/");
+            }
+          }
+          $scope.cluster.partition = partitionExpression;
+        }
+
+        $scope.partitionList = [];
+        if ($scope.cluster.partition != undefined) {
+          $scope.selectPartition = true;
+          createSpecificClusterPartitions()
+        } else {
+          $scope.selectPartition = false;
+          createDefaultClusterPartitions();
+        }
+
+        $scope.$watch('selectPartition', function() {
+          if ($scope.selectPartition) {
+            $scope.preparePartitionExpression($scope.partitionList);
+          } else {
+            delete $scope.cluster.partition;
+          }
+        });
+
+        $scope.$on('feed:createClusterPartitions', function() {
+          createDefaultClusterPartitions();
+          $scope.preparePartitionExpression($scope.partitionList);
+        });
+      }
+    };
+  });
+
+})();
diff --git a/falcon-ui/app/js/directives/instances-list.js b/falcon-ui/app/js/directives/instances-list.js
index 269c7c1..a984f53 100644
--- a/falcon-ui/app/js/directives/instances-list.js
+++ b/falcon-ui/app/js/directives/instances-list.js
@@ -20,8 +20,8 @@
 
 	var entitiesListModule = angular.module('app.directives.instances-list', ['app.services' ]);
 
-  entitiesListModule.controller('InstancesListCtrl', ['$scope', 'Falcon', 'X2jsService', '$window', 'EncodeService',
-                                      function($scope, Falcon, X2jsService, $window, encodeService) {
+  entitiesListModule.controller('InstancesListCtrl', ['$scope', 'Falcon', 'X2jsService', '$window', 'EncodeService', "DateHelper",
+                                      function($scope, Falcon, X2jsService, $window, encodeService, DateHelper) {
 
     //$scope.downloadEntity = function(logURL) {
     //  Falcon.logRequest();
@@ -51,7 +51,7 @@
     };
   });
 
-  entitiesListModule.directive('instancesList', ["$timeout", 'Falcon', '$filter', function($timeout, Falcon, $filter) {
+  entitiesListModule.directive('instancesList', ["$timeout", 'Falcon', '$filter', 'DateHelper', function($timeout, Falcon, $filter, DateHelper) {
     return {
       scope: {
         input: "=",
@@ -70,7 +70,7 @@
       controller: 'InstancesListCtrl',
       restrict: "EA",
       templateUrl: 'html/directives/instancesListDv.html',
-      link: function (scope) {
+      link: function (scope, element) {
         scope.server = Falcon;
         scope.$watch(function () { return scope.input; }, function() {
           scope.selectedRows = [];
@@ -86,6 +86,36 @@
         scope.endSortOrder = "desc";
         scope.statusSortOrder = "desc";
 
+        var dateFormat = DateHelper.getLocaleDateFormat().toLowerCase();
+        scope.dateFormat = DateHelper.getLocaleDateFormat() + ' HH:mm';
+        var dateSeperator;
+        if(dateFormat.indexOf('.') >=0){
+          dateSeperator = '.';
+        }else if (dateFormat.indexOf('-') >=0) {
+          dateSeperator='-'
+        }else {
+          dateSeperator = '/';
+        }
+
+        var splitDate = dateFormat.split(dateSeperator);
+        var mask ='';
+        splitDate.forEach(function(value, index){
+          if(value.indexOf('d')>=0){
+            mask = mask + dateSeperator +'00'
+          }else if (value.indexOf('m')>=0) {
+            mask =  mask + dateSeperator +'00'
+          }else if (value.indexOf('y')>=0) {
+            if(value.length > 2){
+              mask =  mask + dateSeperator +'0000'
+            }else{
+              mask =  mask + dateSeperator +'00'
+            }
+          }
+        });
+        mask = mask + ' 00:00';
+        console.log(mask);
+        element.find('.dateInput').mask(mask.substr(1));
+
         scope.checkedRow = function (name) {
           var isInArray = false;
           scope.selectedRows.forEach(function(item) {
@@ -201,6 +231,16 @@
           }, 50);
         };
 
+        var CountDown = function(countParam){
+		this.count=countParam;
+		this.down=function(){
+			this.count--;
+		}
+		this.isDone=function(){
+			return this.count<1;
+		}
+        };
+
         var isSelected = function(item){
           var selected = false;
           scope.selectedRows.forEach(function(entity) {
@@ -230,107 +270,119 @@
           scope.instanceDetails(instance);
         };
 
-        var resumeInstance = function (type, name, start, end, refresh) {
+        var resumeInstance = function (type, name, start, end, countDown) {
           Falcon.logRequest();
           Falcon.postResumeInstance(type, name, start, end)
             .success(function (message) {
+              countDown.down();
               Falcon.logResponse('success', message, type);
-              if(refresh){
+              if(countDown.isDone()){
                 scope.$parent.refreshInstanceList(scope.type, scope.name, scope.start, scope.end);
               }
             })
             .error(function (err) {
+              countDown.down();
               Falcon.logResponse('error', err, type);
 
             });
         };
 
-        var suspendInstance = function (type, name, start, end, refresh) {
+        var suspendInstance = function (type, name, start, end, countDown) {
           Falcon.logRequest();
           Falcon.postSuspendInstance(type, name, start, end)
             .success(function (message) {
+              countDown.down();
               Falcon.logResponse('success', message, type);
-              if(refresh){
+              if(countDown.isDone()){
                 scope.$parent.refreshInstanceList(scope.type, scope.name, scope.start, scope.end);
               }
             })
             .error(function (err) {
+              countDown.down();
               Falcon.logResponse('error', err, type);
 
             });
         };
 
-        var reRunInstance = function (type, name, start, end, refresh) {
+        var reRunInstance = function (type, name, start, end, countDown) {
           Falcon.logRequest();
           Falcon.postReRunInstance(type, name, start, end)
             .success(function (message) {
-              Falcon.logResponse('success', message, type);
-              if(refresh){
-                scope.$parent.refreshInstanceList(scope.type, scope.name, scope.start, scope.end);
+              countDown.down();
+              if(countDown.isDone()){
+                $timeout(function () {
+                  Falcon.logResponse('success', message, type);
+                  scope.$parent.refreshInstanceList(scope.type, scope.name, scope.start, scope.end);
+                }, 10000);
+              } else {
+                Falcon.logResponse('success', message, type);
               }
             })
             .error(function (err) {
+              countDown.down();
               Falcon.logResponse('error', err, type);
 
             });
         };
 
-        var killInstance = function (type, name, start, end, refresh) {
+        var killInstance = function (type, name, start, end, countDown) {
           Falcon.logRequest();
           Falcon.postKillInstance(type, name, start, end)
             .success(function (message) {
+              countDown.down();
               Falcon.logResponse('success', message, type);
-              if(refresh){
+              if(countDown.isDone()){
                 scope.$parent.refreshInstanceList(scope.type, scope.name, scope.start, scope.end);
               }
             })
             .error(function (err) {
+              countDown.down();
               Falcon.logResponse('error', err, type);
 
             });
         };
 
         scope.scopeResume = function () {
+          var countDown=new CountDown(scope.selectedRows.length);
           for(var i = 0; i < scope.selectedRows.length; i++) {
             var multiRequestType = scope.selectedRows[i].type.toLowerCase();
             Falcon.responses.multiRequest[multiRequestType] += 1;
             var start = scope.selectedRows[i].instance;
             var end = addOneMin(start);
-            var refresh = i === scope.selectedRows.length-1 ? true : false;
-            resumeInstance(scope.type, scope.name, start, end, refresh);
+            resumeInstance(scope.type, scope.name, start, end, countDown);
           }
         };
 
         scope.scopeSuspend = function () {
+          var countDown=new CountDown(scope.selectedRows.length);
           for(var i = 0; i < scope.selectedRows.length; i++) {
             var multiRequestType = scope.selectedRows[i].type.toLowerCase();
             Falcon.responses.multiRequest[multiRequestType] += 1;
             var start = scope.selectedRows[i].instance;
             var end = addOneMin(start);
-            var refresh = i === scope.selectedRows.length-1 ? true : false;
-            suspendInstance(scope.type, scope.name, start, end, refresh);
+            suspendInstance(scope.type, scope.name, start, end, countDown);
           }
         };
 
         scope.scopeRerun = function () {
+          var countDown=new CountDown(scope.selectedRows.length);
           for(var i = 0; i < scope.selectedRows.length; i++) {
             var multiRequestType = scope.selectedRows[i].type.toLowerCase();
             Falcon.responses.multiRequest[multiRequestType] += 1;
             var start = scope.selectedRows[i].instance;
             var end = addOneMin(start);
-            var refresh = i === scope.selectedRows.length-1 ? true : false;
-            reRunInstance(scope.type, scope.name, start, end, refresh);
+            reRunInstance(scope.type, scope.name, start, end, countDown);
           }
         };
 
         scope.scopeKill = function () {
+          var countDown=new CountDown(scope.selectedRows.length);
           for(var i = 0; i < scope.selectedRows.length; i++) {
             var multiRequestType = scope.selectedRows[i].type.toLowerCase();
             Falcon.responses.multiRequest[multiRequestType] += 1;
             var start = scope.selectedRows[i].instance;
             var end = addOneMin(start);
-            var refresh = i === scope.selectedRows.length-1 ? true : false;
-            killInstance(scope.type, scope.name, start, end, refresh);
+            killInstance(scope.type, scope.name, start, end, countDown);
           }
         };
 
@@ -355,319 +407,135 @@
           scope.changePagesSet(offset, page, visiblePages-1, scope.start, scope.end);
         };
 
+        scope.startDateValid = true;
+        scope.endDateValid = true;
+
         scope.validateDate = function(event, type){
           var which = event.which || event.keyCode;
           var charStr = String.fromCharCode(which);
-          event.preventDefault();
-          if (
-            which == 8 || which == 46 || which == 37 || which == 39 ||
-            (which >= 48 && which <= 57)
-          ) {
-            if(type == "start"){
-              if(scope.startFilter){
-                if(scope.startFilter.length == 1){
-                  //mm
-                  var prevChar = scope.startFilter.substring(scope.startFilter.length-1);
-                  prevChar = parseInt(prevChar);
-                  if(prevChar < 1){
-                    if(prevChar == 0 && charStr == 0){
+          var valueEntered = event.target.value + charStr;
+          var dateSeperator;
+          if(dateFormat.indexOf('.') >=0){
+            dateSeperator = '.';
+          }else if (dateFormat.indexOf('-') >=0) {
+            dateSeperator='-'
+          }else {
+            dateSeperator = '/';
+          }
 
-                    }else if(charStr <= 9){
-                      scope.startFilter += charStr + "/";
-                    }
-                  }else{
-                    if(charStr <= 2){
-                      scope.startFilter += charStr + "/";
-                    }
-                  }
-                }else if(scope.startFilter.length == 2){
-                  //mm/
-                  if(charStr <= 3){
-                    scope.startFilter += "/" + charStr;
-                  }
-                }else if(scope.startFilter.length == 3){
-                  //mm/d
-                  if(charStr <= 3){
-                    scope.startFilter += charStr;
-                  }
-                }else if(scope.startFilter.length == 4){
-                  //mm/dd
-                  var prevChar = scope.startFilter.substring(scope.startFilter.length-1);
-                  prevChar = parseInt(prevChar);
-                  if(prevChar < 3){
-                    if(prevChar == 0 && charStr == 0){
+          var splitDateFormat = dateFormat.split(dateSeperator);
+          var dateArr = [];
 
-                    }else if(charStr <= 9){
-                      scope.startFilter += charStr + "/";
-                    }
-                  }else{
-                    if(charStr <= 1){
-                      scope.startFilter += charStr + "/";
-                    }
-                  }
-                }else if(scope.startFilter.length == 5){
-                  //mm/dd/
-                  if(charStr <= 2){
-                    scope.startFilter += "/" + charStr;
-                  }
-                }else if(scope.startFilter.length == 6){
-                  //mm/dd/y
-                  if(charStr <= 2){
-                    scope.startFilter += charStr;
-                  }
-                }else if(scope.startFilter.length == 7){
-                  //mm/dd/yy
-                  if(charStr <= 9){
-                    scope.startFilter += charStr;
-                  }
-                }else if(scope.startFilter.length == 8){
-                  //mm/dd/yyy
-                  if(charStr <= 9){
-                    scope.startFilter += charStr;
-                  }
-                }else if(scope.startFilter.length == 9){
-                  //mm/dd/yyyy
-                  if(charStr <= 9){
-                    scope.startFilter += charStr + " ";
-                  }
-                }else if(scope.startFilter.length == 10){
-                  //mm/dd/yyyy
-                  if(charStr <= 2){
-                    scope.startFilter += " " + charStr;
-                  }
-                }else if(scope.startFilter.length == 11){
-                  //mm/dd/yyyy h
-                  if(charStr <= 2){
-                    scope.startFilter += charStr;
-                  }
-                }else if(scope.startFilter.length == 12){
-                  //mm/dd/yyyy hh
-                  var prevChar = scope.startFilter.substring(scope.startFilter.length-1);
-                  prevChar = parseInt(prevChar);
-                  if(prevChar < 2){
-                    if(charStr <= 9){
-                      scope.startFilter += charStr + ":";
-                    }
-                  }else{
-                    if(charStr <= 4){
-                      scope.startFilter += charStr + ":";
-                    }
-                  }
-                }else if(scope.startFilter.length == 13){
-                  //mm/dd/yyyy hh:
-                  if(charStr <= 5){
-                    scope.startFilter += ":" + charStr;
-                  }
-                }else if(scope.startFilter.length == 14){
-                  //mm/dd/yyyy hh:m
-                  if(charStr <= 5){
-                    scope.startFilter += charStr;
-                  }
-                }else if(scope.startFilter.length == 15){
-                  //mm/dd/yyyy hh:mm
-                  if(charStr <= 9){
-                    scope.startFilter += charStr;
-                    scope.startFilterError = false;
-                  }
-                }
-              }else{
-                //m
-                if(charStr <= 1){
-                  scope.startFilter = charStr;
-                }
-              }
-            }else{
-              if(scope.endFilter){
-                if(scope.endFilter.length == 1){
-                  //mm
-                  var prevChar = scope.endFilter.substring(scope.endFilter.length-1);
-                  prevChar = parseInt(prevChar);
-                  if(prevChar < 1){
-                    if(prevChar == 0 && charStr == 0){
-
-                    }else if(charStr <= 9){
-                      scope.endFilter += charStr + "/";
-                    }
-                  }else{
-                    if(charStr <= 2){
-                      scope.endFilter += charStr + "/";
-                    }
-                  }
-                }else if(scope.endFilter.length == 2){
-                  //mm/
-                  if(charStr <= 3){
-                    scope.endFilter += "/" + charStr;
-                  }
-                }else if(scope.endFilter.length == 3){
-                  //mm/d
-                  if(charStr <= 3){
-                    scope.endFilter += charStr;
-                  }
-                }else if(scope.endFilter.length == 4){
-                  //mm/dd
-                  var prevChar = scope.endFilter.substring(scope.endFilter.length-1);
-                  prevChar = parseInt(prevChar);
-                  if(prevChar < 3){
-                    if(prevChar == 0 && charStr == 0){
-
-                    }else if(charStr <= 9){
-                      scope.endFilter += charStr + "/";
-                    }
-                  }else{
-                    if(charStr <= 1){
-                      scope.endFilter += charStr + "/";
-                    }
-                  }
-                }else if(scope.endFilter.length == 5){
-                  //mm/dd/
-                  if(charStr <= 2){
-                    scope.endFilter += "/" + charStr;
-                  }
-                }else if(scope.endFilter.length == 6){
-                  //mm/dd/y
-                  if(charStr <= 2){
-                    scope.endFilter += charStr;
-                  }
-                }else if(scope.endFilter.length == 7){
-                  //mm/dd/yy
-                  if(charStr <= 9){
-                    scope.endFilter += charStr;
-                  }
-                }else if(scope.endFilter.length == 8){
-                  //mm/dd/yyy
-                  if(charStr <= 9){
-                    scope.endFilter += charStr;
-                  }
-                }else if(scope.endFilter.length == 9){
-                  //mm/dd/yyyy
-                  if(charStr <= 9){
-                    scope.endFilter += charStr + " ";
-                  }
-                }else if(scope.endFilter.length == 10){
-                  //mm/dd/yyyy
-                  if(charStr <= 2){
-                    scope.endFilter += " " + charStr;
-                  }
-                }else if(scope.endFilter.length == 11){
-                  //mm/dd/yyyy h
-                  if(charStr <= 2){
-                    scope.endFilter += charStr;
-                  }
-                }else if(scope.endFilter.length == 12){
-                  //mm/dd/yyyy hh
-                  var prevChar = scope.endFilter.substring(scope.endFilter.length-1);
-                  prevChar = parseInt(prevChar);
-                  if(prevChar < 2){
-                    if(charStr <= 9){
-                      scope.endFilter += charStr + ":";
-                    }
-                  }else{
-                    if(charStr <= 4){
-                      scope.endFilter += charStr + ":";
-                    }
-                  }
-                }else if(scope.endFilter.length == 13){
-                  //mm/dd/yyyy hh:
-                  if(charStr <= 5){
-                    scope.endFilter += ":" + charStr;
-                  }
-                }else if(scope.endFilter.length == 14){
-                  //mm/dd/yyyy hh:m
-                  if(charStr <= 5){
-                    scope.endFilter += charStr;
-                  }
-                }else if(scope.endFilter.length == 15){
-                  //mm/dd/yyyy hh:mm
-                  if(charStr <= 9){
-                    scope.endFilter += charStr;
-                    scope.endFilterError = false;
-                  }
-                }
-              }else{
-                //m
-                if(charStr <= 1){
-                  scope.endFilter = charStr;
-                }
-              }
+          var completeDate = valueEntered.split(" ");
+          var dates = completeDate[0].split(dateSeperator);
+          var timeArr = [];
+          if(completeDate[1]){
+            completeDate[1].split(":")
+          }
+          splitDateFormat.forEach(function(value, index){
+            if(value.indexOf('d')>=0){
+              dateArr[0] = dates[index];
+            }else if (value.indexOf('m')>=0) {
+              dateArr[1] = dates[index];
+            }else if (value.indexOf('y')>=0) {
+              dateArr[2] = dates[index];
             }
+          });
+          var dateValid = checkDateTimeValidity(dateArr, timeArr);
+          if(type === 'start'){
+            scope.startDateValid = dateValid;
+          }else if(type === 'end'){
+            scope.endDateValid = dateValid;
           }
         };
 
+        var checkDateTimeValidity = function(dateArr, timeArr){
+          var dateValid = false;
+         if(dateArr[2]){
+           if(parseInt(dateArr[2]) > 0 && parseInt(dateArr[2]) <= 9999){
+             dateValid = true;
+           }else {
+             return false;
+           }
+         }
+         if(dateArr[1]){
+           if(parseInt(dateArr[1]) > 0 && parseInt(dateArr[1]) <= 12){
+             dateValid = true;
+           }else {
+             return false;
+           }
+         }
+         if(dateArr[0]) {
+           if(parseInt(dateArr[0]) > 0 && parseInt(dateArr[0]) <= daysInMonth(dateArr[1], dateArr[2])){
+             dateValid = true;
+           }else {
+             return false;
+           }
+         }
+         if(timeArr[0]){
+           if(parseInt(timeArr[0]) >= 0 && parseInt(timeArr[0]) < 24){
+             dateValid = true;
+           }else {
+             return false;
+           }
+         }
+         if(timeArr[1]){
+           if(parseInt(timeArr[1]) >= 0 && parseInt(timeArr[1] < 60)){
+             dateValid = true;
+           }else {
+             return false;
+           }
+         }
+         return dateValid;
+        }
+
         var changeDateFormat = function(date){
+
+          var dateSeperator;
+          if(dateFormat.indexOf('.') >=0){
+            dateSeperator = '.';
+          }else if (dateFormat.indexOf('-') >=0) {
+            dateSeperator='-'
+          }else {
+            dateSeperator = '/';
+          }
+
+          var splitDateFormat = dateFormat.split(dateSeperator);
+          var dateArr = [];
+
           var completeDate = date.split(" ");
-          var dates = completeDate[0].split("/");
-          date = dates[2] + "-" + dates[0] + "-" + dates[1] + "T" + completeDate[1] + "Z";
+          var dates = completeDate[0].split(dateSeperator);
+
+          splitDateFormat.forEach(function(value, index){
+            if(value.indexOf('d')>=0){
+              dateArr[0] = dates[index];
+            }else if (value.indexOf('m')>=0) {
+              dateArr[1] = dates[index];
+            }else if (value.indexOf('y')>=0) {
+              dateArr[2] = dates[index];
+            }
+          });
+
+          date = dateArr[2] + "-" + dateArr[1] + "-" + dateArr[0] + "T" + completeDate[1] + "Z";
           return date;
         };
 
         var validateDateFormat = function(date){
-          var char = date.substring(0, 1);
-          if(isNaN(char)){
-            return false;
-          }
-          char = date.substring(1, 2);
-          if(isNaN(char)){
-            return false;
-          }
-          char = date.substring(2, 3);
-          if(char != "/"){
-            return false;
-          }
-          char = date.substring(3, 4);
-          if(isNaN(char)){
-            return false;
-          }
-          char = date.substring(4, 5);
-          if(isNaN(char)){
-            return false;
-          }
-          char = date.substring(5, 6);
-          if(char != "/"){
-            return false;
-          }
-          char = date.substring(6, 7);
-          if(isNaN(char)){
-            return false;
-          }
-          char = date.substring(7, 8);
-          if(isNaN(char)){
-            return false;
-          }
-          char = date.substring(8, 9);
-          if(isNaN(char)){
-            return false;
-          }
-          char = date.substring(9, 10);
-          if(isNaN(char)){
-            return false;
-          }
-          char = date.substring(10, 11);
-          if(char != " "){
-            return false;
-          }
-          char = date.substring(11, 12);
-          if(isNaN(char)){
-            return false;
-          }
-          char = date.substring(12, 13);
-          if(isNaN(char)){
-            return false;
-          }
-          char = date.substring(13, 14);
-          if(char != ":"){
-            return false;
-          }
-          char = date.substring(14, 15);
-          if(isNaN(char)){
-            return false;
-          }
-          char = date.substring(15, 16);
-          if(isNaN(char)){
-            return false;
-          }
-          return true;
+          var date = new Date(changeDateFormat(date));
+          return !isNaN(date.getTime());
         };
 
+        function daysInMonth(month, year) {
+          switch (month) {
+            case 2 :
+              return (year % 4 == 0 && year % 100) || year % 400 == 0 ? 29 : 28;
+            case 9 : case 4 : case 6 : case 11 :
+              return 30;
+            default :
+              return 31
+    }
+}
+
         scope.filterInstances = function(orderBy){
           var start;
           var end;
@@ -686,9 +554,11 @@
               if(!validateDateFormat(scope.startFilter)){
                 executeFilter = false;
                 scope.startFilterError = true;
+                scope.startDateValid = false;
               }else if(!validateDateFormat(scope.endFilter)){
                 executeFilter = false;
                 scope.endFilterError = true;
+                scope.endDateValid = false;
               }else{
                 start = changeDateFormat(scope.startFilter);
                 var filterStartDate = new Date(start);
diff --git a/falcon-ui/app/js/directives/interface-endpoint.js b/falcon-ui/app/js/directives/interface-endpoint.js
new file mode 100644
index 0000000..1e3cef9
--- /dev/null
+++ b/falcon-ui/app/js/directives/interface-endpoint.js
@@ -0,0 +1,85 @@
+/**
+ * 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.
+ */
+(function () {
+  'use strict';
+
+  var interfaceEndpointModule = angular.module('app.directives.interface-endpoint', []);
+
+  interfaceEndpointModule.directive('interfaceEndpoint', [ "$timeout", function ($timeout) {
+    return {
+      require: 'ngModel',
+
+      link: function($scope, $element, $attrs, ngModelCtrl) {
+        function applyDefaultStyle() {
+          $element.removeClass('endpointChanged');
+          $element.addClass('endpointDefault');
+        }
+
+        function applyModifiedStyle() {
+          $element.removeClass('endpointDefault');
+          $element.addClass('endpointChanged');
+        }
+
+        $scope.$watch(function(){
+          return $scope.clusterForm.$submitted;
+        },function(){
+          if(!$element.attr('disabled') && ngModelCtrl.$pristine){
+            $element.parent().find('.validationMessageGral').show();
+            ngModelCtrl.$setValidity('pattern', false);
+          }else if(ngModelCtrl.$dirty && ngModelCtrl.$error.pattern && !$element.attr('disabled')){
+            $element.parent().find('.validationMessageGral').show();
+            ngModelCtrl.$setValidity('pattern', false);
+          }else if($element.attr('disabled')){
+            $element.parent().find('.validationMessageGral').hide();
+            ngModelCtrl.$setValidity('pattern', true);
+          }
+        });
+
+        $scope.$watch(function(){
+          if(!$scope.clusterForm.$submitted && ngModelCtrl.$pristine){
+            $element.parent().find('.validationMessageGral').hide();
+            ngModelCtrl.$setValidity('pattern', true);
+          }else if(ngModelCtrl.$dirty && ngModelCtrl.$error.pattern){
+            $element.parent().find('.validationMessageGral').show();
+            ngModelCtrl.$setValidity('pattern', false);
+          }
+          return $element[0].value;
+        },function(newValue, oldValue){
+          if(newValue){
+            if(newValue === oldValue && newValue.indexOf('<hostname>') >= 0){
+              applyDefaultStyle();
+            }else{
+              applyModifiedStyle();
+            }
+          }
+        });
+
+        $element.focus(function(){
+          applyModifiedStyle();
+        });
+
+        $element.bind('blur',function(){
+          if(ngModelCtrl.$pristine && $element[0].value.indexOf('<hostname>') >= 0){
+            applyDefaultStyle();
+          }
+        });
+      }
+    }
+  }]);
+
+}());
diff --git a/falcon-ui/app/js/directives/lineage-graph.js b/falcon-ui/app/js/directives/lineage-graph.js
index 883d2a7..aeb014d 100644
--- a/falcon-ui/app/js/directives/lineage-graph.js
+++ b/falcon-ui/app/js/directives/lineage-graph.js
@@ -240,7 +240,7 @@
                 .attr('markerWidth', 8)
                 .attr('markerHeight', 5)
                 .attr('orient', 'auto')
-                .attr('style', 'fill: #ccc')
+                //.attr('style', 'fill: #ccc')
                 .append('svg:path')
                 .attr('d', 'M 0 0 L 10 5 L 0 10 z');
           }
@@ -248,7 +248,7 @@
           var bb = layout.graph();
           $('#lineage-graph').attr('width', bb.width);
           //$('#lineage-graph').attr('width', '100%');
-          $('#lineage-graph').attr('height', bb.height);
+         //$('#lineage-graph').attr('height', bb.height);
           post_render();
         }
 
diff --git a/falcon-ui/app/js/directives/ng-tags-input.js b/falcon-ui/app/js/directives/ng-tags-input.js
index 1039011..aa0d4d5 100644
--- a/falcon-ui/app/js/directives/ng-tags-input.js
+++ b/falcon-ui/app/js/directives/ng-tags-input.js
@@ -859,7 +859,7 @@
             span.css('display', 'none');
           }
 
-          element.css('width', width ? width + threshold + 'px' : '');
+          //element.css('width', width ? width + threshold + 'px' : '');
 
           return originalValue;
         };
@@ -1145,4 +1145,4 @@
     );
   }]);
 
-}());
\ No newline at end of file
+}());
diff --git a/falcon-ui/app/js/directives/server-messages.js b/falcon-ui/app/js/directives/server-messages.js
index 6bd6ea9..475f279 100644
--- a/falcon-ui/app/js/directives/server-messages.js
+++ b/falcon-ui/app/js/directives/server-messages.js
@@ -19,18 +19,53 @@
   'use strict';
 
 	var serverMessagesModule = angular.module('app.directives.server-messages', []);
-	
-	serverMessagesModule.directive('serverMessages', function () {
+
+	serverMessagesModule.directive('serverMessages', ["$rootScope", "$timeout","Falcon", function ($rootScope, $timeout, Falcon) {
 		return {
 			replace:false,
 			restrict: 'E',
 			templateUrl: 'html/directives/serverMessagesDv.html',
       link: function (scope, element) {
-
+        scope.close = function(){
+          Falcon.hideNotifs();
+        };
         //scope.allMessages
+        var hideoutTimer;
+        var notifyPanel = element.find(".notifs");
+        $rootScope.$on('hideNotifications', function(event, setting) {
+          scope.showClose = false;
+          $timeout.cancel(hideoutTimer);
+          if (setting && setting.delay) {
+            hideoutTimer = $timeout(function () {
+              notifyPanel.fadeOut(300);
+            }, setting.delay==='slow'?5000:0);
+          } else {
+            notifyPanel.stop();
+            notifyPanel.fadeOut(300);
+          }
+        });
+
+        $rootScope.$on('flashNotifications', function() {
+          $timeout.cancel(hideoutTimer);
+          notifyPanel.stop();
+          notifyPanel.hide();
+          notifyPanel.fadeIn(300);
+          notifyPanel.fadeOut(300);
+          notifyPanel.fadeIn(300);
+          notifyPanel.fadeOut(300);
+          notifyPanel.fadeIn(300);
+        });
+
+        $rootScope.$on('showNotifications', function() {
+          scope.showClose = true;
+          $timeout.cancel(hideoutTimer);
+          notifyPanel.stop();
+          notifyPanel.hide();
+          notifyPanel.fadeIn(300);
+        });
 
       }
 		};
-	});
-	  
+	}]);
+
 })();
\ No newline at end of file
diff --git a/falcon-ui/app/js/directives/tooltip.js b/falcon-ui/app/js/directives/tooltip.js
index 31bb684..4951123 100644
--- a/falcon-ui/app/js/directives/tooltip.js
+++ b/falcon-ui/app/js/directives/tooltip.js
@@ -34,4 +34,26 @@
     };
   });
 
-})();
\ No newline at end of file
+  module.directive("tooltip", ['TooltipMessages', function(TooltipMessages){
+    return {
+      restrict: "A",
+      link: function(scope, element, attrs) {
+        var message = TooltipMessages.messages[attrs.tooltip];
+        if (!message) {
+          console.warn('Message not defined for key ' + attrs.tooltip);
+          return;
+        }
+        var tooltipElement = angular.element("<div class='entities-tooltip-theme'>");
+        tooltipElement.append("<div class='arrow-up'></div>");
+        tooltipElement.append("<div class='entities-tooltip'>" + message + "</div>");
+        element.append(tooltipElement);
+        element.on('mouseenter', function(){
+             tooltipElement.show();
+           }).on('mouseleave', function(){
+             tooltipElement.hide();
+           });
+      }
+    };
+  }]);
+
+})();
diff --git a/falcon-ui/app/js/directives/validation-message.js b/falcon-ui/app/js/directives/validation-message.js
index 7530244..7eab75e 100644
--- a/falcon-ui/app/js/directives/validation-message.js
+++ b/falcon-ui/app/js/directives/validation-message.js
@@ -34,8 +34,9 @@
       scope: {
         validationMessage: "@"
       },
+      require : '^form',
       restrict: 'A',
-      link: function (scope, element) {
+      link: function (scope, element, attrs, formCtrl) {
 
         var lastOne = 0,
           stringLabel,
@@ -89,21 +90,28 @@
 
           if (element[0].type === "select-one") {
             element.bind('change', function () {
-              scope.messageSwitcher.show = false;
-              angular.element(stringLabel).hide();
+                  scope.messageSwitcher.show = false;
+                  angular.element(stringLabel).hide();
             });
           } else {
             element.bind('keyup', checkNameInList);
             element.bind('blur', function () {
-              if (element[0].value.length === 0) {
-                element.parent().addClass("showMessage showValidationStyle validationMessageParent");
-                scope.messageSwitcher.show = true;
-                angular.element(stringLabel).html(messageObject.empty).removeClass('valid');
-              }
+                if (element[0].value.length === 0) {
+                  element.parent().addClass("showMessage showValidationStyle validationMessageParent");
+                  scope.messageSwitcher.show = true;
+                  angular.element(stringLabel).html(messageObject.empty).removeClass('valid');
+                }else if (element.hasClass('ng-invalid-pattern')) {
+                  scope.messageSwitcher.show = true;
+                  angular.element(stringLabel).html(messageObject.patternInvalid).removeClass('valid');
+                  element.removeClass('empty');
+                  element.parent().addClass("showMessage showValidationStyle validationMessageParent");
+                }
             });
             element.bind('focus', function () {
               element.removeClass('empty');
             });
+
+
           }
         }
         function normalize() {
@@ -137,6 +145,17 @@
             element.addClass('empty');
           }
         });
+
+        scope.$watch(function () {
+          return formCtrl.$submitted;
+        }, function () {
+          if (formCtrl.$submitted === true && element.hasClass('ng-invalid-pattern')) {
+            scope.messageSwitcher.show = true;
+            angular.element(stringLabel).html(messageObject.patternInvalid).removeClass('valid');
+            element.removeClass('empty');
+            element.parent().addClass("showMessage showValidationStyle validationMessageParent");
+          }
+        });
       }
     };
   }]);
@@ -208,10 +227,10 @@
 
           element.bind('keyup', prepare);
           element.bind('blur', function () {
-            if (valLength === 0 && required) {
-              element.removeClass('empty');
-              angular.element(stringLabel).html(messageObject.empty).removeClass('hidden');
-              element.parent().addClass("showMessage showValidationStyle validationMessageParent");
+              if (valLength === 0 && required) {
+                element.removeClass('empty');
+                angular.element(stringLabel).html(messageObject.empty).removeClass('hidden');
+                element.parent().addClass("showMessage showValidationStyle validationMessageParent");
             }
           });
         }
@@ -246,4 +265,4 @@
     };
   }]);
 
-}());
\ No newline at end of file
+}());
diff --git a/falcon-ui/app/js/lib/angular-ngStorage.js b/falcon-ui/app/js/lib/angular-ngStorage.js
new file mode 100644
index 0000000..ee45bb2
--- /dev/null
+++ b/falcon-ui/app/js/lib/angular-ngStorage.js
@@ -0,0 +1,161 @@
+(function (root, factory) {
+  'use strict';
+
+  if (typeof define === 'function' && define.amd) {
+    define(['angular'], factory);
+  } else if (typeof exports === 'object') {
+    module.exports = factory(require('angular'));
+  } else {
+    // Browser globals (root is window), we don't register it.
+    factory(root.angular);
+  }
+}(this , function (angular) {
+    'use strict';
+
+    /**
+     * @ngdoc overview
+     * @name ngStorage
+     */
+
+    return angular.module('ngStorage', [])
+
+    /**
+     * @ngdoc object
+     * @name ngStorage.$localStorage
+     * @requires $rootScope
+     * @requires $window
+     */
+
+    .factory('$localStorage', _storageFactory('localStorage'))
+
+    /**
+     * @ngdoc object
+     * @name ngStorage.$sessionStorage
+     * @requires $rootScope
+     * @requires $window
+     */
+
+    .factory('$sessionStorage', _storageFactory('sessionStorage'));
+
+    function _storageFactory(storageType) {
+        return [
+            '$rootScope',
+            '$window',
+            '$log',
+            '$timeout',
+
+            function(
+                $rootScope,
+                $window,
+                $log,
+                $timeout
+            ){
+                function isStorageSupported(storageType) {
+
+                    // Some installations of IE, for an unknown reason, throw "SCRIPT5: Error: Access is denied"
+                    // when accessing window.localStorage. This happens before you try to do anything with it. Catch
+                    // that error and allow execution to continue.
+
+                    // fix 'SecurityError: DOM Exception 18' exception in Desktop Safari, Mobile Safari
+                    // when "Block cookies": "Always block" is turned on
+                    var supported;
+                    try {
+                        supported = $window[storageType];
+                    }
+                    catch (err) {
+                        supported = false;
+                    }
+
+                    // When Safari (OS X or iOS) is in private browsing mode, it appears as though localStorage
+                    // is available, but trying to call .setItem throws an exception below:
+                    // "QUOTA_EXCEEDED_ERR: DOM Exception 22: An attempt was made to add something to storage that exceeded the quota."
+                    if (supported && storageType === 'localStorage') {
+                        var key = '__' + Math.round(Math.random() * 1e7);
+
+                        try {
+                            localStorage.setItem(key, key);
+                            localStorage.removeItem(key);
+                        }
+                        catch (err) {
+                            supported = false;
+                        }
+                    }
+
+                    return supported;
+                }
+
+                // #9: Assign a placeholder object if Web Storage is unavailable to prevent breaking the entire AngularJS app
+                var webStorage = isStorageSupported(storageType) || ($log.warn('This browser does not support Web Storage!'), {setItem: function() {}, getItem: function() {}}),
+                    $storage = {
+                        $default: function(items) {
+                            for (var k in items) {
+                                angular.isDefined($storage[k]) || ($storage[k] = items[k]);
+                            }
+
+                            return $storage;
+                        },
+                        $reset: function(items) {
+                            for (var k in $storage) {
+                                '$' === k[0] || (delete $storage[k] && webStorage.removeItem('ngStorage-' + k));
+                            }
+
+                            return $storage.$default(items);
+                        }
+                    },
+                    _last$storage,
+                    _debounce;
+
+                try {
+                    webStorage = $window[storageType];
+                    webStorage.length;
+                } catch(e) {
+                    $log.warn('This browser does not support Web Storage!');
+                    webStorage = {};
+                }
+
+                for (var i = 0, l = webStorage.length, k; i < l; i++) {
+                    // #8, #10: `webStorage.key(i)` may be an empty string (or throw an exception in IE9 if `webStorage` is empty)
+                    (k = webStorage.key(i)) && 'ngStorage-' === k.slice(0, 10) && ($storage[k.slice(10)] = angular.fromJson(webStorage.getItem(k)));
+                }
+
+                _last$storage = angular.copy($storage);
+
+                $rootScope.$watch(function() {
+                    var temp$storage;
+                    _debounce || (_debounce = $timeout(function() {
+                        _debounce = null;
+
+                        if (!angular.equals($storage, _last$storage)) {
+                            temp$storage = angular.copy(_last$storage);
+                            angular.forEach($storage, function(v, k) {
+                                angular.isDefined(v) && '$' !== k[0] && webStorage.setItem('ngStorage-' + k, angular.toJson(v));
+
+                                delete temp$storage[k];
+                            });
+
+                            for (var k in temp$storage) {
+                                webStorage.removeItem('ngStorage-' + k);
+                            }
+
+                            _last$storage = angular.copy($storage);
+                        }
+                    }, 100, false));
+                });
+
+                // #6: Use `$window.addEventListener` instead of `angular.element` to avoid the jQuery-specific `event.originalEvent`
+                $window.addEventListener && $window.addEventListener('storage', function(event) {
+                    if ('ngStorage-' === event.key.slice(0, 10)) {
+                        event.newValue ? $storage[event.key.slice(10)] = angular.fromJson(event.newValue) : delete $storage[event.key.slice(10)];
+
+                        _last$storage = angular.copy($storage);
+
+                        $rootScope.$apply();
+                    }
+                });
+
+                return $storage;
+            }
+        ];
+    }
+
+}));
diff --git a/falcon-ui/app/js/lib/focusIf.min.js b/falcon-ui/app/js/lib/focusIf.min.js
new file mode 100644
index 0000000..b8206ac
--- /dev/null
+++ b/falcon-ui/app/js/lib/focusIf.min.js
@@ -0,0 +1 @@
+!function(){"use strict";function c(c){function u(u,f,t){function n(f){f&&c(function(){i.focus()},u.$eval(t.focusDelay)||0)}var i=f[0];t.focusIf?u.$watch(t.focusIf,n):n(!0)}return{restrict:"A",link:u}}angular.module("focus-if",[]).directive("focusIf",c),c.$inject=["$timeout"]}();
\ No newline at end of file
diff --git a/falcon-ui/app/js/lib/jquery-ui.min.js b/falcon-ui/app/js/lib/jquery-ui.min.js
new file mode 100644
index 0000000..0245f83
--- /dev/null
+++ b/falcon-ui/app/js/lib/jquery-ui.min.js
@@ -0,0 +1,13 @@
+/*! jQuery UI - v1.11.4 - 2015-03-11
+* http://jqueryui.com
+* Includes: core.js, widget.js, mouse.js, position.js, accordion.js, autocomplete.js, button.js, datepicker.js, dialog.js, draggable.js, droppable.js, effect.js, effect-blind.js, effect-bounce.js, effect-clip.js, effect-drop.js, effect-explode.js, effect-fade.js, effect-fold.js, effect-highlight.js, effect-puff.js, effect-pulsate.js, effect-scale.js, effect-shake.js, effect-size.js, effect-slide.js, effect-transfer.js, menu.js, progressbar.js, resizable.js, selectable.js, selectmenu.js, slider.js, sortable.js, spinner.js, tabs.js, tooltip.js
+* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
+
+(function(e){"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){function t(t,s){var n,a,o,r=t.nodeName.toLowerCase();return"area"===r?(n=t.parentNode,a=n.name,t.href&&a&&"map"===n.nodeName.toLowerCase()?(o=e("img[usemap='#"+a+"']")[0],!!o&&i(o)):!1):(/^(input|select|textarea|button|object)$/.test(r)?!t.disabled:"a"===r?t.href||s:s)&&i(t)}function i(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return"hidden"===e.css(this,"visibility")}).length}function s(e){for(var t,i;e.length&&e[0]!==document;){if(t=e.css("position"),("absolute"===t||"relative"===t||"fixed"===t)&&(i=parseInt(e.css("zIndex"),10),!isNaN(i)&&0!==i))return i;e=e.parent()}return 0}function n(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},e.extend(this._defaults,this.regional[""]),this.regional.en=e.extend(!0,{},this.regional[""]),this.regional["en-US"]=e.extend(!0,{},this.regional.en),this.dpDiv=a(e("<div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))}function a(t){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return t.delegate(i,"mouseout",function(){e(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&e(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&e(this).removeClass("ui-datepicker-next-hover")}).delegate(i,"mouseover",o)}function o(){e.datepicker._isDisabledDatepicker(v.inline?v.dpDiv.parent()[0]:v.input[0])||(e(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),e(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&e(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&e(this).addClass("ui-datepicker-next-hover"))}function r(t,i){e.extend(t,i);for(var s in i)null==i[s]&&(t[s]=i[s]);return t}function h(e){return function(){var t=this.element.val();e.apply(this,arguments),this._refresh(),t!==this.element.val()&&this._trigger("change")}}e.ui=e.ui||{},e.extend(e.ui,{version:"1.11.4",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({scrollParent:function(t){var i=this.css("position"),s="absolute"===i,n=t?/(auto|scroll|hidden)/:/(auto|scroll)/,a=this.parents().filter(function(){var t=e(this);return s&&"static"===t.css("position")?!1:n.test(t.css("overflow")+t.css("overflow-y")+t.css("overflow-x"))}).eq(0);return"fixed"!==i&&a.length?a:e(this[0].ownerDocument||document)},uniqueId:function(){var e=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++e)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(i){return!!e.data(i,t)}}):function(t,i,s){return!!e.data(t,s[3])},focusable:function(i){return t(i,!isNaN(e.attr(i,"tabindex")))},tabbable:function(i){var s=e.attr(i,"tabindex"),n=isNaN(s);return(n||s>=0)&&t(i,!n)}}),e("<a>").outerWidth(1).jquery||e.each(["Width","Height"],function(t,i){function s(t,i,s,a){return e.each(n,function(){i-=parseFloat(e.css(t,"padding"+this))||0,s&&(i-=parseFloat(e.css(t,"border"+this+"Width"))||0),a&&(i-=parseFloat(e.css(t,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],a=i.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+i]=function(t){return void 0===t?o["inner"+i].call(this):this.each(function(){e(this).css(a,s(this,t)+"px")})},e.fn["outer"+i]=function(t,n){return"number"!=typeof t?o["outer"+i].call(this,t):this.each(function(){e(this).css(a,s(this,t,!0,n)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e("<a>").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.fn.extend({focus:function(t){return function(i,s){return"number"==typeof i?this.each(function(){var t=this;setTimeout(function(){e(t).focus(),s&&s.call(t)},i)}):t.apply(this,arguments)}}(e.fn.focus),disableSelection:function(){var e="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.bind(e+".ui-disableSelection",function(e){e.preventDefault()})}}(),enableSelection:function(){return this.unbind(".ui-disableSelection")},zIndex:function(t){if(void 0!==t)return this.css("zIndex",t);if(this.length)for(var i,s,n=e(this[0]);n.length&&n[0]!==document;){if(i=n.css("position"),("absolute"===i||"relative"===i||"fixed"===i)&&(s=parseInt(n.css("zIndex"),10),!isNaN(s)&&0!==s))return s;n=n.parent()}return 0}}),e.ui.plugin={add:function(t,i,s){var n,a=e.ui[t].prototype;for(n in s)a.plugins[n]=a.plugins[n]||[],a.plugins[n].push([i,s[n]])},call:function(e,t,i,s){var n,a=e.plugins[t];if(a&&(s||e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType))for(n=0;a.length>n;n++)e.options[a[n][0]]&&a[n][1].apply(e.element,i)}};var l=0,u=Array.prototype.slice;e.cleanData=function(t){return function(i){var s,n,a;for(a=0;null!=(n=i[a]);a++)try{s=e._data(n,"events"),s&&s.remove&&e(n).triggerHandler("remove")}catch(o){}t(i)}}(e.cleanData),e.widget=function(t,i,s){var n,a,o,r,h={},l=t.split(".")[0];return t=t.split(".")[1],n=l+"-"+t,s||(s=i,i=e.Widget),e.expr[":"][n.toLowerCase()]=function(t){return!!e.data(t,n)},e[l]=e[l]||{},a=e[l][t],o=e[l][t]=function(e,t){return this._createWidget?(arguments.length&&this._createWidget(e,t),void 0):new o(e,t)},e.extend(o,a,{version:s.version,_proto:e.extend({},s),_childConstructors:[]}),r=new i,r.options=e.widget.extend({},r.options),e.each(s,function(t,s){return e.isFunction(s)?(h[t]=function(){var e=function(){return i.prototype[t].apply(this,arguments)},n=function(e){return i.prototype[t].apply(this,e)};return function(){var t,i=this._super,a=this._superApply;return this._super=e,this._superApply=n,t=s.apply(this,arguments),this._super=i,this._superApply=a,t}}(),void 0):(h[t]=s,void 0)}),o.prototype=e.widget.extend(r,{widgetEventPrefix:a?r.widgetEventPrefix||t:t},h,{constructor:o,namespace:l,widgetName:t,widgetFullName:n}),a?(e.each(a._childConstructors,function(t,i){var s=i.prototype;e.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete a._childConstructors):i._childConstructors.push(o),e.widget.bridge(t,o),o},e.widget.extend=function(t){for(var i,s,n=u.call(arguments,1),a=0,o=n.length;o>a;a++)for(i in n[a])s=n[a][i],n[a].hasOwnProperty(i)&&void 0!==s&&(t[i]=e.isPlainObject(s)?e.isPlainObject(t[i])?e.widget.extend({},t[i],s):e.widget.extend({},s):s);return t},e.widget.bridge=function(t,i){var s=i.prototype.widgetFullName||t;e.fn[t]=function(n){var a="string"==typeof n,o=u.call(arguments,1),r=this;return a?this.each(function(){var i,a=e.data(this,s);return"instance"===n?(r=a,!1):a?e.isFunction(a[n])&&"_"!==n.charAt(0)?(i=a[n].apply(a,o),i!==a&&void 0!==i?(r=i&&i.jquery?r.pushStack(i.get()):i,!1):void 0):e.error("no such method '"+n+"' for "+t+" widget instance"):e.error("cannot call methods on "+t+" prior to initialization; "+"attempted to call method '"+n+"'")}):(o.length&&(n=e.widget.extend.apply(null,[n].concat(o))),this.each(function(){var t=e.data(this,s);t?(t.option(n||{}),t._init&&t._init()):e.data(this,s,new i(n,this))})),r}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(t,i){i=e(i||this.defaultElement||this)[0],this.element=e(i),this.uuid=l++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=e(),this.hoverable=e(),this.focusable=e(),i!==this&&(e.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===i&&this.destroy()}}),this.document=e(i.style?i.ownerDocument:i.document||i),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(t,i){var s,n,a,o=t;if(0===arguments.length)return e.widget.extend({},this.options);if("string"==typeof t)if(o={},s=t.split("."),t=s.shift(),s.length){for(n=o[t]=e.widget.extend({},this.options[t]),a=0;s.length-1>a;a++)n[s[a]]=n[s[a]]||{},n=n[s[a]];if(t=s.pop(),1===arguments.length)return void 0===n[t]?null:n[t];n[t]=i}else{if(1===arguments.length)return void 0===this.options[t]?null:this.options[t];o[t]=i}return this._setOptions(o),this},_setOptions:function(e){var t;for(t in e)this._setOption(t,e[t]);return this},_setOption:function(e,t){return this.options[e]=t,"disabled"===e&&(this.widget().toggleClass(this.widgetFullName+"-disabled",!!t),t&&(this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus"))),this},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_on:function(t,i,s){var n,a=this;"boolean"!=typeof t&&(s=i,i=t,t=!1),s?(i=n=e(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),e.each(s,function(s,o){function r(){return t||a.options.disabled!==!0&&!e(this).hasClass("ui-state-disabled")?("string"==typeof o?a[o]:o).apply(a,arguments):void 0}"string"!=typeof o&&(r.guid=o.guid=o.guid||r.guid||e.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+a.eventNamespace,u=h[2];u?n.delegate(u,l,r):i.bind(l,r)})},_off:function(t,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,t.unbind(i).undelegate(i),this.bindings=e(this.bindings.not(t).get()),this.focusable=e(this.focusable.not(t).get()),this.hoverable=e(this.hoverable.not(t).get())},_delay:function(e,t){function i(){return("string"==typeof e?s[e]:e).apply(s,arguments)}var s=this;return setTimeout(i,t||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){e(t.currentTarget).addClass("ui-state-hover")},mouseleave:function(t){e(t.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){e(t.currentTarget).addClass("ui-state-focus")},focusout:function(t){e(t.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(t,i,s){var n,a,o=this.options[t];if(s=s||{},i=e.Event(i),i.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),i.target=this.element[0],a=i.originalEvent)for(n in a)n in i||(i[n]=a[n]);return this.element.trigger(i,s),!(e.isFunction(o)&&o.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},e.each({show:"fadeIn",hide:"fadeOut"},function(t,i){e.Widget.prototype["_"+t]=function(s,n,a){"string"==typeof n&&(n={effect:n});var o,r=n?n===!0||"number"==typeof n?i:n.effect||i:t;n=n||{},"number"==typeof n&&(n={duration:n}),o=!e.isEmptyObject(n),n.complete=a,n.delay&&s.delay(n.delay),o&&e.effects&&e.effects.effect[r]?s[t](n):r!==t&&s[r]?s[r](n.duration,n.easing,a):s.queue(function(i){e(this)[t](),a&&a.call(s[0]),i()})}}),e.widget;var d=!1;e(document).mouseup(function(){d=!1}),e.widget("ui.mouse",{version:"1.11.4",options:{cancel:"input,textarea,button,select,option",distance:1,delay:0},_mouseInit:function(){var t=this;this.element.bind("mousedown."+this.widgetName,function(e){return t._mouseDown(e)}).bind("click."+this.widgetName,function(i){return!0===e.data(i.target,t.widgetName+".preventClickEvent")?(e.removeData(i.target,t.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&this.document.unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(t){if(!d){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(t),this._mouseDownEvent=t;var i=this,s=1===t.which,n="string"==typeof this.options.cancel&&t.target.nodeName?e(t.target).closest(this.options.cancel).length:!1;return s&&!n&&this._mouseCapture(t)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(t)!==!1,!this._mouseStarted)?(t.preventDefault(),!0):(!0===e.data(t.target,this.widgetName+".preventClickEvent")&&e.removeData(t.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(e){return i._mouseMove(e)},this._mouseUpDelegate=function(e){return i._mouseUp(e)},this.document.bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),t.preventDefault(),d=!0,!0)):!0}},_mouseMove:function(t){if(this._mouseMoved){if(e.ui.ie&&(!document.documentMode||9>document.documentMode)&&!t.button)return this._mouseUp(t);if(!t.which)return this._mouseUp(t)}return(t.which||t.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,t)!==!1,this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){return this.document.unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&e.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),d=!1,!1},_mouseDistanceMet:function(e){return Math.max(Math.abs(this._mouseDownEvent.pageX-e.pageX),Math.abs(this._mouseDownEvent.pageY-e.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),function(){function t(e,t,i){return[parseFloat(e[0])*(p.test(e[0])?t/100:1),parseFloat(e[1])*(p.test(e[1])?i/100:1)]}function i(t,i){return parseInt(e.css(t,i),10)||0}function s(t){var i=t[0];return 9===i.nodeType?{width:t.width(),height:t.height(),offset:{top:0,left:0}}:e.isWindow(i)?{width:t.width(),height:t.height(),offset:{top:t.scrollTop(),left:t.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:t.outerWidth(),height:t.outerHeight(),offset:t.offset()}}e.ui=e.ui||{};var n,a,o=Math.max,r=Math.abs,h=Math.round,l=/left|center|right/,u=/top|center|bottom/,d=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,p=/%$/,f=e.fn.position;e.position={scrollbarWidth:function(){if(void 0!==n)return n;var t,i,s=e("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),a=s.children()[0];return e("body").append(s),t=a.offsetWidth,s.css("overflow","scroll"),i=a.offsetWidth,t===i&&(i=s[0].clientWidth),s.remove(),n=t-i},getScrollInfo:function(t){var i=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),s=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),n="scroll"===i||"auto"===i&&t.width<t.element[0].scrollWidth,a="scroll"===s||"auto"===s&&t.height<t.element[0].scrollHeight;return{width:a?e.position.scrollbarWidth():0,height:n?e.position.scrollbarWidth():0}},getWithinInfo:function(t){var i=e(t||window),s=e.isWindow(i[0]),n=!!i[0]&&9===i[0].nodeType;return{element:i,isWindow:s,isDocument:n,offset:i.offset()||{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:s||n?i.width():i.outerWidth(),height:s||n?i.height():i.outerHeight()}}},e.fn.position=function(n){if(!n||!n.of)return f.apply(this,arguments);n=e.extend({},n);var p,m,g,v,y,b,_=e(n.of),x=e.position.getWithinInfo(n.within),w=e.position.getScrollInfo(x),k=(n.collision||"flip").split(" "),T={};return b=s(_),_[0].preventDefault&&(n.at="left top"),m=b.width,g=b.height,v=b.offset,y=e.extend({},v),e.each(["my","at"],function(){var e,t,i=(n[this]||"").split(" ");1===i.length&&(i=l.test(i[0])?i.concat(["center"]):u.test(i[0])?["center"].concat(i):["center","center"]),i[0]=l.test(i[0])?i[0]:"center",i[1]=u.test(i[1])?i[1]:"center",e=d.exec(i[0]),t=d.exec(i[1]),T[this]=[e?e[0]:0,t?t[0]:0],n[this]=[c.exec(i[0])[0],c.exec(i[1])[0]]}),1===k.length&&(k[1]=k[0]),"right"===n.at[0]?y.left+=m:"center"===n.at[0]&&(y.left+=m/2),"bottom"===n.at[1]?y.top+=g:"center"===n.at[1]&&(y.top+=g/2),p=t(T.at,m,g),y.left+=p[0],y.top+=p[1],this.each(function(){var s,l,u=e(this),d=u.outerWidth(),c=u.outerHeight(),f=i(this,"marginLeft"),b=i(this,"marginTop"),D=d+f+i(this,"marginRight")+w.width,S=c+b+i(this,"marginBottom")+w.height,M=e.extend({},y),C=t(T.my,u.outerWidth(),u.outerHeight());"right"===n.my[0]?M.left-=d:"center"===n.my[0]&&(M.left-=d/2),"bottom"===n.my[1]?M.top-=c:"center"===n.my[1]&&(M.top-=c/2),M.left+=C[0],M.top+=C[1],a||(M.left=h(M.left),M.top=h(M.top)),s={marginLeft:f,marginTop:b},e.each(["left","top"],function(t,i){e.ui.position[k[t]]&&e.ui.position[k[t]][i](M,{targetWidth:m,targetHeight:g,elemWidth:d,elemHeight:c,collisionPosition:s,collisionWidth:D,collisionHeight:S,offset:[p[0]+C[0],p[1]+C[1]],my:n.my,at:n.at,within:x,elem:u})}),n.using&&(l=function(e){var t=v.left-M.left,i=t+m-d,s=v.top-M.top,a=s+g-c,h={target:{element:_,left:v.left,top:v.top,width:m,height:g},element:{element:u,left:M.left,top:M.top,width:d,height:c},horizontal:0>i?"left":t>0?"right":"center",vertical:0>a?"top":s>0?"bottom":"middle"};d>m&&m>r(t+i)&&(h.horizontal="center"),c>g&&g>r(s+a)&&(h.vertical="middle"),h.important=o(r(t),r(i))>o(r(s),r(a))?"horizontal":"vertical",n.using.call(this,e,h)}),u.offset(e.extend(M,{using:l}))})},e.ui.position={fit:{left:function(e,t){var i,s=t.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=e.left-t.collisionPosition.marginLeft,h=n-r,l=r+t.collisionWidth-a-n;t.collisionWidth>a?h>0&&0>=l?(i=e.left+h+t.collisionWidth-a-n,e.left+=h-i):e.left=l>0&&0>=h?n:h>l?n+a-t.collisionWidth:n:h>0?e.left+=h:l>0?e.left-=l:e.left=o(e.left-r,e.left)},top:function(e,t){var i,s=t.within,n=s.isWindow?s.scrollTop:s.offset.top,a=t.within.height,r=e.top-t.collisionPosition.marginTop,h=n-r,l=r+t.collisionHeight-a-n;t.collisionHeight>a?h>0&&0>=l?(i=e.top+h+t.collisionHeight-a-n,e.top+=h-i):e.top=l>0&&0>=h?n:h>l?n+a-t.collisionHeight:n:h>0?e.top+=h:l>0?e.top-=l:e.top=o(e.top-r,e.top)}},flip:{left:function(e,t){var i,s,n=t.within,a=n.offset.left+n.scrollLeft,o=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=e.left-t.collisionPosition.marginLeft,u=l-h,d=l+t.collisionWidth-o-h,c="left"===t.my[0]?-t.elemWidth:"right"===t.my[0]?t.elemWidth:0,p="left"===t.at[0]?t.targetWidth:"right"===t.at[0]?-t.targetWidth:0,f=-2*t.offset[0];0>u?(i=e.left+c+p+f+t.collisionWidth-o-a,(0>i||r(u)>i)&&(e.left+=c+p+f)):d>0&&(s=e.left-t.collisionPosition.marginLeft+c+p+f-h,(s>0||d>r(s))&&(e.left+=c+p+f))},top:function(e,t){var i,s,n=t.within,a=n.offset.top+n.scrollTop,o=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=e.top-t.collisionPosition.marginTop,u=l-h,d=l+t.collisionHeight-o-h,c="top"===t.my[1],p=c?-t.elemHeight:"bottom"===t.my[1]?t.elemHeight:0,f="top"===t.at[1]?t.targetHeight:"bottom"===t.at[1]?-t.targetHeight:0,m=-2*t.offset[1];0>u?(s=e.top+p+f+m+t.collisionHeight-o-a,(0>s||r(u)>s)&&(e.top+=p+f+m)):d>0&&(i=e.top-t.collisionPosition.marginTop+p+f+m-h,(i>0||d>r(i))&&(e.top+=p+f+m))}},flipfit:{left:function(){e.ui.position.flip.left.apply(this,arguments),e.ui.position.fit.left.apply(this,arguments)},top:function(){e.ui.position.flip.top.apply(this,arguments),e.ui.position.fit.top.apply(this,arguments)}}},function(){var t,i,s,n,o,r=document.getElementsByTagName("body")[0],h=document.createElement("div");t=document.createElement(r?"div":"body"),s={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},r&&e.extend(s,{position:"absolute",left:"-1000px",top:"-1000px"});for(o in s)t.style[o]=s[o];t.appendChild(h),i=r||document.documentElement,i.insertBefore(t,i.firstChild),h.style.cssText="position: absolute; left: 10.7432222px;",n=e(h).offset().left,a=n>10&&11>n,t.innerHTML="",i.removeChild(t)}()}(),e.ui.position,e.widget("ui.accordion",{version:"1.11.4",options:{active:0,animate:{},collapsible:!1,event:"click",header:"> li > :first-child,> :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var t=this.options;this.prevShow=this.prevHide=e(),this.element.addClass("ui-accordion ui-widget ui-helper-reset").attr("role","tablist"),t.collapsible||t.active!==!1&&null!=t.active||(t.active=0),this._processPanels(),0>t.active&&(t.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():e()}},_createIcons:function(){var t=this.options.icons;t&&(e("<span>").addClass("ui-accordion-header-icon ui-icon "+t.header).prependTo(this.headers),this.active.children(".ui-accordion-header-icon").removeClass(t.header).addClass(t.activeHeader),this.headers.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()},_destroy:function(){var e;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.removeClass("ui-accordion-header ui-accordion-header-active ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").removeUniqueId(),this._destroyIcons(),e=this.headers.next().removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled").css("display","").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&e.css("height","")},_setOption:function(e,t){return"active"===e?(this._activate(t),void 0):("event"===e&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(t)),this._super(e,t),"collapsible"!==e||t||this.options.active!==!1||this._activate(0),"icons"===e&&(this._destroyIcons(),t&&this._createIcons()),"disabled"===e&&(this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this.headers.add(this.headers.next()).toggleClass("ui-state-disabled",!!t)),void 0)},_keydown:function(t){if(!t.altKey&&!t.ctrlKey){var i=e.ui.keyCode,s=this.headers.length,n=this.headers.index(t.target),a=!1;switch(t.keyCode){case i.RIGHT:case i.DOWN:a=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:a=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(t);break;case i.HOME:a=this.headers[0];break;case i.END:a=this.headers[s-1]}a&&(e(t.target).attr("tabIndex",-1),e(a).attr("tabIndex",0),a.focus(),t.preventDefault())}},_panelKeyDown:function(t){t.keyCode===e.ui.keyCode.UP&&t.ctrlKey&&e(t.currentTarget).prev().focus()},refresh:function(){var t=this.options;this._processPanels(),t.active===!1&&t.collapsible===!0||!this.headers.length?(t.active=!1,this.active=e()):t.active===!1?this._activate(0):this.active.length&&!e.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(t.active=!1,this.active=e()):this._activate(Math.max(0,t.active-1)):t.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var e=this.headers,t=this.panels;this.headers=this.element.find(this.options.header).addClass("ui-accordion-header ui-state-default ui-corner-all"),this.panels=this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").filter(":not(.ui-accordion-content-active)").hide(),t&&(this._off(e.not(this.headers)),this._off(t.not(this.panels)))},_refresh:function(){var t,i=this.options,s=i.heightStyle,n=this.element.parent();this.active=this._findActive(i.active).addClass("ui-accordion-header-active ui-state-active ui-corner-top").removeClass("ui-corner-all"),this.active.next().addClass("ui-accordion-content-active").show(),this.headers.attr("role","tab").each(function(){var t=e(this),i=t.uniqueId().attr("id"),s=t.next(),n=s.uniqueId().attr("id");t.attr("aria-controls",n),s.attr("aria-labelledby",i)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(i.event),"fill"===s?(t=n.height(),this.element.siblings(":visible").each(function(){var i=e(this),s=i.css("position");"absolute"!==s&&"fixed"!==s&&(t-=i.outerHeight(!0))}),this.headers.each(function(){t-=e(this).outerHeight(!0)}),this.headers.next().each(function(){e(this).height(Math.max(0,t-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):"auto"===s&&(t=0,this.headers.next().each(function(){t=Math.max(t,e(this).css("height","").height())}).height(t))},_activate:function(t){var i=this._findActive(t)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return"number"==typeof t?this.headers.eq(t):e()},_setupEvents:function(t){var i={keydown:"_keydown"};t&&e.each(t.split(" "),function(e,t){i[t]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(t){var i=this.options,s=this.active,n=e(t.currentTarget),a=n[0]===s[0],o=a&&i.collapsible,r=o?e():n.next(),h=s.next(),l={oldHeader:s,oldPanel:h,newHeader:o?e():n,newPanel:r};t.preventDefault(),a&&!i.collapsible||this._trigger("beforeActivate",t,l)===!1||(i.active=o?!1:this.headers.index(n),this.active=a?e():n,this._toggle(l),s.removeClass("ui-accordion-header-active ui-state-active"),i.icons&&s.children(".ui-accordion-header-icon").removeClass(i.icons.activeHeader).addClass(i.icons.header),a||(n.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"),i.icons&&n.children(".ui-accordion-header-icon").removeClass(i.icons.header).addClass(i.icons.activeHeader),n.next().addClass("ui-accordion-content-active")))},_toggle:function(t){var i=t.newPanel,s=this.prevShow.length?this.prevShow:t.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,t):(s.hide(),i.show(),this._toggleComplete(t)),s.attr({"aria-hidden":"true"}),s.prev().attr({"aria-selected":"false","aria-expanded":"false"}),i.length&&s.length?s.prev().attr({tabIndex:-1,"aria-expanded":"false"}):i.length&&this.headers.filter(function(){return 0===parseInt(e(this).attr("tabIndex"),10)}).attr("tabIndex",-1),i.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(e,t,i){var s,n,a,o=this,r=0,h=e.css("box-sizing"),l=e.length&&(!t.length||e.index()<t.index()),u=this.options.animate||{},d=l&&u.down||u,c=function(){o._toggleComplete(i)};return"number"==typeof d&&(a=d),"string"==typeof d&&(n=d),n=n||d.easing||u.easing,a=a||d.duration||u.duration,t.length?e.length?(s=e.show().outerHeight(),t.animate(this.hideProps,{duration:a,easing:n,step:function(e,t){t.now=Math.round(e)}}),e.hide().animate(this.showProps,{duration:a,easing:n,complete:c,step:function(e,i){i.now=Math.round(e),"height"!==i.prop?"content-box"===h&&(r+=i.now):"content"!==o.options.heightStyle&&(i.now=Math.round(s-t.outerHeight()-r),r=0)}}),void 0):t.animate(this.hideProps,a,n,c):e.animate(this.showProps,a,n,c)},_toggleComplete:function(e){var t=e.oldPanel;t.removeClass("ui-accordion-content-active").prev().removeClass("ui-corner-top").addClass("ui-corner-all"),t.length&&(t.parent()[0].className=t.parent()[0].className),this._trigger("activate",null,e)}}),e.widget("ui.menu",{version:"1.11.4",defaultElement:"<ul>",delay:300,options:{icons:{submenu:"ui-icon-carat-1-e"},items:"> *",menus:"ul",position:{my:"left-1 top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content").toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length).attr({role:this.options.role,tabIndex:0}),this.options.disabled&&this.element.addClass("ui-state-disabled").attr("aria-disabled","true"),this._on({"mousedown .ui-menu-item":function(e){e.preventDefault()},"click .ui-menu-item":function(t){var i=e(t.target);!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(t),t.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(t):!this.element.is(":focus")&&e(this.document[0].activeElement).closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(t){if(!this.previousFilter){var i=e(t.currentTarget);
+i.siblings(".ui-state-active").removeClass("ui-state-active"),this.focus(t,i)}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(e,t){var i=this.active||this.element.find(this.options.items).eq(0);t||this.focus(e,i)},blur:function(t){this._delay(function(){e.contains(this.element[0],this.document[0].activeElement)||this.collapseAll(t)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(e){this._closeOnDocumentClick(e)&&this.collapseAll(e),this.mouseHandled=!1}})},_destroy:function(){this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeClass("ui-menu ui-widget ui-widget-content ui-menu-icons ui-front").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show(),this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").removeUniqueId().removeClass("ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function(){var t=e(this);t.data("ui-menu-submenu-carat")&&t.remove()}),this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")},_keydown:function(t){var i,s,n,a,o=!0;switch(t.keyCode){case e.ui.keyCode.PAGE_UP:this.previousPage(t);break;case e.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case e.ui.keyCode.HOME:this._move("first","first",t);break;case e.ui.keyCode.END:this._move("last","last",t);break;case e.ui.keyCode.UP:this.previous(t);break;case e.ui.keyCode.DOWN:this.next(t);break;case e.ui.keyCode.LEFT:this.collapse(t);break;case e.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(t);break;case e.ui.keyCode.ENTER:case e.ui.keyCode.SPACE:this._activate(t);break;case e.ui.keyCode.ESCAPE:this.collapse(t);break;default:o=!1,s=this.previousFilter||"",n=String.fromCharCode(t.keyCode),a=!1,clearTimeout(this.filterTimer),n===s?a=!0:n=s+n,i=this._filterMenuItems(n),i=a&&-1!==i.index(this.active.next())?this.active.nextAll(".ui-menu-item"):i,i.length||(n=String.fromCharCode(t.keyCode),i=this._filterMenuItems(n)),i.length?(this.focus(t,i),this.previousFilter=n,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}o&&t.preventDefault()},_activate:function(e){this.active.is(".ui-state-disabled")||(this.active.is("[aria-haspopup='true']")?this.expand(e):this.select(e))},refresh:function(){var t,i,s=this,n=this.options.icons.submenu,a=this.element.find(this.options.menus);this.element.toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length),a.filter(":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-front").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var t=e(this),i=t.parent(),s=e("<span>").addClass("ui-menu-icon ui-icon "+n).data("ui-menu-submenu-carat",!0);i.attr("aria-haspopup","true").prepend(s),t.attr("aria-labelledby",i.attr("id"))}),t=a.add(this.element),i=t.find(this.options.items),i.not(".ui-menu-item").each(function(){var t=e(this);s._isDivider(t)&&t.addClass("ui-widget-content ui-menu-divider")}),i.not(".ui-menu-item, .ui-menu-divider").addClass("ui-menu-item").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),i.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!e.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(e,t){"icons"===e&&this.element.find(".ui-menu-icon").removeClass(this.options.icons.submenu).addClass(t.submenu),"disabled"===e&&this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this._super(e,t)},focus:function(e,t){var i,s;this.blur(e,e&&"focus"===e.type),this._scrollIntoView(t),this.active=t.first(),s=this.active.addClass("ui-state-focus").removeClass("ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),this.active.parent().closest(".ui-menu-item").addClass("ui-state-active"),e&&"keydown"===e.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=t.children(".ui-menu"),i.length&&e&&/^mouse/.test(e.type)&&this._startOpening(i),this.activeMenu=t.parent(),this._trigger("focus",e,{item:t})},_scrollIntoView:function(t){var i,s,n,a,o,r;this._hasScroll()&&(i=parseFloat(e.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(e.css(this.activeMenu[0],"paddingTop"))||0,n=t.offset().top-this.activeMenu.offset().top-i-s,a=this.activeMenu.scrollTop(),o=this.activeMenu.height(),r=t.outerHeight(),0>n?this.activeMenu.scrollTop(a+n):n+r>o&&this.activeMenu.scrollTop(a+n-o+r))},blur:function(e,t){t||clearTimeout(this.timer),this.active&&(this.active.removeClass("ui-state-focus"),this.active=null,this._trigger("blur",e,{item:this.active}))},_startOpening:function(e){clearTimeout(this.timer),"true"===e.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(e)},this.delay))},_open:function(t){var i=e.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(t.parents(".ui-menu")).hide().attr("aria-hidden","true"),t.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(t,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:e(t&&t.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(t),this.activeMenu=s},this.delay)},_close:function(e){e||(e=this.active?this.active.parent():this.element),e.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false").end().find(".ui-state-active").not(".ui-state-focus").removeClass("ui-state-active")},_closeOnDocumentClick:function(t){return!e(t.target).closest(".ui-menu").length},_isDivider:function(e){return!/[^\-\u2014\u2013\s]/.test(e.text())},collapse:function(e){var t=this.active&&this.active.parent().closest(".ui-menu-item",this.element);t&&t.length&&(this._close(),this.focus(e,t))},expand:function(e){var t=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();t&&t.length&&(this._open(t.parent()),this._delay(function(){this.focus(e,t)}))},next:function(e){this._move("next","first",e)},previous:function(e){this._move("prev","last",e)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(e,t,i){var s;this.active&&(s="first"===e||"last"===e?this.active["first"===e?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[e+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[t]()),this.focus(i,s)},nextPage:function(t){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=e(this),0>i.offset().top-s-n}),this.focus(t,i)):this.focus(t,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())),void 0):(this.next(t),void 0)},previousPage:function(t){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=e(this),i.offset().top-s+n>0}),this.focus(t,i)):this.focus(t,this.activeMenu.find(this.options.items).first())),void 0):(this.next(t),void 0)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(t){this.active=this.active||e(t.target).closest(".ui-menu-item");var i={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(t,!0),this._trigger("select",t,i)},_filterMenuItems:function(t){var i=t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&"),s=RegExp("^"+i,"i");return this.activeMenu.find(this.options.items).filter(".ui-menu-item").filter(function(){return s.test(e.trim(e(this).text()))})}}),e.widget("ui.autocomplete",{version:"1.11.4",defaultElement:"<input>",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var t,i,s,n=this.element[0].nodeName.toLowerCase(),a="textarea"===n,o="input"===n;this.isMultiLine=a?!0:o?!1:this.element.prop("isContentEditable"),this.valueMethod=this.element[a||o?"val":"text"],this.isNewMenu=!0,this.element.addClass("ui-autocomplete-input").attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return t=!0,s=!0,i=!0,void 0;t=!1,s=!1,i=!1;var a=e.ui.keyCode;switch(n.keyCode){case a.PAGE_UP:t=!0,this._move("previousPage",n);break;case a.PAGE_DOWN:t=!0,this._move("nextPage",n);break;case a.UP:t=!0,this._keyEvent("previous",n);break;case a.DOWN:t=!0,this._keyEvent("next",n);break;case a.ENTER:this.menu.active&&(t=!0,n.preventDefault(),this.menu.select(n));break;case a.TAB:this.menu.active&&this.menu.select(n);break;case a.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(t)return t=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),void 0;if(!i){var n=e.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(e){return s?(s=!1,e.preventDefault(),void 0):(this._searchTimeout(e),void 0)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(e){return this.cancelBlur?(delete this.cancelBlur,void 0):(clearTimeout(this.searching),this.close(e),this._change(e),void 0)}}),this._initSource(),this.menu=e("<ul>").addClass("ui-autocomplete ui-front").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._on(this.menu.element,{mousedown:function(t){t.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur});var i=this.menu.element[0];e(t.target).closest(".ui-menu-item").length||this._delay(function(){var t=this;this.document.one("mousedown",function(s){s.target===t.element[0]||s.target===i||e.contains(i,s.target)||t.close()})})},menufocus:function(t,i){var s,n;return this.isNewMenu&&(this.isNewMenu=!1,t.originalEvent&&/^mouse/.test(t.originalEvent.type))?(this.menu.blur(),this.document.one("mousemove",function(){e(t.target).trigger(t.originalEvent)}),void 0):(n=i.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",t,{item:n})&&t.originalEvent&&/^key/.test(t.originalEvent.type)&&this._value(n.value),s=i.item.attr("aria-label")||n.value,s&&e.trim(s).length&&(this.liveRegion.children().hide(),e("<div>").text(s).appendTo(this.liveRegion)),void 0)},menuselect:function(e,t){var i=t.item.data("ui-autocomplete-item"),s=this.previous;this.element[0]!==this.document[0].activeElement&&(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s,this.selectedItem=i})),!1!==this._trigger("select",e,{item:i})&&this._value(i.value),this.term=this._value(),this.close(e),this.selectedItem=i}}),this.liveRegion=e("<span>",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).addClass("ui-helper-hidden-accessible").appendTo(this.document[0].body),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(e,t){this._super(e,t),"source"===e&&this._initSource(),"appendTo"===e&&this.menu.element.appendTo(this._appendTo()),"disabled"===e&&t&&this.xhr&&this.xhr.abort()},_appendTo:function(){var t=this.options.appendTo;return t&&(t=t.jquery||t.nodeType?e(t):this.document.find(t).eq(0)),t&&t[0]||(t=this.element.closest(".ui-front")),t.length||(t=this.document[0].body),t},_initSource:function(){var t,i,s=this;e.isArray(this.options.source)?(t=this.options.source,this.source=function(i,s){s(e.ui.autocomplete.filter(t,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(t,n){s.xhr&&s.xhr.abort(),s.xhr=e.ajax({url:i,data:t,dataType:"json",success:function(e){n(e)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(e){clearTimeout(this.searching),this.searching=this._delay(function(){var t=this.term===this._value(),i=this.menu.element.is(":visible"),s=e.altKey||e.ctrlKey||e.metaKey||e.shiftKey;(!t||t&&!i&&!s)&&(this.selectedItem=null,this.search(null,e))},this.options.delay)},search:function(e,t){return e=null!=e?e:this._value(),this.term=this._value(),e.length<this.options.minLength?this.close(t):this._trigger("search",t)!==!1?this._search(e):void 0},_search:function(e){this.pending++,this.element.addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:e},this._response())},_response:function(){var t=++this.requestIndex;return e.proxy(function(e){t===this.requestIndex&&this.__response(e),this.pending--,this.pending||this.element.removeClass("ui-autocomplete-loading")},this)},__response:function(e){e&&(e=this._normalize(e)),this._trigger("response",null,{content:e}),!this.options.disabled&&e&&e.length&&!this.cancelSearch?(this._suggest(e),this._trigger("open")):this._close()},close:function(e){this.cancelSearch=!0,this._close(e)},_close:function(e){this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",e))},_change:function(e){this.previous!==this._value()&&this._trigger("change",e,{item:this.selectedItem})},_normalize:function(t){return t.length&&t[0].label&&t[0].value?t:e.map(t,function(t){return"string"==typeof t?{label:t,value:t}:e.extend({},t,{label:t.label||t.value,value:t.value||t.label})})},_suggest:function(t){var i=this.menu.element.empty();this._renderMenu(i,t),this.isNewMenu=!0,this.menu.refresh(),i.show(),this._resizeMenu(),i.position(e.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next()},_resizeMenu:function(){var e=this.menu.element;e.outerWidth(Math.max(e.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(t,i){var s=this;e.each(i,function(e,i){s._renderItemData(t,i)})},_renderItemData:function(e,t){return this._renderItem(e,t).data("ui-autocomplete-item",t)},_renderItem:function(t,i){return e("<li>").text(i.label).appendTo(t)},_move:function(e,t){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(e)||this.menu.isLastItem()&&/^next/.test(e)?(this.isMultiLine||this._value(this.term),this.menu.blur(),void 0):(this.menu[e](t),void 0):(this.search(null,t),void 0)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(e,t){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(e,t),t.preventDefault())}}),e.extend(e.ui.autocomplete,{escapeRegex:function(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(t,i){var s=RegExp(e.ui.autocomplete.escapeRegex(i),"i");return e.grep(t,function(e){return s.test(e.label||e.value||e)})}}),e.widget("ui.autocomplete",e.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(e){return e+(e>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(t){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=t&&t.length?this.options.messages.results(t.length):this.options.messages.noResults,this.liveRegion.children().hide(),e("<div>").text(i).appendTo(this.liveRegion))}}),e.ui.autocomplete;var c,p="ui-button ui-widget ui-state-default ui-corner-all",f="ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",m=function(){var t=e(this);setTimeout(function(){t.find(":ui-button").button("refresh")},1)},g=function(t){var i=t.name,s=t.form,n=e([]);return i&&(i=i.replace(/'/g,"\\'"),n=s?e(s).find("[name='"+i+"'][type=radio]"):e("[name='"+i+"'][type=radio]",t.ownerDocument).filter(function(){return!this.form})),n};e.widget("ui.button",{version:"1.11.4",defaultElement:"<button>",options:{disabled:null,text:!0,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset"+this.eventNamespace).bind("reset"+this.eventNamespace,m),"boolean"!=typeof this.options.disabled?this.options.disabled=!!this.element.prop("disabled"):this.element.prop("disabled",this.options.disabled),this._determineButtonType(),this.hasTitle=!!this.buttonElement.attr("title");var t=this,i=this.options,s="checkbox"===this.type||"radio"===this.type,n=s?"":"ui-state-active";null===i.label&&(i.label="input"===this.type?this.buttonElement.val():this.buttonElement.html()),this._hoverable(this.buttonElement),this.buttonElement.addClass(p).attr("role","button").bind("mouseenter"+this.eventNamespace,function(){i.disabled||this===c&&e(this).addClass("ui-state-active")}).bind("mouseleave"+this.eventNamespace,function(){i.disabled||e(this).removeClass(n)}).bind("click"+this.eventNamespace,function(e){i.disabled&&(e.preventDefault(),e.stopImmediatePropagation())}),this._on({focus:function(){this.buttonElement.addClass("ui-state-focus")},blur:function(){this.buttonElement.removeClass("ui-state-focus")}}),s&&this.element.bind("change"+this.eventNamespace,function(){t.refresh()}),"checkbox"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){return i.disabled?!1:void 0}):"radio"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){if(i.disabled)return!1;e(this).addClass("ui-state-active"),t.buttonElement.attr("aria-pressed","true");var s=t.element[0];g(s).not(s).map(function(){return e(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")}):(this.buttonElement.bind("mousedown"+this.eventNamespace,function(){return i.disabled?!1:(e(this).addClass("ui-state-active"),c=this,t.document.one("mouseup",function(){c=null}),void 0)}).bind("mouseup"+this.eventNamespace,function(){return i.disabled?!1:(e(this).removeClass("ui-state-active"),void 0)}).bind("keydown"+this.eventNamespace,function(t){return i.disabled?!1:((t.keyCode===e.ui.keyCode.SPACE||t.keyCode===e.ui.keyCode.ENTER)&&e(this).addClass("ui-state-active"),void 0)}).bind("keyup"+this.eventNamespace+" blur"+this.eventNamespace,function(){e(this).removeClass("ui-state-active")}),this.buttonElement.is("a")&&this.buttonElement.keyup(function(t){t.keyCode===e.ui.keyCode.SPACE&&e(this).click()})),this._setOption("disabled",i.disabled),this._resetButton()},_determineButtonType:function(){var e,t,i;this.type=this.element.is("[type=checkbox]")?"checkbox":this.element.is("[type=radio]")?"radio":this.element.is("input")?"input":"button","checkbox"===this.type||"radio"===this.type?(e=this.element.parents().last(),t="label[for='"+this.element.attr("id")+"']",this.buttonElement=e.find(t),this.buttonElement.length||(e=e.length?e.siblings():this.element.siblings(),this.buttonElement=e.filter(t),this.buttonElement.length||(this.buttonElement=e.find(t))),this.element.addClass("ui-helper-hidden-accessible"),i=this.element.is(":checked"),i&&this.buttonElement.addClass("ui-state-active"),this.buttonElement.prop("aria-pressed",i)):this.buttonElement=this.element},widget:function(){return this.buttonElement},_destroy:function(){this.element.removeClass("ui-helper-hidden-accessible"),this.buttonElement.removeClass(p+" ui-state-active "+f).removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html()),this.hasTitle||this.buttonElement.removeAttr("title")},_setOption:function(e,t){return this._super(e,t),"disabled"===e?(this.widget().toggleClass("ui-state-disabled",!!t),this.element.prop("disabled",!!t),t&&("checkbox"===this.type||"radio"===this.type?this.buttonElement.removeClass("ui-state-focus"):this.buttonElement.removeClass("ui-state-focus ui-state-active")),void 0):(this._resetButton(),void 0)},refresh:function(){var t=this.element.is("input, button")?this.element.is(":disabled"):this.element.hasClass("ui-button-disabled");t!==this.options.disabled&&this._setOption("disabled",t),"radio"===this.type?g(this.element[0]).each(function(){e(this).is(":checked")?e(this).button("widget").addClass("ui-state-active").attr("aria-pressed","true"):e(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")}):"checkbox"===this.type&&(this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false"))},_resetButton:function(){if("input"===this.type)return this.options.label&&this.element.val(this.options.label),void 0;var t=this.buttonElement.removeClass(f),i=e("<span></span>",this.document[0]).addClass("ui-button-text").html(this.options.label).appendTo(t.empty()).text(),s=this.options.icons,n=s.primary&&s.secondary,a=[];s.primary||s.secondary?(this.options.text&&a.push("ui-button-text-icon"+(n?"s":s.primary?"-primary":"-secondary")),s.primary&&t.prepend("<span class='ui-button-icon-primary ui-icon "+s.primary+"'></span>"),s.secondary&&t.append("<span class='ui-button-icon-secondary ui-icon "+s.secondary+"'></span>"),this.options.text||(a.push(n?"ui-button-icons-only":"ui-button-icon-only"),this.hasTitle||t.attr("title",e.trim(i)))):a.push("ui-button-text-only"),t.addClass(a.join(" "))}}),e.widget("ui.buttonset",{version:"1.11.4",options:{items:"button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(e,t){"disabled"===e&&this.buttons.button("option",e,t),this._super(e,t)},refresh:function(){var t="rtl"===this.element.css("direction"),i=this.element.find(this.options.items),s=i.filter(":ui-button");i.not(":ui-button").button(),s.button("refresh"),this.buttons=i.map(function(){return e(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(t?"ui-corner-right":"ui-corner-left").end().filter(":last").addClass(t?"ui-corner-left":"ui-corner-right").end().end()},_destroy:function(){this.element.removeClass("ui-buttonset"),this.buttons.map(function(){return e(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy")}}),e.ui.button,e.extend(e.ui,{datepicker:{version:"1.11.4"}});var v;e.extend(n.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(e){return r(this._defaults,e||{}),this},_attachDatepicker:function(t,i){var s,n,a;s=t.nodeName.toLowerCase(),n="div"===s||"span"===s,t.id||(this.uuid+=1,t.id="dp"+this.uuid),a=this._newInst(e(t),n),a.settings=e.extend({},i||{}),"input"===s?this._connectDatepicker(t,a):n&&this._inlineDatepicker(t,a)},_newInst:function(t,i){var s=t[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1");return{id:s,input:t,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:i,dpDiv:i?a(e("<div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")):this.dpDiv}},_connectDatepicker:function(t,i){var s=e(t);i.append=e([]),i.trigger=e([]),s.hasClass(this.markerClassName)||(this._attachments(s,i),s.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp),this._autoSize(i),e.data(t,"datepicker",i),i.settings.disabled&&this._disableDatepicker(t))},_attachments:function(t,i){var s,n,a,o=this._get(i,"appendText"),r=this._get(i,"isRTL");i.append&&i.append.remove(),o&&(i.append=e("<span class='"+this._appendClass+"'>"+o+"</span>"),t[r?"before":"after"](i.append)),t.unbind("focus",this._showDatepicker),i.trigger&&i.trigger.remove(),s=this._get(i,"showOn"),("focus"===s||"both"===s)&&t.focus(this._showDatepicker),("button"===s||"both"===s)&&(n=this._get(i,"buttonText"),a=this._get(i,"buttonImage"),i.trigger=e(this._get(i,"buttonImageOnly")?e("<img/>").addClass(this._triggerClass).attr({src:a,alt:n,title:n}):e("<button type='button'></button>").addClass(this._triggerClass).html(a?e("<img/>").attr({src:a,alt:n,title:n}):n)),t[r?"before":"after"](i.trigger),i.trigger.click(function(){return e.datepicker._datepickerShowing&&e.datepicker._lastInput===t[0]?e.datepicker._hideDatepicker():e.datepicker._datepickerShowing&&e.datepicker._lastInput!==t[0]?(e.datepicker._hideDatepicker(),e.datepicker._showDatepicker(t[0])):e.datepicker._showDatepicker(t[0]),!1}))},_autoSize:function(e){if(this._get(e,"autoSize")&&!e.inline){var t,i,s,n,a=new Date(2009,11,20),o=this._get(e,"dateFormat");o.match(/[DM]/)&&(t=function(e){for(i=0,s=0,n=0;e.length>n;n++)e[n].length>i&&(i=e[n].length,s=n);return s},a.setMonth(t(this._get(e,o.match(/MM/)?"monthNames":"monthNamesShort"))),a.setDate(t(this._get(e,o.match(/DD/)?"dayNames":"dayNamesShort"))+20-a.getDay())),e.input.attr("size",this._formatDate(e,a).length)}},_inlineDatepicker:function(t,i){var s=e(t);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),e.data(t,"datepicker",i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(t),i.dpDiv.css("display","block"))},_dialogDatepicker:function(t,i,s,n,a){var o,h,l,u,d,c=this._dialogInst;return c||(this.uuid+=1,o="dp"+this.uuid,this._dialogInput=e("<input type='text' id='"+o+"' style='position: absolute; top: -100px; width: 0px;'/>"),this._dialogInput.keydown(this._doKeyDown),e("body").append(this._dialogInput),c=this._dialogInst=this._newInst(this._dialogInput,!1),c.settings={},e.data(this._dialogInput[0],"datepicker",c)),r(c.settings,n||{}),i=i&&i.constructor===Date?this._formatDate(c,i):i,this._dialogInput.val(i),this._pos=a?a.length?a:[a.pageX,a.pageY]:null,this._pos||(h=document.documentElement.clientWidth,l=document.documentElement.clientHeight,u=document.documentElement.scrollLeft||document.body.scrollLeft,d=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[h/2-100+u,l/2-150+d]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),c.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),e.blockUI&&e.blockUI(this.dpDiv),e.data(this._dialogInput[0],"datepicker",c),this},_destroyDatepicker:function(t){var i,s=e(t),n=e.data(t,"datepicker");s.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),e.removeData(t,"datepicker"),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)):("div"===i||"span"===i)&&s.removeClass(this.markerClassName).empty(),v===n&&(v=null))},_enableDatepicker:function(t){var i,s,n=e(t),a=e.data(t,"datepicker");n.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),"input"===i?(t.disabled=!1,a.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().removeClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=e.map(this._disabledInputs,function(e){return e===t?null:e}))},_disableDatepicker:function(t){var i,s,n=e(t),a=e.data(t,"datepicker");n.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),"input"===i?(t.disabled=!0,a.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().addClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=e.map(this._disabledInputs,function(e){return e===t?null:e}),this._disabledInputs[this._disabledInputs.length]=t)},_isDisabledDatepicker:function(e){if(!e)return!1;for(var t=0;this._disabledInputs.length>t;t++)if(this._disabledInputs[t]===e)return!0;return!1},_getInst:function(t){try{return e.data(t,"datepicker")}catch(i){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(t,i,s){var n,a,o,h,l=this._getInst(t);return 2===arguments.length&&"string"==typeof i?"defaults"===i?e.extend({},e.datepicker._defaults):l?"all"===i?e.extend({},l.settings):this._get(l,i):null:(n=i||{},"string"==typeof i&&(n={},n[i]=s),l&&(this._curInst===l&&this._hideDatepicker(),a=this._getDateDatepicker(t,!0),o=this._getMinMaxDate(l,"min"),h=this._getMinMaxDate(l,"max"),r(l.settings,n),null!==o&&void 0!==n.dateFormat&&void 0===n.minDate&&(l.settings.minDate=this._formatDate(l,o)),null!==h&&void 0!==n.dateFormat&&void 0===n.maxDate&&(l.settings.maxDate=this._formatDate(l,h)),"disabled"in n&&(n.disabled?this._disableDatepicker(t):this._enableDatepicker(t)),this._attachments(e(t),l),this._autoSize(l),this._setDate(l,a),this._updateAlternate(l),this._updateDatepicker(l)),void 0)},_changeDatepicker:function(e,t,i){this._optionDatepicker(e,t,i)},_refreshDatepicker:function(e){var t=this._getInst(e);t&&this._updateDatepicker(t)},_setDateDatepicker:function(e,t){var i=this._getInst(e);i&&(this._setDate(i,t),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(e,t){var i=this._getInst(e);return i&&!i.inline&&this._setDateFromField(i,t),i?this._getDate(i):null},_doKeyDown:function(t){var i,s,n,a=e.datepicker._getInst(t.target),o=!0,r=a.dpDiv.is(".ui-datepicker-rtl");if(a._keyEvent=!0,e.datepicker._datepickerShowing)switch(t.keyCode){case 9:e.datepicker._hideDatepicker(),o=!1;break;case 13:return n=e("td."+e.datepicker._dayOverClass+":not(."+e.datepicker._currentClass+")",a.dpDiv),n[0]&&e.datepicker._selectDay(t.target,a.selectedMonth,a.selectedYear,n[0]),i=e.datepicker._get(a,"onSelect"),i?(s=e.datepicker._formatDate(a),i.apply(a.input?a.input[0]:null,[s,a])):e.datepicker._hideDatepicker(),!1;case 27:e.datepicker._hideDatepicker();break;case 33:e.datepicker._adjustDate(t.target,t.ctrlKey?-e.datepicker._get(a,"stepBigMonths"):-e.datepicker._get(a,"stepMonths"),"M");break;case 34:e.datepicker._adjustDate(t.target,t.ctrlKey?+e.datepicker._get(a,"stepBigMonths"):+e.datepicker._get(a,"stepMonths"),"M");break;case 35:(t.ctrlKey||t.metaKey)&&e.datepicker._clearDate(t.target),o=t.ctrlKey||t.metaKey;break;case 36:(t.ctrlKey||t.metaKey)&&e.datepicker._gotoToday(t.target),o=t.ctrlKey||t.metaKey;break;case 37:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,r?1:-1,"D"),o=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&e.datepicker._adjustDate(t.target,t.ctrlKey?-e.datepicker._get(a,"stepBigMonths"):-e.datepicker._get(a,"stepMonths"),"M");break;case 38:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,-7,"D"),o=t.ctrlKey||t.metaKey;break;case 39:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,r?-1:1,"D"),o=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&e.datepicker._adjustDate(t.target,t.ctrlKey?+e.datepicker._get(a,"stepBigMonths"):+e.datepicker._get(a,"stepMonths"),"M");break;case 40:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,7,"D"),o=t.ctrlKey||t.metaKey;break;default:o=!1}else 36===t.keyCode&&t.ctrlKey?e.datepicker._showDatepicker(this):o=!1;o&&(t.preventDefault(),t.stopPropagation())},_doKeyPress:function(t){var i,s,n=e.datepicker._getInst(t.target);
+return e.datepicker._get(n,"constrainInput")?(i=e.datepicker._possibleChars(e.datepicker._get(n,"dateFormat")),s=String.fromCharCode(null==t.charCode?t.keyCode:t.charCode),t.ctrlKey||t.metaKey||" ">s||!i||i.indexOf(s)>-1):void 0},_doKeyUp:function(t){var i,s=e.datepicker._getInst(t.target);if(s.input.val()!==s.lastVal)try{i=e.datepicker.parseDate(e.datepicker._get(s,"dateFormat"),s.input?s.input.val():null,e.datepicker._getFormatConfig(s)),i&&(e.datepicker._setDateFromField(s),e.datepicker._updateAlternate(s),e.datepicker._updateDatepicker(s))}catch(n){}return!0},_showDatepicker:function(t){if(t=t.target||t,"input"!==t.nodeName.toLowerCase()&&(t=e("input",t.parentNode)[0]),!e.datepicker._isDisabledDatepicker(t)&&e.datepicker._lastInput!==t){var i,n,a,o,h,l,u;i=e.datepicker._getInst(t),e.datepicker._curInst&&e.datepicker._curInst!==i&&(e.datepicker._curInst.dpDiv.stop(!0,!0),i&&e.datepicker._datepickerShowing&&e.datepicker._hideDatepicker(e.datepicker._curInst.input[0])),n=e.datepicker._get(i,"beforeShow"),a=n?n.apply(t,[t,i]):{},a!==!1&&(r(i.settings,a),i.lastVal=null,e.datepicker._lastInput=t,e.datepicker._setDateFromField(i),e.datepicker._inDialog&&(t.value=""),e.datepicker._pos||(e.datepicker._pos=e.datepicker._findPos(t),e.datepicker._pos[1]+=t.offsetHeight),o=!1,e(t).parents().each(function(){return o|="fixed"===e(this).css("position"),!o}),h={left:e.datepicker._pos[0],top:e.datepicker._pos[1]},e.datepicker._pos=null,i.dpDiv.empty(),i.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),e.datepicker._updateDatepicker(i),h=e.datepicker._checkOffset(i,h,o),i.dpDiv.css({position:e.datepicker._inDialog&&e.blockUI?"static":o?"fixed":"absolute",display:"none",left:h.left+"px",top:h.top+"px"}),i.inline||(l=e.datepicker._get(i,"showAnim"),u=e.datepicker._get(i,"duration"),i.dpDiv.css("z-index",s(e(t))+1),e.datepicker._datepickerShowing=!0,e.effects&&e.effects.effect[l]?i.dpDiv.show(l,e.datepicker._get(i,"showOptions"),u):i.dpDiv[l||"show"](l?u:null),e.datepicker._shouldFocusInput(i)&&i.input.focus(),e.datepicker._curInst=i))}},_updateDatepicker:function(t){this.maxRows=4,v=t,t.dpDiv.empty().append(this._generateHTML(t)),this._attachHandlers(t);var i,s=this._getNumberOfMonths(t),n=s[1],a=17,r=t.dpDiv.find("."+this._dayOverClass+" a");r.length>0&&o.apply(r.get(0)),t.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&t.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",a*n+"em"),t.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),t.dpDiv[(this._get(t,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),t===e.datepicker._curInst&&e.datepicker._datepickerShowing&&e.datepicker._shouldFocusInput(t)&&t.input.focus(),t.yearshtml&&(i=t.yearshtml,setTimeout(function(){i===t.yearshtml&&t.yearshtml&&t.dpDiv.find("select.ui-datepicker-year:first").replaceWith(t.yearshtml),i=t.yearshtml=null},0))},_shouldFocusInput:function(e){return e.input&&e.input.is(":visible")&&!e.input.is(":disabled")&&!e.input.is(":focus")},_checkOffset:function(t,i,s){var n=t.dpDiv.outerWidth(),a=t.dpDiv.outerHeight(),o=t.input?t.input.outerWidth():0,r=t.input?t.input.outerHeight():0,h=document.documentElement.clientWidth+(s?0:e(document).scrollLeft()),l=document.documentElement.clientHeight+(s?0:e(document).scrollTop());return i.left-=this._get(t,"isRTL")?n-o:0,i.left-=s&&i.left===t.input.offset().left?e(document).scrollLeft():0,i.top-=s&&i.top===t.input.offset().top+r?e(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>h&&h>n?Math.abs(i.left+n-h):0),i.top-=Math.min(i.top,i.top+a>l&&l>a?Math.abs(a+r):0),i},_findPos:function(t){for(var i,s=this._getInst(t),n=this._get(s,"isRTL");t&&("hidden"===t.type||1!==t.nodeType||e.expr.filters.hidden(t));)t=t[n?"previousSibling":"nextSibling"];return i=e(t).offset(),[i.left,i.top]},_hideDatepicker:function(t){var i,s,n,a,o=this._curInst;!o||t&&o!==e.data(t,"datepicker")||this._datepickerShowing&&(i=this._get(o,"showAnim"),s=this._get(o,"duration"),n=function(){e.datepicker._tidyDialog(o)},e.effects&&(e.effects.effect[i]||e.effects[i])?o.dpDiv.hide(i,e.datepicker._get(o,"showOptions"),s,n):o.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?s:null,n),i||n(),this._datepickerShowing=!1,a=this._get(o,"onClose"),a&&a.apply(o.input?o.input[0]:null,[o.input?o.input.val():"",o]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),e.blockUI&&(e.unblockUI(),e("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(e){e.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(t){if(e.datepicker._curInst){var i=e(t.target),s=e.datepicker._getInst(i[0]);(i[0].id!==e.datepicker._mainDivId&&0===i.parents("#"+e.datepicker._mainDivId).length&&!i.hasClass(e.datepicker.markerClassName)&&!i.closest("."+e.datepicker._triggerClass).length&&e.datepicker._datepickerShowing&&(!e.datepicker._inDialog||!e.blockUI)||i.hasClass(e.datepicker.markerClassName)&&e.datepicker._curInst!==s)&&e.datepicker._hideDatepicker()}},_adjustDate:function(t,i,s){var n=e(t),a=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(a,i+("M"===s?this._get(a,"showCurrentAtPos"):0),s),this._updateDatepicker(a))},_gotoToday:function(t){var i,s=e(t),n=this._getInst(s[0]);this._get(n,"gotoCurrent")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(t,i,s){var n=e(t),a=this._getInst(n[0]);a["selected"+("M"===s?"Month":"Year")]=a["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(a),this._adjustDate(n)},_selectDay:function(t,i,s,n){var a,o=e(t);e(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(o[0])||(a=this._getInst(o[0]),a.selectedDay=a.currentDay=e("a",n).html(),a.selectedMonth=a.currentMonth=i,a.selectedYear=a.currentYear=s,this._selectDate(t,this._formatDate(a,a.currentDay,a.currentMonth,a.currentYear)))},_clearDate:function(t){var i=e(t);this._selectDate(i,"")},_selectDate:function(t,i){var s,n=e(t),a=this._getInst(n[0]);i=null!=i?i:this._formatDate(a),a.input&&a.input.val(i),this._updateAlternate(a),s=this._get(a,"onSelect"),s?s.apply(a.input?a.input[0]:null,[i,a]):a.input&&a.input.trigger("change"),a.inline?this._updateDatepicker(a):(this._hideDatepicker(),this._lastInput=a.input[0],"object"!=typeof a.input[0]&&a.input.focus(),this._lastInput=null)},_updateAlternate:function(t){var i,s,n,a=this._get(t,"altField");a&&(i=this._get(t,"altFormat")||this._get(t,"dateFormat"),s=this._getDate(t),n=this.formatDate(i,s,this._getFormatConfig(t)),e(a).each(function(){e(this).val(n)}))},noWeekends:function(e){var t=e.getDay();return[t>0&&6>t,""]},iso8601Week:function(e){var t,i=new Date(e.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),t=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((t-i)/864e5)/7)+1},parseDate:function(t,i,s){if(null==t||null==i)throw"Invalid arguments";if(i="object"==typeof i?""+i:i+"",""===i)return null;var n,a,o,r,h=0,l=(s?s.shortYearCutoff:null)||this._defaults.shortYearCutoff,u="string"!=typeof l?l:(new Date).getFullYear()%100+parseInt(l,10),d=(s?s.dayNamesShort:null)||this._defaults.dayNamesShort,c=(s?s.dayNames:null)||this._defaults.dayNames,p=(s?s.monthNamesShort:null)||this._defaults.monthNamesShort,f=(s?s.monthNames:null)||this._defaults.monthNames,m=-1,g=-1,v=-1,y=-1,b=!1,_=function(e){var i=t.length>n+1&&t.charAt(n+1)===e;return i&&n++,i},x=function(e){var t=_(e),s="@"===e?14:"!"===e?20:"y"===e&&t?4:"o"===e?3:2,n="y"===e?s:1,a=RegExp("^\\d{"+n+","+s+"}"),o=i.substring(h).match(a);if(!o)throw"Missing number at position "+h;return h+=o[0].length,parseInt(o[0],10)},w=function(t,s,n){var a=-1,o=e.map(_(t)?n:s,function(e,t){return[[t,e]]}).sort(function(e,t){return-(e[1].length-t[1].length)});if(e.each(o,function(e,t){var s=t[1];return i.substr(h,s.length).toLowerCase()===s.toLowerCase()?(a=t[0],h+=s.length,!1):void 0}),-1!==a)return a+1;throw"Unknown name at position "+h},k=function(){if(i.charAt(h)!==t.charAt(n))throw"Unexpected literal at position "+h;h++};for(n=0;t.length>n;n++)if(b)"'"!==t.charAt(n)||_("'")?k():b=!1;else switch(t.charAt(n)){case"d":v=x("d");break;case"D":w("D",d,c);break;case"o":y=x("o");break;case"m":g=x("m");break;case"M":g=w("M",p,f);break;case"y":m=x("y");break;case"@":r=new Date(x("@")),m=r.getFullYear(),g=r.getMonth()+1,v=r.getDate();break;case"!":r=new Date((x("!")-this._ticksTo1970)/1e4),m=r.getFullYear(),g=r.getMonth()+1,v=r.getDate();break;case"'":_("'")?k():b=!0;break;default:k()}if(i.length>h&&(o=i.substr(h),!/^\s+/.test(o)))throw"Extra/unparsed characters found in date: "+o;if(-1===m?m=(new Date).getFullYear():100>m&&(m+=(new Date).getFullYear()-(new Date).getFullYear()%100+(u>=m?0:-100)),y>-1)for(g=1,v=y;;){if(a=this._getDaysInMonth(m,g-1),a>=v)break;g++,v-=a}if(r=this._daylightSavingAdjust(new Date(m,g-1,v)),r.getFullYear()!==m||r.getMonth()+1!==g||r.getDate()!==v)throw"Invalid date";return r},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(e,t,i){if(!t)return"";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,a=(i?i.dayNames:null)||this._defaults.dayNames,o=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,r=(i?i.monthNames:null)||this._defaults.monthNames,h=function(t){var i=e.length>s+1&&e.charAt(s+1)===t;return i&&s++,i},l=function(e,t,i){var s=""+t;if(h(e))for(;i>s.length;)s="0"+s;return s},u=function(e,t,i,s){return h(e)?s[t]:i[t]},d="",c=!1;if(t)for(s=0;e.length>s;s++)if(c)"'"!==e.charAt(s)||h("'")?d+=e.charAt(s):c=!1;else switch(e.charAt(s)){case"d":d+=l("d",t.getDate(),2);break;case"D":d+=u("D",t.getDay(),n,a);break;case"o":d+=l("o",Math.round((new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime()-new Date(t.getFullYear(),0,0).getTime())/864e5),3);break;case"m":d+=l("m",t.getMonth()+1,2);break;case"M":d+=u("M",t.getMonth(),o,r);break;case"y":d+=h("y")?t.getFullYear():(10>t.getYear()%100?"0":"")+t.getYear()%100;break;case"@":d+=t.getTime();break;case"!":d+=1e4*t.getTime()+this._ticksTo1970;break;case"'":h("'")?d+="'":c=!0;break;default:d+=e.charAt(s)}return d},_possibleChars:function(e){var t,i="",s=!1,n=function(i){var s=e.length>t+1&&e.charAt(t+1)===i;return s&&t++,s};for(t=0;e.length>t;t++)if(s)"'"!==e.charAt(t)||n("'")?i+=e.charAt(t):s=!1;else switch(e.charAt(t)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":n("'")?i+="'":s=!0;break;default:i+=e.charAt(t)}return i},_get:function(e,t){return void 0!==e.settings[t]?e.settings[t]:this._defaults[t]},_setDateFromField:function(e,t){if(e.input.val()!==e.lastVal){var i=this._get(e,"dateFormat"),s=e.lastVal=e.input?e.input.val():null,n=this._getDefaultDate(e),a=n,o=this._getFormatConfig(e);try{a=this.parseDate(i,s,o)||n}catch(r){s=t?"":s}e.selectedDay=a.getDate(),e.drawMonth=e.selectedMonth=a.getMonth(),e.drawYear=e.selectedYear=a.getFullYear(),e.currentDay=s?a.getDate():0,e.currentMonth=s?a.getMonth():0,e.currentYear=s?a.getFullYear():0,this._adjustInstDate(e)}},_getDefaultDate:function(e){return this._restrictMinMax(e,this._determineDate(e,this._get(e,"defaultDate"),new Date))},_determineDate:function(t,i,s){var n=function(e){var t=new Date;return t.setDate(t.getDate()+e),t},a=function(i){try{return e.datepicker.parseDate(e.datepicker._get(t,"dateFormat"),i,e.datepicker._getFormatConfig(t))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?e.datepicker._getDate(t):null)||new Date,a=n.getFullYear(),o=n.getMonth(),r=n.getDate(),h=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=h.exec(i);l;){switch(l[2]||"d"){case"d":case"D":r+=parseInt(l[1],10);break;case"w":case"W":r+=7*parseInt(l[1],10);break;case"m":case"M":o+=parseInt(l[1],10),r=Math.min(r,e.datepicker._getDaysInMonth(a,o));break;case"y":case"Y":a+=parseInt(l[1],10),r=Math.min(r,e.datepicker._getDaysInMonth(a,o))}l=h.exec(i)}return new Date(a,o,r)},o=null==i||""===i?s:"string"==typeof i?a(i):"number"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return o=o&&"Invalid Date"==""+o?s:o,o&&(o.setHours(0),o.setMinutes(0),o.setSeconds(0),o.setMilliseconds(0)),this._daylightSavingAdjust(o)},_daylightSavingAdjust:function(e){return e?(e.setHours(e.getHours()>12?e.getHours()+2:0),e):null},_setDate:function(e,t,i){var s=!t,n=e.selectedMonth,a=e.selectedYear,o=this._restrictMinMax(e,this._determineDate(e,t,new Date));e.selectedDay=e.currentDay=o.getDate(),e.drawMonth=e.selectedMonth=e.currentMonth=o.getMonth(),e.drawYear=e.selectedYear=e.currentYear=o.getFullYear(),n===e.selectedMonth&&a===e.selectedYear||i||this._notifyChange(e),this._adjustInstDate(e),e.input&&e.input.val(s?"":this._formatDate(e))},_getDate:function(e){var t=!e.currentYear||e.input&&""===e.input.val()?null:this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return t},_attachHandlers:function(t){var i=this._get(t,"stepMonths"),s="#"+t.id.replace(/\\\\/g,"\\");t.dpDiv.find("[data-handler]").map(function(){var t={prev:function(){e.datepicker._adjustDate(s,-i,"M")},next:function(){e.datepicker._adjustDate(s,+i,"M")},hide:function(){e.datepicker._hideDatepicker()},today:function(){e.datepicker._gotoToday(s)},selectDay:function(){return e.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return e.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return e.datepicker._selectMonthYear(s,this,"Y"),!1}};e(this).bind(this.getAttribute("data-event"),t[this.getAttribute("data-handler")])})},_generateHTML:function(e){var t,i,s,n,a,o,r,h,l,u,d,c,p,f,m,g,v,y,b,_,x,w,k,T,D,S,M,C,N,A,P,I,H,z,F,E,O,j,W,L=new Date,R=this._daylightSavingAdjust(new Date(L.getFullYear(),L.getMonth(),L.getDate())),Y=this._get(e,"isRTL"),B=this._get(e,"showButtonPanel"),J=this._get(e,"hideIfNoPrevNext"),q=this._get(e,"navigationAsDateFormat"),K=this._getNumberOfMonths(e),V=this._get(e,"showCurrentAtPos"),U=this._get(e,"stepMonths"),Q=1!==K[0]||1!==K[1],G=this._daylightSavingAdjust(e.currentDay?new Date(e.currentYear,e.currentMonth,e.currentDay):new Date(9999,9,9)),X=this._getMinMaxDate(e,"min"),$=this._getMinMaxDate(e,"max"),Z=e.drawMonth-V,et=e.drawYear;if(0>Z&&(Z+=12,et--),$)for(t=this._daylightSavingAdjust(new Date($.getFullYear(),$.getMonth()-K[0]*K[1]+1,$.getDate())),t=X&&X>t?X:t;this._daylightSavingAdjust(new Date(et,Z,1))>t;)Z--,0>Z&&(Z=11,et--);for(e.drawMonth=Z,e.drawYear=et,i=this._get(e,"prevText"),i=q?this.formatDate(i,this._daylightSavingAdjust(new Date(et,Z-U,1)),this._getFormatConfig(e)):i,s=this._canAdjustMonth(e,-1,et,Z)?"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>":J?"":"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>",n=this._get(e,"nextText"),n=q?this.formatDate(n,this._daylightSavingAdjust(new Date(et,Z+U,1)),this._getFormatConfig(e)):n,a=this._canAdjustMonth(e,1,et,Z)?"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>":J?"":"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>",o=this._get(e,"currentText"),r=this._get(e,"gotoCurrent")&&e.currentDay?G:R,o=q?this.formatDate(o,r,this._getFormatConfig(e)):o,h=e.inline?"":"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>"+this._get(e,"closeText")+"</button>",l=B?"<div class='ui-datepicker-buttonpane ui-widget-content'>"+(Y?h:"")+(this._isInRange(e,r)?"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>"+o+"</button>":"")+(Y?"":h)+"</div>":"",u=parseInt(this._get(e,"firstDay"),10),u=isNaN(u)?0:u,d=this._get(e,"showWeek"),c=this._get(e,"dayNames"),p=this._get(e,"dayNamesMin"),f=this._get(e,"monthNames"),m=this._get(e,"monthNamesShort"),g=this._get(e,"beforeShowDay"),v=this._get(e,"showOtherMonths"),y=this._get(e,"selectOtherMonths"),b=this._getDefaultDate(e),_="",w=0;K[0]>w;w++){for(k="",this.maxRows=4,T=0;K[1]>T;T++){if(D=this._daylightSavingAdjust(new Date(et,Z,e.selectedDay)),S=" ui-corner-all",M="",Q){if(M+="<div class='ui-datepicker-group",K[1]>1)switch(T){case 0:M+=" ui-datepicker-group-first",S=" ui-corner-"+(Y?"right":"left");break;case K[1]-1:M+=" ui-datepicker-group-last",S=" ui-corner-"+(Y?"left":"right");break;default:M+=" ui-datepicker-group-middle",S=""}M+="'>"}for(M+="<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+S+"'>"+(/all|left/.test(S)&&0===w?Y?a:s:"")+(/all|right/.test(S)&&0===w?Y?s:a:"")+this._generateMonthYearHeader(e,Z,et,X,$,w>0||T>0,f,m)+"</div><table class='ui-datepicker-calendar'><thead>"+"<tr>",C=d?"<th class='ui-datepicker-week-col'>"+this._get(e,"weekHeader")+"</th>":"",x=0;7>x;x++)N=(x+u)%7,C+="<th scope='col'"+((x+u+6)%7>=5?" class='ui-datepicker-week-end'":"")+">"+"<span title='"+c[N]+"'>"+p[N]+"</span></th>";for(M+=C+"</tr></thead><tbody>",A=this._getDaysInMonth(et,Z),et===e.selectedYear&&Z===e.selectedMonth&&(e.selectedDay=Math.min(e.selectedDay,A)),P=(this._getFirstDayOfMonth(et,Z)-u+7)%7,I=Math.ceil((P+A)/7),H=Q?this.maxRows>I?this.maxRows:I:I,this.maxRows=H,z=this._daylightSavingAdjust(new Date(et,Z,1-P)),F=0;H>F;F++){for(M+="<tr>",E=d?"<td class='ui-datepicker-week-col'>"+this._get(e,"calculateWeek")(z)+"</td>":"",x=0;7>x;x++)O=g?g.apply(e.input?e.input[0]:null,[z]):[!0,""],j=z.getMonth()!==Z,W=j&&!y||!O[0]||X&&X>z||$&&z>$,E+="<td class='"+((x+u+6)%7>=5?" ui-datepicker-week-end":"")+(j?" ui-datepicker-other-month":"")+(z.getTime()===D.getTime()&&Z===e.selectedMonth&&e._keyEvent||b.getTime()===z.getTime()&&b.getTime()===D.getTime()?" "+this._dayOverClass:"")+(W?" "+this._unselectableClass+" ui-state-disabled":"")+(j&&!v?"":" "+O[1]+(z.getTime()===G.getTime()?" "+this._currentClass:"")+(z.getTime()===R.getTime()?" ui-datepicker-today":""))+"'"+(j&&!v||!O[2]?"":" title='"+O[2].replace(/'/g,"&#39;")+"'")+(W?"":" data-handler='selectDay' data-event='click' data-month='"+z.getMonth()+"' data-year='"+z.getFullYear()+"'")+">"+(j&&!v?"&#xa0;":W?"<span class='ui-state-default'>"+z.getDate()+"</span>":"<a class='ui-state-default"+(z.getTime()===R.getTime()?" ui-state-highlight":"")+(z.getTime()===G.getTime()?" ui-state-active":"")+(j?" ui-priority-secondary":"")+"' href='#'>"+z.getDate()+"</a>")+"</td>",z.setDate(z.getDate()+1),z=this._daylightSavingAdjust(z);M+=E+"</tr>"}Z++,Z>11&&(Z=0,et++),M+="</tbody></table>"+(Q?"</div>"+(K[0]>0&&T===K[1]-1?"<div class='ui-datepicker-row-break'></div>":""):""),k+=M}_+=k}return _+=l,e._keyEvent=!1,_},_generateMonthYearHeader:function(e,t,i,s,n,a,o,r){var h,l,u,d,c,p,f,m,g=this._get(e,"changeMonth"),v=this._get(e,"changeYear"),y=this._get(e,"showMonthAfterYear"),b="<div class='ui-datepicker-title'>",_="";if(a||!g)_+="<span class='ui-datepicker-month'>"+o[t]+"</span>";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,_+="<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>",u=0;12>u;u++)(!h||u>=s.getMonth())&&(!l||n.getMonth()>=u)&&(_+="<option value='"+u+"'"+(u===t?" selected='selected'":"")+">"+r[u]+"</option>");_+="</select>"}if(y||(b+=_+(!a&&g&&v?"":"&#xa0;")),!e.yearshtml)if(e.yearshtml="",a||!v)b+="<span class='ui-datepicker-year'>"+i+"</span>";else{for(d=this._get(e,"yearRange").split(":"),c=(new Date).getFullYear(),p=function(e){var t=e.match(/c[+\-].*/)?i+parseInt(e.substring(1),10):e.match(/[+\-].*/)?c+parseInt(e,10):parseInt(e,10);return isNaN(t)?c:t},f=p(d[0]),m=Math.max(f,p(d[1]||"")),f=s?Math.max(f,s.getFullYear()):f,m=n?Math.min(m,n.getFullYear()):m,e.yearshtml+="<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";m>=f;f++)e.yearshtml+="<option value='"+f+"'"+(f===i?" selected='selected'":"")+">"+f+"</option>";e.yearshtml+="</select>",b+=e.yearshtml,e.yearshtml=null}return b+=this._get(e,"yearSuffix"),y&&(b+=(!a&&g&&v?"":"&#xa0;")+_),b+="</div>"},_adjustInstDate:function(e,t,i){var s=e.drawYear+("Y"===i?t:0),n=e.drawMonth+("M"===i?t:0),a=Math.min(e.selectedDay,this._getDaysInMonth(s,n))+("D"===i?t:0),o=this._restrictMinMax(e,this._daylightSavingAdjust(new Date(s,n,a)));e.selectedDay=o.getDate(),e.drawMonth=e.selectedMonth=o.getMonth(),e.drawYear=e.selectedYear=o.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(e)},_restrictMinMax:function(e,t){var i=this._getMinMaxDate(e,"min"),s=this._getMinMaxDate(e,"max"),n=i&&i>t?i:t;return s&&n>s?s:n},_notifyChange:function(e){var t=this._get(e,"onChangeMonthYear");t&&t.apply(e.input?e.input[0]:null,[e.selectedYear,e.selectedMonth+1,e])},_getNumberOfMonths:function(e){var t=this._get(e,"numberOfMonths");return null==t?[1,1]:"number"==typeof t?[1,t]:t},_getMinMaxDate:function(e,t){return this._determineDate(e,this._get(e,t+"Date"),null)},_getDaysInMonth:function(e,t){return 32-this._daylightSavingAdjust(new Date(e,t,32)).getDate()},_getFirstDayOfMonth:function(e,t){return new Date(e,t,1).getDay()},_canAdjustMonth:function(e,t,i,s){var n=this._getNumberOfMonths(e),a=this._daylightSavingAdjust(new Date(i,s+(0>t?t:n[0]*n[1]),1));return 0>t&&a.setDate(this._getDaysInMonth(a.getFullYear(),a.getMonth())),this._isInRange(e,a)},_isInRange:function(e,t){var i,s,n=this._getMinMaxDate(e,"min"),a=this._getMinMaxDate(e,"max"),o=null,r=null,h=this._get(e,"yearRange");return h&&(i=h.split(":"),s=(new Date).getFullYear(),o=parseInt(i[0],10),r=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(o+=s),i[1].match(/[+\-].*/)&&(r+=s)),(!n||t.getTime()>=n.getTime())&&(!a||t.getTime()<=a.getTime())&&(!o||t.getFullYear()>=o)&&(!r||r>=t.getFullYear())},_getFormatConfig:function(e){var t=this._get(e,"shortYearCutoff");return t="string"!=typeof t?t:(new Date).getFullYear()%100+parseInt(t,10),{shortYearCutoff:t,dayNamesShort:this._get(e,"dayNamesShort"),dayNames:this._get(e,"dayNames"),monthNamesShort:this._get(e,"monthNamesShort"),monthNames:this._get(e,"monthNames")}},_formatDate:function(e,t,i,s){t||(e.currentDay=e.selectedDay,e.currentMonth=e.selectedMonth,e.currentYear=e.selectedYear);var n=t?"object"==typeof t?t:this._daylightSavingAdjust(new Date(s,i,t)):this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return this.formatDate(this._get(e,"dateFormat"),n,this._getFormatConfig(e))}}),e.fn.datepicker=function(t){if(!this.length)return this;e.datepicker.initialized||(e(document).mousedown(e.datepicker._checkExternalClick),e.datepicker.initialized=!0),0===e("#"+e.datepicker._mainDivId).length&&e("body").append(e.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof t||"isDisabled"!==t&&"getDate"!==t&&"widget"!==t?"option"===t&&2===arguments.length&&"string"==typeof arguments[1]?e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof t?e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this].concat(i)):e.datepicker._attachDatepicker(this,t)}):e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this[0]].concat(i))},e.datepicker=new n,e.datepicker.initialized=!1,e.datepicker.uuid=(new Date).getTime(),e.datepicker.version="1.11.4",e.datepicker,e.widget("ui.draggable",e.ui.mouse,{version:"1.11.4",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._setHandleClassName(),this._mouseInit()},_setOption:function(e,t){this._super(e,t),"handle"===e&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){return(this.helper||this.element).is(".ui-draggable-dragging")?(this.destroyOnClear=!0,void 0):(this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._removeHandleClassName(),this._mouseDestroy(),void 0)},_mouseCapture:function(t){var i=this.options;return this._blurActiveElement(t),this.helper||i.disabled||e(t.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(t),this.handle?(this._blockFrames(i.iframeFix===!0?"iframe":i.iframeFix),!0):!1)},_blockFrames:function(t){this.iframeBlocks=this.document.find(t).map(function(){var t=e(this);return e("<div>").css("position","absolute").appendTo(t.parent()).outerWidth(t.outerWidth()).outerHeight(t.outerHeight()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(t){var i=this.document[0];if(this.handleElement.is(t.target))try{i.activeElement&&"body"!==i.activeElement.nodeName.toLowerCase()&&e(i.activeElement).blur()}catch(s){}},_mouseStart:function(t){var i=this.options;return this.helper=this._createHelper(t),this.helper.addClass("ui-draggable-dragging"),this._cacheHelperProportions(),e.ui.ddmanager&&(e.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=this.helper.parents().filter(function(){return"fixed"===e(this).css("position")}).length>0,this.positionAbs=this.element.offset(),this._refreshOffsets(t),this.originalPosition=this.position=this._generatePosition(t,!1),this.originalPageX=t.pageX,this.originalPageY=t.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",t)===!1?(this._clear(),!1):(this._cacheHelperProportions(),e.ui.ddmanager&&!i.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this._normalizeRightBottom(),this._mouseDrag(t,!0),e.ui.ddmanager&&e.ui.ddmanager.dragStart(this,t),!0)},_refreshOffsets:function(e){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:e.pageX-this.offset.left,top:e.pageY-this.offset.top}},_mouseDrag:function(t,i){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(t,!0),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",t,s)===!1)return this._mouseUp({}),!1;this.position=s.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),!1},_mouseStop:function(t){var i=this,s=!1;return e.ui.ddmanager&&!this.options.dropBehaviour&&(s=e.ui.ddmanager.drop(this,t)),this.dropped&&(s=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||e.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?e(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",t)!==!1&&i._clear()}):this._trigger("stop",t)!==!1&&this._clear(),!1},_mouseUp:function(t){return this._unblockFrames(),e.ui.ddmanager&&e.ui.ddmanager.dragStop(this,t),this.handleElement.is(t.target)&&this.element.focus(),e.ui.mouse.prototype._mouseUp.call(this,t)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear(),this},_getHandle:function(t){return this.options.handle?!!e(t.target).closest(this.element.find(this.options.handle)).length:!0},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this.handleElement.addClass("ui-draggable-handle")},_removeHandleClassName:function(){this.handleElement.removeClass("ui-draggable-handle")},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper),n=s?e(i.helper.apply(this.element[0],[t])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return n.parents("body").length||n.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s&&n[0]===this.element[0]&&this._setPositionRelative(),n[0]===this.element[0]||/(fixed|absolute)/.test(n.css("position"))||n.css("position","absolute"),n},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative")},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_isRootNode:function(e){return/(html|body)/i.test(e.tagName)||e===this.document[0]},_getParentOffset:function(){var t=this.offsetParent.offset(),i=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==i&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var e=this.element.position(),t=this._isRootNode(this.scrollParent[0]);return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+(t?0:this.scrollParent.scrollTop()),left:e.left-(parseInt(this.helper.css("left"),10)||0)+(t?0:this.scrollParent.scrollLeft())}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,n=this.options,a=this.document[0];return this.relativeContainer=null,n.containment?"window"===n.containment?(this.containment=[e(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,e(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,e(window).scrollLeft()+e(window).width()-this.helperProportions.width-this.margins.left,e(window).scrollTop()+(e(window).height()||a.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):"document"===n.containment?(this.containment=[0,0,e(a).width()-this.helperProportions.width-this.margins.left,(e(a).height()||a.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):n.containment.constructor===Array?(this.containment=n.containment,void 0):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=e(n.containment),s=i[0],s&&(t=/(scroll|auto)/.test(i.css("overflow")),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(t?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(t?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=i),void 0):(this.containment=null,void 0)
+},_convertPositionTo:function(e,t){t||(t=this.position);var i="absolute"===e?1:-1,s=this._isRootNode(this.scrollParent[0]);return{top:t.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.offset.scroll.top:s?0:this.offset.scroll.top)*i,left:t.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.offset.scroll.left:s?0:this.offset.scroll.left)*i}},_generatePosition:function(e,t){var i,s,n,a,o=this.options,r=this._isRootNode(this.scrollParent[0]),h=e.pageX,l=e.pageY;return r&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),t&&(this.containment&&(this.relativeContainer?(s=this.relativeContainer.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,e.pageX-this.offset.click.left<i[0]&&(h=i[0]+this.offset.click.left),e.pageY-this.offset.click.top<i[1]&&(l=i[1]+this.offset.click.top),e.pageX-this.offset.click.left>i[2]&&(h=i[2]+this.offset.click.left),e.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),o.grid&&(n=o.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/o.grid[1])*o.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-o.grid[1]:n+o.grid[1]:n,a=o.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/o.grid[0])*o.grid[0]:this.originalPageX,h=i?a-this.offset.click.left>=i[0]||a-this.offset.click.left>i[2]?a:a-this.offset.click.left>=i[0]?a-o.grid[0]:a+o.grid[0]:a),"y"===o.axis&&(h=this.originalPageX),"x"===o.axis&&(l=this.originalPageY)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:r?0:this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:r?0:this.offset.scroll.left)}},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_normalizeRightBottom:function(){"y"!==this.options.axis&&"auto"!==this.helper.css("right")&&(this.helper.width(this.helper.width()),this.helper.css("right","auto")),"x"!==this.options.axis&&"auto"!==this.helper.css("bottom")&&(this.helper.height(this.helper.height()),this.helper.css("bottom","auto"))},_trigger:function(t,i,s){return s=s||this._uiHash(),e.ui.plugin.call(this,t,[i,s,this],!0),/^(drag|start|stop)/.test(t)&&(this.positionAbs=this._convertPositionTo("absolute"),s.offset=this.positionAbs),e.Widget.prototype._trigger.call(this,t,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),e.ui.plugin.add("draggable","connectToSortable",{start:function(t,i,s){var n=e.extend({},i,{item:s.element});s.sortables=[],e(s.options.connectToSortable).each(function(){var i=e(this).sortable("instance");i&&!i.options.disabled&&(s.sortables.push(i),i.refreshPositions(),i._trigger("activate",t,n))})},stop:function(t,i,s){var n=e.extend({},i,{item:s.element});s.cancelHelperRemoval=!1,e.each(s.sortables,function(){var e=this;e.isOver?(e.isOver=0,s.cancelHelperRemoval=!0,e.cancelHelperRemoval=!1,e._storedCSS={position:e.placeholder.css("position"),top:e.placeholder.css("top"),left:e.placeholder.css("left")},e._mouseStop(t),e.options.helper=e.options._helper):(e.cancelHelperRemoval=!0,e._trigger("deactivate",t,n))})},drag:function(t,i,s){e.each(s.sortables,function(){var n=!1,a=this;a.positionAbs=s.positionAbs,a.helperProportions=s.helperProportions,a.offset.click=s.offset.click,a._intersectsWith(a.containerCache)&&(n=!0,e.each(s.sortables,function(){return this.positionAbs=s.positionAbs,this.helperProportions=s.helperProportions,this.offset.click=s.offset.click,this!==a&&this._intersectsWith(this.containerCache)&&e.contains(a.element[0],this.element[0])&&(n=!1),n})),n?(a.isOver||(a.isOver=1,s._parent=i.helper.parent(),a.currentItem=i.helper.appendTo(a.element).data("ui-sortable-item",!0),a.options._helper=a.options.helper,a.options.helper=function(){return i.helper[0]},t.target=a.currentItem[0],a._mouseCapture(t,!0),a._mouseStart(t,!0,!0),a.offset.click.top=s.offset.click.top,a.offset.click.left=s.offset.click.left,a.offset.parent.left-=s.offset.parent.left-a.offset.parent.left,a.offset.parent.top-=s.offset.parent.top-a.offset.parent.top,s._trigger("toSortable",t),s.dropped=a.element,e.each(s.sortables,function(){this.refreshPositions()}),s.currentItem=s.element,a.fromOutside=s),a.currentItem&&(a._mouseDrag(t),i.position=a.position)):a.isOver&&(a.isOver=0,a.cancelHelperRemoval=!0,a.options._revert=a.options.revert,a.options.revert=!1,a._trigger("out",t,a._uiHash(a)),a._mouseStop(t,!0),a.options.revert=a.options._revert,a.options.helper=a.options._helper,a.placeholder&&a.placeholder.remove(),i.helper.appendTo(s._parent),s._refreshOffsets(t),i.position=s._generatePosition(t,!0),s._trigger("fromSortable",t),s.dropped=!1,e.each(s.sortables,function(){this.refreshPositions()}))})}}),e.ui.plugin.add("draggable","cursor",{start:function(t,i,s){var n=e("body"),a=s.options;n.css("cursor")&&(a._cursor=n.css("cursor")),n.css("cursor",a.cursor)},stop:function(t,i,s){var n=s.options;n._cursor&&e("body").css("cursor",n._cursor)}}),e.ui.plugin.add("draggable","opacity",{start:function(t,i,s){var n=e(i.helper),a=s.options;n.css("opacity")&&(a._opacity=n.css("opacity")),n.css("opacity",a.opacity)},stop:function(t,i,s){var n=s.options;n._opacity&&e(i.helper).css("opacity",n._opacity)}}),e.ui.plugin.add("draggable","scroll",{start:function(e,t,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(t,i,s){var n=s.options,a=!1,o=s.scrollParentNotHidden[0],r=s.document[0];o!==r&&"HTML"!==o.tagName?(n.axis&&"x"===n.axis||(s.overflowOffset.top+o.offsetHeight-t.pageY<n.scrollSensitivity?o.scrollTop=a=o.scrollTop+n.scrollSpeed:t.pageY-s.overflowOffset.top<n.scrollSensitivity&&(o.scrollTop=a=o.scrollTop-n.scrollSpeed)),n.axis&&"y"===n.axis||(s.overflowOffset.left+o.offsetWidth-t.pageX<n.scrollSensitivity?o.scrollLeft=a=o.scrollLeft+n.scrollSpeed:t.pageX-s.overflowOffset.left<n.scrollSensitivity&&(o.scrollLeft=a=o.scrollLeft-n.scrollSpeed))):(n.axis&&"x"===n.axis||(t.pageY-e(r).scrollTop()<n.scrollSensitivity?a=e(r).scrollTop(e(r).scrollTop()-n.scrollSpeed):e(window).height()-(t.pageY-e(r).scrollTop())<n.scrollSensitivity&&(a=e(r).scrollTop(e(r).scrollTop()+n.scrollSpeed))),n.axis&&"y"===n.axis||(t.pageX-e(r).scrollLeft()<n.scrollSensitivity?a=e(r).scrollLeft(e(r).scrollLeft()-n.scrollSpeed):e(window).width()-(t.pageX-e(r).scrollLeft())<n.scrollSensitivity&&(a=e(r).scrollLeft(e(r).scrollLeft()+n.scrollSpeed)))),a!==!1&&e.ui.ddmanager&&!n.dropBehaviour&&e.ui.ddmanager.prepareOffsets(s,t)}}),e.ui.plugin.add("draggable","snap",{start:function(t,i,s){var n=s.options;s.snapElements=[],e(n.snap.constructor!==String?n.snap.items||":data(ui-draggable)":n.snap).each(function(){var t=e(this),i=t.offset();this!==s.element[0]&&s.snapElements.push({item:this,width:t.outerWidth(),height:t.outerHeight(),top:i.top,left:i.left})})},drag:function(t,i,s){var n,a,o,r,h,l,u,d,c,p,f=s.options,m=f.snapTolerance,g=i.offset.left,v=g+s.helperProportions.width,y=i.offset.top,b=y+s.helperProportions.height;for(c=s.snapElements.length-1;c>=0;c--)h=s.snapElements[c].left-s.margins.left,l=h+s.snapElements[c].width,u=s.snapElements[c].top-s.margins.top,d=u+s.snapElements[c].height,h-m>v||g>l+m||u-m>b||y>d+m||!e.contains(s.snapElements[c].item.ownerDocument,s.snapElements[c].item)?(s.snapElements[c].snapping&&s.options.snap.release&&s.options.snap.release.call(s.element,t,e.extend(s._uiHash(),{snapItem:s.snapElements[c].item})),s.snapElements[c].snapping=!1):("inner"!==f.snapMode&&(n=m>=Math.abs(u-b),a=m>=Math.abs(d-y),o=m>=Math.abs(h-v),r=m>=Math.abs(l-g),n&&(i.position.top=s._convertPositionTo("relative",{top:u-s.helperProportions.height,left:0}).top),a&&(i.position.top=s._convertPositionTo("relative",{top:d,left:0}).top),o&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h-s.helperProportions.width}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l}).left)),p=n||a||o||r,"outer"!==f.snapMode&&(n=m>=Math.abs(u-y),a=m>=Math.abs(d-b),o=m>=Math.abs(h-g),r=m>=Math.abs(l-v),n&&(i.position.top=s._convertPositionTo("relative",{top:u,left:0}).top),a&&(i.position.top=s._convertPositionTo("relative",{top:d-s.helperProportions.height,left:0}).top),o&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l-s.helperProportions.width}).left)),!s.snapElements[c].snapping&&(n||a||o||r||p)&&s.options.snap.snap&&s.options.snap.snap.call(s.element,t,e.extend(s._uiHash(),{snapItem:s.snapElements[c].item})),s.snapElements[c].snapping=n||a||o||r||p)}}),e.ui.plugin.add("draggable","stack",{start:function(t,i,s){var n,a=s.options,o=e.makeArray(e(a.stack)).sort(function(t,i){return(parseInt(e(t).css("zIndex"),10)||0)-(parseInt(e(i).css("zIndex"),10)||0)});o.length&&(n=parseInt(e(o[0]).css("zIndex"),10)||0,e(o).each(function(t){e(this).css("zIndex",n+t)}),this.css("zIndex",n+o.length))}}),e.ui.plugin.add("draggable","zIndex",{start:function(t,i,s){var n=e(i.helper),a=s.options;n.css("zIndex")&&(a._zIndex=n.css("zIndex")),n.css("zIndex",a.zIndex)},stop:function(t,i,s){var n=s.options;n._zIndex&&e(i.helper).css("zIndex",n._zIndex)}}),e.ui.draggable,e.widget("ui.resizable",e.ui.mouse,{version:"1.11.4",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(e){return parseInt(e,10)||0},_isNumber:function(e){return!isNaN(parseInt(e,10))},_hasScroll:function(t,i){if("hidden"===e(t).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return t[s]>0?!0:(t[s]=1,n=t[s]>0,t[s]=0,n)},_create:function(){var t,i,s,n,a,o=this,r=this.options;if(this.element.addClass("ui-resizable"),e.extend(this,{_aspectRatio:!!r.aspectRatio,aspectRatio:r.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:r.helper||r.ghost||r.animate?r.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(e("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=r.handles||(e(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=e(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),t=this.handles.split(","),this.handles={},i=0;t.length>i;i++)s=e.trim(t[i]),a="ui-resizable-"+s,n=e("<div class='ui-resizable-handle "+a+"'></div>"),n.css({zIndex:r.zIndex}),"se"===s&&n.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[s]=".ui-resizable-"+s,this.element.append(n);this._renderAxis=function(t){var i,s,n,a;t=t||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=e(this.handles[i]),this._on(this.handles[i],{mousedown:o._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=e(this.handles[i],this.element),a=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),t.css(n,a),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.mouseover(function(){o.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),o.axis=n&&n[1]?n[1]:"se")}),r.autoHide&&(this._handles.hide(),e(this.element).addClass("ui-resizable-autohide").mouseenter(function(){r.disabled||(e(this).removeClass("ui-resizable-autohide"),o._handles.show())}).mouseleave(function(){r.disabled||o.resizing||(e(this).addClass("ui-resizable-autohide"),o._handles.hide())})),this._mouseInit()},_destroy:function(){this._mouseDestroy();var t,i=function(t){e(t).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),t=this.element,this.originalElement.css({position:t.css("position"),width:t.outerWidth(),height:t.outerHeight(),top:t.css("top"),left:t.css("left")}).insertAfter(t),t.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_mouseCapture:function(t){var i,s,n=!1;for(i in this.handles)s=e(this.handles[i])[0],(s===t.target||e.contains(s,t.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(t){var i,s,n,a=this.options,o=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),a.containment&&(i+=e(a.containment).scrollLeft()||0,s+=e(a.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:o.width(),height:o.height()},this.originalSize=this._helper?{width:o.outerWidth(),height:o.outerHeight()}:{width:o.width(),height:o.height()},this.sizeDiff={width:o.outerWidth()-o.width(),height:o.outerHeight()-o.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof a.aspectRatio?a.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=e(".ui-resizable-"+this.axis).css("cursor"),e("body").css("cursor","auto"===n?this.axis+"-resize":n),o.addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var i,s,n=this.originalMousePosition,a=this.axis,o=t.pageX-n.left||0,r=t.pageY-n.top||0,h=this._change[a];return this._updatePrevProperties(),h?(i=h.apply(this,[t,o,r]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(i=this._updateRatio(i,t)),i=this._respectSize(i,t),this._updateCache(i),this._propagate("resize",t),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),e.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(t){this.resizing=!1;var i,s,n,a,o,r,h,l=this.options,u=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:u.sizeDiff.height,a=s?0:u.sizeDiff.width,o={width:u.helper.width()-a,height:u.helper.height()-n},r=parseInt(u.element.css("left"),10)+(u.position.left-u.originalPosition.left)||null,h=parseInt(u.element.css("top"),10)+(u.position.top-u.originalPosition.top)||null,l.animate||this.element.css(e.extend(o,{top:h,left:r})),u.helper.height(u.size.height),u.helper.width(u.size.width),this._helper&&!l.animate&&this._proportionallyResize()),e("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var e={};return this.position.top!==this.prevPosition.top&&(e.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(e.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(e.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(e.height=this.size.height+"px"),this.helper.css(e),e},_updateVirtualBoundaries:function(e){var t,i,s,n,a,o=this.options;a={minWidth:this._isNumber(o.minWidth)?o.minWidth:0,maxWidth:this._isNumber(o.maxWidth)?o.maxWidth:1/0,minHeight:this._isNumber(o.minHeight)?o.minHeight:0,maxHeight:this._isNumber(o.maxHeight)?o.maxHeight:1/0},(this._aspectRatio||e)&&(t=a.minHeight*this.aspectRatio,s=a.minWidth/this.aspectRatio,i=a.maxHeight*this.aspectRatio,n=a.maxWidth/this.aspectRatio,t>a.minWidth&&(a.minWidth=t),s>a.minHeight&&(a.minHeight=s),a.maxWidth>i&&(a.maxWidth=i),a.maxHeight>n&&(a.maxHeight=n)),this._vBoundaries=a},_updateCache:function(e){this.offset=this.helper.offset(),this._isNumber(e.left)&&(this.position.left=e.left),this._isNumber(e.top)&&(this.position.top=e.top),this._isNumber(e.height)&&(this.size.height=e.height),this._isNumber(e.width)&&(this.size.width=e.width)},_updateRatio:function(e){var t=this.position,i=this.size,s=this.axis;return this._isNumber(e.height)?e.width=e.height*this.aspectRatio:this._isNumber(e.width)&&(e.height=e.width/this.aspectRatio),"sw"===s&&(e.left=t.left+(i.width-e.width),e.top=null),"nw"===s&&(e.top=t.top+(i.height-e.height),e.left=t.left+(i.width-e.width)),e},_respectSize:function(e){var t=this._vBoundaries,i=this.axis,s=this._isNumber(e.width)&&t.maxWidth&&t.maxWidth<e.width,n=this._isNumber(e.height)&&t.maxHeight&&t.maxHeight<e.height,a=this._isNumber(e.width)&&t.minWidth&&t.minWidth>e.width,o=this._isNumber(e.height)&&t.minHeight&&t.minHeight>e.height,r=this.originalPosition.left+this.originalSize.width,h=this.position.top+this.size.height,l=/sw|nw|w/.test(i),u=/nw|ne|n/.test(i);return a&&(e.width=t.minWidth),o&&(e.height=t.minHeight),s&&(e.width=t.maxWidth),n&&(e.height=t.maxHeight),a&&l&&(e.left=r-t.minWidth),s&&l&&(e.left=r-t.maxWidth),o&&u&&(e.top=h-t.minHeight),n&&u&&(e.top=h-t.maxHeight),e.width||e.height||e.left||!e.top?e.width||e.height||e.top||!e.left||(e.left=null):e.top=null,e},_getPaddingPlusBorderDimensions:function(e){for(var t=0,i=[],s=[e.css("borderTopWidth"),e.css("borderRightWidth"),e.css("borderBottomWidth"),e.css("borderLeftWidth")],n=[e.css("paddingTop"),e.css("paddingRight"),e.css("paddingBottom"),e.css("paddingLeft")];4>t;t++)i[t]=parseInt(s[t],10)||0,i[t]+=parseInt(n[t],10)||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var e,t=0,i=this.helper||this.element;this._proportionallyResizeElements.length>t;t++)e=this._proportionallyResizeElements[t],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(e)),e.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var t=this.element,i=this.options;this.elementOffset=t.offset(),this._helper?(this.helper=this.helper||e("<div style='overflow:hidden;'></div>"),this.helper.addClass(this._helper).css({width:this.element.outerWidth()-1,height:this.element.outerHeight()-1,position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(e,t){return{width:this.originalSize.width+t}},w:function(e,t){var i=this.originalSize,s=this.originalPosition;return{left:s.left+t,width:i.width-t}},n:function(e,t,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(e,t,i){return{height:this.originalSize.height+i}},se:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},sw:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,i,s]))},ne:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},nw:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,i,s]))}},_propagate:function(t,i){e.ui.plugin.call(this,t,[i,this.ui()]),"resize"!==t&&this._trigger(t,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),e.ui.plugin.add("resizable","animate",{stop:function(t){var i=e(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,a=n.length&&/textarea/i.test(n[0].nodeName),o=a&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=a?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-o},l=parseInt(i.element.css("left"),10)+(i.position.left-i.originalPosition.left)||null,u=parseInt(i.element.css("top"),10)+(i.position.top-i.originalPosition.top)||null;i.element.animate(e.extend(h,u&&l?{top:u,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseInt(i.element.css("width"),10),height:parseInt(i.element.css("height"),10),top:parseInt(i.element.css("top"),10),left:parseInt(i.element.css("left"),10)};n&&n.length&&e(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",t)}})}}),e.ui.plugin.add("resizable","containment",{start:function(){var t,i,s,n,a,o,r,h=e(this).resizable("instance"),l=h.options,u=h.element,d=l.containment,c=d instanceof e?d.get(0):/parent/.test(d)?u.parent().get(0):d;c&&(h.containerElement=e(c),/document/.test(d)||d===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}):(t=e(c),i=[],e(["Top","Right","Left","Bottom"]).each(function(e,s){i[e]=h._num(t.css("padding"+s))}),h.containerOffset=t.offset(),h.containerPosition=t.position(),h.containerSize={height:t.innerHeight()-i[3],width:t.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,a=h.containerSize.width,o=h._hasScroll(c,"left")?c.scrollWidth:a,r=h._hasScroll(c)?c.scrollHeight:n,h.parentData={element:c,left:s.left,top:s.top,width:o,height:r}))},resize:function(t){var i,s,n,a,o=e(this).resizable("instance"),r=o.options,h=o.containerOffset,l=o.position,u=o._aspectRatio||t.shiftKey,d={top:0,left:0},c=o.containerElement,p=!0;c[0]!==document&&/static/.test(c.css("position"))&&(d=h),l.left<(o._helper?h.left:0)&&(o.size.width=o.size.width+(o._helper?o.position.left-h.left:o.position.left-d.left),u&&(o.size.height=o.size.width/o.aspectRatio,p=!1),o.position.left=r.helper?h.left:0),l.top<(o._helper?h.top:0)&&(o.size.height=o.size.height+(o._helper?o.position.top-h.top:o.position.top),u&&(o.size.width=o.size.height*o.aspectRatio,p=!1),o.position.top=o._helper?h.top:0),n=o.containerElement.get(0)===o.element.parent().get(0),a=/relative|absolute/.test(o.containerElement.css("position")),n&&a?(o.offset.left=o.parentData.left+o.position.left,o.offset.top=o.parentData.top+o.position.top):(o.offset.left=o.element.offset().left,o.offset.top=o.element.offset().top),i=Math.abs(o.sizeDiff.width+(o._helper?o.offset.left-d.left:o.offset.left-h.left)),s=Math.abs(o.sizeDiff.height+(o._helper?o.offset.top-d.top:o.offset.top-h.top)),i+o.size.width>=o.parentData.width&&(o.size.width=o.parentData.width-i,u&&(o.size.height=o.size.width/o.aspectRatio,p=!1)),s+o.size.height>=o.parentData.height&&(o.size.height=o.parentData.height-s,u&&(o.size.width=o.size.height*o.aspectRatio,p=!1)),p||(o.position.left=o.prevPosition.left,o.position.top=o.prevPosition.top,o.size.width=o.prevSize.width,o.size.height=o.prevSize.height)},stop:function(){var t=e(this).resizable("instance"),i=t.options,s=t.containerOffset,n=t.containerPosition,a=t.containerElement,o=e(t.helper),r=o.offset(),h=o.outerWidth()-t.sizeDiff.width,l=o.outerHeight()-t.sizeDiff.height;t._helper&&!i.animate&&/relative/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l}),t._helper&&!i.animate&&/static/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),e.ui.plugin.add("resizable","alsoResize",{start:function(){var t=e(this).resizable("instance"),i=t.options;e(i.alsoResize).each(function(){var t=e(this);t.data("ui-resizable-alsoresize",{width:parseInt(t.width(),10),height:parseInt(t.height(),10),left:parseInt(t.css("left"),10),top:parseInt(t.css("top"),10)})})},resize:function(t,i){var s=e(this).resizable("instance"),n=s.options,a=s.originalSize,o=s.originalPosition,r={height:s.size.height-a.height||0,width:s.size.width-a.width||0,top:s.position.top-o.top||0,left:s.position.left-o.left||0};e(n.alsoResize).each(function(){var t=e(this),s=e(this).data("ui-resizable-alsoresize"),n={},a=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(a,function(e,t){var i=(s[t]||0)+(r[t]||0);i&&i>=0&&(n[t]=i||null)}),t.css(n)})},stop:function(){e(this).removeData("resizable-alsoresize")}}),e.ui.plugin.add("resizable","ghost",{start:function(){var t=e(this).resizable("instance"),i=t.options,s=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:s.height,width:s.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass("string"==typeof i.ghost?i.ghost:""),t.ghost.appendTo(t.helper)},resize:function(){var t=e(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=e(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),e.ui.plugin.add("resizable","grid",{resize:function(){var t,i=e(this).resizable("instance"),s=i.options,n=i.size,a=i.originalSize,o=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,u=h[1]||1,d=Math.round((n.width-a.width)/l)*l,c=Math.round((n.height-a.height)/u)*u,p=a.width+d,f=a.height+c,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,v=s.minWidth&&s.minWidth>p,y=s.minHeight&&s.minHeight>f;s.grid=h,v&&(p+=l),y&&(f+=u),m&&(p-=l),g&&(f-=u),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=o.top-c):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=o.left-d):((0>=f-u||0>=p-l)&&(t=i._getPaddingPlusBorderDimensions(this)),f-u>0?(i.size.height=f,i.position.top=o.top-c):(f=u-t.height,i.size.height=f,i.position.top=o.top+a.height-f),p-l>0?(i.size.width=p,i.position.left=o.left-d):(p=l-t.width,i.size.width=p,i.position.left=o.left+a.width-p))}}),e.ui.resizable,e.widget("ui.dialog",{version:"1.11.4",options:{appendTo:"body",autoOpen:!0,buttons:[],closeOnEscape:!0,closeText:"Close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(t){var i=e(this).css(t).offset().top;0>i&&e(this).css("top",t.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),this.options.title=this.options.title||this.originalTitle,this._createWrapper(),this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(this.uiDialog),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&e.fn.draggable&&this._makeDraggable(),this.options.resizable&&e.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var t=this.options.appendTo;return t&&(t.jquery||t.nodeType)?e(t):this.document.find(t||"body").eq(0)},_destroy:function(){var e,t=this.originalPosition;this._untrackInstance(),this._destroyOverlay(),this.element.removeUniqueId().removeClass("ui-dialog-content ui-widget-content").css(this.originalCss).detach(),this.uiDialog.stop(!0,!0).remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),e=t.parent.children().eq(t.index),e.length&&e[0]!==this.element[0]?e.before(this.element):t.parent.append(this.element)},widget:function(){return this.uiDialog},disable:e.noop,enable:e.noop,close:function(t){var i,s=this;if(this._isOpen&&this._trigger("beforeClose",t)!==!1){if(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),!this.opener.filter(":focusable").focus().length)try{i=this.document[0].activeElement,i&&"body"!==i.nodeName.toLowerCase()&&e(i).blur()}catch(n){}this._hide(this.uiDialog,this.options.hide,function(){s._trigger("close",t)})}},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(t,i){var s=!1,n=this.uiDialog.siblings(".ui-front:visible").map(function(){return+e(this).css("z-index")}).get(),a=Math.max.apply(null,n);return a>=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",a+1),s=!0),s&&!i&&this._trigger("focus",t),s},open:function(){var t=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),void 0):(this._isOpen=!0,this.opener=e(this.document[0].activeElement),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,function(){t._focusTabbable(),t._trigger("focus")}),this._makeFocusTarget(),this._trigger("open"),void 0)},_focusTabbable:function(){var e=this._focusedElement;e||(e=this.element.find("[autofocus]")),e.length||(e=this.element.find(":tabbable")),e.length||(e=this.uiDialogButtonPane.find(":tabbable")),e.length||(e=this.uiDialogTitlebarClose.filter(":tabbable")),e.length||(e=this.uiDialog),e.eq(0).focus()},_keepFocus:function(t){function i(){var t=this.document[0].activeElement,i=this.uiDialog[0]===t||e.contains(this.uiDialog[0],t);i||this._focusTabbable()}t.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=e("<div>").addClass("ui-dialog ui-widget ui-widget-content ui-corner-all ui-front "+this.options.dialogClass).hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._on(this.uiDialog,{keydown:function(t){if(this.options.closeOnEscape&&!t.isDefaultPrevented()&&t.keyCode&&t.keyCode===e.ui.keyCode.ESCAPE)return t.preventDefault(),this.close(t),void 0;
+if(t.keyCode===e.ui.keyCode.TAB&&!t.isDefaultPrevented()){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");t.target!==n[0]&&t.target!==this.uiDialog[0]||t.shiftKey?t.target!==s[0]&&t.target!==this.uiDialog[0]||!t.shiftKey||(this._delay(function(){n.focus()}),t.preventDefault()):(this._delay(function(){s.focus()}),t.preventDefault())}},mousedown:function(e){this._moveToTop(e)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var t;this.uiDialogTitlebar=e("<div>").addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(this.uiDialog),this._on(this.uiDialogTitlebar,{mousedown:function(t){e(t.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.focus()}}),this.uiDialogTitlebarClose=e("<button type='button'></button>").button({label:this.options.closeText,icons:{primary:"ui-icon-closethick"},text:!1}).addClass("ui-dialog-titlebar-close").appendTo(this.uiDialogTitlebar),this._on(this.uiDialogTitlebarClose,{click:function(e){e.preventDefault(),this.close(e)}}),t=e("<span>").uniqueId().addClass("ui-dialog-title").prependTo(this.uiDialogTitlebar),this._title(t),this.uiDialog.attr({"aria-labelledby":t.attr("id")})},_title:function(e){this.options.title||e.html("&#160;"),e.text(this.options.title)},_createButtonPane:function(){this.uiDialogButtonPane=e("<div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),this.uiButtonSet=e("<div>").addClass("ui-dialog-buttonset").appendTo(this.uiDialogButtonPane),this._createButtons()},_createButtons:function(){var t=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),e.isEmptyObject(i)||e.isArray(i)&&!i.length?(this.uiDialog.removeClass("ui-dialog-buttons"),void 0):(e.each(i,function(i,s){var n,a;s=e.isFunction(s)?{click:s,text:i}:s,s=e.extend({type:"button"},s),n=s.click,s.click=function(){n.apply(t.element[0],arguments)},a={icons:s.icons,text:s.showText},delete s.icons,delete s.showText,e("<button></button>",s).button(a).appendTo(t.uiButtonSet)}),this.uiDialog.addClass("ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),void 0)},_makeDraggable:function(){function t(e){return{position:e.position,offset:e.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){e(this).addClass("ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,t(n))},drag:function(e,s){i._trigger("drag",e,t(s))},stop:function(n,a){var o=a.offset.left-i.document.scrollLeft(),r=a.offset.top-i.document.scrollTop();s.position={my:"left top",at:"left"+(o>=0?"+":"")+o+" "+"top"+(r>=0?"+":"")+r,of:i.window},e(this).removeClass("ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,t(a))}})},_makeResizable:function(){function t(e){return{originalPosition:e.originalPosition,originalSize:e.originalSize,position:e.position,size:e.size}}var i=this,s=this.options,n=s.resizable,a=this.uiDialog.css("position"),o="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:o,start:function(s,n){e(this).addClass("ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,t(n))},resize:function(e,s){i._trigger("resize",e,t(s))},stop:function(n,a){var o=i.uiDialog.offset(),r=o.left-i.document.scrollLeft(),h=o.top-i.document.scrollTop();s.height=i.uiDialog.height(),s.width=i.uiDialog.width(),s.position={my:"left top",at:"left"+(r>=0?"+":"")+r+" "+"top"+(h>=0?"+":"")+h,of:i.window},e(this).removeClass("ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,t(a))}}).css("position",a)},_trackFocus:function(){this._on(this.widget(),{focusin:function(t){this._makeFocusTarget(),this._focusedElement=e(t.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var t=this._trackingInstances(),i=e.inArray(this,t);-1!==i&&t.splice(i,1)},_trackingInstances:function(){var e=this.document.data("ui-dialog-instances");return e||(e=[],this.document.data("ui-dialog-instances",e)),e},_minHeight:function(){var e=this.options;return"auto"===e.height?e.minHeight:Math.min(e.minHeight,e.height)},_position:function(){var e=this.uiDialog.is(":visible");e||this.uiDialog.show(),this.uiDialog.position(this.options.position),e||this.uiDialog.hide()},_setOptions:function(t){var i=this,s=!1,n={};e.each(t,function(e,t){i._setOption(e,t),e in i.sizeRelatedOptions&&(s=!0),e in i.resizableRelatedOptions&&(n[e]=t)}),s&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",n)},_setOption:function(e,t){var i,s,n=this.uiDialog;"dialogClass"===e&&n.removeClass(this.options.dialogClass).addClass(t),"disabled"!==e&&(this._super(e,t),"appendTo"===e&&this.uiDialog.appendTo(this._appendTo()),"buttons"===e&&this._createButtons(),"closeText"===e&&this.uiDialogTitlebarClose.button({label:""+t}),"draggable"===e&&(i=n.is(":data(ui-draggable)"),i&&!t&&n.draggable("destroy"),!i&&t&&this._makeDraggable()),"position"===e&&this._position(),"resizable"===e&&(s=n.is(":data(ui-resizable)"),s&&!t&&n.resizable("destroy"),s&&"string"==typeof t&&n.resizable("option","handles",t),s||t===!1||this._makeResizable()),"title"===e&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var e,t,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),e=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),t=Math.max(0,s.minHeight-e),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-e):"none","auto"===s.height?this.element.css({minHeight:t,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-e)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var t=e(this);return e("<div>").css({position:"absolute",width:t.outerWidth(),height:t.outerHeight()}).appendTo(t.parent()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(t){return e(t.target).closest(".ui-dialog").length?!0:!!e(t.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var t=!0;this._delay(function(){t=!1}),this.document.data("ui-dialog-overlays")||this._on(this.document,{focusin:function(e){t||this._allowInteraction(e)||(e.preventDefault(),this._trackingInstances()[0]._focusTabbable())}}),this.overlay=e("<div>").addClass("ui-widget-overlay ui-front").appendTo(this._appendTo()),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1)}},_destroyOverlay:function(){if(this.options.modal&&this.overlay){var e=this.document.data("ui-dialog-overlays")-1;e?this.document.data("ui-dialog-overlays",e):this.document.unbind("focusin").removeData("ui-dialog-overlays"),this.overlay.remove(),this.overlay=null}}}),e.widget("ui.droppable",{version:"1.11.4",widgetEventPrefix:"drop",options:{accept:"*",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var t,i=this.options,s=i.accept;this.isover=!1,this.isout=!0,this.accept=e.isFunction(s)?s:function(e){return e.is(s)},this.proportions=function(){return arguments.length?(t=arguments[0],void 0):t?t:t={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight}},this._addToManager(i.scope),i.addClasses&&this.element.addClass("ui-droppable")},_addToManager:function(t){e.ui.ddmanager.droppables[t]=e.ui.ddmanager.droppables[t]||[],e.ui.ddmanager.droppables[t].push(this)},_splice:function(e){for(var t=0;e.length>t;t++)e[t]===this&&e.splice(t,1)},_destroy:function(){var t=e.ui.ddmanager.droppables[this.options.scope];this._splice(t),this.element.removeClass("ui-droppable ui-droppable-disabled")},_setOption:function(t,i){if("accept"===t)this.accept=e.isFunction(i)?i:function(e){return e.is(i)};else if("scope"===t){var s=e.ui.ddmanager.droppables[this.options.scope];this._splice(s),this._addToManager(i)}this._super(t,i)},_activate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.addClass(this.options.activeClass),i&&this._trigger("activate",t,this.ui(i))},_deactivate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass),i&&this._trigger("deactivate",t,this.ui(i))},_over:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger("over",t,this.ui(i)))},_out:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("out",t,this.ui(i)))},_drop:function(t,i){var s=i||e.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var i=e(this).droppable("instance");return i.options.greedy&&!i.options.disabled&&i.options.scope===s.options.scope&&i.accept.call(i.element[0],s.currentItem||s.element)&&e.ui.intersect(s,e.extend(i,{offset:i.element.offset()}),i.options.tolerance,t)?(n=!0,!1):void 0}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("drop",t,this.ui(s)),this.element):!1):!1},ui:function(e){return{draggable:e.currentItem||e.element,helper:e.helper,position:e.position,offset:e.positionAbs}}}),e.ui.intersect=function(){function e(e,t,i){return e>=t&&t+i>e}return function(t,i,s,n){if(!i.offset)return!1;var a=(t.positionAbs||t.position.absolute).left+t.margins.left,o=(t.positionAbs||t.position.absolute).top+t.margins.top,r=a+t.helperProportions.width,h=o+t.helperProportions.height,l=i.offset.left,u=i.offset.top,d=l+i.proportions().width,c=u+i.proportions().height;switch(s){case"fit":return a>=l&&d>=r&&o>=u&&c>=h;case"intersect":return a+t.helperProportions.width/2>l&&d>r-t.helperProportions.width/2&&o+t.helperProportions.height/2>u&&c>h-t.helperProportions.height/2;case"pointer":return e(n.pageY,u,i.proportions().height)&&e(n.pageX,l,i.proportions().width);case"touch":return(o>=u&&c>=o||h>=u&&c>=h||u>o&&h>c)&&(a>=l&&d>=a||r>=l&&d>=r||l>a&&r>d);default:return!1}}}(),e.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(t,i){var s,n,a=e.ui.ddmanager.droppables[t.options.scope]||[],o=i?i.type:null,r=(t.currentItem||t.element).find(":data(ui-droppable)").addBack();e:for(s=0;a.length>s;s++)if(!(a[s].options.disabled||t&&!a[s].accept.call(a[s].element[0],t.currentItem||t.element))){for(n=0;r.length>n;n++)if(r[n]===a[s].element[0]){a[s].proportions().height=0;continue e}a[s].visible="none"!==a[s].element.css("display"),a[s].visible&&("mousedown"===o&&a[s]._activate.call(a[s],i),a[s].offset=a[s].element.offset(),a[s].proportions({width:a[s].element[0].offsetWidth,height:a[s].element[0].offsetHeight}))}},drop:function(t,i){var s=!1;return e.each((e.ui.ddmanager.droppables[t.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&e.ui.intersect(t,this,this.options.tolerance,i)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],t.currentItem||t.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(t,i){t.element.parentsUntil("body").bind("scroll.droppable",function(){t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)})},drag:function(t,i){t.options.refreshPositions&&e.ui.ddmanager.prepareOffsets(t,i),e.each(e.ui.ddmanager.droppables[t.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,a,o=e.ui.intersect(t,this,this.options.tolerance,i),r=!o&&this.isover?"isout":o&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,a=this.element.parents(":data(ui-droppable)").filter(function(){return e(this).droppable("instance").options.scope===n}),a.length&&(s=e(a[0]).droppable("instance"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(t,i){t.element.parentsUntil("body").unbind("scroll.droppable"),t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)}},e.ui.droppable;var y="ui-effects-",b=e;e.effects={effect:{}},function(e,t){function i(e,t,i){var s=d[t.type]||{};return null==e?i||!t.def?null:t.def:(e=s.floor?~~e:parseFloat(e),isNaN(e)?t.def:s.mod?(e+s.mod)%s.mod:0>e?0:e>s.max?s.max:e)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(e,a){var o,r=a.re.exec(i),h=r&&a.parse(r),l=a.space||"rgba";return h?(o=s[l](h),s[u[l].cache]=o[u[l].cache],n=s._rgba=o._rgba,!1):t}),n.length?("0,0,0,0"===n.join()&&e.extend(n,a.transparent),s):a[i]}function n(e,t,i){return i=(i+1)%1,1>6*i?e+6*(t-e)*i:1>2*i?t:2>3*i?e+6*(t-e)*(2/3-i):e}var a,o="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,h=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(e){return[e[1],e[2],e[3],e[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(e){return[2.55*e[1],2.55*e[2],2.55*e[3],e[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(e){return[parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(e){return[parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(e){return[e[1],e[2]/100,e[3]/100,e[4]]}}],l=e.Color=function(t,i,s,n){return new e.Color.fn.parse(t,i,s,n)},u={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},d={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},c=l.support={},p=e("<p>")[0],f=e.each;p.style.cssText="background-color:rgba(1,1,1,.5)",c.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(u,function(e,t){t.cache="_"+e,t.props.alpha={idx:3,type:"percent",def:1}}),l.fn=e.extend(l.prototype,{parse:function(n,o,r,h){if(n===t)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=e(n).css(o),o=t);var d=this,c=e.type(n),p=this._rgba=[];return o!==t&&(n=[n,o,r,h],c="array"),"string"===c?this.parse(s(n)||a._default):"array"===c?(f(u.rgba.props,function(e,t){p[t.idx]=i(n[t.idx],t)}),this):"object"===c?(n instanceof l?f(u,function(e,t){n[t.cache]&&(d[t.cache]=n[t.cache].slice())}):f(u,function(t,s){var a=s.cache;f(s.props,function(e,t){if(!d[a]&&s.to){if("alpha"===e||null==n[e])return;d[a]=s.to(d._rgba)}d[a][t.idx]=i(n[e],t,!0)}),d[a]&&0>e.inArray(null,d[a].slice(0,3))&&(d[a][3]=1,s.from&&(d._rgba=s.from(d[a])))}),this):t},is:function(e){var i=l(e),s=!0,n=this;return f(u,function(e,a){var o,r=i[a.cache];return r&&(o=n[a.cache]||a.to&&a.to(n._rgba)||[],f(a.props,function(e,i){return null!=r[i.idx]?s=r[i.idx]===o[i.idx]:t})),s}),s},_space:function(){var e=[],t=this;return f(u,function(i,s){t[s.cache]&&e.push(i)}),e.pop()},transition:function(e,t){var s=l(e),n=s._space(),a=u[n],o=0===this.alpha()?l("transparent"):this,r=o[a.cache]||a.to(o._rgba),h=r.slice();return s=s[a.cache],f(a.props,function(e,n){var a=n.idx,o=r[a],l=s[a],u=d[n.type]||{};null!==l&&(null===o?h[a]=l:(u.mod&&(l-o>u.mod/2?o+=u.mod:o-l>u.mod/2&&(o-=u.mod)),h[a]=i((l-o)*t+o,n)))}),this[n](h)},blend:function(t){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(t)._rgba;return l(e.map(i,function(e,t){return(1-s)*n[t]+s*e}))},toRgbaString:function(){var t="rgba(",i=e.map(this._rgba,function(e,t){return null==e?t>2?1:0:e});return 1===i[3]&&(i.pop(),t="rgb("),t+i.join()+")"},toHslaString:function(){var t="hsla(",i=e.map(this.hsla(),function(e,t){return null==e&&(e=t>2?1:0),t&&3>t&&(e=Math.round(100*e)+"%"),e});return 1===i[3]&&(i.pop(),t="hsl("),t+i.join()+")"},toHexString:function(t){var i=this._rgba.slice(),s=i.pop();return t&&i.push(~~(255*s)),"#"+e.map(i,function(e){return e=(e||0).toString(16),1===e.length?"0"+e:e}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,u.hsla.to=function(e){if(null==e[0]||null==e[1]||null==e[2])return[null,null,null,e[3]];var t,i,s=e[0]/255,n=e[1]/255,a=e[2]/255,o=e[3],r=Math.max(s,n,a),h=Math.min(s,n,a),l=r-h,u=r+h,d=.5*u;return t=h===r?0:s===r?60*(n-a)/l+360:n===r?60*(a-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=d?l/u:l/(2-u),[Math.round(t)%360,i,d,null==o?1:o]},u.hsla.from=function(e){if(null==e[0]||null==e[1]||null==e[2])return[null,null,null,e[3]];var t=e[0]/360,i=e[1],s=e[2],a=e[3],o=.5>=s?s*(1+i):s+i-s*i,r=2*s-o;return[Math.round(255*n(r,o,t+1/3)),Math.round(255*n(r,o,t)),Math.round(255*n(r,o,t-1/3)),a]},f(u,function(s,n){var a=n.props,o=n.cache,h=n.to,u=n.from;l.fn[s]=function(s){if(h&&!this[o]&&(this[o]=h(this._rgba)),s===t)return this[o].slice();var n,r=e.type(s),d="array"===r||"object"===r?s:arguments,c=this[o].slice();return f(a,function(e,t){var s=d["object"===r?e:t.idx];null==s&&(s=c[t.idx]),c[t.idx]=i(s,t)}),u?(n=l(u(c)),n[o]=c,n):l(c)},f(a,function(t,i){l.fn[t]||(l.fn[t]=function(n){var a,o=e.type(n),h="alpha"===t?this._hsla?"hsla":"rgba":s,l=this[h](),u=l[i.idx];return"undefined"===o?u:("function"===o&&(n=n.call(this,u),o=e.type(n)),null==n&&i.empty?this:("string"===o&&(a=r.exec(n),a&&(n=u+parseFloat(a[2])*("+"===a[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(t){var i=t.split(" ");f(i,function(t,i){e.cssHooks[i]={set:function(t,n){var a,o,r="";if("transparent"!==n&&("string"!==e.type(n)||(a=s(n)))){if(n=l(a||n),!c.rgba&&1!==n._rgba[3]){for(o="backgroundColor"===i?t.parentNode:t;(""===r||"transparent"===r)&&o&&o.style;)try{r=e.css(o,"backgroundColor"),o=o.parentNode}catch(h){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{t.style[i]=n}catch(h){}}},e.fx.step[i]=function(t){t.colorInit||(t.start=l(t.elem,i),t.end=l(t.end),t.colorInit=!0),e.cssHooks[i].set(t.elem,t.start.transition(t.end,t.pos))}})},l.hook(o),e.cssHooks.borderColor={expand:function(e){var t={};return f(["Top","Right","Bottom","Left"],function(i,s){t["border"+s+"Color"]=e}),t}},a=e.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(b),function(){function t(t){var i,s,n=t.ownerDocument.defaultView?t.ownerDocument.defaultView.getComputedStyle(t,null):t.currentStyle,a={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(a[e.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(a[i]=n[i]);return a}function i(t,i){var s,a,o={};for(s in i)a=i[s],t[s]!==a&&(n[s]||(e.fx.step[s]||!isNaN(parseFloat(a)))&&(o[s]=a));return o}var s=["add","remove","toggle"],n={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};e.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(t,i){e.fx.step[i]=function(e){("none"!==e.end&&!e.setAttr||1===e.pos&&!e.setAttr)&&(b.style(e.elem,i,e.end),e.setAttr=!0)}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e.effects.animateClass=function(n,a,o,r){var h=e.speed(a,o,r);return this.queue(function(){var a,o=e(this),r=o.attr("class")||"",l=h.children?o.find("*").addBack():o;l=l.map(function(){var i=e(this);return{el:i,start:t(this)}}),a=function(){e.each(s,function(e,t){n[t]&&o[t+"Class"](n[t])})},a(),l=l.map(function(){return this.end=t(this.el[0]),this.diff=i(this.start,this.end),this}),o.attr("class",r),l=l.map(function(){var t=this,i=e.Deferred(),s=e.extend({},h,{queue:!1,complete:function(){i.resolve(t)}});return this.el.animate(this.diff,s),i.promise()}),e.when.apply(e,l.get()).done(function(){a(),e.each(arguments,function(){var t=this.el;e.each(this.diff,function(e){t.css(e,"")})}),h.complete.call(o[0])})})},e.fn.extend({addClass:function(t){return function(i,s,n,a){return s?e.effects.animateClass.call(this,{add:i},s,n,a):t.apply(this,arguments)}}(e.fn.addClass),removeClass:function(t){return function(i,s,n,a){return arguments.length>1?e.effects.animateClass.call(this,{remove:i},s,n,a):t.apply(this,arguments)}}(e.fn.removeClass),toggleClass:function(t){return function(i,s,n,a,o){return"boolean"==typeof s||void 0===s?n?e.effects.animateClass.call(this,s?{add:i}:{remove:i},n,a,o):t.apply(this,arguments):e.effects.animateClass.call(this,{toggle:i},s,n,a)}}(e.fn.toggleClass),switchClass:function(t,i,s,n,a){return e.effects.animateClass.call(this,{add:i,remove:t},s,n,a)}})}(),function(){function t(t,i,s,n){return e.isPlainObject(t)&&(i=t,t=t.effect),t={effect:t},null==i&&(i={}),e.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||e.fx.speeds[i])&&(n=s,s=i,i={}),e.isFunction(s)&&(n=s,s=null),i&&e.extend(t,i),s=s||i.duration,t.duration=e.fx.off?0:"number"==typeof s?s:s in e.fx.speeds?e.fx.speeds[s]:e.fx.speeds._default,t.complete=n||i.complete,t}function i(t){return!t||"number"==typeof t||e.fx.speeds[t]?!0:"string"!=typeof t||e.effects.effect[t]?e.isFunction(t)?!0:"object"!=typeof t||t.effect?!1:!0:!0}e.extend(e.effects,{version:"1.11.4",save:function(e,t){for(var i=0;t.length>i;i++)null!==t[i]&&e.data(y+t[i],e[0].style[t[i]])},restore:function(e,t){var i,s;for(s=0;t.length>s;s++)null!==t[s]&&(i=e.data(y+t[s]),void 0===i&&(i=""),e.css(t[s],i))},setMode:function(e,t){return"toggle"===t&&(t=e.is(":hidden")?"show":"hide"),t},getBaseline:function(e,t){var i,s;switch(e[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=e[0]/t.height}switch(e[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=e[1]/t.width}return{x:s,y:i}},createWrapper:function(t){if(t.parent().is(".ui-effects-wrapper"))return t.parent();var i={width:t.outerWidth(!0),height:t.outerHeight(!0),"float":t.css("float")},s=e("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:t.width(),height:t.height()},a=document.activeElement;try{a.id}catch(o){a=document.body}return t.wrap(s),(t[0]===a||e.contains(t[0],a))&&e(a).focus(),s=t.parent(),"static"===t.css("position")?(s.css({position:"relative"}),t.css({position:"relative"})):(e.extend(i,{position:t.css("position"),zIndex:t.css("z-index")}),e.each(["top","left","bottom","right"],function(e,s){i[s]=t.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),t.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),t.css(n),s.css(i).show()},removeWrapper:function(t){var i=document.activeElement;return t.parent().is(".ui-effects-wrapper")&&(t.parent().replaceWith(t),(t[0]===i||e.contains(t[0],i))&&e(i).focus()),t},setTransition:function(t,i,s,n){return n=n||{},e.each(i,function(e,i){var a=t.cssUnit(i);a[0]>0&&(n[i]=a[0]*s+a[1])}),n}}),e.fn.extend({effect:function(){function i(t){function i(){e.isFunction(a)&&a.call(n[0]),e.isFunction(t)&&t()}var n=e(this),a=s.complete,r=s.mode;(n.is(":hidden")?"hide"===r:"show"===r)?(n[r](),i()):o.call(n[0],s,i)}var s=t.apply(this,arguments),n=s.mode,a=s.queue,o=e.effects.effect[s.effect];return e.fx.off||!o?n?this[n](s.duration,s.complete):this.each(function(){s.complete&&s.complete.call(this)}):a===!1?this.each(i):this.queue(a||"fx",i)},show:function(e){return function(s){if(i(s))return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="show",this.effect.call(this,n)}}(e.fn.show),hide:function(e){return function(s){if(i(s))return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="hide",this.effect.call(this,n)}}(e.fn.hide),toggle:function(e){return function(s){if(i(s)||"boolean"==typeof s)return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="toggle",this.effect.call(this,n)}}(e.fn.toggle),cssUnit:function(t){var i=this.css(t),s=[];return e.each(["em","px","%","pt"],function(e,t){i.indexOf(t)>0&&(s=[parseFloat(i),t])}),s}})}(),function(){var t={};e.each(["Quad","Cubic","Quart","Quint","Expo"],function(e,i){t[i]=function(t){return Math.pow(t,e+2)}}),e.extend(t,{Sine:function(e){return 1-Math.cos(e*Math.PI/2)},Circ:function(e){return 1-Math.sqrt(1-e*e)},Elastic:function(e){return 0===e||1===e?e:-Math.pow(2,8*(e-1))*Math.sin((80*(e-1)-7.5)*Math.PI/15)},Back:function(e){return e*e*(3*e-2)},Bounce:function(e){for(var t,i=4;((t=Math.pow(2,--i))-1)/11>e;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*t-2)/22-e,2)}}),e.each(t,function(t,i){e.easing["easeIn"+t]=i,e.easing["easeOut"+t]=function(e){return 1-i(1-e)},e.easing["easeInOut"+t]=function(e){return.5>e?i(2*e)/2:1-i(-2*e+2)/2}})}(),e.effects,e.effects.effect.blind=function(t,i){var s,n,a,o=e(this),r=/up|down|vertical/,h=/up|left|vertical|horizontal/,l=["position","top","bottom","left","right","height","width"],u=e.effects.setMode(o,t.mode||"hide"),d=t.direction||"up",c=r.test(d),p=c?"height":"width",f=c?"top":"left",m=h.test(d),g={},v="show"===u;o.parent().is(".ui-effects-wrapper")?e.effects.save(o.parent(),l):e.effects.save(o,l),o.show(),s=e.effects.createWrapper(o).css({overflow:"hidden"}),n=s[p](),a=parseFloat(s.css(f))||0,g[p]=v?n:0,m||(o.css(c?"bottom":"right",0).css(c?"top":"left","auto").css({position:"absolute"}),g[f]=v?a:n+a),v&&(s.css(p,0),m||s.css(f,a+n)),s.animate(g,{duration:t.duration,easing:t.easing,queue:!1,complete:function(){"hide"===u&&o.hide(),e.effects.restore(o,l),e.effects.removeWrapper(o),i()}})},e.effects.effect.bounce=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","height","width"],h=e.effects.setMode(o,t.mode||"effect"),l="hide"===h,u="show"===h,d=t.direction||"up",c=t.distance,p=t.times||5,f=2*p+(u||l?1:0),m=t.duration/f,g=t.easing,v="up"===d||"down"===d?"top":"left",y="up"===d||"left"===d,b=o.queue(),_=b.length;for((u||l)&&r.push("opacity"),e.effects.save(o,r),o.show(),e.effects.createWrapper(o),c||(c=o["top"===v?"outerHeight":"outerWidth"]()/3),u&&(a={opacity:1},a[v]=0,o.css("opacity",0).css(v,y?2*-c:2*c).animate(a,m,g)),l&&(c/=Math.pow(2,p-1)),a={},a[v]=0,s=0;p>s;s++)n={},n[v]=(y?"-=":"+=")+c,o.animate(n,m,g).animate(a,m,g),c=l?2*c:c/2;l&&(n={opacity:0},n[v]=(y?"-=":"+=")+c,o.animate(n,m,g)),o.queue(function(){l&&o.hide(),e.effects.restore(o,r),e.effects.removeWrapper(o),i()}),_>1&&b.splice.apply(b,[1,0].concat(b.splice(_,f+1))),o.dequeue()},e.effects.effect.clip=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","height","width"],h=e.effects.setMode(o,t.mode||"hide"),l="show"===h,u=t.direction||"vertical",d="vertical"===u,c=d?"height":"width",p=d?"top":"left",f={};e.effects.save(o,r),o.show(),s=e.effects.createWrapper(o).css({overflow:"hidden"}),n="IMG"===o[0].tagName?s:o,a=n[c](),l&&(n.css(c,0),n.css(p,a/2)),f[c]=l?a:0,f[p]=l?0:a/2,n.animate(f,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){l||o.hide(),e.effects.restore(o,r),e.effects.removeWrapper(o),i()}})},e.effects.effect.drop=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","opacity","height","width"],o=e.effects.setMode(n,t.mode||"hide"),r="show"===o,h=t.direction||"left",l="up"===h||"down"===h?"top":"left",u="up"===h||"left"===h?"pos":"neg",d={opacity:r?1:0};e.effects.save(n,a),n.show(),e.effects.createWrapper(n),s=t.distance||n["top"===l?"outerHeight":"outerWidth"](!0)/2,r&&n.css("opacity",0).css(l,"pos"===u?-s:s),d[l]=(r?"pos"===u?"+=":"-=":"pos"===u?"-=":"+=")+s,n.animate(d,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}})},e.effects.effect.explode=function(t,i){function s(){b.push(this),b.length===d*c&&n()}function n(){p.css({visibility:"visible"}),e(b).remove(),m||p.hide(),i()}var a,o,r,h,l,u,d=t.pieces?Math.round(Math.sqrt(t.pieces)):3,c=d,p=e(this),f=e.effects.setMode(p,t.mode||"hide"),m="show"===f,g=p.show().css("visibility","hidden").offset(),v=Math.ceil(p.outerWidth()/c),y=Math.ceil(p.outerHeight()/d),b=[];for(a=0;d>a;a++)for(h=g.top+a*y,u=a-(d-1)/2,o=0;c>o;o++)r=g.left+o*v,l=o-(c-1)/2,p.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-o*v,top:-a*y}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:v,height:y,left:r+(m?l*v:0),top:h+(m?u*y:0),opacity:m?0:1}).animate({left:r+(m?0:l*v),top:h+(m?0:u*y),opacity:m?1:0},t.duration||500,t.easing,s)},e.effects.effect.fade=function(t,i){var s=e(this),n=e.effects.setMode(s,t.mode||"toggle");s.animate({opacity:n},{queue:!1,duration:t.duration,easing:t.easing,complete:i})},e.effects.effect.fold=function(t,i){var s,n,a=e(this),o=["position","top","bottom","left","right","height","width"],r=e.effects.setMode(a,t.mode||"hide"),h="show"===r,l="hide"===r,u=t.size||15,d=/([0-9]+)%/.exec(u),c=!!t.horizFirst,p=h!==c,f=p?["width","height"]:["height","width"],m=t.duration/2,g={},v={};e.effects.save(a,o),a.show(),s=e.effects.createWrapper(a).css({overflow:"hidden"}),n=p?[s.width(),s.height()]:[s.height(),s.width()],d&&(u=parseInt(d[1],10)/100*n[l?0:1]),h&&s.css(c?{height:0,width:u}:{height:u,width:0}),g[f[0]]=h?n[0]:u,v[f[1]]=h?n[1]:0,s.animate(g,m,t.easing).animate(v,m,t.easing,function(){l&&a.hide(),e.effects.restore(a,o),e.effects.removeWrapper(a),i()})},e.effects.effect.highlight=function(t,i){var s=e(this),n=["backgroundImage","backgroundColor","opacity"],a=e.effects.setMode(s,t.mode||"show"),o={backgroundColor:s.css("backgroundColor")};"hide"===a&&(o.opacity=0),e.effects.save(s,n),s.show().css({backgroundImage:"none",backgroundColor:t.color||"#ffff99"}).animate(o,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===a&&s.hide(),e.effects.restore(s,n),i()}})},e.effects.effect.size=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","width","height","overflow","opacity"],h=["position","top","bottom","left","right","overflow","opacity"],l=["width","height","overflow"],u=["fontSize"],d=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],c=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],p=e.effects.setMode(o,t.mode||"effect"),f=t.restore||"effect"!==p,m=t.scale||"both",g=t.origin||["middle","center"],v=o.css("position"),y=f?r:h,b={height:0,width:0,outerHeight:0,outerWidth:0};"show"===p&&o.show(),s={height:o.height(),width:o.width(),outerHeight:o.outerHeight(),outerWidth:o.outerWidth()},"toggle"===t.mode&&"show"===p?(o.from=t.to||b,o.to=t.from||s):(o.from=t.from||("show"===p?b:s),o.to=t.to||("hide"===p?b:s)),a={from:{y:o.from.height/s.height,x:o.from.width/s.width},to:{y:o.to.height/s.height,x:o.to.width/s.width}},("box"===m||"both"===m)&&(a.from.y!==a.to.y&&(y=y.concat(d),o.from=e.effects.setTransition(o,d,a.from.y,o.from),o.to=e.effects.setTransition(o,d,a.to.y,o.to)),a.from.x!==a.to.x&&(y=y.concat(c),o.from=e.effects.setTransition(o,c,a.from.x,o.from),o.to=e.effects.setTransition(o,c,a.to.x,o.to))),("content"===m||"both"===m)&&a.from.y!==a.to.y&&(y=y.concat(u).concat(l),o.from=e.effects.setTransition(o,u,a.from.y,o.from),o.to=e.effects.setTransition(o,u,a.to.y,o.to)),e.effects.save(o,y),o.show(),e.effects.createWrapper(o),o.css("overflow","hidden").css(o.from),g&&(n=e.effects.getBaseline(g,s),o.from.top=(s.outerHeight-o.outerHeight())*n.y,o.from.left=(s.outerWidth-o.outerWidth())*n.x,o.to.top=(s.outerHeight-o.to.outerHeight)*n.y,o.to.left=(s.outerWidth-o.to.outerWidth)*n.x),o.css(o.from),("content"===m||"both"===m)&&(d=d.concat(["marginTop","marginBottom"]).concat(u),c=c.concat(["marginLeft","marginRight"]),l=r.concat(d).concat(c),o.find("*[width]").each(function(){var i=e(this),s={height:i.height(),width:i.width(),outerHeight:i.outerHeight(),outerWidth:i.outerWidth()};
+f&&e.effects.save(i,l),i.from={height:s.height*a.from.y,width:s.width*a.from.x,outerHeight:s.outerHeight*a.from.y,outerWidth:s.outerWidth*a.from.x},i.to={height:s.height*a.to.y,width:s.width*a.to.x,outerHeight:s.height*a.to.y,outerWidth:s.width*a.to.x},a.from.y!==a.to.y&&(i.from=e.effects.setTransition(i,d,a.from.y,i.from),i.to=e.effects.setTransition(i,d,a.to.y,i.to)),a.from.x!==a.to.x&&(i.from=e.effects.setTransition(i,c,a.from.x,i.from),i.to=e.effects.setTransition(i,c,a.to.x,i.to)),i.css(i.from),i.animate(i.to,t.duration,t.easing,function(){f&&e.effects.restore(i,l)})})),o.animate(o.to,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){0===o.to.opacity&&o.css("opacity",o.from.opacity),"hide"===p&&o.hide(),e.effects.restore(o,y),f||("static"===v?o.css({position:"relative",top:o.to.top,left:o.to.left}):e.each(["top","left"],function(e,t){o.css(t,function(t,i){var s=parseInt(i,10),n=e?o.to.left:o.to.top;return"auto"===i?n+"px":s+n+"px"})})),e.effects.removeWrapper(o),i()}})},e.effects.effect.scale=function(t,i){var s=e(this),n=e.extend(!0,{},t),a=e.effects.setMode(s,t.mode||"effect"),o=parseInt(t.percent,10)||(0===parseInt(t.percent,10)?0:"hide"===a?0:100),r=t.direction||"both",h=t.origin,l={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()},u={y:"horizontal"!==r?o/100:1,x:"vertical"!==r?o/100:1};n.effect="size",n.queue=!1,n.complete=i,"effect"!==a&&(n.origin=h||["middle","center"],n.restore=!0),n.from=t.from||("show"===a?{height:0,width:0,outerHeight:0,outerWidth:0}:l),n.to={height:l.height*u.y,width:l.width*u.x,outerHeight:l.outerHeight*u.y,outerWidth:l.outerWidth*u.x},n.fade&&("show"===a&&(n.from.opacity=0,n.to.opacity=1),"hide"===a&&(n.from.opacity=1,n.to.opacity=0)),s.effect(n)},e.effects.effect.puff=function(t,i){var s=e(this),n=e.effects.setMode(s,t.mode||"hide"),a="hide"===n,o=parseInt(t.percent,10)||150,r=o/100,h={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()};e.extend(t,{effect:"scale",queue:!1,fade:!0,mode:n,complete:i,percent:a?o:100,from:a?h:{height:h.height*r,width:h.width*r,outerHeight:h.outerHeight*r,outerWidth:h.outerWidth*r}}),s.effect(t)},e.effects.effect.pulsate=function(t,i){var s,n=e(this),a=e.effects.setMode(n,t.mode||"show"),o="show"===a,r="hide"===a,h=o||"hide"===a,l=2*(t.times||5)+(h?1:0),u=t.duration/l,d=0,c=n.queue(),p=c.length;for((o||!n.is(":visible"))&&(n.css("opacity",0).show(),d=1),s=1;l>s;s++)n.animate({opacity:d},u,t.easing),d=1-d;n.animate({opacity:d},u,t.easing),n.queue(function(){r&&n.hide(),i()}),p>1&&c.splice.apply(c,[1,0].concat(c.splice(p,l+1))),n.dequeue()},e.effects.effect.shake=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","height","width"],o=e.effects.setMode(n,t.mode||"effect"),r=t.direction||"left",h=t.distance||20,l=t.times||3,u=2*l+1,d=Math.round(t.duration/u),c="up"===r||"down"===r?"top":"left",p="up"===r||"left"===r,f={},m={},g={},v=n.queue(),y=v.length;for(e.effects.save(n,a),n.show(),e.effects.createWrapper(n),f[c]=(p?"-=":"+=")+h,m[c]=(p?"+=":"-=")+2*h,g[c]=(p?"-=":"+=")+2*h,n.animate(f,d,t.easing),s=1;l>s;s++)n.animate(m,d,t.easing).animate(g,d,t.easing);n.animate(m,d,t.easing).animate(f,d/2,t.easing).queue(function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}),y>1&&v.splice.apply(v,[1,0].concat(v.splice(y,u+1))),n.dequeue()},e.effects.effect.slide=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","width","height"],o=e.effects.setMode(n,t.mode||"show"),r="show"===o,h=t.direction||"left",l="up"===h||"down"===h?"top":"left",u="up"===h||"left"===h,d={};e.effects.save(n,a),n.show(),s=t.distance||n["top"===l?"outerHeight":"outerWidth"](!0),e.effects.createWrapper(n).css({overflow:"hidden"}),r&&n.css(l,u?isNaN(s)?"-"+s:-s:s),d[l]=(r?u?"+=":"-=":u?"-=":"+=")+s,n.animate(d,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}})},e.effects.effect.transfer=function(t,i){var s=e(this),n=e(t.to),a="fixed"===n.css("position"),o=e("body"),r=a?o.scrollTop():0,h=a?o.scrollLeft():0,l=n.offset(),u={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},d=s.offset(),c=e("<div class='ui-effects-transfer'></div>").appendTo(document.body).addClass(t.className).css({top:d.top-r,left:d.left-h,height:s.innerHeight(),width:s.innerWidth(),position:a?"fixed":"absolute"}).animate(u,t.duration,t.easing,function(){c.remove(),i()})},e.widget("ui.progressbar",{version:"1.11.4",options:{max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min}),this.valueDiv=e("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element),this._refreshValue()},_destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove()},value:function(e){return void 0===e?this.options.value:(this.options.value=this._constrainedValue(e),this._refreshValue(),void 0)},_constrainedValue:function(e){return void 0===e&&(e=this.options.value),this.indeterminate=e===!1,"number"!=typeof e&&(e=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,e))},_setOptions:function(e){var t=e.value;delete e.value,this._super(e),this.options.value=this._constrainedValue(t),this._refreshValue()},_setOption:function(e,t){"max"===e&&(t=Math.max(this.min,t)),"disabled"===e&&this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this._super(e,t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var t=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||t>this.min).toggleClass("ui-corner-right",t===this.options.max).width(i.toFixed(0)+"%"),this.element.toggleClass("ui-progressbar-indeterminate",this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=e("<div class='ui-progressbar-overlay'></div>").appendTo(this.valueDiv))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":t}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==t&&(this.oldValue=t,this._trigger("change")),t===this.options.max&&this._trigger("complete")}}),e.widget("ui.selectable",e.ui.mouse,{version:"1.11.4",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var t,i=this;this.element.addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){t=e(i.options.filter,i.element[0]),t.addClass("ui-selectee"),t.each(function(){var t=e(this),i=t.offset();e.data(this,"selectable-item",{element:this,$element:t,left:i.left,top:i.top,right:i.left+t.outerWidth(),bottom:i.top+t.outerHeight(),startselected:!1,selected:t.hasClass("ui-selected"),selecting:t.hasClass("ui-selecting"),unselecting:t.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=t.addClass("ui-selectee"),this._mouseInit(),this.helper=e("<div class='ui-selectable-helper'></div>")},_destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled"),this._mouseDestroy()},_mouseStart:function(t){var i=this,s=this.options;this.opos=[t.pageX,t.pageY],this.options.disabled||(this.selectees=e(s.filter,this.element[0]),this._trigger("start",t),e(s.appendTo).append(this.helper),this.helper.css({left:t.pageX,top:t.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=e.data(this,"selectable-item");s.startselected=!0,t.metaKey||t.ctrlKey||(s.$element.removeClass("ui-selected"),s.selected=!1,s.$element.addClass("ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",t,{unselecting:s.element}))}),e(t.target).parents().addBack().each(function(){var s,n=e.data(this,"selectable-item");return n?(s=!t.metaKey&&!t.ctrlKey||!n.$element.hasClass("ui-selected"),n.$element.removeClass(s?"ui-unselecting":"ui-selected").addClass(s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",t,{selecting:n.element}):i._trigger("unselecting",t,{unselecting:n.element}),!1):void 0}))},_mouseDrag:function(t){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,a=this.opos[0],o=this.opos[1],r=t.pageX,h=t.pageY;return a>r&&(i=r,r=a,a=i),o>h&&(i=h,h=o,o=i),this.helper.css({left:a,top:o,width:r-a,height:h-o}),this.selectees.each(function(){var i=e.data(this,"selectable-item"),l=!1;i&&i.element!==s.element[0]&&("touch"===n.tolerance?l=!(i.left>r||a>i.right||i.top>h||o>i.bottom):"fit"===n.tolerance&&(l=i.left>a&&r>i.right&&i.top>o&&h>i.bottom),l?(i.selected&&(i.$element.removeClass("ui-selected"),i.selected=!1),i.unselecting&&(i.$element.removeClass("ui-unselecting"),i.unselecting=!1),i.selecting||(i.$element.addClass("ui-selecting"),i.selecting=!0,s._trigger("selecting",t,{selecting:i.element}))):(i.selecting&&((t.metaKey||t.ctrlKey)&&i.startselected?(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.$element.addClass("ui-selected"),i.selected=!0):(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.startselected&&(i.$element.addClass("ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",t,{unselecting:i.element}))),i.selected&&(t.metaKey||t.ctrlKey||i.startselected||(i.$element.removeClass("ui-selected"),i.selected=!1,i.$element.addClass("ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",t,{unselecting:i.element})))))}),!1}},_mouseStop:function(t){var i=this;return this.dragged=!1,e(".ui-unselecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",t,{unselected:s.element})}),e(".ui-selecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-selecting").addClass("ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",t,{selected:s.element})}),this._trigger("stop",t),this.helper.remove(),!1}}),e.widget("ui.selectmenu",{version:"1.11.4",defaultElement:"<select>",options:{appendTo:null,disabled:null,icons:{button:"ui-icon-triangle-1-s"},position:{my:"left top",at:"left bottom",collision:"none"},width:null,change:null,close:null,focus:null,open:null,select:null},_create:function(){var e=this.element.uniqueId().attr("id");this.ids={element:e,button:e+"-button",menu:e+"-menu"},this._drawButton(),this._drawMenu(),this.options.disabled&&this.disable()},_drawButton:function(){var t=this;this.label=e("label[for='"+this.ids.element+"']").attr("for",this.ids.button),this._on(this.label,{click:function(e){this.button.focus(),e.preventDefault()}}),this.element.hide(),this.button=e("<span>",{"class":"ui-selectmenu-button ui-widget ui-state-default ui-corner-all",tabindex:this.options.disabled?-1:0,id:this.ids.button,role:"combobox","aria-expanded":"false","aria-autocomplete":"list","aria-owns":this.ids.menu,"aria-haspopup":"true"}).insertAfter(this.element),e("<span>",{"class":"ui-icon "+this.options.icons.button}).prependTo(this.button),this.buttonText=e("<span>",{"class":"ui-selectmenu-text"}).appendTo(this.button),this._setText(this.buttonText,this.element.find("option:selected").text()),this._resizeButton(),this._on(this.button,this._buttonEvents),this.button.one("focusin",function(){t.menuItems||t._refreshMenu()}),this._hoverable(this.button),this._focusable(this.button)},_drawMenu:function(){var t=this;this.menu=e("<ul>",{"aria-hidden":"true","aria-labelledby":this.ids.button,id:this.ids.menu}),this.menuWrap=e("<div>",{"class":"ui-selectmenu-menu ui-front"}).append(this.menu).appendTo(this._appendTo()),this.menuInstance=this.menu.menu({role:"listbox",select:function(e,i){e.preventDefault(),t._setSelection(),t._select(i.item.data("ui-selectmenu-item"),e)},focus:function(e,i){var s=i.item.data("ui-selectmenu-item");null!=t.focusIndex&&s.index!==t.focusIndex&&(t._trigger("focus",e,{item:s}),t.isOpen||t._select(s,e)),t.focusIndex=s.index,t.button.attr("aria-activedescendant",t.menuItems.eq(s.index).attr("id"))}}).menu("instance"),this.menu.addClass("ui-corner-bottom").removeClass("ui-corner-all"),this.menuInstance._off(this.menu,"mouseleave"),this.menuInstance._closeOnDocumentClick=function(){return!1},this.menuInstance._isDivider=function(){return!1}},refresh:function(){this._refreshMenu(),this._setText(this.buttonText,this._getSelectedItem().text()),this.options.width||this._resizeButton()},_refreshMenu:function(){this.menu.empty();var e,t=this.element.find("option");t.length&&(this._parseOptions(t),this._renderMenu(this.menu,this.items),this.menuInstance.refresh(),this.menuItems=this.menu.find("li").not(".ui-selectmenu-optgroup"),e=this._getSelectedItem(),this.menuInstance.focus(null,e),this._setAria(e.data("ui-selectmenu-item")),this._setOption("disabled",this.element.prop("disabled")))},open:function(e){this.options.disabled||(this.menuItems?(this.menu.find(".ui-state-focus").removeClass("ui-state-focus"),this.menuInstance.focus(null,this._getSelectedItem())):this._refreshMenu(),this.isOpen=!0,this._toggleAttr(),this._resizeMenu(),this._position(),this._on(this.document,this._documentClick),this._trigger("open",e))},_position:function(){this.menuWrap.position(e.extend({of:this.button},this.options.position))},close:function(e){this.isOpen&&(this.isOpen=!1,this._toggleAttr(),this.range=null,this._off(this.document),this._trigger("close",e))},widget:function(){return this.button},menuWidget:function(){return this.menu},_renderMenu:function(t,i){var s=this,n="";e.each(i,function(i,a){a.optgroup!==n&&(e("<li>",{"class":"ui-selectmenu-optgroup ui-menu-divider"+(a.element.parent("optgroup").prop("disabled")?" ui-state-disabled":""),text:a.optgroup}).appendTo(t),n=a.optgroup),s._renderItemData(t,a)})},_renderItemData:function(e,t){return this._renderItem(e,t).data("ui-selectmenu-item",t)},_renderItem:function(t,i){var s=e("<li>");return i.disabled&&s.addClass("ui-state-disabled"),this._setText(s,i.label),s.appendTo(t)},_setText:function(e,t){t?e.text(t):e.html("&#160;")},_move:function(e,t){var i,s,n=".ui-menu-item";this.isOpen?i=this.menuItems.eq(this.focusIndex):(i=this.menuItems.eq(this.element[0].selectedIndex),n+=":not(.ui-state-disabled)"),s="first"===e||"last"===e?i["first"===e?"prevAll":"nextAll"](n).eq(-1):i[e+"All"](n).eq(0),s.length&&this.menuInstance.focus(t,s)},_getSelectedItem:function(){return this.menuItems.eq(this.element[0].selectedIndex)},_toggle:function(e){this[this.isOpen?"close":"open"](e)},_setSelection:function(){var e;this.range&&(window.getSelection?(e=window.getSelection(),e.removeAllRanges(),e.addRange(this.range)):this.range.select(),this.button.focus())},_documentClick:{mousedown:function(t){this.isOpen&&(e(t.target).closest(".ui-selectmenu-menu, #"+this.ids.button).length||this.close(t))}},_buttonEvents:{mousedown:function(){var e;window.getSelection?(e=window.getSelection(),e.rangeCount&&(this.range=e.getRangeAt(0))):this.range=document.selection.createRange()},click:function(e){this._setSelection(),this._toggle(e)},keydown:function(t){var i=!0;switch(t.keyCode){case e.ui.keyCode.TAB:case e.ui.keyCode.ESCAPE:this.close(t),i=!1;break;case e.ui.keyCode.ENTER:this.isOpen&&this._selectFocusedItem(t);break;case e.ui.keyCode.UP:t.altKey?this._toggle(t):this._move("prev",t);break;case e.ui.keyCode.DOWN:t.altKey?this._toggle(t):this._move("next",t);break;case e.ui.keyCode.SPACE:this.isOpen?this._selectFocusedItem(t):this._toggle(t);break;case e.ui.keyCode.LEFT:this._move("prev",t);break;case e.ui.keyCode.RIGHT:this._move("next",t);break;case e.ui.keyCode.HOME:case e.ui.keyCode.PAGE_UP:this._move("first",t);break;case e.ui.keyCode.END:case e.ui.keyCode.PAGE_DOWN:this._move("last",t);break;default:this.menu.trigger(t),i=!1}i&&t.preventDefault()}},_selectFocusedItem:function(e){var t=this.menuItems.eq(this.focusIndex);t.hasClass("ui-state-disabled")||this._select(t.data("ui-selectmenu-item"),e)},_select:function(e,t){var i=this.element[0].selectedIndex;this.element[0].selectedIndex=e.index,this._setText(this.buttonText,e.label),this._setAria(e),this._trigger("select",t,{item:e}),e.index!==i&&this._trigger("change",t,{item:e}),this.close(t)},_setAria:function(e){var t=this.menuItems.eq(e.index).attr("id");this.button.attr({"aria-labelledby":t,"aria-activedescendant":t}),this.menu.attr("aria-activedescendant",t)},_setOption:function(e,t){"icons"===e&&this.button.find("span.ui-icon").removeClass(this.options.icons.button).addClass(t.button),this._super(e,t),"appendTo"===e&&this.menuWrap.appendTo(this._appendTo()),"disabled"===e&&(this.menuInstance.option("disabled",t),this.button.toggleClass("ui-state-disabled",t).attr("aria-disabled",t),this.element.prop("disabled",t),t?(this.button.attr("tabindex",-1),this.close()):this.button.attr("tabindex",0)),"width"===e&&this._resizeButton()},_appendTo:function(){var t=this.options.appendTo;return t&&(t=t.jquery||t.nodeType?e(t):this.document.find(t).eq(0)),t&&t[0]||(t=this.element.closest(".ui-front")),t.length||(t=this.document[0].body),t},_toggleAttr:function(){this.button.toggleClass("ui-corner-top",this.isOpen).toggleClass("ui-corner-all",!this.isOpen).attr("aria-expanded",this.isOpen),this.menuWrap.toggleClass("ui-selectmenu-open",this.isOpen),this.menu.attr("aria-hidden",!this.isOpen)},_resizeButton:function(){var e=this.options.width;e||(e=this.element.show().outerWidth(),this.element.hide()),this.button.outerWidth(e)},_resizeMenu:function(){this.menu.outerWidth(Math.max(this.button.outerWidth(),this.menu.width("").outerWidth()+1))},_getCreateOptions:function(){return{disabled:this.element.prop("disabled")}},_parseOptions:function(t){var i=[];t.each(function(t,s){var n=e(s),a=n.parent("optgroup");i.push({element:n,index:t,value:n.val(),label:n.text(),optgroup:a.attr("label")||"",disabled:a.prop("disabled")||n.prop("disabled")})}),this.items=i},_destroy:function(){this.menuWrap.remove(),this.button.remove(),this.element.show(),this.element.removeUniqueId(),this.label.attr("for",this.ids.element)}}),e.widget("ui.slider",e.ui.mouse,{version:"1.11.4",widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},numPages:5,_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this._calculateNewMax(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"),this._refresh(),this._setOption("disabled",this.options.disabled),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var t,i,s=this.options,n=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),a="<span class='ui-slider-handle ui-state-default ui-corner-all' tabindex='0'></span>",o=[];for(i=s.values&&s.values.length||1,n.length>i&&(n.slice(i).remove(),n=n.slice(0,i)),t=n.length;i>t;t++)o.push(a);this.handles=n.add(e(o.join("")).appendTo(this.element)),this.handle=this.handles.eq(0),this.handles.each(function(t){e(this).data("ui-slider-handle-index",t)})},_createRange:function(){var t=this.options,i="";t.range?(t.range===!0&&(t.values?t.values.length&&2!==t.values.length?t.values=[t.values[0],t.values[0]]:e.isArray(t.values)&&(t.values=t.values.slice(0)):t.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?this.range.removeClass("ui-slider-range-min ui-slider-range-max").css({left:"",bottom:""}):(this.range=e("<div></div>").appendTo(this.element),i="ui-slider-range ui-widget-header ui-corner-all"),this.range.addClass(i+("min"===t.range||"max"===t.range?" ui-slider-range-"+t.range:""))):(this.range&&this.range.remove(),this.range=null)},_setupEvents:function(){this._off(this.handles),this._on(this.handles,this._handleEvents),this._hoverable(this.handles),this._focusable(this.handles)},_destroy:function(){this.handles.remove(),this.range&&this.range.remove(),this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-widget ui-widget-content ui-corner-all"),this._mouseDestroy()},_mouseCapture:function(t){var i,s,n,a,o,r,h,l,u=this,d=this.options;return d.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:t.pageX,y:t.pageY},s=this._normValueFromMouse(i),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(t){var i=Math.abs(s-u.values(t));(n>i||n===i&&(t===u._lastChangedValue||u.values(t)===d.min))&&(n=i,a=e(this),o=t)}),r=this._start(t,o),r===!1?!1:(this._mouseSliding=!0,this._handleIndex=o,a.addClass("ui-state-active").focus(),h=a.offset(),l=!e(t.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:t.pageX-h.left-a.width()/2,top:t.pageY-h.top-a.height()/2-(parseInt(a.css("borderTopWidth"),10)||0)-(parseInt(a.css("borderBottomWidth"),10)||0)+(parseInt(a.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(t,o,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(e){var t={x:e.pageX,y:e.pageY},i=this._normValueFromMouse(t);return this._slide(e,this._handleIndex,i),!1},_mouseStop:function(e){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(e,this._handleIndex),this._change(e,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(e){var t,i,s,n,a;return"horizontal"===this.orientation?(t=this.elementSize.width,i=e.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(t=this.elementSize.height,i=e.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/t,s>1&&(s=1),0>s&&(s=0),"vertical"===this.orientation&&(s=1-s),n=this._valueMax()-this._valueMin(),a=this._valueMin()+s*n,this._trimAlignValue(a)},_start:function(e,t){var i={handle:this.handles[t],value:this.value()};return this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._trigger("start",e,i)},_slide:function(e,t,i){var s,n,a;this.options.values&&this.options.values.length?(s=this.values(t?0:1),2===this.options.values.length&&this.options.range===!0&&(0===t&&i>s||1===t&&s>i)&&(i=s),i!==this.values(t)&&(n=this.values(),n[t]=i,a=this._trigger("slide",e,{handle:this.handles[t],value:i,values:n}),s=this.values(t?0:1),a!==!1&&this.values(t,i))):i!==this.value()&&(a=this._trigger("slide",e,{handle:this.handles[t],value:i}),a!==!1&&this.value(i))},_stop:function(e,t){var i={handle:this.handles[t],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._trigger("stop",e,i)},_change:function(e,t){if(!this._keySliding&&!this._mouseSliding){var i={handle:this.handles[t],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._lastChangedValue=t,this._trigger("change",e,i)}},value:function(e){return arguments.length?(this.options.value=this._trimAlignValue(e),this._refreshValue(),this._change(null,0),void 0):this._value()},values:function(t,i){var s,n,a;if(arguments.length>1)return this.options.values[t]=this._trimAlignValue(i),this._refreshValue(),this._change(null,t),void 0;if(!arguments.length)return this._values();if(!e.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(t):this.value();for(s=this.options.values,n=arguments[0],a=0;s.length>a;a+=1)s[a]=this._trimAlignValue(n[a]),this._change(null,a);this._refreshValue()},_setOption:function(t,i){var s,n=0;switch("range"===t&&this.options.range===!0&&("min"===i?(this.options.value=this._values(0),this.options.values=null):"max"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),e.isArray(this.options.values)&&(n=this.options.values.length),"disabled"===t&&this.element.toggleClass("ui-state-disabled",!!i),this._super(t,i),t){case"orientation":this._detectOrientation(),this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation),this._refreshValue(),this.handles.css("horizontal"===i?"bottom":"left","");break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),s=0;n>s;s+=1)this._change(null,s);this._animateOff=!1;break;case"step":case"min":case"max":this._animateOff=!0,this._calculateNewMax(),this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_value:function(){var e=this.options.value;return e=this._trimAlignValue(e)},_values:function(e){var t,i,s;if(arguments.length)return t=this.options.values[e],t=this._trimAlignValue(t);if(this.options.values&&this.options.values.length){for(i=this.options.values.slice(),s=0;i.length>s;s+=1)i[s]=this._trimAlignValue(i[s]);return i}return[]},_trimAlignValue:function(e){if(this._valueMin()>=e)return this._valueMin();if(e>=this._valueMax())return this._valueMax();var t=this.options.step>0?this.options.step:1,i=(e-this._valueMin())%t,s=e-i;return 2*Math.abs(i)>=t&&(s+=i>0?t:-t),parseFloat(s.toFixed(5))},_calculateNewMax:function(){var e=this.options.max,t=this._valueMin(),i=this.options.step,s=Math.floor(+(e-t).toFixed(this._precision())/i)*i;e=s+t,this.max=parseFloat(e.toFixed(this._precision()))},_precision:function(){var e=this._precisionOf(this.options.step);return null!==this.options.min&&(e=Math.max(e,this._precisionOf(this.options.min))),e},_precisionOf:function(e){var t=""+e,i=t.indexOf(".");return-1===i?0:t.length-i-1},_valueMin:function(){return this.options.min},_valueMax:function(){return this.max},_refreshValue:function(){var t,i,s,n,a,o=this.options.range,r=this.options,h=this,l=this._animateOff?!1:r.animate,u={};this.options.values&&this.options.values.length?this.handles.each(function(s){i=100*((h.values(s)-h._valueMin())/(h._valueMax()-h._valueMin())),u["horizontal"===h.orientation?"left":"bottom"]=i+"%",e(this).stop(1,1)[l?"animate":"css"](u,r.animate),h.options.range===!0&&("horizontal"===h.orientation?(0===s&&h.range.stop(1,1)[l?"animate":"css"]({left:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({width:i-t+"%"},{queue:!1,duration:r.animate})):(0===s&&h.range.stop(1,1)[l?"animate":"css"]({bottom:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({height:i-t+"%"},{queue:!1,duration:r.animate}))),t=i}):(s=this.value(),n=this._valueMin(),a=this._valueMax(),i=a!==n?100*((s-n)/(a-n)):0,u["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[l?"animate":"css"](u,r.animate),"min"===o&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:i+"%"},r.animate),"max"===o&&"horizontal"===this.orientation&&this.range[l?"animate":"css"]({width:100-i+"%"},{queue:!1,duration:r.animate}),"min"===o&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:i+"%"},r.animate),"max"===o&&"vertical"===this.orientation&&this.range[l?"animate":"css"]({height:100-i+"%"},{queue:!1,duration:r.animate}))},_handleEvents:{keydown:function(t){var i,s,n,a,o=e(t.target).data("ui-slider-handle-index");switch(t.keyCode){case e.ui.keyCode.HOME:case e.ui.keyCode.END:case e.ui.keyCode.PAGE_UP:case e.ui.keyCode.PAGE_DOWN:case e.ui.keyCode.UP:case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:case e.ui.keyCode.LEFT:if(t.preventDefault(),!this._keySliding&&(this._keySliding=!0,e(t.target).addClass("ui-state-active"),i=this._start(t,o),i===!1))return}switch(a=this.options.step,s=n=this.options.values&&this.options.values.length?this.values(o):this.value(),t.keyCode){case e.ui.keyCode.HOME:n=this._valueMin();break;case e.ui.keyCode.END:n=this._valueMax();break;case e.ui.keyCode.PAGE_UP:n=this._trimAlignValue(s+(this._valueMax()-this._valueMin())/this.numPages);break;case e.ui.keyCode.PAGE_DOWN:n=this._trimAlignValue(s-(this._valueMax()-this._valueMin())/this.numPages);break;case e.ui.keyCode.UP:case e.ui.keyCode.RIGHT:if(s===this._valueMax())return;n=this._trimAlignValue(s+a);break;case e.ui.keyCode.DOWN:case e.ui.keyCode.LEFT:if(s===this._valueMin())return;n=this._trimAlignValue(s-a)}this._slide(t,o,n)},keyup:function(t){var i=e(t.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(t,i),this._change(t,i),e(t.target).removeClass("ui-state-active"))}}}),e.widget("ui.sortable",e.ui.mouse,{version:"1.11.4",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(e,t,i){return e>=t&&t+i>e},_isFloating:function(e){return/left|right/.test(e.css("float"))||/inline|table-cell/.test(e.css("display"))},_create:function(){this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.offset=this.element.offset(),this._mouseInit(),this._setHandleClassName(),this.ready=!0},_setOption:function(e,t){this._super(e,t),"handle"===e&&this._setHandleClassName()},_setHandleClassName:function(){this.element.find(".ui-sortable-handle").removeClass("ui-sortable-handle"),e.each(this.items,function(){(this.instance.options.handle?this.item.find(this.instance.options.handle):this.item).addClass("ui-sortable-handle")})},_destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").find(".ui-sortable-handle").removeClass("ui-sortable-handle"),this._mouseDestroy();for(var e=this.items.length-1;e>=0;e--)this.items[e].item.removeData(this.widgetName+"-item");return this},_mouseCapture:function(t,i){var s=null,n=!1,a=this;return this.reverting?!1:this.options.disabled||"static"===this.options.type?!1:(this._refreshItems(t),e(t.target).parents().each(function(){return e.data(this,a.widgetName+"-item")===a?(s=e(this),!1):void 0}),e.data(t.target,a.widgetName+"-item")===a&&(s=e(t.target)),s?!this.options.handle||i||(e(this.options.handle,s).find("*").addBack().each(function(){this===t.target&&(n=!0)}),n)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(t,i,s){var n,a,o=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(t),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,o.cursorAt&&this._adjustOffsetFromHelper(o.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),o.containment&&this._setContainment(),o.cursor&&"auto"!==o.cursor&&(a=this.document.find("body"),this.storedCursor=a.css("cursor"),a.css("cursor",o.cursor),this.storedStylesheet=e("<style>*{ cursor: "+o.cursor+" !important; }</style>").appendTo(a)),o.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",o.opacity)),o.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",o.zIndex)),this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",t,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger("activate",t,this._uiHash(this));
+return e.ui.ddmanager&&(e.ui.ddmanager.current=this),e.ui.ddmanager&&!o.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(t),!0},_mouseDrag:function(t){var i,s,n,a,o=this.options,r=!1;for(this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-t.pageY<o.scrollSensitivity?this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop+o.scrollSpeed:t.pageY-this.overflowOffset.top<o.scrollSensitivity&&(this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop-o.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-t.pageX<o.scrollSensitivity?this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft+o.scrollSpeed:t.pageX-this.overflowOffset.left<o.scrollSensitivity&&(this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft-o.scrollSpeed)):(t.pageY-this.document.scrollTop()<o.scrollSensitivity?r=this.document.scrollTop(this.document.scrollTop()-o.scrollSpeed):this.window.height()-(t.pageY-this.document.scrollTop())<o.scrollSensitivity&&(r=this.document.scrollTop(this.document.scrollTop()+o.scrollSpeed)),t.pageX-this.document.scrollLeft()<o.scrollSensitivity?r=this.document.scrollLeft(this.document.scrollLeft()-o.scrollSpeed):this.window.width()-(t.pageX-this.document.scrollLeft())<o.scrollSensitivity&&(r=this.document.scrollLeft(this.document.scrollLeft()+o.scrollSpeed))),r!==!1&&e.ui.ddmanager&&!o.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t)),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),i=this.items.length-1;i>=0;i--)if(s=this.items[i],n=s.item[0],a=this._intersectsWithPointer(s),a&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===a?"next":"prev"]()[0]!==n&&!e.contains(this.placeholder[0],n)&&("semi-dynamic"===this.options.type?!e.contains(this.element[0],n):!0)){if(this.direction=1===a?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(t,s),this._trigger("change",t,this._uiHash());break}return this._contactContainers(t),e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),this._trigger("sort",t,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(t,i){if(t){if(e.ui.ddmanager&&!this.options.dropBehaviour&&e.ui.ddmanager.drop(this,t),this.options.revert){var s=this,n=this.placeholder.offset(),a=this.options.axis,o={};a&&"x"!==a||(o.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollLeft)),a&&"y"!==a||(o.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,e(this.helper).animate(o,parseInt(this.options.revert,10)||500,function(){s._clear(t)})}else this._clear(t,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp({target:null}),"original"===this.options.helper?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var t=this.containers.length-1;t>=0;t--)this.containers[t]._trigger("deactivate",null,this._uiHash(this)),this.containers[t].containerCache.over&&(this.containers[t]._trigger("out",null,this._uiHash(this)),this.containers[t].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),e.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?e(this.domPosition.prev).after(this.currentItem):e(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(t){var i=this._getItemsAsjQuery(t&&t.connected),s=[];return t=t||{},e(i).each(function(){var i=(e(t.item||this).attr(t.attribute||"id")||"").match(t.expression||/(.+)[\-=_](.+)/);i&&s.push((t.key||i[1]+"[]")+"="+(t.key&&t.expression?i[1]:i[2]))}),!s.length&&t.key&&s.push(t.key+"="),s.join("&")},toArray:function(t){var i=this._getItemsAsjQuery(t&&t.connected),s=[];return t=t||{},i.each(function(){s.push(e(t.item||this).attr(t.attribute||"id")||"")}),s},_intersectsWith:function(e){var t=this.positionAbs.left,i=t+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,a=e.left,o=a+e.width,r=e.top,h=r+e.height,l=this.offset.click.top,u=this.offset.click.left,d="x"===this.options.axis||s+l>r&&h>s+l,c="y"===this.options.axis||t+u>a&&o>t+u,p=d&&c;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>e[this.floating?"width":"height"]?p:t+this.helperProportions.width/2>a&&o>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&h>n-this.helperProportions.height/2},_intersectsWithPointer:function(e){var t="x"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,e.top,e.height),i="y"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,e.left,e.width),s=t&&i,n=this._getDragVerticalDirection(),a=this._getDragHorizontalDirection();return s?this.floating?a&&"right"===a||"down"===n?2:1:n&&("down"===n?2:1):!1},_intersectsWithSides:function(e){var t=this._isOverAxis(this.positionAbs.top+this.offset.click.top,e.top+e.height/2,e.height),i=this._isOverAxis(this.positionAbs.left+this.offset.click.left,e.left+e.width/2,e.width),s=this._getDragVerticalDirection(),n=this._getDragHorizontalDirection();return this.floating&&n?"right"===n&&i||"left"===n&&!i:s&&("down"===s&&t||"up"===s&&!t)},_getDragVerticalDirection:function(){var e=this.positionAbs.top-this.lastPositionAbs.top;return 0!==e&&(e>0?"down":"up")},_getDragHorizontalDirection:function(){var e=this.positionAbs.left-this.lastPositionAbs.left;return 0!==e&&(e>0?"right":"left")},refresh:function(e){return this._refreshItems(e),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var e=this.options;return e.connectWith.constructor===String?[e.connectWith]:e.connectWith},_getItemsAsjQuery:function(t){function i(){r.push(this)}var s,n,a,o,r=[],h=[],l=this._connectWith();if(l&&t)for(s=l.length-1;s>=0;s--)for(a=e(l[s],this.document[0]),n=a.length-1;n>=0;n--)o=e.data(a[n],this.widgetFullName),o&&o!==this&&!o.options.disabled&&h.push([e.isFunction(o.options.items)?o.options.items.call(o.element):e(o.options.items,o.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),o]);for(h.push([e.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):e(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),s=h.length-1;s>=0;s--)h[s][0].each(i);return e(r)},_removeCurrentsFromItems:function(){var t=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=e.grep(this.items,function(e){for(var i=0;t.length>i;i++)if(t[i]===e.item[0])return!1;return!0})},_refreshItems:function(t){this.items=[],this.containers=[this];var i,s,n,a,o,r,h,l,u=this.items,d=[[e.isFunction(this.options.items)?this.options.items.call(this.element[0],t,{item:this.currentItem}):e(this.options.items,this.element),this]],c=this._connectWith();if(c&&this.ready)for(i=c.length-1;i>=0;i--)for(n=e(c[i],this.document[0]),s=n.length-1;s>=0;s--)a=e.data(n[s],this.widgetFullName),a&&a!==this&&!a.options.disabled&&(d.push([e.isFunction(a.options.items)?a.options.items.call(a.element[0],t,{item:this.currentItem}):e(a.options.items,a.element),a]),this.containers.push(a));for(i=d.length-1;i>=0;i--)for(o=d[i][1],r=d[i][0],s=0,l=r.length;l>s;s++)h=e(r[s]),h.data(this.widgetName+"-item",o),u.push({item:h,instance:o,width:0,height:0,left:0,top:0})},refreshPositions:function(t){this.floating=this.items.length?"x"===this.options.axis||this._isFloating(this.items[0].item):!1,this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,a;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?e(this.options.toleranceElement,s.item):s.item,t||(s.width=n.outerWidth(),s.height=n.outerHeight()),a=n.offset(),s.left=a.left,s.top=a.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)a=this.containers[i].element.offset(),this.containers[i].containerCache.left=a.left,this.containers[i].containerCache.top=a.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(t){t=t||this;var i,s=t.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=t.currentItem[0].nodeName.toLowerCase(),n=e("<"+s+">",t.document[0]).addClass(i||t.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper");return"tbody"===s?t._createTrPlaceholder(t.currentItem.find("tr").eq(0),e("<tr>",t.document[0]).appendTo(n)):"tr"===s?t._createTrPlaceholder(t.currentItem,n):"img"===s&&n.attr("src",t.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(e,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(t.currentItem.innerHeight()-parseInt(t.currentItem.css("paddingTop")||0,10)-parseInt(t.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(t.currentItem.innerWidth()-parseInt(t.currentItem.css("paddingLeft")||0,10)-parseInt(t.currentItem.css("paddingRight")||0,10)))}}),t.placeholder=e(s.placeholder.element.call(t.element,t.currentItem)),t.currentItem.after(t.placeholder),s.placeholder.update(t,t.placeholder)},_createTrPlaceholder:function(t,i){var s=this;t.children().each(function(){e("<td>&#160;</td>",s.document[0]).attr("colspan",e(this).attr("colspan")||1).appendTo(i)})},_contactContainers:function(t){var i,s,n,a,o,r,h,l,u,d,c=null,p=null;for(i=this.containers.length-1;i>=0;i--)if(!e.contains(this.currentItem[0],this.containers[i].element[0]))if(this._intersectsWith(this.containers[i].containerCache)){if(c&&e.contains(this.containers[i].element[0],c.element[0]))continue;c=this.containers[i],p=i}else this.containers[i].containerCache.over&&(this.containers[i]._trigger("out",t,this._uiHash(this)),this.containers[i].containerCache.over=0);if(c)if(1===this.containers.length)this.containers[p].containerCache.over||(this.containers[p]._trigger("over",t,this._uiHash(this)),this.containers[p].containerCache.over=1);else{for(n=1e4,a=null,u=c.floating||this._isFloating(this.currentItem),o=u?"left":"top",r=u?"width":"height",d=u?"clientX":"clientY",s=this.items.length-1;s>=0;s--)e.contains(this.containers[p].element[0],this.items[s].item[0])&&this.items[s].item[0]!==this.currentItem[0]&&(h=this.items[s].item.offset()[o],l=!1,t[d]-h>this.items[s][r]/2&&(l=!0),n>Math.abs(t[d]-h)&&(n=Math.abs(t[d]-h),a=this.items[s],this.direction=l?"up":"down"));if(!a&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[p])return this.currentContainer.containerCache.over||(this.containers[p]._trigger("over",t,this._uiHash()),this.currentContainer.containerCache.over=1),void 0;a?this._rearrange(t,a,null,!0):this._rearrange(t,null,this.containers[p].element,!0),this._trigger("change",t,this._uiHash()),this.containers[p]._trigger("change",t,this._uiHash(this)),this.currentContainer=this.containers[p],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[p]._trigger("over",t,this._uiHash(this)),this.containers[p].containerCache.over=1}},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper)?e(i.helper.apply(this.element[0],[t,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||e("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var t=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==this.document[0]&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===this.document[0].body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&e.ui.ie)&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var e=this.currentItem.position();return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:e.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,n=this.options;"parent"===n.containment&&(n.containment=this.helper[0].parentNode),("document"===n.containment||"window"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,"document"===n.containment?this.document.width():this.window.width()-this.helperProportions.width-this.margins.left,("document"===n.containment?this.document.width():this.window.height()||this.document[0].body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(t=e(n.containment)[0],i=e(n.containment).offset(),s="hidden"!==e(t).css("overflow"),this.containment=[i.left+(parseInt(e(t).css("borderLeftWidth"),10)||0)+(parseInt(e(t).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(e(t).css("borderTopWidth"),10)||0)+(parseInt(e(t).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(t.scrollWidth,t.offsetWidth):t.offsetWidth)-(parseInt(e(t).css("borderLeftWidth"),10)||0)-(parseInt(e(t).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(t.scrollHeight,t.offsetHeight):t.offsetHeight)-(parseInt(e(t).css("borderTopWidth"),10)||0)-(parseInt(e(t).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(t,i){i||(i=this.position);var s="absolute"===t?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,a=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():a?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():a?0:n.scrollLeft())*s}},_generatePosition:function(t){var i,s,n=this.options,a=t.pageX,o=t.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(t.pageX-this.offset.click.left<this.containment[0]&&(a=this.containment[0]+this.offset.click.left),t.pageY-this.offset.click.top<this.containment[1]&&(o=this.containment[1]+this.offset.click.top),t.pageX-this.offset.click.left>this.containment[2]&&(a=this.containment[2]+this.offset.click.left),t.pageY-this.offset.click.top>this.containment[3]&&(o=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((o-this.originalPageY)/n.grid[1])*n.grid[1],o=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((a-this.originalPageX)/n.grid[0])*n.grid[0],a=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:o-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:a-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.scrollLeft())}},_rearrange:function(e,t,i,s){i?i[0].appendChild(this.placeholder[0]):t.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?t.item[0]:t.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(e,t){function i(e,t,i){return function(s){i._trigger(e,s,t._uiHash(t))}}this.reverting=!1;var s,n=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(s in this._storedCSS)("auto"===this._storedCSS[s]||"static"===this._storedCSS[s])&&(this._storedCSS[s]="");this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!t&&n.push(function(e){this._trigger("receive",e,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||t||n.push(function(e){this._trigger("update",e,this._uiHash())}),this!==this.currentContainer&&(t||(n.push(function(e){this._trigger("remove",e,this._uiHash())}),n.push(function(e){return function(t){e._trigger("receive",t,this._uiHash(this))}}.call(this,this.currentContainer)),n.push(function(e){return function(t){e._trigger("update",t,this._uiHash(this))}}.call(this,this.currentContainer)))),s=this.containers.length-1;s>=0;s--)t||n.push(i("deactivate",this,this.containers[s])),this.containers[s].containerCache.over&&(n.push(i("out",this,this.containers[s])),this.containers[s].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,t||this._trigger("beforeStop",e,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null),!t){for(s=0;n.length>s;s++)n[s].call(this,e);this._trigger("stop",e,this._uiHash())}return this.fromOutside=!1,!this.cancelHelperRemoval},_trigger:function(){e.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(t){var i=t||this;return{helper:i.helper,placeholder:i.placeholder||e([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:t?t.element:null}}}),e.widget("ui.spinner",{version:"1.11.4",defaultElement:"<input>",widgetEventPrefix:"spin",options:{culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),""!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var t={},i=this.element;return e.each(["min","max","step"],function(e,s){var n=i.attr(s);void 0!==n&&n.length&&(t[s]=n)}),t},_events:{keydown:function(e){this._start(e)&&this._keydown(e)&&e.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(e){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",e),void 0)},mousewheel:function(e,t){if(t){if(!this.spinning&&!this._start(e))return!1;this._spin((t>0?1:-1)*this.options.step,e),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(e)},100),e.preventDefault()}},"mousedown .ui-spinner-button":function(t){function i(){var e=this.element[0]===this.document[0].activeElement;e||(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===this.document[0].activeElement?this.previous:this.element.val(),t.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(t)!==!1&&this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(t){return e(t.currentTarget).hasClass("ui-state-active")?this._start(t)===!1?!1:(this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_draw:function(){var e=this.uiSpinner=this.element.addClass("ui-spinner-input").attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml());this.element.attr("role","spinbutton"),this.buttons=e.find(".ui-spinner-button").attr("tabIndex",-1).button().removeClass("ui-corner-all"),this.buttons.height()>Math.ceil(.5*e.height())&&e.height()>0&&e.height(e.height()),this.options.disabled&&this.disable()},_keydown:function(t){var i=this.options,s=e.ui.keyCode;switch(t.keyCode){case s.UP:return this._repeat(null,1,t),!0;case s.DOWN:return this._repeat(null,-1,t),!0;case s.PAGE_UP:return this._repeat(null,i.page,t),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,t),!0}return!1},_uiSpinnerHtml:function(){return"<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>"},_buttonHtml:function(){return"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'><span class='ui-icon "+this.options.icons.up+"'>&#9650;</span>"+"</a>"+"<a class='ui-spinner-button ui-spinner-down ui-corner-br'>"+"<span class='ui-icon "+this.options.icons.down+"'>&#9660;</span>"+"</a>"},_start:function(e){return this.spinning||this._trigger("start",e)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(e,t,i){e=e||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,t,i)},e),this._spin(t*this.options.step,i)},_spin:function(e,t){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+e*this._increment(this.counter)),this.spinning&&this._trigger("spin",t,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(t){var i=this.options.incremental;return i?e.isFunction(i)?i(t):Math.floor(t*t*t/5e4-t*t/500+17*t/200+1):1},_precision:function(){var e=this._precisionOf(this.options.step);return null!==this.options.min&&(e=Math.max(e,this._precisionOf(this.options.min))),e},_precisionOf:function(e){var t=""+e,i=t.indexOf(".");return-1===i?0:t.length-i-1},_adjustValue:function(e){var t,i,s=this.options;return t=null!==s.min?s.min:0,i=e-t,i=Math.round(i/s.step)*s.step,e=t+i,e=parseFloat(e.toFixed(this._precision())),null!==s.max&&e>s.max?s.max:null!==s.min&&s.min>e?s.min:e},_stop:function(e){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",e))},_setOption:function(e,t){if("culture"===e||"numberFormat"===e){var i=this._parse(this.element.val());return this.options[e]=t,this.element.val(this._format(i)),void 0}("max"===e||"min"===e||"step"===e)&&"string"==typeof t&&(t=this._parse(t)),"icons"===e&&(this.buttons.first().find(".ui-icon").removeClass(this.options.icons.up).addClass(t.up),this.buttons.last().find(".ui-icon").removeClass(this.options.icons.down).addClass(t.down)),this._super(e,t),"disabled"===e&&(this.widget().toggleClass("ui-state-disabled",!!t),this.element.prop("disabled",!!t),this.buttons.button(t?"disable":"enable"))},_setOptions:h(function(e){this._super(e)}),_parse:function(e){return"string"==typeof e&&""!==e&&(e=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(e,10,this.options.culture):+e),""===e||isNaN(e)?null:e},_format:function(e){return""===e?"":window.Globalize&&this.options.numberFormat?Globalize.format(e,this.options.numberFormat,this.options.culture):e},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},isValid:function(){var e=this.value();return null===e?!1:e===this._adjustValue(e)},_value:function(e,t){var i;""!==e&&(i=this._parse(e),null!==i&&(t||(i=this._adjustValue(i)),e=this._format(i))),this.element.val(e),this._refresh()},_destroy:function(){this.element.removeClass("ui-spinner-input").prop("disabled",!1).removeAttr("autocomplete").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:h(function(e){this._stepUp(e)}),_stepUp:function(e){this._start()&&(this._spin((e||1)*this.options.step),this._stop())},stepDown:h(function(e){this._stepDown(e)}),_stepDown:function(e){this._start()&&(this._spin((e||1)*-this.options.step),this._stop())},pageUp:h(function(e){this._stepUp((e||1)*this.options.page)}),pageDown:h(function(e){this._stepDown((e||1)*this.options.page)}),value:function(e){return arguments.length?(h(this._value).call(this,e),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}}),e.widget("ui.tabs",{version:"1.11.4",delay:300,options:{active:null,collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:function(){var e=/#.*$/;return function(t){var i,s;t=t.cloneNode(!1),i=t.href.replace(e,""),s=location.href.replace(e,"");try{i=decodeURIComponent(i)}catch(n){}try{s=decodeURIComponent(s)}catch(n){}return t.hash.length>1&&i===s}}(),_create:function(){var t=this,i=this.options;this.running=!1,this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all").toggleClass("ui-tabs-collapsible",i.collapsible),this._processTabs(),i.active=this._initialActive(),e.isArray(i.disabled)&&(i.disabled=e.unique(i.disabled.concat(e.map(this.tabs.filter(".ui-state-disabled"),function(e){return t.tabs.index(e)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):e(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var t=this.options.active,i=this.options.collapsible,s=location.hash.substring(1);return null===t&&(s&&this.tabs.each(function(i,n){return e(n).attr("aria-controls")===s?(t=i,!1):void 0}),null===t&&(t=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===t||-1===t)&&(t=this.tabs.length?0:!1)),t!==!1&&(t=this.tabs.index(this.tabs.eq(t)),-1===t&&(t=i?!1:0)),!i&&t===!1&&this.anchors.length&&(t=0),t},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):e()}},_tabKeydown:function(t){var i=e(this.document[0].activeElement).closest("li"),s=this.tabs.index(i),n=!0;if(!this._handlePageNav(t)){switch(t.keyCode){case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:s++;break;case e.ui.keyCode.UP:case e.ui.keyCode.LEFT:n=!1,s--;break;case e.ui.keyCode.END:s=this.anchors.length-1;break;case e.ui.keyCode.HOME:s=0;break;case e.ui.keyCode.SPACE:return t.preventDefault(),clearTimeout(this.activating),this._activate(s),void 0;case e.ui.keyCode.ENTER:return t.preventDefault(),clearTimeout(this.activating),this._activate(s===this.options.active?!1:s),void 0;default:return}t.preventDefault(),clearTimeout(this.activating),s=this._focusNextTab(s,n),t.ctrlKey||t.metaKey||(i.attr("aria-selected","false"),this.tabs.eq(s).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",s)},this.delay))}},_panelKeydown:function(t){this._handlePageNav(t)||t.ctrlKey&&t.keyCode===e.ui.keyCode.UP&&(t.preventDefault(),this.active.focus())},_handlePageNav:function(t){return t.altKey&&t.keyCode===e.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):t.altKey&&t.keyCode===e.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(t,i){function s(){return t>n&&(t=0),0>t&&(t=n),t}for(var n=this.tabs.length-1;-1!==e.inArray(s(),this.options.disabled);)t=i?t+1:t-1;return t},_focusNextTab:function(e,t){return e=this._findNextTab(e,t),this.tabs.eq(e).focus(),e},_setOption:function(e,t){return"active"===e?(this._activate(t),void 0):"disabled"===e?(this._setupDisabled(t),void 0):(this._super(e,t),"collapsible"===e&&(this.element.toggleClass("ui-tabs-collapsible",t),t||this.options.active!==!1||this._activate(0)),"event"===e&&this._setupEvents(t),"heightStyle"===e&&this._setupHeightStyle(t),void 0)},_sanitizeSelector:function(e){return e?e.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var t=this.options,i=this.tablist.children(":has(a[href])");t.disabled=e.map(i.filter(".ui-state-disabled"),function(e){return i.index(e)}),this._processTabs(),t.active!==!1&&this.anchors.length?this.active.length&&!e.contains(this.tablist[0],this.active[0])?this.tabs.length===t.disabled.length?(t.active=!1,this.active=e()):this._activate(this._findNextTab(Math.max(0,t.active-1),!1)):t.active=this.tabs.index(this.active):(t.active=!1,this.active=e()),this._refresh()},_refresh:function(){this._setupDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.addClass("ui-tabs-active ui-state-active").attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var t=this,i=this.tabs,s=this.anchors,n=this.panels;
+this.tablist=this._getList().addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").attr("role","tablist").delegate("> li","mousedown"+this.eventNamespace,function(t){e(this).is(".ui-state-disabled")&&t.preventDefault()}).delegate(".ui-tabs-anchor","focus"+this.eventNamespace,function(){e(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this.tabs=this.tablist.find("> li:has(a[href])").addClass("ui-state-default ui-corner-top").attr({role:"tab",tabIndex:-1}),this.anchors=this.tabs.map(function(){return e("a",this)[0]}).addClass("ui-tabs-anchor").attr({role:"presentation",tabIndex:-1}),this.panels=e(),this.anchors.each(function(i,s){var n,a,o,r=e(s).uniqueId().attr("id"),h=e(s).closest("li"),l=h.attr("aria-controls");t._isLocal(s)?(n=s.hash,o=n.substring(1),a=t.element.find(t._sanitizeSelector(n))):(o=h.attr("aria-controls")||e({}).uniqueId()[0].id,n="#"+o,a=t.element.find(n),a.length||(a=t._createPanel(o),a.insertAfter(t.panels[i-1]||t.tablist)),a.attr("aria-live","polite")),a.length&&(t.panels=t.panels.add(a)),l&&h.data("ui-tabs-aria-controls",l),h.attr({"aria-controls":o,"aria-labelledby":r}),a.attr("aria-labelledby",r)}),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").attr("role","tabpanel"),i&&(this._off(i.not(this.tabs)),this._off(s.not(this.anchors)),this._off(n.not(this.panels)))},_getList:function(){return this.tablist||this.element.find("ol,ul").eq(0)},_createPanel:function(t){return e("<div>").attr("id",t).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy",!0)},_setupDisabled:function(t){e.isArray(t)&&(t.length?t.length===this.anchors.length&&(t=!0):t=!1);for(var i,s=0;i=this.tabs[s];s++)t===!0||-1!==e.inArray(s,t)?e(i).addClass("ui-state-disabled").attr("aria-disabled","true"):e(i).removeClass("ui-state-disabled").removeAttr("aria-disabled");this.options.disabled=t},_setupEvents:function(t){var i={};t&&e.each(t.split(" "),function(e,t){i[t]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(e){e.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(t){var i,s=this.element.parent();"fill"===t?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var t=e(this),s=t.css("position");"absolute"!==s&&"fixed"!==s&&(i-=t.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=e(this).outerHeight(!0)}),this.panels.each(function(){e(this).height(Math.max(0,i-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):"auto"===t&&(i=0,this.panels.each(function(){i=Math.max(i,e(this).height("").height())}).height(i))},_eventHandler:function(t){var i=this.options,s=this.active,n=e(t.currentTarget),a=n.closest("li"),o=a[0]===s[0],r=o&&i.collapsible,h=r?e():this._getPanelForTab(a),l=s.length?this._getPanelForTab(s):e(),u={oldTab:s,oldPanel:l,newTab:r?e():a,newPanel:h};t.preventDefault(),a.hasClass("ui-state-disabled")||a.hasClass("ui-tabs-loading")||this.running||o&&!i.collapsible||this._trigger("beforeActivate",t,u)===!1||(i.active=r?!1:this.tabs.index(a),this.active=o?e():a,this.xhr&&this.xhr.abort(),l.length||h.length||e.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(a),t),this._toggle(t,u))},_toggle:function(t,i){function s(){a.running=!1,a._trigger("activate",t,i)}function n(){i.newTab.closest("li").addClass("ui-tabs-active ui-state-active"),o.length&&a.options.show?a._show(o,a.options.show,s):(o.show(),s())}var a=this,o=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),n()}):(i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),r.hide(),n()),r.attr("aria-hidden","true"),i.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),o.length&&r.length?i.oldTab.attr("tabIndex",-1):o.length&&this.tabs.filter(function(){return 0===e(this).attr("tabIndex")}).attr("tabIndex",-1),o.attr("aria-hidden","false"),i.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(t){var i,s=this._findActive(t);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return t===!1?e():this.tabs.eq(t)},_getIndex:function(e){return"string"==typeof e&&(e=this.anchors.index(this.anchors.filter("[href$='"+e+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible"),this.tablist.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").removeAttr("role"),this.anchors.removeClass("ui-tabs-anchor").removeAttr("role").removeAttr("tabIndex").removeUniqueId(),this.tablist.unbind(this.eventNamespace),this.tabs.add(this.panels).each(function(){e.data(this,"ui-tabs-destroy")?e(this).remove():e(this).removeClass("ui-state-default ui-state-active ui-state-disabled ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel").removeAttr("tabIndex").removeAttr("aria-live").removeAttr("aria-busy").removeAttr("aria-selected").removeAttr("aria-labelledby").removeAttr("aria-hidden").removeAttr("aria-expanded").removeAttr("role")}),this.tabs.each(function(){var t=e(this),i=t.data("ui-tabs-aria-controls");i?t.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):t.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(t){var i=this.options.disabled;i!==!1&&(void 0===t?i=!1:(t=this._getIndex(t),i=e.isArray(i)?e.map(i,function(e){return e!==t?e:null}):e.map(this.tabs,function(e,i){return i!==t?i:null})),this._setupDisabled(i))},disable:function(t){var i=this.options.disabled;if(i!==!0){if(void 0===t)i=!0;else{if(t=this._getIndex(t),-1!==e.inArray(t,i))return;i=e.isArray(i)?e.merge([t],i).sort():[t]}this._setupDisabled(i)}},load:function(t,i){t=this._getIndex(t);var s=this,n=this.tabs.eq(t),a=n.find(".ui-tabs-anchor"),o=this._getPanelForTab(n),r={tab:n,panel:o},h=function(e,t){"abort"===t&&s.panels.stop(!1,!0),n.removeClass("ui-tabs-loading"),o.removeAttr("aria-busy"),e===s.xhr&&delete s.xhr};this._isLocal(a[0])||(this.xhr=e.ajax(this._ajaxSettings(a,i,r)),this.xhr&&"canceled"!==this.xhr.statusText&&(n.addClass("ui-tabs-loading"),o.attr("aria-busy","true"),this.xhr.done(function(e,t,n){setTimeout(function(){o.html(e),s._trigger("load",i,r),h(n,t)},1)}).fail(function(e,t){setTimeout(function(){h(e,t)},1)})))},_ajaxSettings:function(t,i,s){var n=this;return{url:t.attr("href"),beforeSend:function(t,a){return n._trigger("beforeLoad",i,e.extend({jqXHR:t,ajaxSettings:a},s))}}},_getPanelForTab:function(t){var i=e(t).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}}),e.widget("ui.tooltip",{version:"1.11.4",options:{content:function(){var t=e(this).attr("title")||"";return e("<a>").text(t).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,tooltipClass:null,track:!1,close:null,open:null},_addDescribedBy:function(t,i){var s=(t.attr("aria-describedby")||"").split(/\s+/);s.push(i),t.data("ui-tooltip-id",i).attr("aria-describedby",e.trim(s.join(" ")))},_removeDescribedBy:function(t){var i=t.data("ui-tooltip-id"),s=(t.attr("aria-describedby")||"").split(/\s+/),n=e.inArray(i,s);-1!==n&&s.splice(n,1),t.removeData("ui-tooltip-id"),s=e.trim(s.join(" ")),s?t.attr("aria-describedby",s):t.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.options.disabled&&this._disable(),this.liveRegion=e("<div>").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).addClass("ui-helper-hidden-accessible").appendTo(this.document[0].body)},_setOption:function(t,i){var s=this;return"disabled"===t?(this[i?"_disable":"_enable"](),this.options[t]=i,void 0):(this._super(t,i),"content"===t&&e.each(this.tooltips,function(e,t){s._updateContent(t.element)}),void 0)},_disable:function(){var t=this;e.each(this.tooltips,function(i,s){var n=e.Event("blur");n.target=n.currentTarget=s.element[0],t.close(n,!0)}),this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.is("[title]")&&t.data("ui-tooltip-title",t.attr("title")).removeAttr("title")})},_enable:function(){this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.data("ui-tooltip-title")&&t.attr("title",t.data("ui-tooltip-title"))})},open:function(t){var i=this,s=e(t?t.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),t&&"mouseover"===t.type&&s.parents().each(function(){var t,s=e(this);s.data("ui-tooltip-open")&&(t=e.Event("blur"),t.target=t.currentTarget=this,i.close(t,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._registerCloseHandlers(t,s),this._updateContent(s,t))},_updateContent:function(e,t){var i,s=this.options.content,n=this,a=t?t.type:null;return"string"==typeof s?this._open(t,e,s):(i=s.call(e[0],function(i){n._delay(function(){e.data("ui-tooltip-open")&&(t&&(t.type=a),this._open(t,e,i))})}),i&&this._open(t,e,i),void 0)},_open:function(t,i,s){function n(e){l.of=e,o.is(":hidden")||o.position(l)}var a,o,r,h,l=e.extend({},this.options.position);if(s){if(a=this._find(i))return a.tooltip.find(".ui-tooltip-content").html(s),void 0;i.is("[title]")&&(t&&"mouseover"===t.type?i.attr("title",""):i.removeAttr("title")),a=this._tooltip(i),o=a.tooltip,this._addDescribedBy(i,o.attr("id")),o.find(".ui-tooltip-content").html(s),this.liveRegion.children().hide(),s.clone?(h=s.clone(),h.removeAttr("id").find("[id]").removeAttr("id")):h=s,e("<div>").html(h).appendTo(this.liveRegion),this.options.track&&t&&/^mouse/.test(t.type)?(this._on(this.document,{mousemove:n}),n(t)):o.position(e.extend({of:i},this.options.position)),o.hide(),this._show(o,this.options.show),this.options.show&&this.options.show.delay&&(r=this.delayedShow=setInterval(function(){o.is(":visible")&&(n(l.of),clearInterval(r))},e.fx.interval)),this._trigger("open",t,{tooltip:o})}},_registerCloseHandlers:function(t,i){var s={keyup:function(t){if(t.keyCode===e.ui.keyCode.ESCAPE){var s=e.Event(t);s.currentTarget=i[0],this.close(s,!0)}}};i[0]!==this.element[0]&&(s.remove=function(){this._removeTooltip(this._find(i).tooltip)}),t&&"mouseover"!==t.type||(s.mouseleave="close"),t&&"focusin"!==t.type||(s.focusout="close"),this._on(!0,i,s)},close:function(t){var i,s=this,n=e(t?t.currentTarget:this.element),a=this._find(n);return a?(i=a.tooltip,a.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&!n.attr("title")&&n.attr("title",n.data("ui-tooltip-title")),this._removeDescribedBy(n),a.hiding=!0,i.stop(!0),this._hide(i,this.options.hide,function(){s._removeTooltip(e(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),t&&"mouseleave"===t.type&&e.each(this.parents,function(t,i){e(i.element).attr("title",i.title),delete s.parents[t]}),a.closing=!0,this._trigger("close",t,{tooltip:i}),a.hiding||(a.closing=!1)),void 0):(n.removeData("ui-tooltip-open"),void 0)},_tooltip:function(t){var i=e("<div>").attr("role","tooltip").addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content "+(this.options.tooltipClass||"")),s=i.uniqueId().attr("id");return e("<div>").addClass("ui-tooltip-content").appendTo(i),i.appendTo(this.document[0].body),this.tooltips[s]={element:t,tooltip:i}},_find:function(e){var t=e.data("ui-tooltip-id");return t?this.tooltips[t]:null},_removeTooltip:function(e){e.remove(),delete this.tooltips[e.attr("id")]},_destroy:function(){var t=this;e.each(this.tooltips,function(i,s){var n=e.Event("blur"),a=s.element;n.target=n.currentTarget=a[0],t.close(n,!0),e("#"+i).remove(),a.data("ui-tooltip-title")&&(a.attr("title")||a.attr("title",a.data("ui-tooltip-title")),a.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}})});
diff --git a/falcon-ui/app/js/lib/jquery.mask.min.js b/falcon-ui/app/js/lib/jquery.mask.min.js
new file mode 100644
index 0000000..984b5b0
--- /dev/null
+++ b/falcon-ui/app/js/lib/jquery.mask.min.js
@@ -0,0 +1,12 @@
+// jQuery Mask Plugin v1.7.7
+// github.com/igorescobar/jQuery-Mask-Plugin
+(function(f){"function"===typeof define&&define.amd?define(["jquery"],f):f(window.jQuery||window.Zepto)})(function(f){var A=function(a,d,b){var h=this,m,p;a=f(a);d="function"===typeof d?d(a.val(),void 0,a,b):d;var c={getCaret:function(){try{var e,l=0,c=a.get(0),g=document.selection,d=c.selectionStart;if(g&&!~navigator.appVersion.indexOf("MSIE 10"))e=g.createRange(),e.moveStart("character",a.is("input")?-a.val().length:-a.text().length),l=e.text.length;else if(d||"0"===d)l=d;return l}catch(b){}},setCaret:function(e){try{if(a.is(":focus")){var l,
+c=a.get(0);c.setSelectionRange?c.setSelectionRange(e,e):c.createTextRange&&(l=c.createTextRange(),l.collapse(!0),l.moveEnd("character",e),l.moveStart("character",e),l.select())}}catch(g){}},events:function(){a.on("keydown.mask",function(){m=c.val()}).on("keyup.mask",c.behaviour).on("paste.mask drop.mask",function(){setTimeout(function(){a.keydown().keyup()},100)}).on("change.mask",function(){a.data("changed",!0)}).on("blur.mask",function(){m===a.val()||a.data("changed")||a.trigger("change");a.data("changed",
+!1)}).on("focusout.mask",function(){b.clearIfNotMatch&&!p.test(c.val())&&c.val("")})},getRegexMask:function(){for(var e=[],a,c,g,b,k=0;k<d.length;k++)(a=h.translation[d[k]])?(c=a.pattern.toString().replace(/.{1}$|^.{1}/g,""),g=a.optional,(a=a.recursive)?(e.push(d[k]),b={digit:d[k],pattern:c}):e.push(g||a?c+"?":c)):e.push(d[k].replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&"));e=e.join("");b&&(e=e.replace(new RegExp("("+b.digit+"(.*"+b.digit+")?)"),"($1)?").replace(new RegExp(b.digit,"g"),b.pattern));return new RegExp(e)},
+destroyEvents:function(){a.off("keydown keyup paste drop change blur focusout DOMNodeInserted ".split(" ").join(".mask ")).removeData("changeCalled")},val:function(e){var c=a.is("input");return 0<arguments.length?c?a.val(e):a.text(e):c?a.val():a.text()},getMCharsBeforeCount:function(e,a){for(var c=0,b=0,f=d.length;b<f&&b<e;b++)h.translation[d.charAt(b)]||(e=a?e+1:e,c++);return c},caretPos:function(e,a,b,g){return h.translation[d.charAt(Math.min(e-1,d.length-1))]?Math.min(e+b-a-g,b):c.caretPos(e+1,
+a,b,g)},behaviour:function(a){a=a||window.event;var b=a.keyCode||a.which;if(-1===f.inArray(b,h.byPassKeys)){var d=c.getCaret(),g=c.val(),t=g.length,k=d<t,m=c.getMasked(),n=m.length,p=c.getMCharsBeforeCount(n-1)-c.getMCharsBeforeCount(t-1);m!==g&&c.val(m);!k||65===b&&a.ctrlKey||(8!==b&&46!==b&&(d=c.caretPos(d,t,n,p)),c.setCaret(d));return c.callbacks(a)}},getMasked:function(a){var l=[],f=c.val(),g=0,m=d.length,k=0,p=f.length,n=1,u="push",r=-1,q,v;b.reverse?(u="unshift",n=-1,q=0,g=m-1,k=p-1,v=function(){return-1<
+g&&-1<k}):(q=m-1,v=function(){return g<m&&k<p});for(;v();){var w=d.charAt(g),x=f.charAt(k),s=h.translation[w];if(s)x.match(s.pattern)?(l[u](x),s.recursive&&(-1===r?r=g:g===q&&(g=r-n),q===r&&(g-=n)),g+=n):s.optional&&(g+=n,k-=n),k+=n;else{if(!a)l[u](w);x===w&&(k+=n);g+=n}}a=d.charAt(q);m!==p+1||h.translation[a]||l.push(a);return l.join("")},callbacks:function(e){var f=c.val(),h=f!==m;if(!0===h&&"function"===typeof b.onChange)b.onChange(f,e,a,b);if(!0===h&&"function"===typeof b.onKeyPress)b.onKeyPress(f,
+e,a,b);if("function"===typeof b.onComplete&&f.length===d.length)b.onComplete(f,e,a,b)}};h.mask=d;h.options=b;h.remove=function(){var b;c.destroyEvents();c.val(h.getCleanVal()).removeAttr("maxlength");b=c.getCaret();c.setCaret(b-c.getMCharsBeforeCount(b));return a};h.getCleanVal=function(){return c.getMasked(!0)};h.init=function(){b=b||{};h.byPassKeys=[9,16,17,18,36,37,38,39,40,91];h.translation={0:{pattern:/\d/},9:{pattern:/\d/,optional:!0},"#":{pattern:/\d/,recursive:!0},A:{pattern:/[a-zA-Z0-9]/},
+S:{pattern:/[a-zA-Z]/}};h.translation=f.extend({},h.translation,b.translation);h=f.extend(!0,{},h,b);p=c.getRegexMask();!1!==b.maxlength&&a.attr("maxlength",d.length);b.placeholder&&a.attr("placeholder",b.placeholder);a.attr("autocomplete","off");c.destroyEvents();c.events();var e=c.getCaret();c.val(c.getMasked());c.setCaret(e+c.getMCharsBeforeCount(e,!0))}()},y={},z=function(){var a=f(this),d={};a.attr("data-mask-reverse")&&(d.reverse=!0);"false"===a.attr("data-mask-maxlength")&&(d.maxlength=!1);
+a.attr("data-mask-clearifnotmatch")&&(d.clearIfNotMatch=!0);a.mask(a.attr("data-mask"),d)};f.fn.mask=function(a,d){var b=this.selector,h=function(){var b=f(this).data("mask"),h=JSON.stringify;if("object"!==typeof b||h(b.options)!==h(d)||b.mask!==a)return f(this).data("mask",new A(this,a,d))};this.each(h);b&&!y[b]&&(y[b]=!0,setTimeout(function(){f(document).on("DOMNodeInserted.mask",b,h)},500))};f.fn.unmask=function(){try{return this.each(function(){f(this).data("mask").remove().removeData("mask")})}catch(a){}};
+f.fn.cleanVal=function(){return this.data("mask").getCleanVal()};f("*[data-mask]").each(z);f(document).on("DOMNodeInserted.mask","*[data-mask]",z)});
diff --git a/falcon-ui/app/js/lib/popover.js b/falcon-ui/app/js/lib/popover.js
index 57814df..e26c870 100644
--- a/falcon-ui/app/js/lib/popover.js
+++ b/falcon-ui/app/js/lib/popover.js
@@ -1,21 +1,3 @@
-/**
- * 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.
- */
-
 (function(window, angular, undefined){
   'use strict';
 
@@ -478,4 +460,4 @@
       };
     }
   ]);
-})(window, window.angular);
+})(window, window.angular);
\ No newline at end of file
diff --git a/falcon-ui/app/js/lib/xml2json.min.js b/falcon-ui/app/js/lib/xml2json.min.js
index 12c4a45..5c8401c 100644
--- a/falcon-ui/app/js/lib/xml2json.min.js
+++ b/falcon-ui/app/js/lib/xml2json.min.js
@@ -16,563 +16,560 @@
  */
 
 function X2JS(config) {
-    'use strict';
-        
-    var VERSION = "1.1.7";
-    
-    config = config || {};
-    initConfigDefaults();
-    initRequiredPolyfills();
-    
-    function initConfigDefaults() {
-        if(config.escapeMode === undefined) {
-            config.escapeMode = true;
-        }
-        config.attributePrefix = config.attributePrefix || "_";
-        config.arrayAccessForm = config.arrayAccessForm || "none";
-        config.emptyNodeForm = config.emptyNodeForm || "text";
-        if(config.enableToStringFunc === undefined) {
-            config.enableToStringFunc = true; 
-        }
-        config.arrayAccessFormPaths = config.arrayAccessFormPaths || []; 
-        if(config.skipEmptyTextNodesForObj === undefined) {
-            config.skipEmptyTextNodesForObj = true;
-        }
-        if(config.stripWhitespaces === undefined) {
-            config.stripWhitespaces = true;
-        }
-        config.datetimeAccessFormPaths = config.datetimeAccessFormPaths || [];
+	'use strict';
 
-        if(config.useDoubleQuotes === undefined) {
-            config.useDoubleQuotes = false;
-        }
+	var VERSION = "1.2.0";
+
+	config = config || {};
+	initConfigDefaults();
+	initRequiredPolyfills();
+
+	function initConfigDefaults() {
+		if(config.escapeMode === undefined) {
+			config.escapeMode = true;
+		}
+
+		config.attributePrefix = config.attributePrefix || "_";
+		config.arrayAccessForm = config.arrayAccessForm || "none";
+		config.emptyNodeForm = config.emptyNodeForm || "text";
+
+		if(config.enableToStringFunc === undefined) {
+			config.enableToStringFunc = true;
+		}
+		config.arrayAccessFormPaths = config.arrayAccessFormPaths || [];
+		if(config.skipEmptyTextNodesForObj === undefined) {
+			config.skipEmptyTextNodesForObj = true;
+		}
+		if(config.stripWhitespaces === undefined) {
+			config.stripWhitespaces = true;
+		}
+		config.datetimeAccessFormPaths = config.datetimeAccessFormPaths || [];
+
+		if(config.useDoubleQuotes === undefined) {
+			config.useDoubleQuotes = false;
+		}
+
+		config.xmlElementsFilter = config.xmlElementsFilter || [];
+		config.jsonPropertiesFilter = config.jsonPropertiesFilter || [];
+
+		if(config.keepCData === undefined) {
+			config.keepCData = false;
+		}
+	}
+
+	var DOMNodeTypes = {
+		ELEMENT_NODE 	   : 1,
+		TEXT_NODE    	   : 3,
+		CDATA_SECTION_NODE : 4,
+		COMMENT_NODE	   : 8,
+		DOCUMENT_NODE 	   : 9
+	};
+
+	function initRequiredPolyfills() {
+	}
+
+	function getNodeLocalName( node ) {
+		var nodeLocalName = node.localName;
+		if(nodeLocalName == null) // Yeah, this is IE!!
+			nodeLocalName = node.baseName;
+		if(nodeLocalName == null || nodeLocalName=="") // =="" is IE too
+			nodeLocalName = node.nodeName;
+		return nodeLocalName;
+	}
+
+	function getNodePrefix(node) {
+		return node.prefix;
+	}
+
+	function escapeXmlChars(str) {
+		if(typeof(str) == "string")
+			return str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/'/g, '&apos;');
+		else
+			return str;
+	}
+
+	function unescapeXmlChars(str) {
+		return str.replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&quot;/g, '"').replace(/&apos;/g, "'").replace(/&amp;/g, '&');
+	}
+
+	function checkInStdFiltersArrayForm(stdFiltersArrayForm, obj, name, path) {
+        var idx = 0;
+		for(; idx < stdFiltersArrayForm.length; idx++) {
+			var filterPath = stdFiltersArrayForm[idx];
+			if( typeof filterPath === "string" ) {
+				if(filterPath == path)
+					break;
+			}
+			else
+			if( filterPath instanceof RegExp) {
+				if(filterPath.test(path))
+					break;
+			}
+			else
+			if( typeof filterPath === "function") {
+				if(filterPath(obj, name, path))
+					break;
+			}
+		}
+		return idx!=stdFiltersArrayForm.length;
     }
 
-    var DOMNodeTypes = {
-        ELEMENT_NODE       : 1,
-        TEXT_NODE          : 3,
-        CDATA_SECTION_NODE : 4,
-        COMMENT_NODE       : 8,
-        DOCUMENT_NODE      : 9
-    };
-    
-    function initRequiredPolyfills() {
-        function pad(number) {
-          var r = String(number);
-          if ( r.length === 1 ) {
-            r = '0' + r;
-          }
-          return r;
-        }
-        // Hello IE8-
-        if(typeof String.prototype.trim !== 'function') {           
-            String.prototype.trim = function() {
-                return this.replace(/^\s+|^\n+|(\s|\n)+$/g, '');
-            }
-        }
-        if(typeof Date.prototype.toISOString !== 'function') {
-            // Implementation from http://stackoverflow.com/questions/2573521/how-do-i-output-an-iso-8601-formatted-string-in-javascript
-            Date.prototype.toISOString = function() {
-              return this.getUTCFullYear()
-                + '-' + pad( this.getUTCMonth() + 1 )
-                + '-' + pad( this.getUTCDate() )
-                + 'T' + pad( this.getUTCHours() )
-                + ':' + pad( this.getUTCMinutes() )
-                + ':' + pad( this.getUTCSeconds() )
-                + '.' + String( (this.getUTCMilliseconds()/1000).toFixed(3) ).slice( 2, 5 )
-                + 'Z';
-            };
-        }
-    }
-    
-    function getNodeLocalName( node ) {
-        var nodeLocalName = node.localName;         
-        if(nodeLocalName == null) // Yeah, this is IE!! 
-            nodeLocalName = node.baseName;
-        if(nodeLocalName == null || nodeLocalName=="") // =="" is IE too
-            nodeLocalName = node.nodeName;
-        return nodeLocalName;
-    }
-    
-    function getNodePrefix(node) {
-        return node.prefix;
-    }
-        
-    function escapeXmlChars(str) {
-        if(typeof(str) == "string")
-            return str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/'/g, '&#x27;');
-        else
-            return str;
+	function toArrayAccessForm(obj, childName, path) {
+		switch(config.arrayAccessForm) {
+			case "property":
+				if(!(obj[childName] instanceof Array))
+					obj[childName+"_asArray"] = [obj[childName]];
+				else
+					obj[childName+"_asArray"] = obj[childName];
+				break;
+			/*case "none":
+				break;*/
+		}
+
+		if(!(obj[childName] instanceof Array) && config.arrayAccessFormPaths.length > 0) {
+			if(checkInStdFiltersArrayForm(config.arrayAccessFormPaths, obj, childName, path)) {
+				obj[childName] = [obj[childName]];
+			}
+		}
+	}
+
+	function fromXmlDateTime(prop) {
+		// Implementation based up on http://stackoverflow.com/questions/8178598/xml-datetime-to-javascript-date-object
+		// Improved to support full spec and optional parts
+		var bits = prop.split(/[-T:+Z]/g);
+
+		var d = new Date(bits[0], bits[1]-1, bits[2]);
+		var secondBits = bits[5].split("\.");
+		d.setHours(bits[3], bits[4], secondBits[0]);
+		if(secondBits.length>1)
+			d.setMilliseconds(secondBits[1]);
+
+		// Get supplied time zone offset in minutes
+		if(bits[6] && bits[7]) {
+			var offsetMinutes = bits[6] * 60 + Number(bits[7]);
+			var sign = /\d\d-\d\d:\d\d$/.test(prop)? '-' : '+';
+
+			// Apply the sign
+			offsetMinutes = 0 + (sign == '-'? -1 * offsetMinutes : offsetMinutes);
+
+			// Apply offset and local timezone
+			d.setMinutes(d.getMinutes() - offsetMinutes - d.getTimezoneOffset())
+		}
+		else
+			if(prop.indexOf("Z", prop.length - 1) !== -1) {
+				d = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate(), d.getHours(), d.getMinutes(), d.getSeconds(), d.getMilliseconds()));
+			}
+
+		// d is now a local time equivalent to the supplied time
+		return d;
+	}
+
+	function checkFromXmlDateTimePaths(value, childName, fullPath) {
+		if(config.datetimeAccessFormPaths.length > 0) {
+			var path = fullPath.split("\.#")[0];
+			if(checkInStdFiltersArrayForm(config.datetimeAccessFormPaths, value, childName, path)) {
+				return fromXmlDateTime(value);
+			}
+			else
+				return value;
+		}
+		else
+			return value;
+	}
+
+	function checkXmlElementsFilter(obj, childType, childName, childPath) {
+        if( childType == DOMNodeTypes.ELEMENT_NODE && config.xmlElementsFilter.length > 0) {
+			return checkInStdFiltersArrayForm(config.xmlElementsFilter, obj, childName, childPath);
+		}
+		else
+			return true;
     }
 
-    function unescapeXmlChars(str) {
-        return str.replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&quot;/g, '"').replace(/&#x27;/g, "'").replace(/&amp;/g, '&');
-    }
-    
-    function toArrayAccessForm(obj, childName, path) {
-        switch(config.arrayAccessForm) {
-        case "property":
-            if(!(obj[childName] instanceof Array))
-                obj[childName+"_asArray"] = [obj[childName]];
-            else
-                obj[childName+"_asArray"] = obj[childName];
-            break;      
-        /*case "none":
-            break;*/
-        }
-        
-        if(!(obj[childName] instanceof Array) && config.arrayAccessFormPaths.length > 0) {
-            var idx = 0;
-            for(; idx < config.arrayAccessFormPaths.length; idx++) {
-                var arrayPath = config.arrayAccessFormPaths[idx];
-                if( typeof arrayPath === "string" ) {
-                    if(arrayPath == path)
-                        break;
-                }
-                else
-                if( arrayPath instanceof RegExp) {
-                    if(arrayPath.test(path))
-                        break;
-                }               
-                else
-                if( typeof arrayPath === "function") {
-                    if(arrayPath(obj, childName, path))
-                        break;
-                }
-            }
-            if(idx!=config.arrayAccessFormPaths.length) {
-                obj[childName] = [obj[childName]];
-            }
-        }
-    }
-    
-    function fromXmlDateTime(prop) {
-        // Implementation based up on http://stackoverflow.com/questions/8178598/xml-datetime-to-javascript-date-object
-        // Improved to support full spec and optional parts
-        var bits = prop.split(/[-T:+Z]/g);
-        
-        var d = new Date(bits[0], bits[1]-1, bits[2]);          
-        var secondBits = bits[5].split("\.");
-        d.setHours(bits[3], bits[4], secondBits[0]);
-        if(secondBits.length>1)
-            d.setMilliseconds(secondBits[1]);
+	function parseDOMChildren( node, path ) {
+		if(node.nodeType == DOMNodeTypes.DOCUMENT_NODE) {
+			var result = new Object;
+			var nodeChildren = node.childNodes;
+			// Alternative for firstElementChild which is not supported in some environments
+			for(var cidx=0; cidx <nodeChildren.length; cidx++) {
+				var child = nodeChildren.item(cidx);
+				if(child.nodeType == DOMNodeTypes.ELEMENT_NODE) {
+					var childName = getNodeLocalName(child);
+					result[childName] = parseDOMChildren(child, childName);
+				}
+			}
+			return result;
+		}
+		else
+		if(node.nodeType == DOMNodeTypes.ELEMENT_NODE) {
+			var result = new Object;
+			result.__cnt=0;
 
-        // Get supplied time zone offset in minutes
-        if(bits[6] && bits[7]) {
-            var offsetMinutes = bits[6] * 60 + Number(bits[7]);
-            var sign = /\d\d-\d\d:\d\d$/.test(prop)? '-' : '+';
+			var nodeChildren = node.childNodes;
 
-            // Apply the sign
-            offsetMinutes = 0 + (sign == '-'? -1 * offsetMinutes : offsetMinutes);
+			// Children nodes
+			for(var cidx=0; cidx <nodeChildren.length; cidx++) {
+				var child = nodeChildren.item(cidx); // nodeChildren[cidx];
+				var childName = getNodeLocalName(child);
 
-            // Apply offset and local timezone
-            d.setMinutes(d.getMinutes() - offsetMinutes - d.getTimezoneOffset())
-        }
-        else
-            if(prop.indexOf("Z", prop.length - 1) !== -1) {
-                d = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate(), d.getHours(), d.getMinutes(), d.getSeconds(), d.getMilliseconds()));                  
-            }
+				if(child.nodeType!= DOMNodeTypes.COMMENT_NODE) {
+					var childPath = path+"."+childName;
+					if (checkXmlElementsFilter(result,child.nodeType,childName,childPath)) {
+						result.__cnt++;
+						if(result[childName] == null) {
+							result[childName] = parseDOMChildren(child, childPath);
+							toArrayAccessForm(result, childName, childPath);
+						}
+						else {
+							if(result[childName] != null) {
+								if( !(result[childName] instanceof Array)) {
+									result[childName] = [result[childName]];
+									toArrayAccessForm(result, childName, childPath);
+								}
+							}
+							(result[childName])[result[childName].length] = parseDOMChildren(child, childPath);
+						}
+					}
+				}
+			}
 
-        // d is now a local time equivalent to the supplied time
-        return d;
-    }
-    
-    function checkFromXmlDateTimePaths(value, childName, fullPath) {
-        if(config.datetimeAccessFormPaths.length > 0) {
-            var path = fullPath.split("\.#")[0];
-            var idx = 0;
-            for(; idx < config.datetimeAccessFormPaths.length; idx++) {
-                var dtPath = config.datetimeAccessFormPaths[idx];
-                if( typeof dtPath === "string" ) {
-                    if(dtPath == path)
-                        break;
-                }
-                else
-                if( dtPath instanceof RegExp) {
-                    if(dtPath.test(path))
-                        break;
-                }               
-                else
-                if( typeof dtPath === "function") {
-                    if(dtPath(obj, childName, path))
-                        break;
-                }
-            }
-            if(idx!=config.datetimeAccessFormPaths.length) {
-                return fromXmlDateTime(value);
-            }
-            else
-                return value;
-        }
-        else
-            return value;
+			// Attributes
+			for(var aidx=0; aidx <node.attributes.length; aidx++) {
+				var attr = node.attributes.item(aidx); // [aidx];
+				result.__cnt++;
+				result[config.attributePrefix+attr.name]=attr.value;
+			}
+
+			// Node namespace prefix
+			var nodePrefix = getNodePrefix(node);
+			if(nodePrefix!=null && nodePrefix!="") {
+				result.__cnt++;
+				result.__prefix=nodePrefix;
+			}
+
+			if(result["#text"]!=null) {
+				result.__text = result["#text"];
+				if(result.__text instanceof Array) {
+					result.__text = result.__text.join("\n");
+				}
+				//if(config.escapeMode)
+				//	result.__text = unescapeXmlChars(result.__text);
+				if(config.stripWhitespaces)
+					result.__text = result.__text.trim();
+				delete result["#text"];
+				if(config.arrayAccessForm=="property")
+					delete result["#text_asArray"];
+				result.__text = checkFromXmlDateTimePaths(result.__text, childName, path+"."+childName);
+			}
+			if(result["#cdata-section"]!=null) {
+				result.__cdata = result["#cdata-section"];
+				delete result["#cdata-section"];
+				if(config.arrayAccessForm=="property")
+					delete result["#cdata-section_asArray"];
+			}
+
+			if( result.__cnt == 0 && config.emptyNodeForm=="text" ) {
+				result = '';
+			}
+			else
+			if( result.__cnt == 1 && result.__text!=null  ) {
+				result = result.__text;
+			}
+			else
+			if( result.__cnt == 1 && result.__cdata!=null && !config.keepCData  ) {
+				result = result.__cdata;
+			}
+			else
+			if ( result.__cnt > 1 && result.__text!=null && config.skipEmptyTextNodesForObj) {
+				if( (config.stripWhitespaces && result.__text=="") || (result.__text.trim()=="")) {
+					delete result.__text;
+				}
+			}
+			delete result.__cnt;
+
+			if( config.enableToStringFunc && (result.__text!=null || result.__cdata!=null )) {
+				result.toString = function() {
+					return (this.__text!=null? this.__text:'')+( this.__cdata!=null ? this.__cdata:'');
+				};
+			}
+
+			return result;
+		}
+		else
+		if(node.nodeType == DOMNodeTypes.TEXT_NODE || node.nodeType == DOMNodeTypes.CDATA_SECTION_NODE) {
+			return node.nodeValue;
+		}
+	}
+
+	function startTag(jsonObj, element, attrList, closed) {
+		var resultStr = "<"+ ( (jsonObj!=null && jsonObj.__prefix!=null)? (jsonObj.__prefix+":"):"") + element;
+		if(attrList!=null) {
+			for(var aidx = 0; aidx < attrList.length; aidx++) {
+				var attrName = attrList[aidx];
+				var attrVal = jsonObj[attrName];
+				if(config.escapeMode)
+					attrVal=escapeXmlChars(attrVal);
+				resultStr+=" "+attrName.substr(config.attributePrefix.length)+"=";
+				if(config.useDoubleQuotes)
+					resultStr+='"'+attrVal+'"';
+				else
+					resultStr+="'"+attrVal+"'";
+			}
+		}
+		if(!closed)
+			resultStr+=">";
+		else
+			resultStr+="/>";
+		return resultStr;
+	}
+
+	function endTag(jsonObj,elementName) {
+		return "</"+ (jsonObj.__prefix!=null? (jsonObj.__prefix+":"):"")+elementName+">";
+	}
+
+	function endsWith(str, suffix) {
+	    return str.indexOf(suffix, str.length - suffix.length) !== -1;
+	}
+
+	function jsonXmlSpecialElem ( jsonObj, jsonObjField ) {
+		if((config.arrayAccessForm=="property" && endsWith(jsonObjField.toString(),("_asArray")))
+				|| jsonObjField.toString().indexOf(config.attributePrefix)==0
+				|| jsonObjField.toString().indexOf("__")==0
+				|| (jsonObj[jsonObjField] instanceof Function) )
+			return true;
+		else
+			return false;
+	}
+
+	function jsonXmlElemCount ( jsonObj ) {
+		var elementsCnt = 0;
+		if(jsonObj instanceof Object ) {
+			for( var it in jsonObj  ) {
+				if(jsonXmlSpecialElem ( jsonObj, it) )
+					continue;
+				elementsCnt++;
+			}
+		}
+		return elementsCnt;
+	}
+
+	function checkJsonObjPropertiesFilter(jsonObj, propertyName, jsonObjPath) {
+        return config.jsonPropertiesFilter.length == 0
+			|| jsonObjPath==""
+			|| checkInStdFiltersArrayForm(config.jsonPropertiesFilter, jsonObj, propertyName, jsonObjPath);
     }
 
-    function parseDOMChildren( node, path ) {
-        if(node.nodeType == DOMNodeTypes.DOCUMENT_NODE) {
-            var result = new Object;
-            var nodeChildren = node.childNodes;
-            // Alternative for firstElementChild which is not supported in some environments
-            for(var cidx=0; cidx <nodeChildren.length; cidx++) {
-                var child = nodeChildren.item(cidx);
-                if(child.nodeType == DOMNodeTypes.ELEMENT_NODE) {
-                    var childName = getNodeLocalName(child);
-                    result[childName] = parseDOMChildren(child, childName);
-                }
-            }
-            return result;
-        }
-        else
-        if(node.nodeType == DOMNodeTypes.ELEMENT_NODE) {
-            var result = new Object;
-            result.__cnt=0;
-            
-            var nodeChildren = node.childNodes;
-            
-            // Children nodes
-            for(var cidx=0; cidx <nodeChildren.length; cidx++) {
-                var child = nodeChildren.item(cidx); // nodeChildren[cidx];
-                var childName = getNodeLocalName(child);
-                
-                if(child.nodeType!= DOMNodeTypes.COMMENT_NODE) {
-                    result.__cnt++;
-                    if(result[childName] == null) {
-                        result[childName] = parseDOMChildren(child, path+"."+childName);
-                        toArrayAccessForm(result, childName, path+"."+childName);                   
-                    }
-                    else {
-                        if(result[childName] != null) {
-                            if( !(result[childName] instanceof Array)) {
-                                result[childName] = [result[childName]];
-                                toArrayAccessForm(result, childName, path+"."+childName);
-                            }
-                        }
-                        (result[childName])[result[childName].length] = parseDOMChildren(child, path+"."+childName);
-                    }
-                }                               
-            }
-            
-            // Attributes
-            for(var aidx=0; aidx <node.attributes.length; aidx++) {
-                var attr = node.attributes.item(aidx); // [aidx];
-                result.__cnt++;
-                result[config.attributePrefix+attr.name]=attr.value;
-            }
-            
-            // Node namespace prefix
-            var nodePrefix = getNodePrefix(node);
-            if(nodePrefix!=null && nodePrefix!="") {
-                result.__cnt++;
-                result.__prefix=nodePrefix;
-            }
-            
-            if(result["#text"]!=null) {             
-                result.__text = result["#text"];
-                if(result.__text instanceof Array) {
-                    result.__text = result.__text.join("\n");
-                }
-                //if(config.escapeMode)
-                //  result.__text = unescapeXmlChars(result.__text);
-                if(config.stripWhitespaces)
-                    result.__text = result.__text.trim();
-                delete result["#text"];
-                if(config.arrayAccessForm=="property")
-                    delete result["#text_asArray"];
-                result.__text = checkFromXmlDateTimePaths(result.__text, childName, path+"."+childName);
-            }
-            if(result["#cdata-section"]!=null) {
-                result.__cdata = result["#cdata-section"];
-                delete result["#cdata-section"];
-                if(config.arrayAccessForm=="property")
-                    delete result["#cdata-section_asArray"];
-            }
-            
-            if( result.__cnt == 1 && result.__text!=null  ) {
-                result = result.__text;
-            }
-            else
-            if( result.__cnt == 0 && config.emptyNodeForm=="text" ) {
-                result = '';
-            }
-            else
-            if ( result.__cnt > 1 && result.__text!=null && config.skipEmptyTextNodesForObj) {
-                if( (config.stripWhitespaces && result.__text=="") || (result.__text.trim()=="")) {
-                    delete result.__text;
-                }
-            }
-            delete result.__cnt;            
-            
-            if( config.enableToStringFunc && (result.__text!=null || result.__cdata!=null )) {
-                result.toString = function() {
-                    return (this.__text!=null? this.__text:'')+( this.__cdata!=null ? this.__cdata:'');
-                };
-            }
-            
-            return result;
-        }
-        else
-        if(node.nodeType == DOMNodeTypes.TEXT_NODE || node.nodeType == DOMNodeTypes.CDATA_SECTION_NODE) {
-            return node.nodeValue;
-        }   
-    }
-    
-    function startTag(jsonObj, element, attrList, closed) {
-        var resultStr = "<"+ ( (jsonObj!=null && jsonObj.__prefix!=null)? (jsonObj.__prefix+":"):"") + element;
-        if(attrList!=null) {
-            for(var aidx = 0; aidx < attrList.length; aidx++) {
-                var attrName = attrList[aidx];
-                var attrVal = jsonObj[attrName];
-                if(config.escapeMode)
-                    attrVal=escapeXmlChars(attrVal);
-                resultStr+=" "+attrName.substr(config.attributePrefix.length)+"=";
-                if(config.useDoubleQuotes)
-                    resultStr+='"'+attrVal+'"';
-                else
-                    resultStr+="'"+attrVal+"'";
-            }
-        }
-        if(!closed)
-            resultStr+=">";
-        else
-            resultStr+="/>";
-        return resultStr;
-    }
-    
-    function endTag(jsonObj,elementName) {
-        return "</"+ (jsonObj.__prefix!=null? (jsonObj.__prefix+":"):"")+elementName+">";
-    }
-    
-    function endsWith(str, suffix) {
-        return str.indexOf(suffix, str.length - suffix.length) !== -1;
-    }
-    
-    function jsonXmlSpecialElem ( jsonObj, jsonObjField ) {
-        if((config.arrayAccessForm=="property" && endsWith(jsonObjField.toString(),("_asArray"))) 
-                || jsonObjField.toString().indexOf(config.attributePrefix)==0 
-                || jsonObjField.toString().indexOf("__")==0
-                || (jsonObj[jsonObjField] instanceof Function) )
-            return true;
-        else
-            return false;
-    }
-    
-    function jsonXmlElemCount ( jsonObj ) {
-        var elementsCnt = 0;
-        if(jsonObj instanceof Object ) {
-            for( var it in jsonObj  ) {
-                if(jsonXmlSpecialElem ( jsonObj, it) )
-                    continue;           
-                elementsCnt++;
-            }
-        }
-        return elementsCnt;
-    }
-    
-    function parseJSONAttributes ( jsonObj ) {
-        var attrList = [];
-        if(jsonObj instanceof Object ) {
-            for( var ait in jsonObj  ) {
-                if(ait.toString().indexOf("__")== -1 && ait.toString().indexOf(config.attributePrefix)==0) {
-                    attrList.push(ait);
-                }
-            }
-        }
-        return attrList;
-    }
-    
-    function parseJSONTextAttrs ( jsonTxtObj ) {
-        var result ="";
-        
-        if(jsonTxtObj.__cdata!=null) {                                      
-            result+="<![CDATA["+jsonTxtObj.__cdata+"]]>";                   
-        }
-        
-        if(jsonTxtObj.__text!=null) {           
-            if(config.escapeMode)
-                result+=escapeXmlChars(jsonTxtObj.__text);
-            else
-                result+=jsonTxtObj.__text;
-        }
-        return result;
-    }
-    
-    function parseJSONTextObject ( jsonTxtObj ) {
-        var result ="";
+	function parseJSONAttributes ( jsonObj ) {
+		var attrList = [];
+		if(jsonObj instanceof Object ) {
+			for( var ait in jsonObj  ) {
+				if(ait.toString().indexOf("__")== -1 && ait.toString().indexOf(config.attributePrefix)==0) {
+					attrList.push(ait);
+				}
+			}
+		}
+		return attrList;
+	}
 
-        if( jsonTxtObj instanceof Object ) {
-            result+=parseJSONTextAttrs ( jsonTxtObj );
+	function parseJSONTextAttrs ( jsonTxtObj ) {
+		var result ="";
+
+		if(jsonTxtObj.__cdata!=null) {
+			result+="<![CDATA["+jsonTxtObj.__cdata+"]]>";
+		}
+
+		if(jsonTxtObj.__text!=null) {
+			if(config.escapeMode)
+				result+=escapeXmlChars(jsonTxtObj.__text);
+			else
+				result+=jsonTxtObj.__text;
+		}
+		return result;
+	}
+
+	function parseJSONTextObject ( jsonTxtObj ) {
+		var result ="";
+
+		if( jsonTxtObj instanceof Object ) {
+			result+=parseJSONTextAttrs ( jsonTxtObj );
+		}
+		else
+			if(jsonTxtObj!=null) {
+				if(config.escapeMode)
+					result+=escapeXmlChars(jsonTxtObj);
+				else
+					result+=jsonTxtObj;
+			}
+
+		return result;
+	}
+
+	function getJsonPropertyPath(jsonObjPath, jsonPropName) {
+		if (jsonObjPath==="") {
+            return jsonPropName;
         }
-        else
-            if(jsonTxtObj!=null) {
-                if(config.escapeMode)
-                    result+=escapeXmlChars(jsonTxtObj);
-                else
-                    result+=jsonTxtObj;
-            }
-        
-        return result;
+		else
+			return jsonObjPath+"."+jsonPropName;
     }
-    
-    function parseJSONArray ( jsonArrRoot, jsonArrObj, attrList ) {
-        var result = ""; 
-        if(jsonArrRoot.length == 0) {
-            result+=startTag(jsonArrRoot, jsonArrObj, attrList, true);
-        }
-        else {
-            for(var arIdx = 0; arIdx < jsonArrRoot.length; arIdx++) {
-                result+=startTag(jsonArrRoot[arIdx], jsonArrObj, parseJSONAttributes(jsonArrRoot[arIdx]), false);
-                result+=parseJSONObject(jsonArrRoot[arIdx]);
-                result+=endTag(jsonArrRoot[arIdx],jsonArrObj);                      
-            }
-        }
-        return result;
-    }
-    
-    function parseJSONObject ( jsonObj ) {
-        var result = "";    
 
-        var elementsCnt = jsonXmlElemCount ( jsonObj );
-        
-        if(elementsCnt > 0) {
-            for( var it in jsonObj ) {
-                
-                if(jsonXmlSpecialElem ( jsonObj, it) )
-                    continue;           
-                
-                var subObj = jsonObj[it];                       
-                
-                var attrList = parseJSONAttributes( subObj )
-                
-                if(subObj == null || subObj == undefined) {
-                    result+=startTag(subObj, it, attrList, true);
-                }
-                else
-                if(subObj instanceof Object) {
-                    
-                    if(subObj instanceof Array) {                   
-                        result+=parseJSONArray( subObj, it, attrList );                 
-                    }
-                    else if(subObj instanceof Date) {
-                        result+=startTag(subObj, it, attrList, false);
-                        result+=subObj.toISOString();
-                        result+=endTag(subObj,it);
-                    }
-                    else {
-                        var subObjElementsCnt = jsonXmlElemCount ( subObj );
-                        if(subObjElementsCnt > 0 || subObj.__text!=null || subObj.__cdata!=null) {
-                            result+=startTag(subObj, it, attrList, false);
-                            result+=parseJSONObject(subObj);
-                            result+=endTag(subObj,it);
-                        }
-                        else {
-                            result+=startTag(subObj, it, attrList, true);
-                        }
-                    }
-                }
-                else {
-                    result+=startTag(subObj, it, attrList, false);
-                    result+=parseJSONTextObject(subObj);
-                    result+=endTag(subObj,it);
-                }
-            }
-        }
-        result+=parseJSONTextObject(jsonObj);
-        
-        return result;
-    }
-    
-    this.parseXmlString = function(xmlDocStr) {
-        var isIEParser = window.ActiveXObject || "ActiveXObject" in window;
-        if (xmlDocStr === undefined) {
-            return null;
-        }
-        var xmlDoc;
-        if (window.DOMParser) {
-            var parser=new window.DOMParser();          
-            var parsererrorNS = null;
-            // IE9+ now is here
-            if(!isIEParser) {
-                try {
-                    parsererrorNS = parser.parseFromString("INVALID", "text/xml").childNodes[0].namespaceURI;
-                }
-                catch(err) {                    
-                    parsererrorNS = null;
-                }
-            }
-            try {
-                xmlDoc = parser.parseFromString( xmlDocStr, "text/xml" );
-                if( parsererrorNS!= null && xmlDoc.getElementsByTagNameNS(parsererrorNS, "parsererror").length > 0) {
-                    //throw new Error('Error parsing XML: '+xmlDocStr);
-                    xmlDoc = null;
-                }
-            }
-            catch(err) {
-                xmlDoc = null;
-            }
-        }
-        else {
-            // IE :(
-            if(xmlDocStr.indexOf("<?")==0) {
-                xmlDocStr = xmlDocStr.substr( xmlDocStr.indexOf("?>") + 2 );
-            }
-            xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
-            xmlDoc.async="false";
-            xmlDoc.loadXML(xmlDocStr);
-        }
-        return xmlDoc;
-    };
-    
-    this.asArray = function(prop) {
-        if (prop === undefined || prop == null)
-            return [];
-        else
-        if(prop instanceof Array)
-            return prop;
-        else
-            return [prop];
-    };
-    
-    this.toXmlDateTime = function(dt) {
-        if(dt instanceof Date)
-            return dt.toISOString();
-        else
-        if(typeof(dt) === 'number' )
-            return new Date(dt).toISOString();
-        else    
-            return null;
-    };
-    
-    this.asDateTime = function(prop) {
-        if(typeof(prop) == "string") {
-            return fromXmlDateTime(prop);
-        }
-        else
-            return prop;
-    };
+	function parseJSONArray ( jsonArrRoot, jsonArrObj, attrList, jsonObjPath ) {
+		var result = "";
+		if(jsonArrRoot.length == 0) {
+			result+=startTag(jsonArrRoot, jsonArrObj, attrList, true);
+		}
+		else {
+			for(var arIdx = 0; arIdx < jsonArrRoot.length; arIdx++) {
+				result+=startTag(jsonArrRoot[arIdx], jsonArrObj, parseJSONAttributes(jsonArrRoot[arIdx]), false);
+				result+=parseJSONObject(jsonArrRoot[arIdx], getJsonPropertyPath(jsonObjPath,jsonArrObj));
+				result+=endTag(jsonArrRoot[arIdx],jsonArrObj);
+			}
+		}
+		return result;
+	}
 
-    this.xml2json = function (xmlDoc) {
-        return parseDOMChildren ( xmlDoc );
-    };
-    
-    this.xml_str2json = function (xmlDocStr) {
-        var xmlDoc = this.parseXmlString(xmlDocStr);
-        if(xmlDoc!=null)
-            return this.xml2json(xmlDoc);
-        else
-            return null;
-    };
+	function parseJSONObject ( jsonObj, jsonObjPath ) {
+		var result = "";
 
-    this.json2xml_str = function (jsonObj) {
-        return parseJSONObject ( jsonObj );
-    };
+		var elementsCnt = jsonXmlElemCount ( jsonObj );
 
-    this.json2xml = function (jsonObj) {
-        var xmlDocStr = this.json2xml_str (jsonObj);
-        return this.parseXmlString(xmlDocStr);
-    };
-    
-    this.getVersion = function () {
-        return VERSION;
-    };
-    
-}
\ No newline at end of file
+		if(elementsCnt > 0) {
+			for( var it in jsonObj ) {
+
+				if(jsonXmlSpecialElem ( jsonObj, it) || (jsonObjPath!="" && !checkJsonObjPropertiesFilter(jsonObj, it, getJsonPropertyPath(jsonObjPath,it))) )
+					continue;
+
+				var subObj = jsonObj[it];
+
+				var attrList = parseJSONAttributes( subObj )
+
+				if(subObj == null || subObj == undefined) {
+					result+=startTag(subObj, it, attrList, true);
+				}
+				else
+				if(subObj instanceof Object) {
+
+					if(subObj instanceof Array) {
+						result+=parseJSONArray( subObj, it, attrList, jsonObjPath );
+					}
+					else if(subObj instanceof Date) {
+						result+=startTag(subObj, it, attrList, false);
+						result+=subObj.toISOString();
+						result+=endTag(subObj,it);
+					}
+					else {
+						var subObjElementsCnt = jsonXmlElemCount ( subObj );
+						if(subObjElementsCnt > 0 || subObj.__text!=null || subObj.__cdata!=null) {
+							result+=startTag(subObj, it, attrList, false);
+							result+=parseJSONObject(subObj, getJsonPropertyPath(jsonObjPath,it));
+							result+=endTag(subObj,it);
+						}
+						else {
+							result+=startTag(subObj, it, attrList, true);
+						}
+					}
+				}
+				else {
+					result+=startTag(subObj, it, attrList, false);
+					result+=parseJSONTextObject(subObj);
+					result+=endTag(subObj,it);
+				}
+			}
+		}
+		result+=parseJSONTextObject(jsonObj);
+
+		return result;
+	}
+
+	this.parseXmlString = function(xmlDocStr) {
+		var isIEParser = window.ActiveXObject || "ActiveXObject" in window;
+		if (xmlDocStr === undefined) {
+			return null;
+		}
+		var xmlDoc;
+		if (window.DOMParser) {
+			var parser=new window.DOMParser();
+			var parsererrorNS = null;
+			// IE9+ now is here
+			if(!isIEParser) {
+				try {
+					parsererrorNS = parser.parseFromString("INVALID", "text/xml").getElementsByTagName("parsererror")[0].namespaceURI;
+				}
+				catch(err) {
+					parsererrorNS = null;
+				}
+			}
+			try {
+				xmlDoc = parser.parseFromString( xmlDocStr, "text/xml" );
+				if( parsererrorNS!= null && xmlDoc.getElementsByTagNameNS(parsererrorNS, "parsererror").length > 0) {
+					//throw new Error('Error parsing XML: '+xmlDocStr);
+					xmlDoc = null;
+				}
+			}
+			catch(err) {
+				xmlDoc = null;
+			}
+		}
+		else {
+			// IE :(
+			if(xmlDocStr.indexOf("<?")==0) {
+				xmlDocStr = xmlDocStr.substr( xmlDocStr.indexOf("?>") + 2 );
+			}
+			xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
+			xmlDoc.async="false";
+			xmlDoc.loadXML(xmlDocStr);
+		}
+		return xmlDoc;
+	};
+
+	this.asArray = function(prop) {
+		if (prop === undefined || prop == null)
+			return [];
+		else
+		if(prop instanceof Array)
+			return prop;
+		else
+			return [prop];
+	};
+
+	this.toXmlDateTime = function(dt) {
+		if(dt instanceof Date)
+			return dt.toISOString();
+		else
+		if(typeof(dt) === 'number' )
+			return new Date(dt).toISOString();
+		else
+			return null;
+	};
+
+	this.asDateTime = function(prop) {
+		if(typeof(prop) == "string") {
+			return fromXmlDateTime(prop);
+		}
+		else
+			return prop;
+	};
+
+	this.xml2json = function (xmlDoc) {
+		return parseDOMChildren ( xmlDoc );
+	};
+
+	this.xml_str2json = function (xmlDocStr) {
+		var xmlDoc = this.parseXmlString(xmlDocStr);
+		if(xmlDoc!=null)
+			return this.xml2json(xmlDoc);
+		else
+			return null;
+	};
+
+	this.json2xml_str = function (jsonObj) {
+		return parseJSONObject ( jsonObj, "" );
+	};
+
+	this.json2xml = function (jsonObj) {
+		var xmlDocStr = this.json2xml_str (jsonObj);
+		return this.parseXmlString(xmlDocStr);
+	};
+
+	this.getVersion = function () {
+		return VERSION;
+	};
+}
diff --git a/falcon-ui/app/js/services/common/date-helper.js b/falcon-ui/app/js/services/common/date-helper.js
index b1f4b52..a837aa0 100644
--- a/falcon-ui/app/js/services/common/date-helper.js
+++ b/falcon-ui/app/js/services/common/date-helper.js
@@ -21,6 +21,218 @@
   angular.module('dateHelper', [])
     .factory('DateHelper', function () {
 
+      var formats = {
+       "ar-SA" : "dd/MM/yy",
+       "bg-BG" : "dd.M.yyyy",
+       "ca-ES" : "dd/MM/yyyy",
+       "zh-TW" : "yyyy/M/d",
+       "cs-CZ" : "d.M.yyyy",
+       "da-DK" : "dd-MM-yyyy",
+       "de-DE" : "dd.MM.yyyy",
+       "el-GR" : "d/M/yyyy",
+       "en-US" : "MM/dd/yyyy",
+       "fi-FI" : "d.M.yyyy",
+       "fr-FR" : "dd/MM/yyyy",
+       "he-IL" : "dd/MM/yyyy",
+       "hu-HU" : "yyyy. MM. dd.",
+       "is-IS" : "d.M.yyyy",
+       "it-IT" : "dd/MM/yyyy",
+       "ja-JP" : "yyyy/MM/dd",
+       "ko-KR" : "yyyy-MM-dd",
+       "nl-NL" : "d-M-yyyy",
+       "nb-NO" : "dd.MM.yyyy",
+       "pl-PL" : "yyyy-MM-dd",
+       "pt-BR" : "d/M/yyyy",
+       "ro-RO" : "dd.MM.yyyy",
+       "ru-RU" : "dd.MM.yyyy",
+       "hr-HR" : "d.M.yyyy",
+       "sk-SK" : "d. M. yyyy",
+       "sq-AL" : "yyyy-MM-dd",
+       "sv-SE" : "yyyy-MM-dd",
+       "th-TH" : "d/M/yyyy",
+       "tr-TR" : "dd.MM.yyyy",
+       "ur-PK" : "dd/MM/yyyy",
+       "id-ID" : "dd/MM/yyyy",
+       "uk-UA" : "dd.MM.yyyy",
+       "be-BY" : "dd.MM.yyyy",
+       "sl-SI" : "d.M.yyyy",
+       "et-EE" : "d.MM.yyyy",
+       "lv-LV" : "yyyy.MM.dd.",
+       "lt-LT" : "yyyy.MM.dd",
+       "fa-IR" : "MM/dd/yyyy",
+       "vi-VN" : "dd/MM/yyyy",
+       "hy-AM" : "dd.MM.yyyy",
+       "az-Latn-AZ" : "dd.MM.yyyy",
+       "eu-ES" : "yyyy/MM/dd",
+       "mk-MK" : "dd.MM.yyyy",
+       "af-ZA" : "yyyy/MM/dd",
+       "ka-GE" : "dd.MM.yyyy",
+       "fo-FO" : "dd-MM-yyyy",
+       "hi-IN" : "dd-MM-yyyy",
+       "ms-MY" : "dd/MM/yyyy",
+       "kk-KZ" : "dd.MM.yyyy",
+       "ky-KG" : "dd.MM.yy",
+       "sw-KE" : "M/d/yyyy",
+       "uz-Latn-UZ" : "dd/MM yyyy",
+       "tt-RU" : "dd.MM.yyyy",
+       "pa-IN" : "dd-MM-yy",
+       "gu-IN" : "dd-MM-yy",
+       "ta-IN" : "dd-MM-yyyy",
+       "te-IN" : "dd-MM-yy",
+       "kn-IN" : "dd-MM-yy",
+       "mr-IN" : "dd-MM-yyyy",
+       "sa-IN" : "dd-MM-yyyy",
+       "mn-MN" : "yy.MM.dd",
+       "gl-ES" : "dd/MM/yy",
+       "kok-IN" : "dd-MM-yyyy",
+       "syr-SY" : "dd/MM/yyyy",
+       "dv-MV" : "dd/MM/yy",
+       "ar-IQ" : "dd/MM/yyyy",
+       "zh-CN" : "yyyy/M/d",
+       "de-CH" : "dd.MM.yyyy",
+       "en-GB" : "dd/MM/yyyy",
+       "es-MX" : "dd/MM/yyyy",
+       "fr-BE" : "d/MM/yyyy",
+       "it-CH" : "dd.MM.yyyy",
+       "nl-BE" : "d/MM/yyyy",
+       "nn-NO" : "dd.MM.yyyy",
+       "pt-PT" : "dd-MM-yyyy",
+       "sr-Latn-CS" : "d.M.yyyy",
+       "sv-FI" : "d.M.yyyy",
+       "az-Cyrl-AZ" : "dd.MM.yyyy",
+       "ms-BN" : "dd/MM/yyyy",
+       "uz-Cyrl-UZ" : "dd.MM.yyyy",
+       "ar-EG" : "dd/MM/yyyy",
+       "zh-HK" : "d/M/yyyy",
+       "de-AT" : "dd.MM.yyyy",
+       "en-AU" : "d/MM/yyyy",
+       "es-ES" : "dd/MM/yyyy",
+       "fr-CA" : "yyyy-MM-dd",
+       "sr-Cyrl-CS" : "d.M.yyyy",
+       "ar-LY" : "dd/MM/yyyy",
+       "zh-SG" : "d/M/yyyy",
+       "de-LU" : "dd.MM.yyyy",
+       "en-CA" : "dd/MM/yyyy",
+       "es-GT" : "dd/MM/yyyy",
+       "fr-CH" : "dd.MM.yyyy",
+       "ar-DZ" : "dd-MM-yyyy",
+       "zh-MO" : "d/M/yyyy",
+       "de-LI" : "dd.MM.yyyy",
+       "en-NZ" : "d/MM/yyyy",
+       "es-CR" : "dd/MM/yyyy",
+       "fr-LU" : "dd/MM/yyyy",
+       "ar-MA" : "dd-MM-yyyy",
+       "en-IE" : "dd/MM/yyyy",
+       "es-PA" : "MM/dd/yyyy",
+       "fr-MC" : "dd/MM/yyyy",
+       "ar-TN" : "dd-MM-yyyy",
+       "en-ZA" : "yyyy/MM/dd",
+       "es-DO" : "dd/MM/yyyy",
+       "ar-OM" : "dd/MM/yyyy",
+       "en-JM" : "dd/MM/yyyy",
+       "es-VE" : "dd/MM/yyyy",
+       "ar-YE" : "dd/MM/yyyy",
+       "en-029" : "MM/dd/yyyy",
+       "es-CO" : "dd/MM/yyyy",
+       "ar-SY" : "dd/MM/yyyy",
+       "en-BZ" : "dd/MM/yyyy",
+       "es-PE" : "dd/MM/yyyy",
+       "ar-JO" : "dd/MM/yyyy",
+       "en-TT" : "dd/MM/yyyy",
+       "es-AR" : "dd/MM/yyyy",
+       "ar-LB" : "dd/MM/yyyy",
+       "en-ZW" : "M/d/yyyy",
+       "es-EC" : "dd/MM/yyyy",
+       "ar-KW" : "dd/MM/yyyy",
+       "en-PH" : "M/d/yyyy",
+       "es-CL" : "dd-MM-yyyy",
+       "ar-AE" : "dd/MM/yyyy",
+       "es-UY" : "dd/MM/yyyy",
+       "ar-BH" : "dd/MM/yyyy",
+       "es-PY" : "dd/MM/yyyy",
+       "ar-QA" : "dd/MM/yyyy",
+       "es-BO" : "dd/MM/yyyy",
+       "es-SV" : "dd/MM/yyyy",
+       "es-HN" : "dd/MM/yyyy",
+       "es-NI" : "dd/MM/yyyy",
+       "es-PR" : "dd/MM/yyyy",
+       "am-ET" : "d/M/yyyy",
+       "tzm-Latn-DZ" : "dd-MM-yyyy",
+       "iu-Latn-CA" : "d/MM/yyyy",
+       "sma-NO" : "dd.MM.yyyy",
+       "mn-Mong-CN" : "yyyy/M/d",
+       "gd-GB" : "dd/MM/yyyy",
+       "en-MY" : "d/M/yyyy",
+       "prs-AF" : "dd/MM/yy",
+       "bn-BD" : "dd-MM-yy",
+       "wo-SN" : "dd/MM/yyyy",
+       "rw-RW" : "M/d/yyyy",
+       "qut-GT" : "dd/MM/yyyy",
+       "sah-RU" : "MM.dd.yyyy",
+       "gsw-FR" : "dd/MM/yyyy",
+       "co-FR" : "dd/MM/yyyy",
+       "oc-FR" : "dd/MM/yyyy",
+       "mi-NZ" : "dd/MM/yyyy",
+       "ga-IE" : "dd/MM/yyyy",
+       "se-SE" : "yyyy-MM-dd",
+       "br-FR" : "dd/MM/yyyy",
+       "smn-FI" : "d.M.yyyy",
+       "moh-CA" : "M/d/yyyy",
+       "arn-CL" : "dd-MM-yyyy",
+       "ii-CN" : "yyyy/M/d",
+       "dsb-DE" : "d. M. yyyy",
+       "ig-NG" : "d/M/yyyy",
+       "kl-GL" : "dd-MM-yyyy",
+       "lb-LU" : "dd/MM/yyyy",
+       "ba-RU" : "dd.MM.yy",
+       "nso-ZA" : "yyyy/MM/dd",
+       "quz-BO" : "dd/MM/yyyy",
+       "yo-NG" : "d/M/yyyy",
+       "ha-Latn-NG" : "d/M/yyyy",
+       "fil-PH" : "M/d/yyyy",
+       "ps-AF" : "dd/MM/yy",
+       "fy-NL" : "d-M-yyyy",
+       "ne-NP" : "M/d/yyyy",
+       "se-NO" : "dd.MM.yyyy",
+       "iu-Cans-CA" : "d/M/yyyy",
+       "sr-Latn-RS" : "d.M.yyyy",
+       "si-LK" : "yyyy-MM-dd",
+       "sr-Cyrl-RS" : "d.M.yyyy",
+       "lo-LA" : "dd/MM/yyyy",
+       "km-KH" : "yyyy-MM-dd",
+       "cy-GB" : "dd/MM/yyyy",
+       "bo-CN" : "yyyy/M/d",
+       "sms-FI" : "d.M.yyyy",
+       "as-IN" : "dd-MM-yyyy",
+       "ml-IN" : "dd-MM-yy",
+       "en-IN" : "dd-MM-yyyy",
+       "or-IN" : "dd-MM-yy",
+       "bn-IN" : "dd-MM-yy",
+       "tk-TM" : "dd.MM.yy",
+       "bs-Latn-BA" : "d.M.yyyy",
+       "mt-MT" : "dd/MM/yyyy",
+       "sr-Cyrl-ME" : "d.M.yyyy",
+       "se-FI" : "d.M.yyyy",
+       "zu-ZA" : "yyyy/MM/dd",
+       "xh-ZA" : "yyyy/MM/dd",
+       "tn-ZA" : "yyyy/MM/dd",
+       "hsb-DE" : "d. M. yyyy",
+       "bs-Cyrl-BA" : "d.M.yyyy",
+       "tg-Cyrl-TJ" : "dd.MM.yy",
+       "sr-Latn-BA" : "d.M.yyyy",
+       "smj-NO" : "dd.MM.yyyy",
+       "rm-CH" : "dd/MM/yyyy",
+       "smj-SE" : "yyyy-MM-dd",
+       "quz-EC" : "dd/MM/yyyy",
+       "quz-PE" : "dd/MM/yyyy",
+       "hr-BA" : "d.M.yyyy.",
+       "sr-Latn-ME" : "d.M.yyyy",
+       "sma-SE" : "yyyy-MM-dd",
+       "en-SG" : "d/M/yyyy",
+       "ug-CN" : "yyyy-M-d",
+       "sr-Cyrl-BA" : "d.M.yyyy",
+       "es-US" : "M/d/yyyy"
+      };
       var formatDigit = function(digit){
         if(digit<10){
           digit = "0"+digit;
@@ -28,16 +240,26 @@
         return digit;
       };
 
+      var getTZOffset = function(tz){
+        var zoneDeltaPortion = tz.slice(4);
+        var zoneDeltaDirection = parseInt(tz.substr(3,1)+1);
+        var timePortions = zoneDeltaPortion.split(":");
+        var zoneTimeOffset = zoneDeltaDirection*parseInt(timePortions[0])+parseInt(timePortions[1])/60;
+        return zoneTimeOffset;
+      }
+
       var dateHelper = {};
 
+      dateHelper.getLocaleDateFormat = function() {
+        return formats[navigator.language] || 'MM/dd/yyyy';
+      }
+
       dateHelper.importDate = function (date, tz) {
         if (!tz || tz === 'UTC') {
           tz = "GMT+00:00";
         }
         var rawDate = Date.parse(date);
-        var tzN = parseInt(tz.slice(3));
-        var tzDate = new Date (rawDate + (3600000*tzN));
-
+        var tzDate = new Date (rawDate + (3600000*getTZOffset(tz)));
         return new Date(
           tzDate.getUTCFullYear(),
           tzDate.getUTCMonth(),
@@ -49,22 +271,16 @@
       };
 
       dateHelper.createISO = function (date, time, tz) {
-        var UTC = new Date(
-              Date.UTC(
-                date.getUTCFullYear(),
-                date.getUTCMonth(),
-                date.getUTCDate(),
-                time.getHours(),
-                time.getMinutes(),
-                0, 0
-              )
-            ).toUTCString() + tz.slice(3),
-            UTCRaw = Date.parse(UTC);
-
-        var dateWithSecs = new Date(UTCRaw).toISOString();
-
-        return dateWithSecs.slice(0, -8) + "Z";
-
+        var inputDate = new Date(date.getFullYear(),date.getMonth(),date.getDate(),
+                time.getHours(),time.getMinutes());
+        if (!tz || tz === 'UTC') {
+            tz = "GMT+00:00";
+        }
+        var currentOffsetInHours= -1*inputDate.getTimezoneOffset()/60;
+        var effectiveOff = currentOffsetInHours - getTZOffset(tz);
+        var inputDateInCurrentTz = inputDate.getTime() + effectiveOff*60*60*1000;
+        var inputDateInUTC = new Date(inputDateInCurrentTz - currentOffsetInHours*60*60*1000);
+        return dateHelper.createISOString(inputDateInUTC,inputDateInUTC);
       };
 
       //i.e. 2015-09-10T16:35:21.235Z
@@ -74,6 +290,18 @@
         return result;
       };
 
+      dateHelper.getDateTimeString = function(date,time){
+        var inputDate = new Date(date.getFullYear(),date.getMonth(),date.getDate(),
+                time.getHours(),time.getMinutes());
+        var result = inputDate.getFullYear() + "-" + formatDigit(inputDate.getMonth()+1) + "-" + formatDigit(inputDate.getDate())
+          + " " + formatDigit(inputDate.getHours()>12?inputDate.getHours()-12:inputDate.getHours()) + ":" + formatDigit(inputDate.getMinutes());
+        if(inputDate.getHours() < 12){
+          result = result + " AM";
+        }else{
+          result = result + " PM";
+        }
+        return result;
+      }
       return dateHelper;
 
     });
diff --git a/falcon-ui/app/js/services/common/falcon-api.js b/falcon-ui/app/js/services/common/falcon-api.js
index a0b1bb7..9137904 100644
--- a/falcon-ui/app/js/services/common/falcon-api.js
+++ b/falcon-ui/app/js/services/common/falcon-api.js
@@ -24,17 +24,16 @@
     function ($http, X2jsService, $location, $rootScope, $cookieStore, $timeout) {
 
       var Falcon = {},
-        NUMBER_OF_ENTITIES = 10,
+        NUMBER_OF_ENTITIES = 20,
         NUMBER_OF_INSTANCES = 11; // 10 + 1 for next page
 
-      function buildURI(uri) {
+      function buildURI(uri, noUser) {
         if ($rootScope.ambariView()) {
           uri = uri.substring(2);
           uri = $rootScope.serviceURI + uri;
-        } else {
-          if(!$rootScope.secureMode){
-            uri = add_user(uri);
-          }
+        }
+        if(!$rootScope.secureMode && !noUser){
+          uri = add_user(uri);
         }
         console.log(uri);
         return uri;
@@ -70,47 +69,33 @@
       Falcon.responses.isVisible = false;
 
       Falcon.hide = function () {
-        Falcon.hideTimeout = $timeout(function () {
-          $(".notifs").fadeOut(300);
-        }, 5000);
+        $rootScope.$emit('hideNotifications', {'delay' : 'slow'});
       };
 
       Falcon.responses.unreaded = 0;
       Falcon.notify = function (showAll) {
-        $(".notifs").stop();
-        $timeout.cancel(Falcon.hideTimeout);
-
         if (showAll) {
           Falcon.responses.unreaded = 0;
           if (Falcon.responses.isVisible) {
             Falcon.responses.isVisible = false;
-            $(".notifs").fadeOut(300);
+            $rootScope.$emit('hideNotifications');
           } else {
             Falcon.responses.isVisible = true;
-            $(".notifs").hide();
-            $(".notifs").fadeIn(300);
+            $rootScope.$emit('showNotifications');
           }
           Falcon.responses.showAll = true;
         } else {
           Falcon.responses.unreaded++;
           Falcon.responses.isVisible = false;
-          $(".notifs").stop();
-          $(".notifs").hide();
-          $(".notifs").fadeIn(300);
-          $(".notifs").fadeOut(300);
-          $(".notifs").fadeIn(300);
-          $(".notifs").fadeOut(300);
-          $(".notifs").fadeIn(300);
+          $rootScope.$emit('flashNotifications');
           Falcon.hide();
           Falcon.responses.showAll = false;
         }
       };
 
       Falcon.hideNotifs = function () {
-        $(".notifs").stop();
-        $timeout.cancel(Falcon.hideTimeout);
+        $rootScope.$emit('hideNotifications');
         Falcon.responses.isVisible = false;
-        $(".notifs").fadeOut(300);
         Falcon.responses.queue.forEach(function(notifMsg) {
           notifMsg.readed = true;
         });
@@ -159,6 +144,15 @@
               requestId: messageObject.requestId,
               readed: false
             };
+          } else if (messageObject.errorCode !== undefined) {
+            var response = {
+              success: false,
+              type: "error",
+              status: "error",
+              message: messageObject.errorMessage,
+              requestId: messageObject.requestId,
+              readed: false
+            };
           } else {
             if (messageObject.slice(0, 6) !== "Cannot") {
               var errorMessage = X2jsService.xml_str2json(messageObject);
@@ -248,7 +242,7 @@
       //-------------METHODS-----------------------------//
 
       Falcon.getServerConfig = function () {
-        return $http.get('../api/admin/version?user.name=falcon');
+        return $http.get(buildURI('../api/admin/version?user.name=falcon', true));
       };
 
       Falcon.getServerStack = function () {
@@ -256,11 +250,15 @@
       };
 
       Falcon.clearUser = function () {
-        return $http.get('../api/admin/clearuser?user.name=falcon');
+        return $http.get(buildURI('../api/admin/clearuser?user.name=falcon', true));
       };
 
       Falcon.getCurrentUser = function () {
-        return $http.get('../api/admin/getuser');
+        return $http.get(buildURI('../api/admin/getuser', true));
+      };
+
+      Falcon.getRuntimeConfig = function (currentUser) {
+        return $http.get(buildURI('../api/admin/config/runtime?user.name=' + currentUser, true));
       };
 
       Falcon.postValidateEntity = function (xml, type) {
@@ -295,6 +293,10 @@
         return $http.get(buildURI('../api/entities/definition/' + type + '/' + name), {headers: {'Accept': 'text/plain'}});
       };
 
+      Falcon.getEntityStatus = function (type, name) {
+        return $http.get(buildURI('../api/entities/status/' + type + '/' + name));
+      };
+
       Falcon.searchEntities = function (name, tags, entityType, offset, order) {
         var searchUrl = "../api/entities/list/";
         if (entityType !== undefined && entityType !== "") {
@@ -404,6 +406,23 @@
         return $http.post(buildURI('../api/entities/prepareAndSubmitRecipe'), recipe, {headers: {'Content-Type': 'text/plain'}});
       };
 
+      //----Extension APIs-----//
+      Falcon.getExtensionDefinition = function (type) {
+        return $http.get(buildURI('../api/extension/definition/' + type), {headers: {'Accept': 'text/plain'}});
+      };
+
+      Falcon.postValidateExtension = function (extension, type) {
+        return $http.post(buildURI('../api/extension/validate/' + type), extension, {headers: {'Content-Type': 'text/plain'}});
+      };
+
+      Falcon.postSubmitExtension = function (extension, type) {
+        return $http.post(buildURI('../api/extension/submit/' + type), extension, {headers: {'Content-Type': 'text/plain'}});
+      };
+
+      Falcon.postUpdateExtension = function (extension, type) {
+        return $http.post(buildURI('../api/extension/update/' + type), extension, {headers: {'Content-Type': 'text/plain'}});
+      };
+
       return Falcon;
 
     }]);
diff --git a/falcon-ui/app/js/services/common/route-helper.js b/falcon-ui/app/js/services/common/route-helper.js
new file mode 100644
index 0000000..78592a1
--- /dev/null
+++ b/falcon-ui/app/js/services/common/route-helper.js
@@ -0,0 +1,46 @@
+/**
+ * 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.
+ */
+(function () {
+  'use strict';
+
+  angular.module('routeHelper', [])
+    .factory('RouteHelper', function () {
+      var getStateInfo = function (state) {
+        var currentState = state.substring(state.lastIndexOf(".")+ 1,state.length);
+        var currentPath = state.substring(0,state.lastIndexOf("."));
+        return {path : currentPath, state : currentState};
+      };
+      var getNextState = function (currentState, stateMatrix) {
+        var stateInfo = getStateInfo(currentState);
+        var nextState = stateInfo.path + "." + stateMatrix[stateInfo.state].next;
+        return nextState;
+      };
+      var getPreviousState = function (currentState, stateMatrix) {
+        var stateInfo = getStateInfo(currentState);
+        return stateInfo.path + "." + stateMatrix[stateInfo.state].previous;
+      };
+      var getStateByType = function(type){
+        return type.toLowerCase();
+      }
+     return {
+       getNextState : getNextState,
+       getPreviousState : getPreviousState,
+       getStateByType : getStateByType
+     }
+    });
+})();
diff --git a/falcon-ui/app/js/services/common/server-api.js b/falcon-ui/app/js/services/common/server-api.js
index 9224179..c12125a 100644
--- a/falcon-ui/app/js/services/common/server-api.js
+++ b/falcon-ui/app/js/services/common/server-api.js
@@ -21,8 +21,8 @@
   var app = angular.module('app.services.server', ['app.services']);
 
   app.factory('ServerAPI', [
-    "Falcon", "$q",
-    function (Falcon, $q) {
+    "Falcon", "$q", "$rootScope",
+    function (Falcon, $q, $rootScope) {
 
       var ServerAPI = {};
 
@@ -33,8 +33,12 @@
           Falcon.logResponse('success', data, false, true);
           ServerAPI.data = data;
           deffered.resolve();
-        }).error(function (err) {
-          Falcon.logResponse('error', err);
+        }).error(function (error, code) {
+          $rootScope.httpError = {
+            error: error,
+            code: code
+          };
+          Falcon.logResponse('error', error);
           deffered.resolve();
         });
         return deffered.promise;
@@ -46,8 +50,12 @@
         Falcon.setOptions(username).success(function (data) {
           Falcon.logResponse('success', data, false, true);
           deffered.resolve();
-        }).error(function (err) {
-          Falcon.logResponse('error', err);
+        }).error(function (error, code) {
+          $rootScope.httpError = {
+            error: error,
+            code: code
+          };
+          Falcon.logResponse('error', error);
           deffered.resolve();
         });
         return deffered.promise;
@@ -60,8 +68,12 @@
           Falcon.logResponse('success', data, false, true);
           ServerAPI.setted = data;
           deffered.resolve();
-        }).error(function (err) {
-          Falcon.logResponse('error', err);
+        }).error(function (error, code) {
+          $rootScope.httpError = {
+            error: error,
+            code: code
+          };
+          Falcon.logResponse('error', error);
           deffered.resolve();
         });
         return deffered.promise;
@@ -74,8 +86,25 @@
           Falcon.logResponse('success', data, false, true);
           ServerAPI.user = data;
           deffered.resolve();
-        }).error(function (err) {
-          Falcon.logResponse('error', err);
+        }).error(function (error, code) {
+          $rootScope.httpError = {
+            error: error,
+            code: code
+          };
+          Falcon.logResponse('error', error);
+          deffered.resolve();
+        });
+        return deffered.promise;
+      };
+
+      ServerAPI.getRuntimeConfig = function(currentUser){
+        var deffered = $q.defer();
+        //Falcon.logRequest();
+        Falcon.getRuntimeConfig(currentUser).success(function (data) {
+          $rootScope.superUser = true;
+          deffered.resolve();
+        }).error(function (error, code) {
+          $rootScope.superUser = false;
           deffered.resolve();
         });
         return deffered.promise;
diff --git a/falcon-ui/app/js/services/common/tooltip-messages.js b/falcon-ui/app/js/services/common/tooltip-messages.js
new file mode 100644
index 0000000..2ee0790
--- /dev/null
+++ b/falcon-ui/app/js/services/common/tooltip-messages.js
@@ -0,0 +1,117 @@
+/**
+ * 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.
+ */
+(function () {
+  'use strict';
+
+  var module = angular.module('app.services.tooltip', []);
+
+  module.factory('TooltipMessages', ['$window', function ($window) {
+    var messages = {
+        'cluster.name': 'Unique. No special characters. Maximum 40 Characters',
+        'cluster.colo': 'Data center or co-location of this cluster',
+        'cluster.interfaces.readonly': 'URI for read operations<br>Eg. hdfs://localhost:50070 | webhdfs://localhost:50070 | hftp://localhost:50070',
+        'cluster.interfaces.write': 'URI for write operations<br>Eg. hdfs://localhost:8020',
+        'cluster.interfaces.execute': 'URI for executing jobs<br>Eg. localhost:8050',
+        'cluster.interfaces.workflow': 'URI to access the workflow manager<br>Eg. http://localhost:11000/oozie/',
+        'cluster.interfaces.messaging': 'URI for Falcon message broker<br>Eg. tcp://localhost:61616?daemon=true',
+        'cluster.interfaces.registry': 'URI to the Hive Host Thrift port<br>Eg. thrift://localhost:9083',
+        'cluster.interfaces.spark': 'URI for the Spark Master',
+        'cluster.locations.staging': 'Default HDFS directory for staging on this cluster. The directory should have 777 permisssion and owned by falcon.',
+        'cluster.locations.temp': 'Default HDFS directory for temporary storage on this cluster',
+        'cluster.locations.working': 'Default HDFS directory for working storage on this cluster.The directory should have 755 permisssion and owned by falcon.',
+
+        'feed.name': 'Unique. No special characters. Maximum 40 Characters',
+        'feed.groups': 'Comma seperated list of Feed Groups this Feed is part of',
+        'feed.schema.location': 'Location of the file containing the layout for the feed',
+        'feed.schema.provider': 'Data interchange protocol of the Feed:  Avro, Hive, RDBMS, etc',
+        'feed.properties.frequency': 'Frequency of feed generation.',
+        'feed.properties.lateArrival': 'Specify how long Feed processing should wait for the required feed to become available.',
+        'feed.properties.availabilityIndicator': 'If one exists, provide the name of file whose existance indicates the feed is available for use',
+        'feed.properties.timezone': 'Timezone associate with the feed, if different from the cluster default timezone.',
+        'feed.location.storageType': 'Select Catalog for Hive tables, File System for HDFS',
+        'feed.storage.tableUri': 'Eg. catalog:default:sample_07#ds=${YEAR}-${MONTH}-${DAY}-${HOUR}',
+
+        'process.name': 'Unique. No special characters.',
+        'process.workflow.path': 'Must specify a valid HDFS script of the engine type (Pig, Hive, Oozie, Spark)',
+        'process.properties.timezone': 'Timezone associate with the feed, if different from the cluster default timezone.',
+        'process.properties.retryPolicy': 'Workflow failure handling policy'
+          + '<div class="pt5px"><b>Periodic:</b><br>Try X times after  N Min/Hours/</div>'
+          + '<div class="pt5px"><b>Exponential Backup:</b><br>Try X times after N to the x1, N to x2, N to x3, etc.</div>'
+          + '<div class="pt5px"><b>None:</b><br>Do not retry</div>',
+        'process.properties.order': 'Order for instance pickup'
+          + '<div class="pt5px"><b>FIFO:</b><br>Oldest to Latest</div>'
+          + '<div class="pt5px"><b>LIFO:</b><br>Latest to Oldest</div>'
+          + '<div class="pt5px"><b>LASTONLY:</b><br>Latest only</div>',
+        'process.cluster': 'Cluster(s) this process should execute on',
+
+        'process.workflow.spark.name': 'Name of the spark application',
+        'process.workflow.spark.application': 'Path of jar or python file',
+        'process.workflow.spark.class': "Spark application's main class",
+        'process.workflow.spark.master': 'Run in Yarn or directly on spark',
+        'process.workflow.spark.mode': 'Run locally or or remote on the Application Master',
+
+        'datasource.driver.jar': 'HDFS location containing driver jar and should have access to the falcon user',
+        'datasource.credential.passwordFile': 'HDFS location containing password file without newline at the end and should be accessible by the user who creates the datasource entity',
+
+        'dataset.name': 'Unique job name',
+        'dataset.jobClusterName': 'Cluster where job should run',
+        'dataset.jobValidityStart': 'Job validity start time',
+        'dataset.jobValidityEnd': 'Job validity end time',
+        'dataset.jobFrequency': 'Job frequency. Valid frequency types are minutes, hours, days, months',
+        'dataset.jobTimezone': 'Time zone for the job',
+        'dataset.jobTags': 'list of comma separated tags. Key Value Pairs, separated by comma. Eg. consumer=consumer@xyz.com, _department_type=forecasting',
+        'dataset.jobRetryPolicy': 'Job retry policy',
+        'dataset.jobRetryDelay': 'Job retry delay',
+        'dataset.jobRetryAttempts': 'Job retry attempts',
+        'dataset.jobRetryOnTimeout': 'Job retry on timeout',
+        'dataset.jobAclOwner': 'ACL owner',
+        'dataset.jobAclGroup': 'ACL group',
+        'dataset.jobAclPermission': 'ACL permission',
+        'dataset.sourceDir': 'Multiple hdfs comma separated source directories',
+        'dataset.sourceCluster': 'Source cluster',
+        'dataset.targetDir': 'Target hdfs directory',
+        'dataset.targetCluster': 'Source cluster',
+        'dataset.distcpMaxMaps': 'Maximum number of mappers for DistCP',
+        'dataset.distcpMapBandwidth': 'Bandwidth in MB for each mapper in DistCP',
+        'dataset.maxEvents': 'To ceil the max events processed each time the job runs. Set it to max value depending on your bandwidth limit. Setting it to -1 will process all the events but can hog up the bandwidth. Use it judiciously!',
+        'dataset.replicationMaxMaps': 'Maximum number of mappers to use for hive replication',
+        'dataset.jobNotificationReceivers': 'Email Notification for Falcon instance completion.',
+        'dataset.tdeEncryptionEnabled': 'Set this flag to true if TDE encryption is enabled on source and target',
+        'dataset.sourceStagingPath': 'Staging path on source',
+        'dataset.targetStagingPath': 'Staging path on target',
+        'dataset.sourceHiveServer2Uri': 'Hive2 server end point. Eg. hive2://localhost:10000',
+        'dataset.targetHiveServer2Uri': 'Hive2 server end point. Eg.hive2://localhost:10000',
+        'dataset.sourceDatabases': 'For DB level replication specify multiple comma separated databases to replicate',
+        'dataset.sourceTables': 'For table level replication specify multiple comma separated tables to replicate',
+        'dataset.sourceHive2KerberosPrincipal': 'Kerberos principal required to access hive servers. Eg. hive/_HOST@EXAMPLE.COM',
+        'dataset.targetHive2KerberosPrincipal': 'Kerberos principal required to access hive servers. Eg. hive/_HOST@EXAMPLE.COM',
+
+        'dataset.snapshot.sourceSnapshotDir' : 'Snapshot-able source directory which should be replicated',
+        'dataset.snapshot.sourceSnapshotRetentionAgeLimit' : 'Snapshots on source older than this age limit will be eligible for deletion.',
+        'dataset.snapshot.sourceSnapshotRetentionNumber' : 'These many latest snapshots on source will be retained, the rest of them eligible for deletion.',
+        'dataset.snapshot.targetSnapshotDir' : 'Snapshot-able target directory to which source should be replicated',
+        'dataset.snapshot.targetSnapshotRetentionAgeLimit' : 'Snapshots on target older than this age limit will be eligible for deletion.',
+        'dataset.snapshot.targetSnapshotRetentionNumber' : 'These many latest snapshots on target will be retained, the rest of them eligible for deletion.'
+    };
+
+    return {
+      messages: messages
+    };
+
+  }]);
+}());
diff --git a/falcon-ui/app/js/services/common/validation-service.js b/falcon-ui/app/js/services/common/validation-service.js
index ff2f4ef..be4f9a7 100644
--- a/falcon-ui/app/js/services/common/validation-service.js
+++ b/falcon-ui/app/js/services/common/validation-service.js
@@ -24,7 +24,7 @@
     var checkMessages = {
         name: {
           patternInvalid: "The name has an invalid format.",
-          unavailable: "The name you choosed is not available",
+          unavailable: "The name you entered is not available",
           empty: "You need to specify a name"
         },
         colo: {
@@ -39,6 +39,10 @@
           empty: "You need to provide a path",
           patternInvalid: "The Path has an invalid format. "
         },
+        tableUri: {
+          empty: "You need to provide table uri",
+          patternInvalid: "The Table uri has an invalid format. "
+        },
         key: {
           empty: "You need to provide a key",
           patternInvalid: "The Key has an invalid format. "
@@ -71,6 +75,8 @@
         engine: { empty: "You need to select an engine" },
         cluster: { empty: "You need to select a cluster" },
         feed: { empty: "You need to select a feed" },
+        datasource: { empty: "You need to select a datasource" },
+        table: { empty: "You need to provide a table" },
         date: {
           empty: "You need to select a date",
           startAfterEnd: "Start date must be before end date.",
@@ -123,10 +129,91 @@
         azure: {
           empty: "You need to provide an Azure URL",
           patternInvalid: "The URL has an invalid format. It needs to end with '.blob.core.windows.net'"
+        },
+        versionNumbers: {
+          patternInvalid: "The version is invalid"
+        },
+        availabilityFlag: {
+          patternInvalid: "The Availability flag has an invalid format.",
+          empty: "You need to specify the availability flag"
+        },
+        kerberosPrincipal : {
+          empty :"You need to provide the Kerberos Principal",
+          patternInvalid : "The Kerberos Principal has an invalid format."
+        },
+        metastoreUri : {
+          empty : "You need to provide the Metastore URI",
+          patternInvalid : "The Metastore URI has an invalid format"
+        },
+        partitions : {
+          patternInvalid : "The Partitions have an invalid format"
+        },
+        partitionExpression : {
+          patternInvalid : "The Partition expression has an invalid format"
+        },
+        interfaceEndpoints : {
+            empty : "You need to provide a endpoint URL",
+            patternInvalid : "The Enpoint URL has an invalid format"
+        },
+        dbManager : {
+            empty : "You need to select Database Manager"
+        },
+        driver : {
+            empty : "You need to select Driver",
+            clazz : {
+              empty : 'You need to provide a Driver class'
+            },
+            jar : {
+              empty : 'You need to provide a Driver jar'
+            }
+        },
+        host : {
+            empty : "You need to provide host"
+        },
+        port : {
+            empty : "You need to provide port"
+        },
+        credential : {
+            empty : "You need to provide a credential type"
+        },
+        userName : {
+            empty : "You need to provide user name"
+        },
+        dbPassword : {
+            empty : "You need to provide password"
+        },
+        passwordFile : {
+            empty : "You need to provide password file",
+            patternInvalid : "The password file has an invalid format"
+        },
+        passwordAlias : {
+            empty : "You need to provide password alias",
+            patternInvalid : "The password alias has an invalid format"
+        },
+        providerPath : {
+          empty : "You need to provide provider path",
+        },
+        connectionString : {
+          empty : "You need to provide a connection string"
+        },
+        overrideMapReduceHome : {
+          empty : "You need to provide map reduce home"
+        },
+        parameterFile : {
+          empty : "You need to provide parameter file"
+        },
+        directoryPath : {
+          patternInvalid : "The directory path has an invalid format"
+      },
+        frequency : {
+          minimum : "You need to provide a minimum frequency of 5 minutes."
         }
       },
       checkPatterns = {
-        name: new RegExp("^[a-zA-Z0-9-_]{1,60}$"),
+        name: new RegExp("^[a-zA-Z][\\-a-zA-Z0-9]{1,39}$"),
+        inputName: new RegExp("^[a-zA-Z][\\-a-zA-Z0-9]{1,59}$"),
+        workflowName: new RegExp("^[a-zA-Z][\\-a-zA-Z0-9]{1,155}$"),
+        propertyName: new RegExp("^[a-zA-Z_]\\w*(\\.[a-zA-Z_]\\w*)*$"),
         id: new RegExp("^(([a-zA-Z]([\\-a-zA-Z0-9_])*){1,39})$"),
         password: new RegExp("^(([a-zA-Z]([\\-a-zA-Z0-9])*){1,39})$"),
         freeText: new RegExp("^([\\sa-zA-Z0-9]){1,40}$"),
@@ -135,15 +222,22 @@
         commaSeparated: new RegExp("^[a-zA-Z0-9,]{1,80}$"),
         unixId: new RegExp("^([a-zA-Z_][a-zA-Z0-9-_\\.\\-]{0,30})$"),
         unixPermissions: new RegExp("^((([x0-7]){1,5})|(\\*))$"),
-        osPath: new RegExp("^[^\\0 ]+$"),
+        osPath: new RegExp("^[^\\0]+$"),
+        path: new RegExp("^[\\/]{0,1}([^\\/]+[\\/])*([^\\/]*)$"),
+        interfaceEndpoints : new RegExp("^((http(s)?|hftp|hdfs|tcp|thrift|webhdfs):\/{2})?(([a-zA-Z0-9-._]+)|([0-9](\\.[0-9]{3})))(:[0-9]+)?((\\/[^\\?#\\s]+)?(\\?[^#\\s]+)?(\\#.+)?)?$"),
         twoDigits: new RegExp("^([0-9]){1,4}$"), //>> requirement change to 4 digits, just to dont change all inputs that reference this
         tableUri: new RegExp("^[^\\0]+$"),
-        versionNumbers: new RegExp("^[0-9]{1,2}\\.[0-9]{1,2}\\.[0-9]{1,2}$"),
+        versionNumbers: new RegExp("^[0-9.]+$"),
         url: new RegExp("^[^\\0 ]+\\.[a-zA-Z0-9]{1,3}$"),
         number: new RegExp("^([-0-9]){1,40}$"),
         email: new RegExp("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}$"),
         s3: new RegExp("^s3[a-zA-Z0-9._%+-:\\/]+\\.amazonaws.com$"),
-        azure: new RegExp("^[a-zA-Z0-9._%+-:@\\/]+\\.blob.core.windows.net$")
+        azure: new RegExp("^[a-zA-Z0-9._%+-:@\\/]+\\.blob.core.windows.net$"),
+        kerberosPrincipal : new RegExp("^hive\\/+[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}$"),
+        metastoreUri : new RegExp("^thrift:\/{2}[a-zA-Z0-9._-]+:[0-9]"),
+        hiveTables: new RegExp("^([\\sa-zA-Z0-9,_-]){1,100}$"),
+        hiveDatabase: new RegExp("^([\\sa-zA-Z0-9_-]){1,100}$"),
+        hiveDatabases: new RegExp("^([\\sa-zA-Z0-9,_-]){1,100}$")
       };
 
     function acceptOnlyNumber(evt) {
@@ -179,19 +273,23 @@
       }
     }
 
+    function checkMininum(value){
+      if(parseInt(value) < 5){
+        return false;
+      }else{
+        return true;
+      }
+    };
+
     return {
       messages: checkMessages,
       patterns: checkPatterns,
       nameAvailable: true,
       displayValidations: {show: false, nameShow: false},
       acceptOnlyNumber: acceptOnlyNumber,
-      acceptNoSpaces: acceptNoSpaces
+      acceptNoSpaces: acceptNoSpaces,
+      checkMininum : checkMininum
     };
 
   }]);
 }());
-
-
-
-
-
diff --git a/falcon-ui/app/js/services/common/xml-to-json-service.js b/falcon-ui/app/js/services/common/xml-to-json-service.js
index d054e89..a886aad 100644
--- a/falcon-ui/app/js/services/common/xml-to-json-service.js
+++ b/falcon-ui/app/js/services/common/xml-to-json-service.js
@@ -72,6 +72,15 @@
         });
 
         return formatted;
+      },
+
+      isValidXml: function(xml){
+        try {
+          this.xml_str2json(xml);
+          return true;
+        } catch (err) {
+          return false;
+        }
       }
     };
 
diff --git a/falcon-ui/app/js/services/entity/entity-details.js b/falcon-ui/app/js/services/entity/entity-details.js
new file mode 100644
index 0000000..831610c
--- /dev/null
+++ b/falcon-ui/app/js/services/entity/entity-details.js
@@ -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.
+ */
+(function () {
+  'use strict';
+  var module = angular.module('app.services.entity.details', []);
+
+  module.factory('EntityDetails', ['Falcon','$q','X2jsService', 'EntityModel', function(Falcon, $q, X2jsService, EntityModel){
+
+    var entityDetails = {};
+
+    entityDetails.getEntityDetails = function(name, type){
+      Falcon.logRequest();
+      var entityDetailsPromise = Falcon.getEntityDefinition(type, name);
+      var entityStatusPromise = Falcon.getEntityStatus(type, name);
+      return $q.all([entityDetailsPromise,entityStatusPromise]).then(function(responses){
+            Falcon.logResponse('success', responses[0].data, false, true);
+            Falcon.logResponse('success', responses[1].data, false, true);
+            var entityModel = X2jsService.xml_str2json(responses[0].data);
+            EntityModel.type = type;
+            EntityModel.name = name;
+            var status = responses[1].data.message;
+            EntityModel.status = status.substr(status.indexOf("/") + 1, status.length - 1).trim();
+            EntityModel.model = entityModel;
+            return EntityModel;
+      },function(err){
+            Falcon.logResponse('error', err, type);
+      });
+    };
+
+    entityDetails.getEntityDefinition  = function(type, name){
+      var deferred = $q.defer();
+      type = type.toLowerCase(); //new sandbox returns uppercase type
+      Falcon.logRequest();
+      Falcon.getEntityDefinition(type, name)
+        .success(function (data) {
+            Falcon.logResponse('success', data, false, true);
+            EntityModel.type = type;
+            EntityModel.name = name;
+            deferred.resolve(X2jsService.xml_str2json(data));
+        })
+        .error(function (err) {
+            Falcon.logResponse('error', err, false, true);
+            deferred.reject(err);
+        });
+      return deferred.promise;
+    };
+    return entityDetails;
+  }]);
+})();
diff --git a/falcon-ui/app/js/services/entity/entity-factory.js b/falcon-ui/app/js/services/entity/entity-factory.js
index 82848c0..c8f1707 100644
--- a/falcon-ui/app/js/services/entity/entity-factory.js
+++ b/falcon-ui/app/js/services/entity/entity-factory.js
@@ -51,14 +51,22 @@
         return new Location(type, path);
       },
 
-      newCluster: function (type, selected) {
-        return new Cluster(type, selected);
+      newCluster: function (type, selected, name, partition) {
+        return new Cluster(type, selected, name, partition);
+      },
+
+      newPartition: function (name) {
+        return new Partition(name);
       },
 
       newEntry: function (key, value) {
         return new Entry(key, value);
       },
 
+      newProperty: function (name, value) {
+        return new Property(name, value);
+      },
+
       newProcess: function () {
         return new Process();
       },
@@ -71,12 +79,53 @@
         return new Output();
       },
 
+      newClusterEntity: function() {
+        return new ClusterEntity();
+      },
+
+      newClusterLocation: function(name, path) {
+        return new ClusterLocation(name, path);
+      },
+
+      newClusterInterface: function(type, endpoint, version) {
+        return new ClusterInterface(type, endpoint, version);
+      },
+
+      newSnapshot: function() {
+        return new Snapshot();
+      },
+
+      newSparkAttributes: function() {
+        return new SparkAttributes();
+      },
+
+      newCredential: function() {
+        return new Credential();
+      },
+
+      newDatasourceInterface: function() {
+        return new DatasourceInterface();
+      },
+
+      newDatasource: function() {
+        return new Datasource();
+      },
+
+      newClusterFileSystem: function() {
+        return new clusterFileSystem();
+      },
+
       newEntity: function (type) {
         if (type === 'feed') {
           return this.newFeed();
-        }
-        if (type === 'process') {
+        } else if (type === 'process') {
           return this.newProcess();
+        } else if (type === 'cluster') {
+          return this.newClusterEntity();
+        } else if (type === 'snapshot') {
+          return this.newSnapshot();
+        } else if (type === 'datasource') {
+          return this.newDatasource();
         }
       }
 
@@ -91,14 +140,19 @@
     this.tags = [new Entry(null, null)];
     this.ACL = new ACL();
     this.schema = new Schema();
-    this.frequency = new Frequency(null, 'hours');
+    this.frequency = new Frequency(1, 'hours');
     this.lateArrival = new LateArrival();
-    this.availabilityFlag = null;
+    this.availabilityFlag = '_success';
     this.properties = feedProperties();
     this.customProperties = [new Entry(null, null)];
     this.storage = new Storage();
-    this.clusters = [new Cluster('source', true)];
-    this.timezone = "";
+    this.clusters = [];
+    this.timezone = 'UTC';
+    this.partitions = [];
+    this.retentionFrequency = new Frequency(20, 'minutes');
+    this.validity = new Validity();
+    this.enableFeedReplication = false;
+    this.dataTransferType = '';
   }
 
 
@@ -109,15 +163,14 @@
   }
 
   function Schema() {
-    this.location = undefined;
-    this.provider = undefined;
+    this.location = '/none';
+    this.provider = '/none';
   }
 
   function feedProperties() {
     return [
-      new Entry('queueName', ''),
-      new Entry('jobPriority', ''),
-      new Entry('timeout', ''),
+      new Entry('queueName', 'default'),
+      new Entry('jobPriority', 'NORMAL'),
       new Entry('parallel', ''),
       new Entry('maxMaps', ''),
       new Entry('mapBandwidthKB', '')
@@ -138,8 +191,8 @@
   }
 
   function LateArrival() {
-    this.active = false;
-    this.cutOff = new Frequency(null, 'hours');
+    this.active = true;
+    this.cutOff = new Frequency(4, 'hours');
   }
 
   function Frequency(quantity, unit) {
@@ -156,13 +209,15 @@
     this.fileSystem = new FileSystem();
     this.catalog = new Catalog();
   }
-  function clusterStorage() {
-    this.fileSystem = new clusterFileSystem();
-    this.catalog = new Catalog();
+  function clusterStorage(type) {
+    if(type === 'hdfs'){
+      this.fileSystem = new clusterFileSystem();
+    }else if(type === 'hive'){
+      this.catalog = new Catalog();
+    }
   }
 
   function Catalog() {
-    this.active = false;
     this.catalogTable = new CatalogTable();
   }
 
@@ -172,12 +227,10 @@
   }
 
   function FileSystem() {
-    this.active = true;
-    this.locations = [new Location('data','/'), new Location('stats','/'), new Location('meta','/')];
+    this.locations = null;
   }
   function clusterFileSystem() {
-    this.active = false;
-    this.locations = [ new Location('data',''), new Location('stats',''), new Location('meta','') ];
+    this.locations = [ new Location('data',''), new Location('stats','/')];
   }
 
   function Location(type, path) {
@@ -186,20 +239,36 @@
     this.focused = false;
   }
 
-  function Cluster(type, selected) {
+  function Cluster(type, selected, name, partition) {
 //    this.name = null;
-	  this.name = "";
+    this.name = (name != undefined) ? name : "";
     this.type = type;
     this.selected = selected;
-    this.retention = new Frequency(null, 'hours');
+    if (type == 'source') {
+      this.retention = new Frequency(90, 'days');
+    } else if (type == 'target') {
+      this.retention = new Frequency(12, 'months');
+    } else {
+      this.retention = new Frequency(null, 'hours');
+    }
+
     this.retention.action = 'delete';
     this.validity = new Validity();
-    this.storage = new clusterStorage();
+    this.storage = new clusterStorage(selected);
+    if (partition != undefined) {
+      this.partition = partition;
+    }
+  }
+
+  function Partition(name) {
+    this.name = name;
   }
 
   function Validity() {
     this.start = new DateAndTime();
     this.end = new DateAndTime();
+    this.end.date = new Date("Dec 31, 2099 11:59:59");
+    this.end.time = new Date("Dec 31, 2099 11:59:59");
     this.timezone = "";
   }
 
@@ -222,15 +291,17 @@
     this.name = null;
     this.tags = [new Entry(null, null)];
     this.workflow = new Workflow();
-    this.timezone = "";
-    this.frequency = new Frequency(null, 'hours');
+    this.timezone = 'UTC';
+    this.frequency = new Frequency(30, 'minutes');
     this.parallel = 1;
-    this.order = "";
-    this.retry = new Retry();
+    this.order = 'FIFO';
+    this.retry = new ProcessRetry();
     this.clusters = [new Cluster('source', true)];
     this.inputs = [];
     this.outputs = [];
     this.ACL = new ACL();
+    this.properties = [new Property(null, null)];
+    this.validity = new Validity();
 
     /*
     this.name = 'P';
@@ -245,17 +316,34 @@
     */
   }
 
+  function SparkAttributes() {
+    this.name = '';
+    this.master = 'yarn';
+    this.mode = 'cluster';
+    this.class = '';
+    this.sparkOptions = '';
+    this.jar = '';
+    this.arg = '';
+  }
+
   function Workflow() {
-    this.name = "";
-    this.engine = "";
+    this.name = '';
+    this.engine = '';
     this.version = '';
     this.path = '/';
+    this.spark = new SparkAttributes();
   }
 
   function Retry() {
-    this.policy = '';
-    this.attempts = null;
-    this.delay = new Frequency(null, '');
+    this.policy = 'exp-backoff';
+    this.attempts = 3;
+    this.delay = new Frequency(30, 'minutes');
+  }
+
+  function ProcessRetry() {
+    this.policy = 'periodic';
+    this.attempts = 3;
+    this.delay = new Frequency(30, 'minutes');
   }
 
   function Input() {
@@ -268,7 +356,115 @@
   function Output() {
     this.name = null;
     this.feed = "";
-    this.outputInstance = null;
+    this.outputInstance = 'now(0,0)';
   }
 
-})();
\ No newline at end of file
+  function ClusterEntity() {
+    this.name = "";
+    this.colo = null;
+    this.description = null;
+    this.tags = [new Entry(null, null)];
+    this.ACL = new ACL();
+
+    this.interfaces = [];
+    this.properties = [];
+    this.locations = []
+  }
+
+  function ClusterLocation(name, path) {
+    this.name = name;
+    this.path= path;
+  }
+
+  function ClusterInterface(type, endpoint, version) {
+    this.type = type;
+    this.endpoint = endpoint;
+    this.version = version;
+  }
+
+  function SnapshotCluster(type) {
+    this.cluster = '';
+    this.directoryPath = '';
+    if (type === 'source') {
+      this.deleteFrequency = new Frequency(14, 'days');
+      this.retentionNumber = 90;
+    } else if (type === 'target') {
+      this.deleteFrequency = new Frequency(14, 'days');
+      this.retentionNumber = 90;
+    }
+  }
+
+  function Snapshot() {
+    this.name = '';
+    this.type = 'snapshot';
+    this.ACL = new ACL();
+    this.tags = [new Entry(null,  null)];
+    this.frequency = new Frequency(1, 'days');
+    this.alerts = [];
+    this.validity = new Validity();
+    this.validity.timezone = 'UTC';
+    this.runOn = 'target';
+    this.retry = new Retry();
+    this.source = new SnapshotCluster('source');
+    this.target = new SnapshotCluster('target');
+    this.allocation = {};
+    this.tdeEncryptionEnabled = false;
+  }
+
+  function Credential() {
+    this.type = "";
+    this.userName = ""
+    this.passwordText = "";
+    this.passwordFile = "";
+    this.passwordAlias = "";
+    this.providerPath = "";
+  }
+
+  function DatasourceInterface() {
+    this.type = "readonly";
+    this.endpoint = "";
+    this.credential = new Credential();
+  }
+
+  function DatasourceInterfaces() {
+    this.credential = new Credential();
+    this.interfaces = [new DatasourceInterface()];
+  }
+
+  function Driver() {
+    this.clazz = null;
+    this.jar = [{value:""}];
+  }
+
+  function Property(name, value) {
+    this.name = name;
+    this.value = value;
+  }
+
+  function datasourceProperties() {
+    return [
+      new Property('parameterFile', ''),
+      new Property('verboseMode', ''),
+      new Property('directMode', '')
+    ];
+  }
+
+  function Datasource() {
+    this.name = "";
+    this.colo = null;
+    this.description = null;
+    this.tags = [new Entry(null, null)];
+    this.type = "";
+    this.customProperties = [];
+    this.properties = new datasourceProperties();
+    this.parameters = [];
+    this.ACL = new ACL();
+    this.interfaces = new DatasourceInterfaces();
+    this.host = "";
+    this.port = "";
+    this.databaseName = "";
+    this.driver = new Driver();
+  }
+
+
+})();
diff --git a/falcon-ui/app/js/services/entity/entity-model.js b/falcon-ui/app/js/services/entity/entity-model.js
index 48fa617..a8a66d7 100644
--- a/falcon-ui/app/js/services/entity/entity-model.js
+++ b/falcon-ui/app/js/services/entity/entity-model.js
@@ -21,15 +21,20 @@
 
   module.factory('EntityModel', ["X2jsService", "$cookieStore", function(X2jsService, $cookieStore) {
 
-    var EntityModel = {}, userName;
+    var EntityModel = {};
 
     EntityModel.json = null;
     EntityModel.detailsPageModel = null;
 
+    EntityModel.getUserNameFromCookie = function() {
+      return $cookieStore.get('userToken')?$cookieStore.get('userToken').user:"";
+    };
+
     EntityModel.identifyType = function(json) {
       if(json && json.feed) { EntityModel.type = "feed"; }
       else if(json && json.cluster) { EntityModel.type = "cluster"; }
       else if(json && json.process) { EntityModel.type = "process"; }
+      else if(json && json.datasource) { EntityModel.type = "datasource"; }
       else { EntityModel.type = 'Type not recognized'; }
     };
 
@@ -38,11 +43,6 @@
       return EntityModel.identifyType(EntityModel.json);
     };
 
-    if($cookieStore.get('userToken')){
-      userName = $cookieStore.get('userToken').user;
-    } else {
-      userName = "";
-    }
 
     EntityModel.defaultValues = {
       cluster: {
@@ -52,45 +52,50 @@
             interface:[
               {
                 _type:"readonly",
-                _endpoint:"hftp://sandbox.hortonworks.com:50070",
+                _endpoint:"hftp://<hostname>:50070",
                 _version:"2.2.0"
               },
               {
                 _type:"write",
-                _endpoint:"hdfs://sandbox.hortonworks.com:8020",
+                _endpoint:"hdfs://<hostname>:8020",
                 _version:"2.2.0"
 
               },
               {
                 _type:"execute",
-                _endpoint:"sandbox.hortonworks.com:8050",
+                _endpoint:"<hostname>:8050",
                 _version:"2.2.0"
 
               },
               {
                 _type:"workflow",
-                _endpoint:"http://sandbox.hortonworks.com:11000/oozie/",
+                _endpoint:"http://<hostname>:11000/oozie/",
                 _version:"4.0.0"
 
               },
               {
                 _type:"messaging",
-                _endpoint:"tcp://sandbox.hortonworks.com:61616?daemon=true",
+                _endpoint:"tcp://<hostname>:61616?daemon=true",
                 _version:"5.1.6"
 
+              },
+              {
+                _type:"registry",
+                _endpoint:"thrift://<hostname>:9083",
+                _version:"0.11.0"
+
               }
             ]
           },
           locations:{
             location:[
               {_name: "staging", _path: ""},
-              {_name: "temp", _path: ""},
-              {_name: "working", _path: ""},
-              {"_name":"","_path":""} //>> to compare
+              {_name: "temp", _path: "/tmp"},
+              {_name: "working", _path: ""}
             ]
           },
           ACL: {
-            _owner: userName,
+            _owner: EntityModel.getUserNameFromCookie(),
             _group: "users",
             _permission: "0x755"
           },
@@ -107,13 +112,10 @@
       },
       MirrorUIModel: {
         name: undefined,
-        tags: {
-          newTag: { value:"", key:"" },
-          tagsArray: [{ key:"_falcon_mirroring_type", value:"HDFS" }],
-          tagsString: ""
-        },
-        formType: "HDFS",
+        tags: [{ value:"", key:"" }],
+        type: "HDFS",
         runOn: "target",
+        tdeEncryptionEnabled: true,
         source: {
           location: "HDFS",
           cluster: "",
@@ -121,42 +123,43 @@
           path: "",
           hiveDatabaseType: "databases",
           hiveDatabases: "",
-          hiveDatabase: "",
-          hiveTables: ""
+          hiveTables: "",
+          hiveMetastoreUri : "thrift://localhost:9083",
+          hive2KerberosPrincipal : "hive/_HOST@EXAMPLE.COM",
+          hiveMetastoreKerberosPrincipal : "hive/_HOST@EXAMPLE.COM"
         },
         target: {
           location: "HDFS",
           cluster: "",
           url: "",
-          path: ""
+          path: "",
+          hive2KerberosPrincipal : "hive/_HOST@EXAMPLE.COM",
+          hiveMetastoreUri : "thrift://localhost:9083",
+          hiveMetastoreKerberosPrincipal : "hive/_HOST@EXAMPLE.COM"
         },
-        alerts: {
-          alert: { email: "" },
-          alertsArray: []
-        },
+        alerts: [],
         validity: {
-          start: (function () { var d = new Date(); d.setHours(0); d.setMinutes(0); d.setSeconds(0); return d; }()),
-          startTime: new Date(),
-          end: "",
-          endTime: new Date(),
-          tz: "GMT+00:00",
+          start: {date: (function () { var d = new Date(); d.setHours(0); d.setMinutes(0); d.setSeconds(0); return d; }()),
+                  time: new Date()},
+          end: {date: new Date("Dec 31, 2099 11:59:59"), time: new Date("Dec 31, 2099 11:59:59")},
+          timezone: "UTC",
           startISO: "",
           endISO: ""
         },
         frequency: {
-          number: 5,
-          unit: 'minutes'
+          quantity: 1,
+          unit: 'days'
         },
         allocation: {
           hdfs:{
-            maxMaps: "5",
-            maxBandwidth: "100"
+            distcpMaxMaps: "5",
+            distcpMapBandwidth: "100"
           },
           hive:{
-            maxMapsDistcp: "1",
-            maxMapsMirror: "5",
-            maxMapsEvents: "-1",
-            maxBandwidth: "100"
+            distcpMaxMaps: "1",
+            replicationMaxMaps: "5",
+            maxEvents: "-1",
+            distcpMapBandwidth: "100"
           }
         },
         hiveOptions: {
@@ -173,14 +176,14 @@
           policy:"periodic",
           delay: {
             unit: "minutes",
-            number: 30
+            quantity: 30
           },
           attempts: 3
         },
-        acl: {
-          owner: userName,
+        ACL: {
+          owner: EntityModel.getUserNameFromCookie(),
           group: "users",
-          permissions: "0x755"
+          permission: "0x755"
         }
       }
     };
@@ -191,7 +194,7 @@
         tags: "",
         groups: "",
         frequency: "",
-        /*timezone: "GMT+00:00",*/
+        /*timezone: "UTC",*/
         "late-arrival": {
           "_cut-off": ""
         },
@@ -222,7 +225,7 @@
           }]
         },
         ACL: {
-          _owner: userName,
+          _owner: EntityModel.getUserNameFromCookie(),
           _group: "users",
           _permission: "0x755"
         },
@@ -241,7 +244,7 @@
       UIModel: {},
       HDFS: {
         process: {
-          tags: "",
+          tags: [{ value:"", key:"" }],
           clusters: {
             cluster: [{
               validity: {
@@ -253,7 +256,7 @@
           },
           parallel: "1",
           order: "LAST_ONLY",
-          frequency: "minutes(5)",
+          frequency: "days(1)",
           timezone: "UTC",
           properties: {
             property: [
@@ -296,13 +299,16 @@
               {
                 _name: "sourceCluster",
                 _value: ""
+              }, {
+                _name: "tdeEncryptionEnabled",
+                _value: "true"
               }
             ]
           },
           workflow: {
             _name: "hdfs-dr-workflow",
             _engine: "oozie",
-            _path: "/apps/data-mirroring/workflows/hdfs-replication-workflow.xml",
+            _path: "/apps/falcon/extensions/hdfs-mirroring/resources/runtime/hdfs-mirroring-workflow.xml",
             _lib: ""
           },
           retry: {
@@ -321,7 +327,7 @@
       },
       HIVE: {
         process: {
-          tags: "",
+          tags: [{ value:"", key:"" }],
           clusters: {
             cluster: [{
               validity: {
@@ -333,7 +339,7 @@
           },
           parallel: "1",
           order: "LAST_ONLY",
-          frequency: "minutes(3)",
+          frequency: "days(1)",
           timezone: "UTC",
           properties: {
             property: [
@@ -391,11 +397,27 @@
               },
               {
                 _name: "targetMetastoreUri",
-                _value: "thrift://240.0.0.11:9083"
+                _value: "thrift://localhost:9083"
               },
               {
                 _name: "sourceMetastoreUri",
-                _value: "thrift://240.0.0.10:9083"
+                _value: "thrift://localhost:9083"
+              },
+              {
+                _name: "targetHiveMetastoreKerberosPrincipal",
+                _value: "hive/_HOST@EXAMPLE.COM"
+              },
+              {
+                _name: "sourceHiveMetastoreKerberosPrincipal",
+                _value: "hive/_HOST@EXAMPLE.COM"
+              },
+              {
+                _name: "targetHive2KerberosPrincipal",
+                _value: "hive/_HOST@EXAMPLE.COM"
+              },
+              {
+                _name: "sourceHive2KerberosPrincipal",
+                _value: "hive/_HOST@EXAMPLE.COM"
               },
               {
                 _name: "sourceTable",
@@ -428,13 +450,16 @@
               {
                 _name: "drNotificationReceivers",
                 _value: "NA"
+              }, {
+                _name: "tdeEncryptionEnabled",
+                _value: "true"
               }
             ]
           },
           workflow: {
             _name: "falcon-dr-hive-workflow",
             _engine: "oozie",
-            _path: "/apps/data-mirroring/workflows/hive-disaster-recovery-workflow.xml",
+            _path: "/apps/falcon/extensions/hive-mirroring/resources/runtime/hive-mirroring-workflow.xml",
             _lib: ""
           },
           retry: {
diff --git a/falcon-ui/app/js/services/entity/entity-scheduler.js b/falcon-ui/app/js/services/entity/entity-scheduler.js
new file mode 100644
index 0000000..cbc544d
--- /dev/null
+++ b/falcon-ui/app/js/services/entity/entity-scheduler.js
@@ -0,0 +1,122 @@
+/**
+ * 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.
+ */
+(function () {
+  'use strict';
+
+  var entityScheduler = angular.module("app.services.entity.scheduler",['app.services.falcon']);
+  entityScheduler.factory('EntityScheduler',["$window", "$q", "Falcon", "EncodeService", "X2jsService", function($window, $q, Falcon, encodeService, X2jsService){
+    var entityScheduler = {};
+    var entityStatus = {
+      RUNNING : "RUNNING",
+      SUBMITTED : "SUBMITTED",
+      SUSPENDED : "SUSPENDED",
+      DELETED : "DELETED",
+      FAILED : "FAILED"
+    };
+
+    entityScheduler.resumeEntity = function (type, name) {
+      var deferred = $q.defer();
+      type = type.toLowerCase();
+      Falcon.logRequest();
+      Falcon.postResumeEntity(type, name).success(function (data) {
+        Falcon.logResponse('success', data, type);
+        deferred.resolve(entityStatus.RUNNING);
+      })
+      .error(function (err) {
+        Falcon.logResponse('error', err, type);
+        deferred.resolve(entityStatus.SUSPENDED);
+      });
+      return deferred.promise;
+    };
+
+    entityScheduler.scheduleEntity = function (type, name) {
+      var deferred = $q.defer();
+      type = type.toLowerCase();
+      Falcon.logRequest();
+      Falcon.postScheduleEntity(type, name).success(function (data) {
+        Falcon.logResponse('success', data, type);
+        deferred.resolve(entityStatus.RUNNING);
+      })
+      .error(function (err) {
+        Falcon.logResponse('error', err, type);
+        deferred.resolve(entityStatus.SUBMITTED);
+      });
+      return deferred.promise;
+    };
+
+    entityScheduler.suspendEntity = function (type, name) {
+      var deferred = $q.defer();
+      Falcon.logRequest();
+      type = type.toLowerCase();
+      Falcon.postSuspendEntity(type, name)
+        .success(function (message) {
+          Falcon.logResponse('success', message, type);
+          deferred.resolve(entityStatus.SUSPENDED);
+        })
+        .error(function (err) {
+          Falcon.logResponse('error', err, type);
+          deferred.resolve(entityStatus.RUNNING);
+        });
+        return deferred.promise;
+    };
+
+    entityScheduler.deleteEntity = function (type, name) {
+      type = type.toLowerCase(); //new sandbox returns uppercase type
+      var deferred = $q.defer();
+      Falcon.logRequest();
+      Falcon.deleteEntity(type, name)
+        .success(function (data) {
+          Falcon.logResponse('success', data, type);
+          deferred.resolve(entityStatus.DELETED);
+        })
+        .error(function (err) {
+          Falcon.logResponse('error', err, type);
+          deferred.resolve(entityStatus.FAILED);
+        });
+        return deferred.promise;
+    };
+
+    entityScheduler.getEntityDefinition  = function(type, name){
+      var deferred = $q.defer();
+      type = type.toLowerCase(); //new sandbox returns uppercase type
+      Falcon.logRequest();
+      Falcon.getEntityDefinition(type, name)
+        .success(function (data) {
+            Falcon.logResponse('success', data, false, true);
+            deferred.resolve(X2jsService.xml_str2json(data));
+        })
+        .error(function (err) {
+            Falcon.logResponse('error', err, false, true);
+            deferred.reject(entityStatus.FAILED);
+        });
+      return deferred.promise;
+    };
+
+    entityScheduler.downloadEntity = function (type, name) {
+      type = type.toLowerCase();
+      Falcon.logRequest();
+      Falcon.getEntityDefinition(type, name) .success(function (data) {
+        Falcon.logResponse('success', data, false, true);
+        $window.location.href = 'data:application/octet-stream,' + encodeService.encode(data);
+      }).error(function (err) {
+        Falcon.logResponse('error', err, false);
+      });
+    };
+    return entityScheduler;
+  }]);
+})();
diff --git a/falcon-ui/app/js/services/entity/entity-serializer.js b/falcon-ui/app/js/services/entity/entity-serializer.js
index 284c30f..327a311 100644
--- a/falcon-ui/app/js/services/entity/entity-serializer.js
+++ b/falcon-ui/app/js/services/entity/entity-serializer.js
@@ -38,8 +38,7 @@
         return DateHelper.importDate(input, feedTz);
       }
       function timeAndDateToStringProcess(input) {
-        //return DateHelper.createISO(input.date, input.time, processTz);
-        return DateHelper.createISOString(input.date, input.time);
+        return DateHelper.createISO(input.date, input.time, processTz);
       }
       function importDateProcess (input) {
         return DateHelper.importDate(input, processTz);
@@ -47,19 +46,24 @@
 
 
     return {
-      preSerialize: function(feed, type) {
+      preSerialize: function(entity, type) {
         if(type === 'feed') {
-          if(feed.properties) {
-            feed.allproperties = feed.properties.concat(feed.customProperties);
+          if(entity.properties) {
+            entity.allproperties = entity.properties.concat(entity.customProperties);
           }
-          return preSerializeFeed(feed, JsonTransformerFactory);
+          return preSerializeFeed(entity, JsonTransformerFactory);
         } else if(type === 'process') {
-          return preSerializeProcess(feed, JsonTransformerFactory);
+          return preSerializeProcess(entity, JsonTransformerFactory);
+        } else if(type === 'datasource') {
+          if(entity.properties) {
+            entity.allProperties = entity.properties.concat(entity.customProperties);
+          }
+          return preSerializeDatasource(entity, JsonTransformerFactory);
         }
       },
 
-      serialize: function(feed, type) {
-        return X2jsService.json2xml_str(this.preSerialize(feed, type));
+      serialize: function(entity, type) {
+        return X2jsService.json2xml_str(this.preSerialize(entity, type));
       },
 
       preDeserialize: function(entityModel, type) {
@@ -67,6 +71,10 @@
           return preDeserializeFeed(entityModel, JsonTransformerFactory);
         } else if(type === 'process') {
           return preDeserializeProcess(entityModel, JsonTransformerFactory);
+        } else if(type === 'cluster') {
+          return preDeserializeCluster(entityModel, JsonTransformerFactory);
+        }  else if(type === 'datasource') {
+          return preDeserializeDatasource(entityModel, JsonTransformerFactory);
         }
       },
 
@@ -89,6 +97,11 @@
         return input && input.value;
       }
 
+      function emptyProperty (property) {
+        return property && property.name && property.name !== ''
+          && property.value && property.value !== '';
+      }
+
       function emptyFrequency (input) {
         return input.value.unit ? input.value.quantity : input.value;
       }
@@ -124,39 +137,141 @@
           .transform('type', '_type')
           .transform('path', '_path');
 
+        var partitionTransform = transformerFactory
+          .transform('name', '_name');
+
         var clusterTransform = transformerFactory
-          .transform('name', '_name')
-          .transform('type', '_type')
-          .transform('validity.start', 'validity._start', (function () { feedTz = feed.timezone; return timeAndDateToStringFeed; }()))
-          .transform('validity.end', 'validity._end', timeAndDateToStringFeed)
-          .transform('retention', 'retention._limit', frequencyToString)
-          .transform('retention.action', 'retention._action')
-          .transform('storage.fileSystem', 'locations.location', function(fileSystem) {
-            return feed.storage.fileSystem.active ? transformfileSystem(fileSystem) : null;
+          .transform('cluster.name', '_name')
+          .transform('cluster.type', '_type')
+          .transform('cluster.partition', '_partition')
+          .transform('cluster.validity.start', 'validity._start', (function () { feedTz = feed.timezone; return timeAndDateToStringFeed; }()))
+          .transform('cluster.validity.end', 'validity._end', timeAndDateToStringFeed)
+          .transform('cluster.retention', 'retention._limit', frequencyToString)
+          .transform('cluster.retention.action', 'retention._action')
+          .transform('cluster','import',function(cluster){
+            if(feed.dataTransferType === 'import' && feed.import){
+              return dataSourceTransformImport.apply(feed.import, {});
+            }
           })
-          .transform('storage.catalog', 'table', function(catalog) {
-            return feed.storage.catalog.active ? transformCatalog(catalog) : null;
-          });
+          .transform('cluster','export',function(cluster){
+            if(feed.dataTransferType === 'export' && feed.export){
+              return dataSourceTransformExport.apply(feed.export, {});
+            }
+          })
+          .transform('cluster', 'locations.location', function(cluster) {
+            if ((cluster.type === 'source' && feed.sourceClusterLocationType === 'hdfs')
+                || (cluster.type === 'target' && feed.targetClusterLocationType === 'hdfs')
+                || (feed.dataTransferType === 'import' && feed.targetClusterLocationType === 'hdfs')
+                || (feed.dataTransferType === 'export' && feed.sourceClusterLocationType === 'hdfs')
+              ) {
+                return transformfileSystem(cluster.storage.fileSystem);
+            }
+            return null;
+          })
+          .transform('cluster', 'table', function(cluster) {
+            if ((cluster.type === 'source' && feed.sourceClusterLocationType === 'hive')
+                || (cluster.type === 'target' && feed.targetClusterLocationType === 'hive')
+                || (feed.dataTransferType === 'import' && feed.targetClusterLocationType === 'hive')
+                || (feed.dataTransferType === 'export' && feed.sourceClusterLocationType === 'hive')
+              ) {
+                return transformCatalog(cluster.storage.catalog);
+            }
+            return null;
+          })
+          ;
+
+        var fieldTransform = transformerFactory
+            .transform('field', 'field');
+
+        var dataSourceTransformImport = transformerFactory
+            .transform('source.name','source._name')
+            .transform('source.tableName','source._tableName')
+            .transform('source.extract.type','source.extract._type')
+            .transform('source.extract.mergepolicy','source.extract.mergepolicy')
+            .transform('source','source.fields.includes.field',function(source){
+              if (source.columnsType === 'include' && source.fields.includes && source.fields.includes.length > 0) {
+                return source.fields.includes.map(function (field) {
+                  return fieldTransform.apply(field, field);
+                });
+              }
+              return null;
+            })
+            .transform('source','source.fields.excludes.field',function(source){
+              if(source.columnsType === 'exclude' && source.fields.excludes && source.fields.excludes.length > 0){
+                return source.fields.excludes.map(function (field) {
+                  return fieldTransform.apply(field, field);
+                });
+              }
+              return null;
+            })
+            ;
+
+          var dataSourceTransformExport = transformerFactory
+            .transform('target.name','target._name')
+            .transform('target.tableName','target._tableName')
+            .transform('target.load.type','target.load._type')
+            .transform('target','target.fields.includes.field',function(target){
+              if(target.columnsType === 'include' && target.fields.includes && target.fields.includes.length > 0){
+                return target.fields.includes.map(function (field) {
+                  return fieldTransform.apply(field, field);
+                });
+              }
+              return null;
+            })
+            .transform('target','target.fields.excludes.field',function(target){
+              if(target.columnsType === 'exclude' && target.fields.excludes && target.fields.excludes.length > 0){
+                return target.fields.excludes.map(function (field) {
+                  return fieldTransform.apply(field, field);
+                });
+              }
+              return null;
+            })
+            ;
 
         var transform = transformerFactory
           .transform('name', 'feed._name')
           .transform('description', 'feed._description')
           .transform('tags', 'feed.tags', keyValuePairs)
+          .transform('partitions', 'feed.partitions.partition', function(partitions) {
+            return partitions.length==0 ? null : partitions.map(function(partition) {
+              return partitionTransform.apply(partition, {});
+            });
+          })
           .transform('groups', 'feed.groups')
           .transform('availabilityFlag', 'feed.availabilityFlag')
           .transform('frequency', 'feed.frequency', frequencyToString)
           .transform('timezone', 'feed.timezone')
           .transform('lateArrival.cutOff', 'feed.late-arrival._cut-off', frequencyToString)
           .transform('clusters', 'feed.clusters.cluster', function(clusters) {
+            clusters = clusters.filter(function (cluster) {
+              return cluster.name;
+            });
+            if (!feed.enableFeedReplication) {
+              clusters = clusters.filter(function (cluster) {
+                return cluster.type == 'source';
+              });
+            }
             return clusters.map(function(cluster) {
-              return clusterTransform.apply(cluster, {});
+              return clusterTransform.apply({'cluster':cluster}, {});
             });
           })
           .transform('storage.fileSystem', 'feed.locations.location', function(fileSystem) {
-            return fileSystem.active ? transformfileSystem(fileSystem) : null;
+            if (feed.dataTransferType === 'hdfs'
+              || (feed.dataTransferType === 'import' && feed.targetClusterLocationType === 'hdfs')
+              || (feed.dataTransferType === 'export' && feed.sourceClusterLocationType === 'hdfs')
+              || (feed.dataTransferType === 'hive' && feed.sourceClusterLocationType === 'hdfs')) {
+                return transformfileSystem(fileSystem)
+            }
+            return null;
           })
           .transform('storage.catalog', 'feed.table', function(catalog) {
-            return catalog.active ? transformCatalog(catalog) : null;
+            if (feed.dataTransferType === 'hive'
+              || (feed.dataTransferType === 'import' && feed.targetClusterLocationType === 'hive')
+              || (feed.dataTransferType === 'export' && feed.sourceClusterLocationType === 'hive')
+              || (feed.dataTransferType === 'hdfs' && feed.sourceClusterLocationType === 'hive')) {
+                return transformCatalog(catalog);
+            }
+            return null;
           })
           .transform('ACL', 'feed.ACL', emptyElement)
           .transform('ACL.owner', 'feed.ACL._owner')
@@ -166,10 +281,13 @@
           .transform('schema.location', 'feed.schema._location')
           .transform('schema.provider', 'feed.schema._provider')
           .transform('allproperties', 'feed.properties.property', function(properties) {
-            return properties.filter(emptyValue).filter(emptyFrequency).map(function(property) {
+            properties = properties.filter(emptyValue);
+            return properties.length==0 ? null : properties.map(function(property) {
               return propertyTransform.apply(property, {});
             });
-          });
+          })
+          //.transform('retentionFrequency', 'feed.lifecycle.retention-stage.frequency', frequencyToString)
+          ;
 
         function transformfileSystem (fileSystem) {
           return fileSystem.locations.map(function(location) {
@@ -203,12 +321,42 @@
           .transform('feed', '_feed')
           .transform('outputInstance', '_instance');
 
+        var propertyTransform = transformerFactory
+          .transform('name', '_name')
+          .transform('value', '_value');
+
+        var sparkTransform = transformerFactory
+          .transform('spark', 'master', function(spark) {
+            if (spark.master === 'yarn') {
+              return spark.master + '-' + spark.mode;
+            } else {
+              return spark.master;
+            }
+          })
+          .transform('spark', 'mode', function(spark) {
+            if (spark.master && spark.master.indexOf('yarn') != '-1') {
+              return spark.mode;
+            } else {
+              return null;
+            }
+          })
+          .transform('spark.name', 'name')
+          .transform('spark.class', 'class')
+          .transform('spark.jar', 'jar')
+          .transform('spark.sparkOptions', 'spark-opts')
+          .transform('spark.arg', 'arg');
+
+        var workflowNameCheck = function(workflow) {
+          if (workflow.engine === 'spark') {
+            return null;
+          } else {
+            return workflow.name;
+          }
+        }
+
         var transform = transformerFactory
           .transform('name', 'process._name')
           .transform('tags', 'process.tags', keyValuePairs)
-
-
-
           .transform('clusters', 'process.clusters.cluster', function(clusters) {
             return clusters.map(function(cluster) {
               return clusterTransform.apply(cluster, {});
@@ -234,10 +382,25 @@
               return outputTransform.apply(output, {});
             });
           })
-          .transform('workflow.name', 'process.workflow._name')
+          .transform('properties', 'process.properties.property', function(properties) {
+            properties = properties.filter(emptyProperty);
+            if(properties.length === 0) {
+              return null;
+            } else {
+              return properties.map(function(property) {
+                return propertyTransform.apply(property, {});
+              });
+            }
+          })
+          .transform('workflow', 'process.workflow._name', workflowNameCheck)
           .transform('workflow.version', 'process.workflow._version')
           .transform('workflow.engine', 'process.workflow._engine')
           .transform('workflow.path', 'process.workflow._path')
+          .transform('workflow', 'process.spark-attributes', function(workflow) {
+            if (workflow.engine === 'spark') {
+              return sparkTransform.apply(workflow, {});
+            }
+          })
           .transform('retry.policy', 'process.retry._policy')
           .transform('retry.delay', 'process.retry._delay', frequencyToString)
           .transform('retry.attempts', 'process.retry._attempts')
@@ -251,31 +414,149 @@
 
       }
 
+      function preSerializeDatasource (datasource, transformerFactory) {
+        var credentialPasswordTextTransform = transformerFactory
+          .transform('type', '_type')
+          .transform('userName', 'userName')
+          .transform('passwordText', 'passwordText', function(value) {
+            return value;
+          });
+
+        var credentialPasswordFileTransform = transformerFactory
+          .transform('type', '_type')
+          .transform('userName', 'userName')
+          .transform('passwordFile', 'passwordFile');
+
+        var credentialPasswordAliasTransform = transformerFactory
+          .transform('type', '_type')
+          .transform('userName', 'userName')
+          .transform('passwordAlias', 'passwordAlias.alias')
+          .transform('providerPath', 'passwordAlias.providerPath');
+
+        var credentialTransform = function(credential)  {
+          if (credential.type == 'password-text') {
+            return credentialPasswordTextTransform.apply(credential, {});
+          } if (credential.type == 'password-file') {
+            return credentialPasswordFileTransform.apply(credential, {});
+          } if (credential.type == 'password-alias') {
+            return credentialPasswordAliasTransform.apply(credential, {});
+          } else {
+            return null;
+          }
+        };
+
+        var interfaceTransform = transformerFactory
+          .transform('type', '_type')
+          .transform('endpoint', '_endpoint')
+          .transform('credential.type', 'credential._type')
+          .transform('credential', 'credential', credentialTransform);
+
+        var propertyTransform = transformerFactory
+          .transform('name', '_name')
+          .transform('value', '_value', function(value) {
+            return value;
+          });
+        var driverJarsTransform = function(driverJars){
+          var filtered = driverJars.filter(function(jar){
+            return jar.value && jar.value.trim().length > 0;
+          });
+          if(filtered.length > 0){
+            return filtered.map(function(jar){
+              return jar.value;
+            });
+          }
+        };
+        var transform = transformerFactory
+          .transform('colo', 'datasource._colo')
+          .transform('description', 'datasource._description')
+          .transform('type', 'datasource._type')
+          .transform('name', 'datasource._name')
+          .transform('tags', 'datasource.tags', keyValuePairs)
+          .transform('interfaces', 'datasource.interfaces.interface', function(datasourceInterfaces) {
+            return datasourceInterfaces.interfaces.length==0 ? null
+              : datasourceInterfaces.interfaces.map(function(datasourceInterface) {
+                  return interfaceTransform.apply(datasourceInterface, {});
+                });
+          })
+          .transform('interfaces.credential', 'datasource.interfaces.credential', credentialTransform)
+          .transform('driver.clazz', 'datasource.driver.clazz')
+          .transform('driver.jar', 'datasource.driver.jar',driverJarsTransform)
+          .transform('allProperties', 'datasource.properties.property', function(properties) {
+            properties = properties.filter(emptyValue).filter(emptyFrequency);
+            return properties.length==0 ? null : properties.map(function(property) {
+              return propertyTransform.apply(property, {});
+            });
+          })
+          .transform('ACL', 'datasource.ACL', emptyElement)
+          .transform('ACL.owner', 'datasource.ACL._owner')
+          .transform('ACL.group', 'datasource.ACL._group')
+          .transform('ACL.permission', 'datasource.ACL._permission')
+
+        return transform.apply(datasource, new EntityModel('datasource'));
+
+      }
+
+      function preDeserializeCluster(clusterModel, transformerFactory) {
+
+        var cluster = EntityFactory.newClusterEntity();
+
+        var transform = transformerFactory
+            .transform('_name', 'name')
+            .transform('_colo','colo')
+            .transform('_description', 'description')
+            .transform('tags', 'tags', parseKeyValuePairs)
+            .transform('ACL._owner','ACL.owner')
+            .transform('ACL._group','ACL.group')
+            .transform('ACL._permission','ACL.permission')
+            .transform('locations.location', 'locations', parseClusterLocations)
+            .transform('properties.property', 'properties', parseClusterProperties)
+            .transform('interfaces.interface', 'interfaces', parseClusterInterfaces);
+
+        return transform.apply(angular.copy(clusterModel.cluster), cluster);
+      }
+
       function preDeserializeFeed(feedModel, transformerFactory) {
 
         var feed = EntityFactory.newFeed();
-        feed.storage.fileSystem.active = false;
 
         var clusterTransform = transformerFactory
             .transform('_name', 'name')
             .transform('_type', 'type')
+            .transform('_partition', 'partition')
             .transform('validity._start', 'validity.start.date', (function () { feedTz = feedModel.feed.timezone; return importDateFeed; }()))
             .transform('validity._start', 'validity.start.time', importDateFeed)
             .transform('validity._end', 'validity.end.date', importDateFeed)
             .transform('validity._end', 'validity.end.time', importDateFeed)
             .transform('retention._limit', 'retention', parseFrequency)
             .transform('retention._action', 'retention.action')
-            .transform('locations', 'storage.fileSystem.active', parseBoolean)
             .transform('locations.location', 'storage.fileSystem.locations', parseLocations)
-            .transform('table', 'storage.catalog.active', parseBoolean)
             .transform('table._uri', 'storage.catalog.catalogTable.uri')
           ;
+          var fieldTransform = transformerFactory
+              .transform('field', 'field');
+          var dataSourceTransformImport = transformerFactory
+              .transform('_name','name')
+              .transform('_tableName','tableName')
+              .transform('extract._type','extract.type')
+              .transform('extract.mergepolicy','extract.mergepolicy')
+              .transform('fields.excludes.field','excludesCSV', parseFields)
+              .transform('fields.includes.field','includesCSV', parseFields)
+              ;
+
+          var dataSourceTransformExport = transformerFactory
+              .transform('_name','name')
+              .transform('_tableName','tableName')
+              .transform('load._type','load.type')
+              .transform('fields.includes.field','includesCSV', parseFields)
+              .transform('fields.excludes.field','excludesCSV', parseFields)
+              ;
 
         var transform = transformerFactory
             .transform('_name', 'name')
             .transform('_description', 'description')
             .transform('tags', 'tags', parseKeyValuePairs)
             .transform('groups','groups')
+            .transform('availabilityFlag', 'availabilityFlag')
             .transform('ACL._owner','ACL.owner')
             .transform('ACL._group','ACL.group')
             .transform('ACL._permission','ACL.permission')
@@ -284,15 +565,44 @@
             .transform('frequency','frequency', parseFrequency)
             .transform('late-arrival','lateArrival.active', parseBoolean)
             .transform('late-arrival._cut-off','lateArrival.cutOff', parseFrequency)
-            .transform('availabilityFlag', 'availabilityFlag')
             .transform('properties.property', 'customProperties', parseProperties(isCustomProperty, EntityFactory.newFeedCustomProperties()))
             .transform('properties.property', 'properties', parseProperties(isFalconProperty, EntityFactory.newFeedProperties()))
-            .transform('locations', 'storage.fileSystem.active', parseBoolean)
             .transform('locations.location', 'storage.fileSystem.locations', parseLocations)
-            .transform('table', 'storage.catalog.active', parseBoolean)
             .transform('table._uri', 'storage.catalog.catalogTable.uri')
-            .transform('clusters.cluster', 'clusters', parseClusters(clusterTransform))
-            .transform('timezone', 'timezone');
+            .transform('partitions.partition', 'partitions', parsePartitions)
+            .transform('clusters.cluster', 'clusters', parseClusters(feed,clusterTransform))
+            .transform('clusters.cluster', 'datasources', parseFeedDatasources)
+            .transform('timezone', 'timezone')
+            ;
+
+            function parseFeedDatasources(clusters) {
+              if (clusters.length > 0) {
+                var cluster = clusters[0];
+                if (cluster.import) {
+                  feed.dataTransferType = 'import';
+                  feed.import = { 'source' : dataSourceTransformImport.apply(cluster.import.source, {}) };
+                  if(cluster._type ==='source' && feed.storage.catalog.catalogTable.uri !== null){
+                    feed.targetClusterLocationType = 'hive';
+                  } else {
+                    feed.targetClusterLocationType = 'hdfs';
+                  }
+                } else if (clusters[0].export) {
+                  feed.dataTransferType = 'export';
+                  feed.export = { 'target' : dataSourceTransformExport.apply(clusters[0].export.target, {}) };
+                  if(cluster._type ==='source' && feed.storage.catalog.catalogTable.uri !== null){
+                    feed.targetClusterLocationType = 'hive';
+                  } else {
+                    feed.targetClusterLocationType = 'hdfs';
+                  }
+                }
+              }
+              return null;
+            }
+
+            function parseFields(fields) {
+              return $.isArray(fields) ? fields.join() : fields;
+            }
+
 
         return transform.apply(angular.copy(feedModel.feed), feed);
       }
@@ -319,6 +629,19 @@
           .transform('_feed', 'feed')
           .transform('_instance', 'outputInstance');
 
+        var propertyTransform = transformerFactory
+          .transform('_name', 'name')
+          .transform('_value', 'value');
+
+        var sparkTransform = transformerFactory
+          .transform('master', 'master')
+          .transform('mode', 'mode')
+          .transform('name', 'name')
+          .transform('class', 'class')
+          .transform('jar', 'jar')
+          .transform('spark-opts', 'sparkOptions')
+          .transform('arg', 'arg');
+
         var transform = transformerFactory
           .transform('_name', 'name')
           .transform('tags', 'tags', parseKeyValuePairs)
@@ -326,6 +649,7 @@
           .transform('workflow._version', 'workflow.version')
           .transform('workflow._engine', 'workflow.engine')
           .transform('workflow._path', 'workflow.path')
+          .transform('spark-attributes', 'workflow.spark', parseSparkProperties(sparkTransform))
           .transform('timezone', 'timezone')
           .transform('frequency','frequency', parseFrequency)
           .transform('parallel','parallel')
@@ -336,6 +660,7 @@
           .transform('clusters.cluster', 'clusters', parseClusters(clusterTransform))
           .transform('inputs.input', 'inputs', parseInputs(inputTransform))
           .transform('outputs.output', 'outputs', parseOutputs(outputTransform))
+          .transform('properties.property', 'properties', parseProperties)
           .transform('ACL._owner','ACL.owner')
           .transform('ACL._group','ACL.group')
           .transform('ACL._permission','ACL.permission');
@@ -348,9 +673,82 @@
           };
         }
 
+        function parseProperties(properties) {
+          return $.isArray(properties) ? properties.map(parseProperty) : [parseProperty(properties)];
+        }
+
+        function parseProperty(property) {
+          return EntityFactory.newProperty(property._name, property._value);
+        }
+
+        function parseSparkProperties(transform) {
+          return function(sparkAttributes) {
+            if (sparkAttributes.master && sparkAttributes.master.indexOf('yarn') !== '-1') {
+              sparkAttributes.master = 'yarn';
+            }
+            return sparkTransform.apply(sparkAttributes, EntityFactory.newSparkAttributes());
+          };
+        }
+
         return transform.apply(angular.copy(processModel.process), process);
       }
 
+      function preDeserializeDatasource(datasourceModel, transformerFactory) {
+          var datasource = EntityFactory.newDatasource();
+
+          function parseProperty(property) {
+            return EntityFactory.newProperty(property._name, property._value);
+          }
+
+          function parseProperties(filterCallback) {
+            return function(properties) {
+              var result = filter(properties, filterCallback).map(parseProperty);
+              return result;
+            };
+          }
+
+          function parseInterface(datasourceinterface) {
+            var interfaceTransform = transformerFactory
+              .transform('_type', 'type')
+              .transform('_endpoint', 'endpoint')
+              .transform('credential._type', 'credential.type')
+              .transform('credential.userName', 'credential.userName')
+              .transform('credential.passwordText', 'credential.passwordText')
+              .transform('credential.passwordFile', 'credential.passwordFile')
+              .transform('credential.passwordAlias.alias', 'credential.passwordAlias')
+              .transform('credential.passwordAlias.providerPath', 'credential.providerPath');
+
+              return interfaceTransform.apply(datasourceinterface, EntityFactory.newDatasourceInterface());
+          }
+
+          function parseInterfaces(interfaces) {
+              return $.isArray(interfaces) ? interfaces.map(parseInterface) : [parseInterface(interfaces)];
+          }
+          function parseDriverJar(jar){
+            return {value : jar};
+          }
+          function parseDriverJars(jars) {
+            return $.isArray(jars) ? jars.map(parseDriverJar) : [parseDriverJar(jars)];
+          }
+          var transform = transformerFactory
+              .transform('_name', 'name')
+              .transform('_description', 'description')
+              .transform('tags', 'tags', parseKeyValuePairs)
+              .transform('_colo','colo')
+              .transform('_type','type')
+              .transform('ACL._owner','ACL.owner')
+              .transform('ACL._group','ACL.group')
+              .transform('ACL._permission','ACL.permission')
+              .transform('driver.clazz','driver.clazz')
+              .transform('driver.jar','driver.jar',parseDriverJars)
+              .transform('interfaces.interface', 'interfaces.interfaces', parseInterfaces)
+              .transform('properties.property', 'properties', parseProperties(isDatasourceProperty))
+              .transform('properties.property', 'customProperties', parseProperties(isCustomDatasourceProperty));
+
+          return transform.apply(angular.copy(datasourceModel.datasource), datasource);
+
+      }
+
       function parseDate(input) {
         var dateComponent = (input.split('T')[0]).split('-');
         return newUtcDate(dateComponent[0], dateComponent[1], dateComponent[2]);
@@ -361,9 +759,39 @@
         return newUtcTime(timeComponent[0], timeComponent[1]);
       }
 
-      function parseClusters(transform) {
+      function parseClusters(feed, transform) {
         return function(clusters) {
+          if (clusters.length > 0 && clusters[0] === "") {
+            return null;
+          }
           var result = clusters.map(parseCluster(transform));
+          result.forEach(function(cluster){
+            if (cluster.type ==='target') {
+              feed.enableFeedReplication = true;
+            }
+            if(cluster.type ==='source' && cluster.storage.catalog){
+              feed.sourceClusterLocationType = 'hive';
+            }
+            if(cluster.type ==='target' && cluster.storage.catalog){
+              feed.targetClusterLocationType = 'hive';
+            }
+            if(cluster.type ==='source' && cluster.storage.fileSystem){
+              feed.sourceClusterLocationType = 'hdfs';
+            }
+            if(cluster.type ==='target' && cluster.storage.fileSystem){
+              feed.targetClusterLocationType = 'hdfs';
+            }
+          });
+          if (feed.sourceClusterLocationType === 'hive'
+            && (!feed.targetClusterLocationType || feed.targetClusterLocationType === 'hive')) {
+            feed.dataTransferType = 'hive';
+          } else if (feed.sourceClusterLocationType === 'hdfs'
+            && (!feed.targetClusterLocationType || feed.targetClusterLocationType === 'hdfs')) {
+            feed.dataTransferType = 'hdfs';
+          }
+          if (!feed.targetClusterLocationType && (feed.dataTransferType === 'hdfs' || feed.dataTransferType === 'hive')) {
+            feed.targetClusterLocationType = feed.dataTransferType;
+          }
           selectFirstSourceCluster(result);
           return  result;
         };
@@ -396,7 +824,7 @@
       function parseCluster(transform) {
         return function(input) {
           var cluster = EntityFactory.newCluster('target', false);
-          cluster.storage.fileSystem.active = false;
+          //cluster.storage.fileSystem.active = false;
           return  transform.apply(input, cluster);
         };
       }
@@ -477,6 +905,39 @@
         return EntityFactory.newLocation(location._type, location._path);
       }
 
+      function parseClusterLocations(locations) {
+        return $.isArray(locations) ? locations.map(parseClusterLocation) : [parseClusterLocation(locations)];
+      }
+
+      function parseClusterLocation(location) {
+        return EntityFactory.newClusterLocation(location._name, location._path);
+      }
+
+      function parseClusterProperties(properties) {
+        return $.isArray(properties) ? properties.map(parseClusterProperty) : [parseClusterProperty(properties)];
+      }
+
+      function parseClusterProperty(property) {
+        return EntityFactory.newEntry(property._name, property._value);
+      }
+
+      function parseClusterInterfaces(interfaces) {
+        return $.isArray(interfaces) ? interfaces.map(parseClusterInterface) : [parseClusterInterface(interfaces)];
+      }
+
+      function parseClusterInterface(clusterInterface) {
+        return EntityFactory.newClusterInterface(
+          clusterInterface._type, clusterInterface._endpoint, clusterInterface._version);
+      }
+
+      function parsePartitions(partitions) {
+        return $.isArray(partitions) ? partitions.map(parsePartititon) : [parsePartititon(partitions)];
+      }
+
+      function parsePartititon(partition) {
+        return EntityFactory.newPartition(partition._name);
+      }
+
       function indexBy(array, property) {
         var map = {};
 
@@ -507,7 +968,6 @@
     mapBandwidthKB: true
   };
 
-
   function isCustomProperty(property) {
     return !falconProperties[property._name];
   }
@@ -516,5 +976,18 @@
     return falconProperties[property._name];
   }
 
+  var datasourceProperties = {
+    parameterFile: true,
+    verboseMode: true,
+    directMode: true
+  };
 
-})();
\ No newline at end of file
+  function isCustomDatasourceProperty(property) {
+    return !datasourceProperties[property._name];
+  }
+
+  function isDatasourceProperty(property) {
+    return datasourceProperties[property._name];
+  }
+
+})();
diff --git a/falcon-ui/app/js/services/extension/extension-serializer.js b/falcon-ui/app/js/services/extension/extension-serializer.js
new file mode 100644
index 0000000..3f689b4
--- /dev/null
+++ b/falcon-ui/app/js/services/extension/extension-serializer.js
@@ -0,0 +1,415 @@
+/**
+ * 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.
+ */
+(function () {
+  'use strict';
+  var module = angular.module('app.services.extension.serializer',
+    ['app.services',
+      'app.services.entity.factory',
+      'app.services.entity.model']);
+
+  module.factory('ExtensionSerializer', ['EntityFactory', 'DateHelper', 'EntityModel',
+    function(EntityFactory, DateHelper, EntityModel) {
+
+      var convertTags = function (tagsArray) {
+        var result = [];
+        tagsArray.forEach(function(element) {
+          if(element.key && element.value) {
+            result.push(element.key + "=" + element.value);
+          }
+        });
+        result = result.join(",");
+        return result;
+      };
+
+      var convertObjectToString = function (obj) {
+        var str = '';
+        for (var key in obj) {
+          if (obj.hasOwnProperty(key)) {
+              str += key + '=' + obj[key] + '\n';
+          }
+        }
+        return str;
+      };
+
+      var serializeExtensionCommonProperties = function(extension) {
+        var extensionProps = {};
+        extensionProps.jobName = extension.name;
+        extensionProps.jobValidityStart = DateHelper.createISO(extension.validity.start.date,
+          extension.validity.start.time, extension.validity.timezone);
+        extensionProps.jobValidityEnd = DateHelper.createISO(extension.validity.end.date,
+          extension.validity.end.time, extension.validity.timezone);
+        extensionProps.jobFrequency = extension.frequency.unit + '(' + extension.frequency.quantity + ')';
+        extensionProps.jobTimezone = extension.validity.timezone;
+        extensionProps.jobTags = convertTags(extension.tags);
+        extensionProps.jobRetryPolicy = extension.retry.policy;
+        extensionProps.jobRetryDelay = extension.retry.delay.unit + '(' + extension.retry.delay.quantity + ')';
+        extensionProps.jobRetryAttempts = extension.retry.attempts;
+        extensionProps.jobAclOwner = extension.ACL.owner;
+        extensionProps.jobAclGroup = extension.ACL.group;
+        extensionProps.jobAclPermission = extension.ACL.permission;
+        extensionProps.tdeEncryptionEnabled = extensionProps.tdeEncryptionEnabled;
+
+        extensionProps.sourceCluster = extension.source.cluster;
+        extensionProps.targetCluster = extension.target.cluster;
+        if (extension.runOn === 'source') {
+          extensionProps.jobClusterName = extension.source.cluster;
+        } else if (extension.runOn === 'target') {
+          extensionProps.jobClusterName = extension.target.cluster;
+        }
+        if (extension.alerts.length > 0) {
+          extensionProps.jobNotificationType = 'email';
+          extensionProps.jobNotificationReceivers = extension.alerts.join();
+        }
+        return extensionProps;
+      };
+
+      var serializeSnapshotExtensionProperties = function(snapshot) {
+        var snapshotProps = serializeExtensionCommonProperties(snapshot);
+        snapshotProps.sourceSnapshotDir = snapshot.source.directoryPath.trim();
+        snapshotProps.targetSnapshotDir = snapshot.target.directoryPath.trim();
+        snapshotProps.sourceSnapshotRetentionAgeLimit = snapshot.source.deleteFrequency.unit
+          + '(' + snapshot.source.deleteFrequency.quantity + ')';
+        snapshotProps.targetSnapshotRetentionAgeLimit = snapshot.target.deleteFrequency.unit
+          + '(' + snapshot.target.deleteFrequency.quantity + ')';
+        snapshotProps.sourceSnapshotRetentionNumber = snapshot.source.retentionNumber;
+        snapshotProps.targetSnapshotRetentionNumber = snapshot.target.retentionNumber;
+        if (snapshot.allocation) {
+          if (snapshot.allocation.distcpMaxMaps) {
+            snapshotProps.distcpMaxMaps = snapshot.allocation.distcpMaxMaps;
+          }
+          if (snapshot.allocation.distcpMapBandwidth) {
+            snapshotProps.distcpMapBandwidth = snapshot.allocation.distcpMapBandwidth;
+          }
+        }
+
+        return snapshotProps;
+      };
+
+      var serializeHDFSExtensionProperties = function(hdfsExtension, secureMode) {
+        var hdfsExtensionProps = serializeExtensionCommonProperties(hdfsExtension);
+        hdfsExtensionProps.sourceDir = hdfsExtension.source.path.trim();
+        hdfsExtensionProps.targetDir = hdfsExtension.target.path.trim();
+        if (hdfsExtension.allocation.hdfs) {
+          if (hdfsExtension.allocation.hdfs.distcpMaxMaps) {
+            hdfsExtensionProps.distcpMaxMaps = hdfsExtension.allocation.hdfs.distcpMaxMaps;
+          }
+          if (hdfsExtension.allocation.hdfs.distcpMapBandwidth) {
+            hdfsExtensionProps.distcpMapBandwidth = hdfsExtension.allocation.hdfs.distcpMapBandwidth;
+          }
+        }
+        return hdfsExtensionProps;
+      };
+
+      var serializeHiveExtensionProperties = function(hiveEntension, secureMode) {
+        var hiveEntensionProps = serializeExtensionCommonProperties(hiveEntension);
+        if (hiveEntension.allocation.hive) {
+          if (hiveEntension.allocation.hive.distcpMaxMaps) {
+            hiveEntensionProps.distcpMaxMaps = hiveEntension.allocation.hive.distcpMaxMaps;
+          }
+          if (hiveEntension.allocation.hive.distcpMapBandwidth) {
+            hiveEntensionProps.distcpMapBandwidth = hiveEntension.allocation.hive.distcpMapBandwidth;
+          }
+          if (hiveEntension.allocation.hive.maxEvents) {
+            hiveEntensionProps.maxEvents = hiveEntension.allocation.hive.maxEvents;
+          }
+          if (hiveEntension.allocation.hive.replicationMaxMaps) {
+            hiveEntensionProps.replicationMaxMaps = hiveEntension.allocation.hive.replicationMaxMaps;
+          }
+        }
+
+        hiveEntensionProps.sourceDatabases = hiveEntension.source.hiveDatabases;
+        hiveEntensionProps.sourceTables = (hiveEntension.source.hiveDatabaseType === "databases")
+          ? "*" : hiveEntension.source.hiveTables;
+
+        hiveEntensionProps.sourceStagingPath = hiveEntension.hiveOptions.source.stagingPath
+        hiveEntensionProps.sourceHiveServer2Uri = hiveEntension.hiveOptions.source.hiveServerToEndpoint;
+        hiveEntensionProps.targetStagingPath = hiveEntension.hiveOptions.target.stagingPath
+        hiveEntensionProps.targetHiveServer2Uri = hiveEntension.hiveOptions.target.hiveServerToEndpoint;
+
+        // Secure mode
+        if (secureMode) {
+          hiveEntensionProps.sourceMetastoreUri = hiveEntension.source.hiveMetastoreUri;
+          hiveEntensionProps.sourceHiveMetastoreKerberosPrincipal = hiveEntension.source.hiveMetastoreKerberosPrincipal;
+          hiveEntensionProps.sourceHive2KerberosPrincipal = hiveEntension.source.hive2KerberosPrincipal;
+          hiveEntensionProps.targetMetastoreUri = hiveEntension.target.hiveMetastoreUri;
+          hiveEntensionProps.targetHiveMetastoreKerberosPrincipal = hiveEntension.target.hiveMetastoreKerberosPrincipal;
+          hiveEntensionProps.targetHive2KerberosPrincipal =  hiveEntension.target.hive2KerberosPrincipal;
+        }
+
+        return hiveEntensionProps;
+      };
+
+      var serializeBasicExtensionModel = function(model, extensionObj) {
+
+        extensionObj.name = model.process._name;
+
+        extensionObj.retry.policy = model.process.retry._policy;
+        extensionObj.retry.attempts = model.process.retry._attempts;
+        extensionObj.retry.delay.quantity = (function () {
+          return parseInt(model.process.retry._delay.split('(')[1]);
+        }());
+        extensionObj.retry.delay.unit = (function () {
+          return model.process.retry._delay.split('(')[0];
+        }());
+
+        extensionObj.frequency.quantity = (function () {
+          return parseInt(model.process.frequency.split('(')[1]);
+        }());
+        extensionObj.frequency.unit = (function () {
+          return model.process.frequency.split('(')[0];
+        }());
+
+        // extensionObj.ACL.owner = model.process.ACL._owner;
+        // extensionObj.ACL.group = model.process.ACL._group;
+        // extensionObj.ACL.permissions = model.process.ACL._permission;
+
+        extensionObj.validity.timezone = model.process.timezone;
+        extensionObj.validity.start.date = DateHelper.importDate(
+          model.process.clusters.cluster[0].validity._start, model.process.timezone);
+        extensionObj.validity.start.time = DateHelper.importDate(
+          model.process.clusters.cluster[0].validity._start, model.process.timezone);
+        extensionObj.validity.end.date = DateHelper.importDate(
+          model.process.clusters.cluster[0].validity._end, model.process.timezone);
+        extensionObj.validity.end.time = DateHelper.importDate(
+          model.process.clusters.cluster[0].validity._end, model.process.timezone);
+
+        extensionObj.tags = (function () {
+          var array = [];
+          if(model.process && model.process.tags){
+            model.process.tags.split(',').forEach(function (fieldToSplit) {
+              var splittedString = fieldToSplit.split('=');
+              if (splittedString[0] != '_falcon_extension_name' && splittedString[0] != '_falcon_extension_job') {
+                array.push({key: splittedString[0], value: splittedString[1]});
+              }
+            });
+          }
+          return array;
+        }());
+
+        if(model.process && model.process.tags){
+          if (model.process.tags.indexOf('_falcon_extension_name=HDFS-MIRRORING') !== -1) {
+            extensionObj.type = 'HDFS';
+          } else if (model.process.tags.indexOf('_falcon_extension_name=HDFS-SNAPSHOT-MIRRORING') !== -1) {
+            extensionObj.type = 'snapshot';
+          } else if (model.process.tags.indexOf('_falcon_extension_name=HIVE-MIRRORING') !== -1) {
+            extensionObj.type = 'HIVE';
+          }
+        }
+
+        if (model.process.notification._to) {
+          extensionObj.alerts = (function () {
+            if (model.process.notification._to !== "NA") {
+              return model.process.notification._to.split(',');
+            } else {
+              return [];
+            }
+          }());
+        }
+
+        model.process.properties.property.forEach(function (item) {
+            if (item._name === 'targetCluster') {
+              extensionObj.target.cluster = item._value;
+            }
+            if (item._name === 'sourceCluster') {
+              extensionObj.source.cluster = item._value;
+            }
+          });
+
+          return extensionObj;
+      };
+
+      var serializeSnapshotExtensionModel = function(model, snapshotObj) {
+        snapshotObj = serializeBasicExtensionModel(model, snapshotObj);
+
+        model.process.properties.property.forEach(function (item) {
+            if (item._name === 'distcpMaxMaps') {
+              snapshotObj.allocation.distcpMaxMaps = item._value;
+            }
+            if (item._name === 'distcpMapBandwidth') {
+              snapshotObj.allocation.distcpMapBandwidth = item._value;
+            }
+            if (item._name === 'tdeEncryptionEnabled') {
+              if (item._value === 'true') {
+                snapshotObj.tdeEncryptionEnabled = true;
+              } else {
+                snapshotObj.tdeEncryptionEnabled = false;
+              }
+            }
+            if (item._name === 'sourceSnapshotDir') {
+              snapshotObj.source.directoryPath = item._value;
+            }
+            if (item._name === 'targetSnapshotDir') {
+              snapshotObj.target.directoryPath = item._value;
+            }
+            if (item._name === 'sourceSnapshotRetentionNumber') {
+              snapshotObj.source.retentionNumber = item._value;
+            }
+            if (item._name === 'targetSnapshotRetentionNumber') {
+              snapshotObj.target.retentionNumber = item._value;
+            }
+            if (item._name === 'sourceSnapshotRetentionAgeLimit') {
+              snapshotObj.source.deleteFrequency.quantity = (function () {
+                return parseInt(item._value.split('(')[1]);
+              }());
+              snapshotObj.source.deleteFrequency.unit = (function () {
+                return item._value.split('(')[0];
+              }());
+            }
+            if (item._name === 'targetSnapshotRetentionAgeLimit') {
+              snapshotObj.target.deleteFrequency.quantity = (function () {
+                return parseInt(item._value.split('(')[1]);
+              }());
+              snapshotObj.target.deleteFrequency.unit = (function () {
+                return item._value.split('(')[0];
+              }());
+            }
+          });
+
+          return snapshotObj;
+      };
+
+      var serializeHDFSExtensionModel = function(model, hdfsExtensionObj) {
+        hdfsExtensionObj = serializeBasicExtensionModel(model, hdfsExtensionObj);
+        model.process.properties.property.forEach(function (item) {
+            if (item._name === 'distcpMaxMaps') {
+              hdfsExtensionObj.allocation.hdfs.distcpMaxMaps = item._value;
+            }
+            if (item._name === 'distcpMapBandwidth') {
+              hdfsExtensionObj.allocation.hdfs.distcpMapBandwidth = item._value;
+            }
+            // if (item._name === 'tdeEncryptionEnabled') {
+            //   if (item._value === 'true') {
+            //     hdfsExtensionObj.tdeEncryptionEnabled = true;
+            //   } else {
+            //     hdfsExtensionObj.tdeEncryptionEnabled = false;
+            //   }
+            // }
+            if (item._name === 'sourceDir') {
+              hdfsExtensionObj.source.path = item._value;
+            }
+            if (item._name === 'targetDir') {
+              hdfsExtensionObj.target.path = item._value;
+            }
+          });
+
+          return hdfsExtensionObj;
+      };
+
+      var serializeHiveExtensionModel = function(model, hiveExtensionObj, secureMode) {
+        hiveExtensionObj = serializeBasicExtensionModel(model, hiveExtensionObj);
+        model.process.properties.property.forEach(function (item) {
+            if (item._name === 'distcpMaxMaps') {
+              hiveExtensionObj.allocation.hive.distcpMaxMaps = item._value;
+            }
+            if (item._name === 'distcpMapBandwidth') {
+              hiveExtensionObj.allocation.hive.distcpMapBandwidth = item._value;
+            }
+            if (item._name === 'tdeEncryptionEnabled') {
+              if (item._value === 'true') {
+                hiveExtensionObj.tdeEncryptionEnabled = true;
+              } else {
+                hiveExtensionObj.tdeEncryptionEnabled = false;
+              }
+            }
+            if (item._name === 'replicationMaxMaps') {
+              hiveExtensionObj.allocation.hive.replicationMaxMaps = item._value;
+            }
+            if (item._name === 'maxEvents') {
+              hiveExtensionObj.allocation.hive.maxEvents = item._value;
+            }
+            if (item._name === 'sourceTables') {
+              if (item._value === "*") {
+                hiveExtensionObj.source.hiveDatabaseType = "databases";
+              } else {
+                hiveExtensionObj.source.hiveDatabaseType = "tables";
+                hiveExtensionObj.source.hiveTables = item._value;
+              }
+            }
+            if (item._name === 'sourceDatabases') {
+                hiveExtensionObj.source.hiveDatabases = item._value;
+            }
+
+            if (item._name === 'sourceStagingPath') {
+              hiveExtensionObj.hiveOptions.source.stagingPath = item._value;
+            }
+            if (item._name === 'targetStagingPath') {
+              hiveExtensionObj.hiveOptions.target.stagingPath = item._value;
+            }
+
+            if (item._name === 'sourceHiveServer2Uri') {
+              hiveExtensionObj.hiveOptions.source.hiveServerToEndpoint = item._value;
+            }
+            if (item._name === 'targetHiveServer2Uri') {
+              hiveExtensionObj.hiveOptions.target.hiveServerToEndpoint = item._value;
+            }
+
+            // Secure Mode Properties
+            if (secureMode) {
+              if(item._name === 'sourceMetastoreUri') {
+                hiveExtensionObj.source.hiveMetastoreUri = item._value;
+              }
+              if (item._name === 'sourceHiveMetastoreKerberosPrincipal') {
+                hiveExtensionObj.source.hiveMetastoreKerberosPrincipal = item._value;
+              }
+              if (item._name === 'sourceHive2KerberosPrincipal') {
+                hiveExtensionObj.source.hive2KerberosPrincipal = item._value;
+              }
+              if(item._name === 'targetMetastoreUri') {
+                hiveExtensionObj.target.hiveMetastoreUri = item._value;
+              }
+              if (item._name === 'targetHiveMetastoreKerberosPrincipal') {
+                hiveExtensionObj.target.hiveMetastoreKerberosPrincipal = item._value;
+              }
+              if (item._name === 'targetHive2KerberosPrincipal') {
+                hiveExtensionObj.target.hive2KerberosPrincipal = item._value;
+              }
+            }
+          });
+
+          return hiveExtensionObj;
+      };
+
+      var serializeExtensionProperties = function(extension, extensionType, secureMode) {
+        if (extensionType === 'snapshot') {
+          return serializeSnapshotExtensionProperties(extension);
+        } else if (extensionType === 'HDFS-MIRROR') {
+          return serializeHDFSExtensionProperties(extension, secureMode);
+        }  else if (extensionType === 'HIVE-MIRROR') {
+          return serializeHiveExtensionProperties(extension, secureMode);
+        }
+      };
+
+      var serializeExtensionModel = function(extensionModel, extensionType, secureMode) {
+        if (extensionType === 'snapshot') {
+          return serializeSnapshotExtensionModel(extensionModel, EntityFactory.newEntity('snapshot'));
+        } else if (extensionType === 'hdfs-mirror') {
+          return serializeHDFSExtensionModel(extensionModel, EntityModel.datasetModel.UIModel);
+        } else if (extensionType === 'hive-mirror') {
+          return serializeHiveExtensionModel(extensionModel, EntityModel.datasetModel.UIModel, secureMode);
+        }
+      };
+
+      return {
+        serializeExtensionProperties: serializeExtensionProperties,
+        serializeExtensionModel: serializeExtensionModel,
+        convertObjectToString: convertObjectToString,
+        convertTags: convertTags
+      };
+
+  }]);
+})();
diff --git a/falcon-ui/app/js/services/services.js b/falcon-ui/app/js/services/services.js
index 93d0482..41839fb 100644
--- a/falcon-ui/app/js/services/services.js
+++ b/falcon-ui/app/js/services/services.js
@@ -29,19 +29,19 @@
     'app.services.entity.factory',
     'app.services.entity.model',
     'app.services.instance',
-    'app.services.server'
+    'app.services.server',
+    'app.services.entity.scheduler',
+    'app.services.tooltip',
+    'app.services.entity.details',
+    'app.services.extension.serializer'
   ]);
 
   services.factory('SpinnersFlag', function () {
     return {
       show: false,
-      backShow: false
-    };
-  });
-  services.factory('SpinnersFlag', function () {
-    return {
-      show: false,
-      backShow: false
+      backShow: false,
+      saveShow: false,
+      validateShow: false
     };
   });
 
diff --git a/falcon-ui/app/test/controllers/HeaderControllerSpec.js b/falcon-ui/app/test/controllers/HeaderControllerSpec.js
index b3753db..9e2d986 100644
--- a/falcon-ui/app/test/controllers/HeaderControllerSpec.js
+++ b/falcon-ui/app/test/controllers/HeaderControllerSpec.js
@@ -29,30 +29,30 @@
               interface:[
                 {
                   _type:"readonly",
-                  _endpoint:"hftp://sandbox.hortonworks.com:50070",
+                  _endpoint:"hftp://localhost:50070",
                   _version:"2.2.0"
                 },
                 {
                   _type:"write",
-                  _endpoint:"hdfs://sandbox.hortonworks.com:8020",
+                  _endpoint:"hdfs://localhost:8020",
                   _version:"2.2.0"
 
                 },
                 {
                   _type:"execute",
-                  _endpoint:"sandbox.hortonworks.com:8050",
+                  _endpoint:"localhost:8050",
                   _version:"2.2.0"
 
                 },
                 {
                   _type:"workflow",
-                  _endpoint:"http://sandbox.hortonworks.com:11000/oozie/",
+                  _endpoint:"http://localhost:11000/oozie/",
                   _version:"4.0.0"
 
                 },
                 {
                   _type:"messaging",
-                  _endpoint:"tcp://sandbox.hortonworks.com:61616?daemon=true",
+                  _endpoint:"tcp://localhost:61616?daemon=true",
                   _version:"5.1.6"
 
                 }
diff --git a/falcon-ui/app/test/controllers/cluster/cluster-moduleSpec.js b/falcon-ui/app/test/controllers/cluster/cluster-moduleSpec.js
index 524f3eb..eef9630 100644
--- a/falcon-ui/app/test/controllers/cluster/cluster-moduleSpec.js
+++ b/falcon-ui/app/test/controllers/cluster/cluster-moduleSpec.js
@@ -26,12 +26,13 @@
       entityModelArrangeMock = jasmine.createSpyObj('EntityModel', ['arrangeFieldsOrder']),
       entityModel = {clusterModel :
         {cluster:{tags: "",interfaces:{interface:[
-            {_type:"readonly",_endpoint:"hftp://sandbox.hortonworks.com:50070",_version:"2.2.0"},
-            {_type:"write",_endpoint:"hdfs://sandbox.hortonworks.com:8020",_version:"2.2.0"},
-            {_type:"execute",_endpoint:"sandbox.hortonworks.com:8050",_version:"2.2.0"},
-            {_type:"workflow",_endpoint:"http://sandbox.hortonworks.com:11000/oozie/",_version:"4.0.0"},
-            {_type:"messaging",_endpoint:"tcp://sandbox.hortonworks.com:61616?daemon=true",_version:"5.1.6"}
-          ]},locations:{location:[{_name: "staging", _path: ""},{_name: "temp", _path: ""},{_name: "working", _path: ""}]},
+            {_type:"readonly",_endpoint:"hftp://localhost:50070",_version:"2.2.0"},
+            {_type:"write",_endpoint:"hdfs://localhost:8020",_version:"2.2.0"},
+            {_type:"execute",_endpoint:"localhost:8050",_version:"2.2.0"},
+            {_type:"workflow",_endpoint:"http://localhost:11000/oozie/",_version:"4.0.0"},
+            {_type:"messaging",_endpoint:"tcp://localhost:61616?daemon=true",_version:"5.1.6"},
+            {_type:"spark",_endpoint:"",_version:""}
+          ]},locations:{location:[{_name: "staging", _path: ""},{_name: "temp", _path: "/tmp"},{_name: "working", _path: ""}]},
           ACL: {_owner: "",_group: "",_permission: ""},properties: {property: [{ _name: "", _value: ""}]},
           _xmlns:"uri:falcon:cluster:0.1",_name:"",_description:"",_colo:""},
       }},
@@ -57,9 +58,16 @@
         $scope: scope,
         Falcon: falconServiceMock,
         EntityModel: entityModel,
-        $state: stateMock,
+        $state: {
+          current: {
+            name: 'main.forms.custer.general'
+          },
+          go: angular.noop
+        },
         X2jsService: x2jsServiceMock,
-        validationService:ValidationService
+        validationService:ValidationService,
+        $stateParams: {},
+        ClusterModel: {cluster : {}},
       });
       //
     }));
@@ -73,8 +81,8 @@
         expect(scope.secondStep).toEqual(false);
         expect(scope.clusterEntity.clusterModel.cluster.properties.property).toEqual([{ _name: "", _value: ""}]);
 
-        expect(scope.registry).toEqual({ check: false });
-        expect(scope.registry).toEqual({ check: false });
+        // expect(scope.registry).toEqual({ check: true });
+        // expect(scope.registry).toEqual({ check: true });
       });
     });
     describe('tags', function() {
@@ -137,7 +145,7 @@
         it('should init with default locations and correct values', function() {
 
           expect(scope.clusterEntity.clusterModel.cluster.locations.location).toEqual(
-            [{ _name : 'staging', _path : '' }, { _name : 'temp', _path : '' }, { _name : 'working', _path : '' }, { _name : '', _path : '' }]
+            [{ _name : 'staging', _path : '' }, { _name : 'temp', _path : '/tmp' }, { _name : 'working', _path : '' }]
           );
         });
       });
@@ -264,16 +272,16 @@
         it('should delete registry interface only if not checked', function() {
           scope.validations = validationService;
           scope.clusterEntity.clusterModel.cluster.tags = "";
-          expect(scope.registry.check).toBe(true);
-          expect(scope.clusterEntity.clusterModel.cluster.interfaces.interface.length).toEqual(6);
-          expect(scope.clusterEntity.clusterModel.cluster.interfaces.interface[5]).toEqual({ _type : 'registry', _endpoint : '', _version : '' });
+          expect(scope.registry.check).toBe(false);
+          expect(scope.clusterEntity.clusterModel.cluster.interfaces.interface.length).toEqual(7);
+          //expect(scope.clusterEntity.clusterModel.cluster.interfaces.interface[5]).toEqual({ _type : 'registry', _endpoint : 'thrift://<hostname>:9083', _version : '' });
           scope.goSummaryStep();
-          expect(scope.clusterEntity.clusterModel.cluster.interfaces.interface[5]).toEqual({ _type : 'registry', _endpoint : '', _version : '' });
+          //expect(scope.clusterEntity.clusterModel.cluster.interfaces.interface[5]).toEqual({ _type : 'registry', _endpoint : 'thrift://<hostname>:9083', _version : '' });
           scope.registry.check = false;
           scope.clusterEntity.clusterModel.cluster.ACL = { _owner : '', _group : '', _permission : '' };
           scope.clusterEntity.clusterModel.cluster.tags = "";
           scope.goSummaryStep();
-          expect(scope.clusterEntity.clusterModel.cluster.interfaces.interface[5]).toBeUndefined();
+          expect(scope.clusterEntity.clusterModel.cluster.interfaces.interface[7]).toBeUndefined();
           expect(scope.clusterEntity.clusterModel.cluster.interfaces.interface.length).toEqual(5);
         });
 
@@ -333,4 +341,4 @@
     });
   });
 
-})();
\ No newline at end of file
+})();
diff --git a/falcon-ui/app/test/controllers/feed/FeedGeneralInformationControllerSpec.js b/falcon-ui/app/test/controllers/feed/FeedGeneralInformationControllerSpec.js
index 34c39cb..e89f088 100644
--- a/falcon-ui/app/test/controllers/feed/FeedGeneralInformationControllerSpec.js
+++ b/falcon-ui/app/test/controllers/feed/FeedGeneralInformationControllerSpec.js
@@ -32,6 +32,7 @@
 
       controller = $controller('FeedGeneralInformationController', {
         $scope: scope,
+        clustersList: [],
         $state: {},
         $filter: $filter
       });
diff --git a/falcon-ui/app/test/controllers/feed/FeedLocationControllerSpec.js b/falcon-ui/app/test/controllers/feed/FeedLocationControllerSpec.js
index 8c584af..cc1320f 100644
--- a/falcon-ui/app/test/controllers/feed/FeedLocationControllerSpec.js
+++ b/falcon-ui/app/test/controllers/feed/FeedLocationControllerSpec.js
@@ -31,8 +31,7 @@
            active: true,
            locations: [
              {type: 'data', path: '/'},
-             {type: 'stats', path: '/'},
-             {type: 'meta', path: '/'}
+             {type: 'stats', path: '/'}
            ]
          },
          catalog: {
diff --git a/falcon-ui/app/test/controllers/feed/FeedRootCtrlSpec.js b/falcon-ui/app/test/controllers/feed/FeedRootCtrlSpec.js
index 8514435..1ed2f58 100644
--- a/falcon-ui/app/test/controllers/feed/FeedRootCtrlSpec.js
+++ b/falcon-ui/app/test/controllers/feed/FeedRootCtrlSpec.js
@@ -26,11 +26,14 @@
     var controllerProvider;
     var falconServiceMock;
 
-    beforeEach(module('app.controllers.feed', 'dateHelper'));
+    beforeEach(module('app.controllers.feed', 'dateHelper', 'routeHelper'));
 
-    beforeEach(inject(function($q, $rootScope, $controller, DateHelper) {
+    beforeEach(inject(function($q, $rootScope, $controller, DateHelper, RouteHelper) {
       scope = $rootScope.$new();
       scope.models = {};
+      scope.$parent = $rootScope.$new();
+      scope.$parent.models = {};
+      scope.$parent.models.feedModel = undefined;
       entityFactoryMock = jasmine.createSpyObj('EntityFactory', ['newEntity']);
       serializerMock = jasmine.createSpyObj('EntitySerializer', ['preDeserialize']);
       falconServiceMock = jasmine.createSpyObj('Falcon', ['postUpdateEntity', 'postSubmitEntity', 'logRequest', 'logResponse']);
@@ -39,12 +42,14 @@
       controller = $controller('FeedController', {
         $scope: scope,
         $state: {
-          $current:{
+          current:{
             name: 'main.forms.feed.general'
           },
           go: angular.noop
         },
-        Falcon: falconServiceMock
+        Falcon: falconServiceMock,
+        FeedModel: {feed : {}},
+        datasourcesList: []
       });
     }));
 
@@ -75,7 +80,7 @@
     describe('loadOrCreateEntity()', function() {
       it('Should deserialize the entity if the xml is found on the scope', function() {
 
-        controller = createController();
+        controller = createController({name: 'FeedName'});
         var createdFeed =  {};
         var deserialzedFeed =  {};
         var feedModel = {name: 'FeedName'};
@@ -93,13 +98,12 @@
       });
 
       it('Should not deserialize the entity if the xml is not found on the scope', function() {
-        controller = createController();
+        controller = createController(undefined);
         var createdFeed =  {};
         var deserialzedFeed =  {};
         serializerMock.preDeserialize.andReturn(deserialzedFeed);
         entityFactoryMock.newEntity.andReturn(createdFeed);
 
-
         var feed = scope.loadOrCreateEntity();
 
         expect(serializerMock.preDeserialize).not.toHaveBeenCalled();
@@ -108,13 +112,13 @@
       });
 
       it('Should clear the feedModel from the scope', function() {
-        controller = createController();
+        controller = createController(undefined);
         entityFactoryMock.newEntity.andReturn({});
         scope.models.feedModel = {};
 
         scope.loadOrCreateEntity();
 
-        expect(scope.models.feedModel).toBe(null);
+        expect(scope.$parent.models.feedModel).toBe(null);
       });
 
 
@@ -139,7 +143,6 @@
 
         scope.saveEntity();
 
-        expect(scope.editingMode).toBe(false);
         expect(falconServiceMock.postSubmitEntity).not.toHaveBeenCalled();
         expect(falconServiceMock.postUpdateEntity).toHaveBeenCalledWith('<?xml version="1.0" encoding="UTF-8" standalone="yes"?><feed><clusters><cluster></cluster></clusters></feed>', 'feed', 'FeedOne');
       });
@@ -162,25 +165,26 @@
 
         scope.saveEntity();
 
-        expect(scope.cloningMode).toBe(false);
         expect(falconServiceMock.postSubmitEntity).toHaveBeenCalledWith('<?xml version="1.0" encoding="UTF-8" standalone="yes"?><feed><clusters><cluster></cluster></clusters></feed>', 'feed');
         expect(falconServiceMock.postUpdateEntity).not.toHaveBeenCalled();
       });
 
     });
 
-    function createController() {
+    function createController(feedModel) {
       return controllerProvider('FeedController', {
         $scope: scope,
         $state: {
-          $current:{
+          current:{
             name: 'main.forms.feed.general'
           },
           go: angular.noop
         },
         Falcon: {},
         EntityFactory: entityFactoryMock,
-        EntitySerializer: serializerMock
+        EntitySerializer: serializerMock,
+        FeedModel: feedModel,
+        datasourcesList: []
       });
     }
 
diff --git a/falcon-ui/app/test/controllers/feed/FeedSummaryControllerSpec.js b/falcon-ui/app/test/controllers/feed/FeedSummaryControllerSpec.js
index 90d3fb9..f514792 100644
--- a/falcon-ui/app/test/controllers/feed/FeedSummaryControllerSpec.js
+++ b/falcon-ui/app/test/controllers/feed/FeedSummaryControllerSpec.js
@@ -21,9 +21,9 @@
   var controller;
 
   describe('FeedSummaryController', function () {
-    beforeEach(module('app.controllers.feed'));
+    beforeEach(module('app.controllers.feed','dateHelper'));
 
-    beforeEach(inject(function($q, $rootScope, $controller) {
+    beforeEach(inject(function($q, $rootScope, $controller, DateHelper) {
       scope = $rootScope.$new();
       scope.feed = {};
 
diff --git a/falcon-ui/app/test/controllers/process/ProcessClustersCtrlSpec.js b/falcon-ui/app/test/controllers/process/ProcessClustersCtrlSpec.js
index a6b4d58..f760e0c 100644
--- a/falcon-ui/app/test/controllers/process/ProcessClustersCtrlSpec.js
+++ b/falcon-ui/app/test/controllers/process/ProcessClustersCtrlSpec.js
@@ -21,9 +21,9 @@
   var controller;
 
   describe('ProcessClustersCtrl', function () {
-    beforeEach(module('app.controllers.process'));
+    beforeEach(module('app.controllers.process', 'dateHelper'));
 
-    beforeEach(inject(function($q, $rootScope, $controller) {
+    beforeEach(inject(function($q, $rootScope, $controller, DateHelper) {
       scope = $rootScope.$new();
       scope.process = {};
       controller = $controller('ProcessClustersCtrl', {
@@ -36,7 +36,7 @@
       it('Should add date format', function() {
         scope.init();
 
-        expect(scope.dateFormat).toBe('MM/dd/yyyy');
+        expect(scope.dateFormat).not.toBe(null);
       });
     });
 
@@ -52,7 +52,7 @@
 
         scope.openDatePicker(eventMock, container);
 
-        expect(scope.dateFormat).toBe('MM/dd/yyyy');
+        expect(scope.dateFormat).not.toBe(null);
       });
     });
 
diff --git a/falcon-ui/app/test/controllers/process/ProcessGeneralInformationCtrlSpec.js b/falcon-ui/app/test/controllers/process/ProcessGeneralInformationCtrlSpec.js
index 6008456..df148c1 100644
--- a/falcon-ui/app/test/controllers/process/ProcessGeneralInformationCtrlSpec.js
+++ b/falcon-ui/app/test/controllers/process/ProcessGeneralInformationCtrlSpec.js
@@ -22,9 +22,9 @@
 
 
   describe('ProcessGeneralInformationCtrl', function () {
-    beforeEach(module('app.controllers.process'));
+    beforeEach(module('app.controllers.process', 'dateHelper'));
 
-    beforeEach(inject(function($q, $rootScope, $controller) {
+    beforeEach(inject(function($q, $rootScope, $controller, DateHelper) {
       scope = $rootScope.$new();
       scope.entityType = 'process';
       scope.process = {
@@ -32,7 +32,9 @@
       };
 
       controller = $controller('ProcessGeneralInformationCtrl', {
-        $scope: scope
+        $scope: scope,
+        clustersList: [],
+        feedsList: []
       });
     }));
 
@@ -79,33 +81,4 @@
     });
   })
 
-  describe('Versions', function() {
-    it('Should display the oozie versions when oozie workflow is selected', function() {
-      var expectedVersions = ['3.1.3-incubating', '3.2.0-incubating', '3.3.0', '3.3.1', '3.3.2', '4.0.0', '4.0.1'];
-      scope.process.workflow = {engine: 'oozie'};
-
-      scope.selectWorkflow();
-
-      expect(scope.versions).toEqual(expectedVersions);
-    });
-
-    it('Should display the pig versions when pig workflow is selected', function() {
-      var expectedVersions = ['pig-0.10.0', 'pig-0.10.1', 'pig-0.11.0', 'pig-0.11.1', 'pig-0.12.0', 'pig-0.12.1', 'pig-0.13.0', 'pig-0.8.0', 'pig-0.8.1', ' pig-0.9.0', ' pig-0.9.1', 'pig-0.9.2'];
-      scope.process.workflow = {engine: 'pig'};
-
-      scope.selectWorkflow();
-
-      expect(scope.versions).toEqual(expectedVersions);
-    });
-
-    it('Should display the hive versions when hive workflow is selected', function() {
-      var expectedVersions = ['hive-0.10.0', 'hive-0.11.0', 'hive-0.12.0', 'hive-0.13.0', 'hive-0.13.1', 'hive-0.6.0', 'hive-0.7.0', 'hive-0.8.0', 'hive-0.8.1', 'hive-0.9.0'];
-      scope.process.workflow = {engine: 'hive'};
-
-      scope.selectWorkflow();
-
-      expect(scope.versions).toEqual(expectedVersions);
-    });
-  });
-
-})();
\ No newline at end of file
+})();
diff --git a/falcon-ui/app/test/controllers/process/ProcessRootCtrlSpec.js b/falcon-ui/app/test/controllers/process/ProcessRootCtrlSpec.js
index 78cf26a..0eec39b 100644
--- a/falcon-ui/app/test/controllers/process/ProcessRootCtrlSpec.js
+++ b/falcon-ui/app/test/controllers/process/ProcessRootCtrlSpec.js
@@ -22,14 +22,21 @@
   var controllerProvider;
   var entityFactoryMock;
   var serializerMock;
+  var falconServiceMock;
 
   describe('ProcessRootCtrl', function () {
 
-    beforeEach(module('app.controllers.process'));
+    beforeEach(module('app.controllers.process','dateHelper','routeHelper'));
 
-    beforeEach(inject(function($q, $rootScope, $controller) {
+    beforeEach(inject(function($q, $rootScope, $controller, DateHelper, RouteHelper) {
+      falconServiceMock = jasmine.createSpyObj('Falcon', ['postUpdateEntity', 'postSubmitEntity', 'logRequest', 'logResponse']);
+
       scope = $rootScope.$new();
       scope.models = {};
+      scope.$parent = $rootScope.$new();
+      scope.$parent.models = {};
+      scope.process = {};
+      scope.entityType = 'process';
       controllerProvider = $controller;
       entityFactoryMock = jasmine.createSpyObj('EntityFactory', ['newEntity']);
       serializerMock = jasmine.createSpyObj('EntitySerializer', ['preDeserialize']);
@@ -37,13 +44,15 @@
       controller = $controller('ProcessRootCtrl', {
         $scope: scope,
         $state: {
-          $current:{
+          current:{
             name: 'forms.process.general'
           },
           go: angular.noop
         },
         EntityFactory: entityFactoryMock,
-        EntitySerializer: serializerMock
+        EntitySerializer: serializerMock,
+        Falcon: falconServiceMock,
+        ProcessModel : undefined
       });
     }));
 
@@ -52,10 +61,11 @@
       expect(scope.entityType).toBe('process');
     });
 
-    it('Should be initialized properly', function() {
-      scope.init();
-
-      expect(scope.editXmlDisabled).toBe(true);
+    describe('init', function() {
+      it('Should be initialized properly', function() {
+        scope.init();
+        expect(scope.editXmlDisabled).toBe(true);
+      });
     });
 
     it('Should toggle editXmlDisable value to true', function() {
@@ -76,7 +86,7 @@
 
     it('Should deserialize the entity if the xml is found on the scope', function() {
 
-      controller = createController();
+      controller = createController({name: 'ProcessName'});
       var createdProcess =  {};
       var deserialzedProcess =  {};
       var processModel = {name: 'ProcessName'};
@@ -92,7 +102,7 @@
     });
 
     it('Should not deserialize the entity if the xml is not found on the scope', function() {
-      controller = createController();
+      controller = createController(undefined);
       var createdProcess =  {};
       var deserialzedProcess =  {};
       serializerMock.preDeserialize.andReturn(deserialzedProcess);
@@ -106,29 +116,70 @@
     });
 
     it('Should clear the processModel from the scope', function() {
-      controller = createController();
+      controller = createController({name: 'ProcessName'});
       entityFactoryMock.newEntity.andReturn({});
       scope.models.processModel = {};
 
       scope.loadOrCreateEntity();
 
-      expect(scope.models.processModel).toBe(null);
+      expect(scope.$parent.models.processModel).toBe(null);
     });
 
 
+    describe('saveEntity', function() {
+      it('Should save the update the entity if in edit mode', function() {
+        falconServiceMock.postUpdateEntity.andReturn(successResponse({}));
+        scope.editingMode = true;//---this line doesnt work
+        scope.$parent.cloningMode = false;
+        scope.process = { name:  'ProcessOne'};
+        scope.xml = '<process/>';
+
+        scope.saveEntity();
+
+        expect(falconServiceMock.postSubmitEntity).not.toHaveBeenCalled();
+        expect(falconServiceMock.postUpdateEntity).toHaveBeenCalledWith('<?xml version="1.0" encoding="UTF-8" standalone="yes"?><process/>', 'process', 'ProcessOne');
+      });
+
+      it('Should save the update the entity if in cloning mode', function() {
+        falconServiceMock.postSubmitEntity.andReturn(successResponse({}));
+        scope.cloningMode = true;//---this line doesnt work
+        scope.$parent.cloningMode = true;
+        scope.process = { name:  'ProcessOne'};
+        scope.xml = '<process/>';
+
+        scope.saveEntity();
+
+        expect(falconServiceMock.postSubmitEntity).toHaveBeenCalledWith('<?xml version="1.0" encoding="UTF-8" standalone="yes"?><process/>', 'process');
+        expect(falconServiceMock.postUpdateEntity).not.toHaveBeenCalled();
+      });
+
+    });
+
+    function successResponse(value) {
+      var fakePromise = {};
+      fakePromise.success = function(callback) {
+        callback(value);
+        return fakePromise;
+      };
+      fakePromise.error = angular.noop;
+      return fakePromise;
+    }
+
+
   });
 
-  function createController() {
+  function createController(processModel) {
     return controllerProvider('ProcessRootCtrl', {
       $scope: scope,
       $state: {
-        $current:{
+        current:{
           name: 'forms.process.general'
         },
         go: angular.noop
       },
       EntityFactory: entityFactoryMock,
-      EntitySerializer: serializerMock
+      EntitySerializer: serializerMock,
+      ProcessModel : processModel
     });
   }
 
diff --git a/falcon-ui/app/test/controllers/process/ProcessSummaryCtrlSpec.js b/falcon-ui/app/test/controllers/process/ProcessSummaryCtrlSpec.js
index a8ee968..ce3a3b2 100644
--- a/falcon-ui/app/test/controllers/process/ProcessSummaryCtrlSpec.js
+++ b/falcon-ui/app/test/controllers/process/ProcessSummaryCtrlSpec.js
@@ -17,72 +17,11 @@
  */
 (function () {
   'use strict';
-  var scope, controller, falconServiceMock;
+  var scope, controller;
 
   describe('ProcessSummaryCtrl', function () {
     beforeEach(module('app.controllers.process'));
 
-    beforeEach(inject(function($q, $rootScope, $controller) {
-      falconServiceMock = jasmine.createSpyObj('Falcon', ['postUpdateEntity', 'postSubmitEntity', 'logRequest', 'logResponse']);
-
-      scope = $rootScope.$new();
-      scope.process = {};
-      scope.entityType = 'process';
-      controller = $controller('ProcessSummaryCtrl', {
-        $scope: scope,
-        Falcon: falconServiceMock,
-        $state: {
-          $current:{
-            name: 'main.forms.feed.general'
-          },
-          go: angular.noop
-        }
-      });
-    }));
-
-
-    describe('saveEntity', function() {
-      it('Should save the update the entity if in edit mode', function() {
-        falconServiceMock.postUpdateEntity.andReturn(successResponse({}));
-        scope.editingMode = true;//---this line doesnt work
-        scope.$parent.cloningMode = false;
-        scope.process = { name:  'ProcessOne'};
-        scope.xml = '<process/>';
-
-        scope.saveEntity();
-
-        expect(scope.editingMode).toBe(false);
-        expect(falconServiceMock.postSubmitEntity).not.toHaveBeenCalled();
-        expect(falconServiceMock.postUpdateEntity).toHaveBeenCalledWith('<?xml version="1.0" encoding="UTF-8" standalone="yes"?><process/>', 'process', 'ProcessOne');
-      });
-
-      it('Should save the update the entity if in cloning mode', function() {
-        falconServiceMock.postSubmitEntity.andReturn(successResponse({}));
-        scope.cloningMode = true;//---this line doesnt work
-        scope.$parent.cloningMode = true;
-        scope.process = { name:  'ProcessOne'};
-        scope.xml = '<process/>';
-
-        scope.saveEntity();
-
-        expect(scope.cloningMode).toBe(false);
-        expect(falconServiceMock.postSubmitEntity).toHaveBeenCalledWith('<?xml version="1.0" encoding="UTF-8" standalone="yes"?><process/>', 'process');
-        expect(falconServiceMock.postUpdateEntity).not.toHaveBeenCalled();
-      });
-
-    });
-
-    function successResponse(value) {
-      var fakePromise = {};
-      fakePromise.success = function(callback) {
-        callback(value);
-        return fakePromise;
-      };
-      fakePromise.error = angular.noop;
-      return fakePromise;
-    }
-
-
   });
 
-})();
\ No newline at end of file
+})();
diff --git a/falcon-ui/app/test/e2e/protractor.js b/falcon-ui/app/test/e2e/protractor.js
index 6c2d97e..37d6e65 100644
--- a/falcon-ui/app/test/e2e/protractor.js
+++ b/falcon-ui/app/test/e2e/protractor.js
@@ -1,25 +1,7 @@
-/**
- * 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.
- */
-
 exports.config = {
   chromeDriver: '../../../node_modules/protractor/selenium/chromedriver',
 
   jasmineNodeOpts: {
     showColors: true
   }
-};
+};
\ No newline at end of file
diff --git a/falcon-ui/app/test/services/EntitySerializerSpec.js b/falcon-ui/app/test/services/EntitySerializerSpec.js
index 5f83225..74d69fa 100644
--- a/falcon-ui/app/test/services/EntitySerializerSpec.js
+++ b/falcon-ui/app/test/services/EntitySerializerSpec.js
@@ -136,9 +136,9 @@
 
         var feed = serializer.preDeserialize(feedModel, 'feed');
 
-        expect(feed.lateArrival.active).toBe(false);
+        expect(feed.lateArrival.active).toBe(true);
         expect(feed.lateArrival.cutOff.unit).toBe('hours');
-        expect(feed.lateArrival.cutOff.quantity).toBe(null);
+        expect(feed.lateArrival.cutOff.quantity).toBe(4);
       });
 
       it('Should copy availabilityFlag', function() {
@@ -160,7 +160,7 @@
 
         var feed = serializer.preDeserialize(feedModel, 'feed');
 
-        expect(feed.availabilityFlag).toBe(null);
+        expect(feed.availabilityFlag).toBe("_success");
       });
 
       it('Should copy custom properties', function() {
@@ -213,7 +213,7 @@
 
         var feed = serializer.preDeserialize(feedModel, 'feed');
 
-        expect(feed.properties.length).toBe(6);
+        expect(feed.properties.length).toBe(5);
         expect(feed.properties[0].key).toBe('queueName');
         expect(feed.properties[0].value).toBe('QueueName');
       });
@@ -232,31 +232,14 @@
 
         var feed = serializer.preDeserialize(feedModel, 'feed');
 
-        expect(feed.properties.length).toBe(6);
+        expect(feed.properties.length).toBe(5);
+
         expect(feed.properties[0].key).toBe('queueName');
-        expect(feed.properties[0].value).toBe('');
+        expect(feed.properties[0].value).toBe('default');
         expect(feed.properties[1].key).toBe('jobPriority');
         expect(feed.properties[1].value).toBe('MEDIUM');
       });
 
-      it('Should copy timeout as a Frequency Object', function() {
-        var feedModel = {
-          feed: {
-            properties: {property: [
-              {_name: 'queueName', _value: 'QueueName'},
-              {_name: 'timeout', _value: 'days(4)'}
-            ]}
-          }
-        };
-
-        var feed = serializer.preDeserialize(feedModel, 'feed');
-
-        expect(feed.properties.length).toBe(6);
-        expect(feed.properties[2].key).toBe('timeout');
-        expect(feed.properties[2].value.quantity).toBe('4');
-        expect(feed.properties[2].value.unit).toBe('days');
-      });
-
       it('Should copy file system locations', function() {
         var feedModel = {
           feed: {
@@ -270,7 +253,6 @@
         var feed = serializer.preDeserialize(feedModel, 'feed');
         var locations = feed.storage.fileSystem.locations;
 
-        expect(feed.storage.fileSystem.active).toBe(true);
         expect(locations.length).toBe(2);
         expect(locations[0].type).toBe('data');
         expect(locations[0].path).toBe('/none1');
@@ -281,55 +263,24 @@
       it('Should not copy file system locations if they are not defined and keep the defaults', function() {
         var feedModel = {
           feed: {
-          }
-        };
-
-        var feed = serializer.preDeserialize(feedModel, 'feed');
-        var locations = feed.storage.fileSystem.locations;
-
-        expect(feed.storage.fileSystem.active).toBe(false);
-        expect(locations.length).toBe(3);
-        expect(locations[0].type).toBe('data');
-        expect(locations[0].path).toBe('/');
-        expect(locations[1].type).toBe('stats');
-        expect(locations[1].path).toBe('/');
-        expect(locations[2].type).toBe('meta');
-        expect(locations[2].path).toBe('/');
-      });
-
-      it('Should set file system active flag as false if there are no locations are', function() {
-        var feedModel = {
-          feed: {}
-        };
-
-        var feed = serializer.preDeserialize(feedModel, 'feed');
-
-        expect(feed.storage.fileSystem.active).toBe(false);
-      });
-
-      it('Should copy catalog uri', function() {
-        var feedModel = {
-          feed: {
-            "table": {
-              _uri : 'table:uri'
-            }
+            dataTransferType: 'hdfs',
           }
         };
 
         var feed = serializer.preDeserialize(feedModel, 'feed');
 
-        expect(feed.storage.catalog.active).toBe(true);
-        expect(feed.storage.catalog.catalogTable.uri).toBe('table:uri');
+        expect(feed.storage.fileSystem.locations).toBe(null);
       });
 
       it('Should not copy catalog uri if not present', function() {
         var feedModel = {
-          feed: {}
+          feed: {
+            dataTransferType: 'hive',
+          }
         };
 
         var feed = serializer.preDeserialize(feedModel, 'feed');
 
-        expect(feed.storage.catalog.active).toBe(false);
         expect(feed.storage.catalog.catalogTable.uri).toBe(null);
       });
 
@@ -418,12 +369,12 @@
       it('Should copy clusters locations', function() {
         var feedModel = {
           feed: {
+            dataTransferType: 'hdfs',
             clusters: {cluster: [{_name: 'ClusterOne', _type: 'target',
               locations: {
                 location: [
-                  {_type: 'stats', _path: '/path1'},
-                  {_type: 'data', _path: '/path2'},
-                  {_type: 'tmp', _path: '/path3'}
+                  {_type: 'data', _path: '/path1'},
+                  {_type: 'stats', _path: '/path2'}
                 ]}
             }]}
           }
@@ -432,64 +383,45 @@
         var feed = serializer.preDeserialize(feedModel, 'feed');
         var locations = feed.clusters[0].storage.fileSystem.locations;
 
-        expect(feed.clusters[0].storage.fileSystem.active).toBe(true);
-        expect(locations.length).toBe(3);
-        expect(locations[0].type).toBe('stats');
+        expect(locations.length).toBe(2);
+        expect(locations[0].type).toBe('data');
         expect(locations[0].path).toBe('/path1');
-        expect(locations[1].type).toBe('data');
+        expect(locations[1].type).toBe('stats');
         expect(locations[1].path).toBe('/path2');
-        expect(locations[2].type).toBe('tmp');
-        expect(locations[2].path).toBe('/path3');
       });
 
       it('filesystem should be inactive if there are no locations', function() {
         var feedModel = {
           feed: {
-            clusters: {cluster: [{_name: 'ClusterOne', _type: 'target'}]}
+            dataTransferType: 'hdfs',
+            clusters: {cluster: [{_name: 'ClusterOne', _type: 'target',
+              locations: {
+                location: []}
+            }]}
           }
         };
 
         var feed = serializer.preDeserialize(feedModel, 'feed');
         var locations = feed.clusters[0].storage.fileSystem.locations;
-
-        expect(feed.clusters[0].storage.fileSystem.active).toBe(false);
-        expect(locations.length).toBe(3);
+        expect(locations.length).toBe(0);
       });
 
       it('Should copy catalog uri', function() {
         var feedModel = {
           feed: {
             clusters: {cluster: [{_name: 'ClusterOne', _type: 'target',
-              "table": {
+              table: {
                 _uri : 'table:uri'
               }
             }]}
           }
         };
 
-
         var feed = serializer.preDeserialize(feedModel, 'feed');
         var catalogStorage = feed.clusters[0].storage.catalog;
-
-        expect(catalogStorage.active).toBe(true);
         expect(catalogStorage.catalogTable.uri).toBe('table:uri');
       });
 
-      it('Should set catalog storage as inactive when not present in the xml', function() {
-        var feedModel = {
-          feed: {
-            clusters: {cluster: [{_name: 'ClusterOne', _type: 'target'}]}
-          }
-        };
-
-
-        var feed = serializer.preDeserialize(feedModel, 'feed');
-        var catalogStorage = feed.clusters[0].storage.catalog;
-
-        expect(catalogStorage.active).toBe(false);
-        expect(catalogStorage.catalogTable.uri).toBe(null);
-      });
-
       it('Should copy timezone', function() {
         var feedModel = {
           feed: {
@@ -705,7 +637,7 @@
           properties: [
             {key: 'queueName', value: null},
             {key: 'jobPriority', value: 'HIGH'},
-            {key: 'timeout', value: {quantity: null, unit: 'weeks'}}
+            {key: 'timeout', value: {quantity: 2, unit: 'months'}}
           ]
         };
 
@@ -715,6 +647,7 @@
             "<feed xmlns='uri:falcon:feed:0.1' name='FeedName'>" +
             "<properties>" +
             "<property name='jobPriority' value='HIGH'></property>" +
+            "<property name='timeout' value='months(2)'></property>" +
             "</properties>" +
             "</feed>"
         );
@@ -723,13 +656,13 @@
 
       it('Should transform locations properly if file system storage is active', function () {
         var feed = {name: 'FeedName',
+          dataTransferType: 'hdfs',
           storage: {
             fileSystem: {
               active: true,
               locations: [
                 {type: 'data', path: '/none1'},
-                {type: 'stats', path: '/none2'},
-                {type: 'meta', path: '/none3'}
+                {type: 'stats', path: '/none2'}
               ]
             }
           }
@@ -742,7 +675,6 @@
             "<locations>" +
             "<location type='data' path='/none1'></location>" +
             "<location type='stats' path='/none2'></location>" +
-            "<location type='meta' path='/none3'></location>" +
             "</locations>" +
             "</feed>"
         );
@@ -756,8 +688,7 @@
               active: false,
               locations: [
                 {type: 'data', path: '/none1'},
-                {type: 'stats', path: '/none2'},
-                {type: 'meta', path: '/none3'}
+                {type: 'stats', path: '/none2'}
               ]
             }
           }
@@ -773,6 +704,7 @@
 
       it('Should transform catalog properly if catalog storage is active', function () {
         var feed = {name: 'FeedName',
+          dataTransferType: 'hive',
           storage: {
             catalog: {
               active: true,
@@ -828,8 +760,7 @@
                   active: true,
                   locations: [
                     {type: 'data', path: '/none1'},
-                    {type: 'stats', path: '/none2'},
-                    {type: 'meta', path: '/none3'}
+                    {type: 'stats', path: '/none2'}
                   ]
                 },
                 catalog: {
@@ -848,8 +779,7 @@
                   active: true,
                   locations: [
                     {type: 'data', path: '/none4'},
-                    {type: 'stats', path: '/none5'},
-                    {type: 'meta', path: '/none6'}
+                    {type: 'stats', path: '/none5'}
                   ]
                 },
                 catalog: {
@@ -872,7 +802,6 @@
             "<locations>" +
             "<location type='data' path='/none1'></location>" +
             "<location type='stats' path='/none2'></location>" +
-            "<location type='meta' path='/none3'></location>" +
             "</locations>" +
             "<table uri='/primaryuri'/>" +
             "</cluster>" +
@@ -882,7 +811,6 @@
             "<locations>" +
             "<location type='data' path='/none4'></location>" +
             "<location type='stats' path='/none5'></location>" +
-            "<location type='meta' path='/none6'></location>" +
             "</locations>" +
             "<table uri='/secondaryuri'/>" +
             "</cluster>" +
@@ -1282,4 +1210,4 @@
     }
 
   });
-})();
\ No newline at end of file
+})();
diff --git a/falcon-ui/app/test/services/ValdationServiceSpec.js b/falcon-ui/app/test/services/ValdationServiceSpec.js
index bd43927..18f9f01 100644
--- a/falcon-ui/app/test/services/ValdationServiceSpec.js
+++ b/falcon-ui/app/test/services/ValdationServiceSpec.js
@@ -40,7 +40,7 @@
     describe('patterns', function () {
       it('Should return an object with the validation patterns', function () {
         expect(validationService.patterns).toBeDefined();
-        expect(validationService.patterns.name).toEqual(/^[a-zA-Z0-9-_]{1,60}$/);
+        expect(validationService.patterns.name).toEqual(/^[a-zA-Z][\-a-zA-Z0-9]{1,39}$/);
 
       });
     });
diff --git a/falcon-ui/express-data/mockData.js b/falcon-ui/express-data/mockData.js
index 1c52358..9457df8 100644
--- a/falcon-ui/express-data/mockData.js
+++ b/falcon-ui/express-data/mockData.js
@@ -118,6 +118,10 @@
       {"type":"process","name":"hive-databases-mirror-test","status":"SUBMITTED","tags":{"tag":["_falcon_mirroring_type=HIVE","runsOn=target"]}},
       {"type":"process","name":"hive-db-tables-mirror-test","status":"SUBMITTED","tags":{"tag":["_falcon_mirroring_type=HIVE","runsOn=source"]}},
       {"type":"process","name":"mirror4","status":"SUBMITTED","tags":{"tag":["_falcon_mirroring_type=HDFS","runsOn=source"]}}
+    ]},
+	datasource:{"entity":[
+	  {"type":"DATASOURCE","name":"testConn1","status":"SUBMITTED","tags":null},
+	  {"type":"DATASOURCE","name":"testConn2","status":"SUBMITTED","tags":null}
     ]}
   },
     definitions = {
@@ -281,8 +285,49 @@
 
         'hive-db-tables-mirror-test': "<?xml version='1.0' encoding='UTF-8' standalone='yes'?><process xmlns='uri:falcon:process:0.1' name='hive-db-tables-mirror-test'><tags>_falcon_mirroring_type=HIVE,runsOn=source</tags><clusters><cluster name='completeCluster'><validity start='2015-05-01T09:42:00.000Z' end='2016-04-09T09:04:00.000Z'/></cluster></clusters><parallel>1</parallel><order>LAST_ONLY</order><frequency>months(7)</frequency><timezone>GMT+00:00</timezone><properties><property name='oozie.wf.subworkflow.classpath.inheritance' value='true'></property><property name='distcpMaxMaps' value='111'></property><property name='distcpMapBandwidth' value='678'></property><property name='targetCluster' value='primaryCluster'></property><property name='sourceCluster' value='completeCluster'></property><property name='targetHiveServer2Uri' value='some/path/staging'></property><property name='sourceHiveServer2Uri' value='thrift://localhost:10000'></property><property name='sourceStagingPath' value='/apps/falcon/backupCluster/staging'></property><property name='targetStagingPath' value='/apps/falcon/some/staging'></property><property name='targetNN' value='hdfs://sandbox.hortonworks.com:8020'></property><property name='sourceNN' value='hdfs://sandbox.hortonworks.com:8020'></property><property name='sourceServicePrincipal' value='hive'></property><property name='targetServicePrincipal' value='hive'></property><property name='targetMetastoreUri' value=''></property><property name='sourceMetastoreUri' value='thrift://localhost:9083'></property><property name='sourceTable' value='table1,table2,table3'></property><property name='sourceDatabase' value='database1'></property><property name='maxEvents' value='-10'></property><property name='replicationMaxMaps' value='52'></property><property name='clusterForJobRun' value='completeCluster'></property><property name='clusterForJobRunWriteEP' value='hdfs://sandbox.hortonworks.com:8020'></property><property name='drJobName' value='hive-db-tables-mirror-test'></property><property name='drNotifyEmail' value='hive-tables@test.com'></property></properties><workflow name='falcon-dr-hive-workflow' engine='oozie' path='hdfs://node-1.example.com:8020/apps/falcon/recipe/hive-disaster-recovery/resources/runtime/hive-disaster-recovery-workflow.xml' lib=''/><retry policy='PERIODIC' delay='months(60)' attempts='15'/><ACL owner='ambari-qa' group='users' permission='0x755'/></process>"
 
-      }
-
+      },
+	  DATASOURCE: {
+		 testConn1 :
+			"<datasource xmlns='uri:falcon:datasource:0.1' colo='testColo' type='mysql' name='testConn1'>" +
+				"<interfaces>" +
+					"<interface type='readonly' endpoint='jdbc:mysql://localhost:3306/test'>" +
+						"<credential type='password-text'>" +
+							"<userName>user1</userName>" +
+							"<passwordText>password1</passwordText>" +
+						"</credential>" +
+					"</interface>" +
+					"<credential type='password-text'>" +
+						"<userName>user1</userName>" +
+						"<passwordText>password1</passwordText>" +
+					"</credential>" +
+				"</interfaces>" +
+				"<driver>" +
+					"<clazz>com.mysql.jdbc.Driver</clazz>" +
+					"<jar>abc</jar>" +
+				"</driver>" +
+				"<ACL owner='root' group='users' permission='0x755'/>" +
+			"</datasource>",
+		testConn2 :
+			"<datasource xmlns='uri:falcon:datasource:0.1' colo='testColo' type='mysql' name='testConn2'>" +
+				"<interfaces>" +
+					"<interface type='readonly' endpoint='jdbc:mysql://localhost:3306/test'>" +
+						"<credential type='password-text'>" +
+							"<userName>user1</userName>" +
+							"<passwordText>password1</passwordText>" +
+						"</credential>" +
+					"</interface>" +
+					"<credential type='password-text'>" +
+						"<userName>user1</userName>" +
+						"<passwordText>password1</passwordText>" +
+					"</credential>" +
+				"</interfaces>" +
+				"<driver>" +
+					"<clazz>com.mysql.jdbc.Driver</clazz>" +
+					"<jar>abc</jar>" +
+				"</driver>" +
+				"<ACL owner='root' group='users' permission='0x755'/>" +
+			"</datasource>"
+	  }
     },
     instancesList = {
       FEED: [
@@ -582,7 +627,8 @@
     },
     verticesDirection = [
       {"results":[{"_id":"2wm3-aqU-4u","_type":"edge","_outV":40108,"_inV":16,"_label":"owned-by"},{"_id":"2wm1-aqU-5o","_type":"edge","_outV":40108,"_inV":4,"_label":"runs-on"},{"_id":"2wm7-apq-5w","_type":"edge","_outV":40016,"_inV":40108,"_label":"input"},{"_id":"2wm5-aqU-5E","_type":"edge","_outV":40108,"_inV":40012,"_label":"output"},{"_id":"2wlZ-aqU-86","_type":"edge","_outV":40108,"_inV":32,"_label":"instance-of"}],"totalSize":5},
-      {"results":[{"timestamp":"2015-03-26T02:45Z","name":"ambari-qa","type":"user","_id":16,"_type":"vertex"},{"timestamp":"2015-03-26T02:42Z","name":"primaryCluster","type":"cluster-entity","_id":4,"_type":"vertex"},{"timestamp":"2015-03-26T20:21Z","name":"SampleFeed1\/yearno=2014\/monthno=11","type":"feed-instance","_id":40016,"_type":"vertex"},{"timestamp":"2015-03-26T20:21Z","name":"SampleFeed6\/yearno=2014\/monthno=11","type":"feed-instance","_id":40012,"_type":"vertex"},{"timestamp":"2015-03-26T02:46Z","name":"SampleProcess3","type":"process-entity","version":"1.0","_id":32,"_type":"vertex"}],"totalSize":5},
+     //{"results":[{"timestamp":"2015-03-26T02:45Z","name":"ambari-qa","type":"user","_id":16,"_type":"vertex"},{"timestamp":"2015-03-26T02:42Z","name":"primaryCluster","type":"cluster-entity","_id":4,"_type":"vertex"},{"timestamp":"2015-03-26T20:21Z","name":"SampleFeed1\/yearno=2014\/monthno=11","type":"feed-instance","_id":40016,"_type":"vertex"},{"timestamp":"2015-03-26T20:21Z","name":"SampleFeed6\/yearno=2014\/monthno=11","type":"feed-instance","_id":40012,"_type":"vertex"},{"timestamp":"2015-03-26T02:46Z","name":"SampleProcess3","type":"process-entity","version":"1.0","_id":32,"_type":"vertex"}],"totalSize":5},
+      {"results":[{"timestamp":"2015-03-26T02:45Z","name":"ambari-qa","type":"user","_id":16,"_type":"vertex"},{"timestamp":"2015-03-26T02:42Z","name":"primaryCluster","type":"cluster-entity","_id":4,"_type":"vertex"},{"timestamp":"2015-03-26T20:21Z","name":"SampleFeed1\/yearno=2014\/monthno=11","type":"feed-instance","_id":40016,"_type":"vertex"},{"timestamp":"2015-03-26T20:21Z","name":"SampleFeed6-654351354651351684vd5svdv65fv6s5v61vs616sd51vsxd61v6\/yearno=2014\/monthno=11","type":"feed-instance","_id":40012,"_type":"vertex"},{"timestamp":"2015-03-26T02:46Z","name":"SampleProcess3","type":"process-entity","version":"1.0","_id":32,"_type":"vertex"}],"totalSize":5},
       {"results":[{"_id":"2w9d-apm-4u","_type":"edge","_outV":40012,"_inV":16,"_label":"owned-by"},{"_id":"2w9b-apm-4S","_type":"edge","_outV":40012,"_inV":4,"_label":"stored-in"},{"_id":"2whH-aqo-5E","_type":"edge","_outV":40076,"_inV":40012,"_label":"output"},{"_id":"2wif-aqs-5E","_type":"edge","_outV":40080,"_inV":40012,"_label":"output"},{"_id":"2w9f-api-5E","_type":"edge","_outV":40008,"_inV":40012,"_label":"output"},{"_id":"2wiN-aqw-5E","_type":"edge","_outV":40084,"_inV":40012,"_label":"output"},{"_id":"2wa1-apu-5E","_type":"edge","_outV":40020,"_inV":40012,"_label":"output"},{"_id":"2wjl-aqA-5E","_type":"edge","_outV":40088,"_inV":40012,"_label":"output"},{"_id":"2waz-apy-5E","_type":"edge","_outV":40024,"_inV":40012,"_label":"output"},{"_id":"2wjT-aqE-5E","_type":"edge","_outV":40092,"_inV":40012,"_label":"output"},{"_id":"2wb7-apC-5E","_type":"edge","_outV":40028,"_inV":40012,"_label":"output"},{"_id":"2wkr-aqI-5E","_type":"edge","_outV":40096,"_inV":40012,"_label":"output"},{"_id":"2wbF-apG-5E","_type":"edge","_outV":40032,"_inV":40012,"_label":"output"},{"_id":"2wkZ-aqM-5E","_type":"edge","_outV":40100,"_inV":40012,"_label":"output"},{"_id":"2wcd-apK-5E","_type":"edge","_outV":40036,"_inV":40012,"_label":"output"},{"_id":"2wlx-aqQ-5E","_type":"edge","_outV":40104,"_inV":40012,"_label":"output"},{"_id":"2wcL-apO-5E","_type":"edge","_outV":40040,"_inV":40012,"_label":"output"},{"_id":"2wm5-aqU-5E","_type":"edge","_outV":40108,"_inV":40012,"_label":"output"},{"_id":"2wdj-apS-5E","_type":"edge","_outV":40044,"_inV":40012,"_label":"output"},{"_id":"2wdR-apW-5E","_type":"edge","_outV":40048,"_inV":40012,"_label":"output"},{"_id":"2wep-aq0-5E","_type":"edge","_outV":40052,"_inV":40012,"_label":"output"},{"_id":"2weX-aq4-5E","_type":"edge","_outV":40056,"_inV":40012,"_label":"output"},{"_id":"2wfv-aq8-5E","_type":"edge","_outV":40060,"_inV":40012,"_label":"output"},{"_id":"2wg3-aqc-5E","_type":"edge","_outV":40064,"_inV":40012,"_label":"output"},{"_id":"2wgB-aqg-5E","_type":"edge","_outV":40068,"_inV":40012,"_label":"output"},{"_id":"2wh9-aqk-5E","_type":"edge","_outV":40072,"_inV":40012,"_label":"output"},{"_id":"2w99-apm-86","_type":"edge","_outV":40012,"_inV":28,"_label":"instance-of"}],"totalSize":27},
       {"results":[{"_id":"2w9t-apq-4u","_type":"edge","_outV":40016,"_inV":16,"_label":"owned-by"},{"_id":"2w9r-apq-4S","_type":"edge","_outV":40016,"_inV":4,"_label":"stored-in"},{"_id":"2wih-apq-5w","_type":"edge","_outV":40016,"_inV":40080,"_label":"input"},{"_id":"2wiP-apq-5w","_type":"edge","_outV":40016,"_inV":40084,"_label":"input"},{"_id":"2wa3-apq-5w","_type":"edge","_outV":40016,"_inV":40020,"_label":"input"},{"_id":"2wjn-apq-5w","_type":"edge","_outV":40016,"_inV":40088,"_label":"input"},{"_id":"2waB-apq-5w","_type":"edge","_outV":40016,"_inV":40024,"_label":"input"},{"_id":"2w9v-apq-5w","_type":"edge","_outV":40016,"_inV":40008,"_label":"input"},{"_id":"2wjV-apq-5w","_type":"edge","_outV":40016,"_inV":40092,"_label":"input"},{"_id":"2wb9-apq-5w","_type":"edge","_outV":40016,"_inV":40028,"_label":"input"},{"_id":"2wkt-apq-5w","_type":"edge","_outV":40016,"_inV":40096,"_label":"input"},{"_id":"2wbH-apq-5w","_type":"edge","_outV":40016,"_inV":40032,"_label":"input"},{"_id":"2wl1-apq-5w","_type":"edge","_outV":40016,"_inV":40100,"_label":"input"},{"_id":"2wcf-apq-5w","_type":"edge","_outV":40016,"_inV":40036,"_label":"input"},{"_id":"2wlz-apq-5w","_type":"edge","_outV":40016,"_inV":40104,"_label":"input"},{"_id":"2wcN-apq-5w","_type":"edge","_outV":40016,"_inV":40040,"_label":"input"},{"_id":"2wm7-apq-5w","_type":"edge","_outV":40016,"_inV":40108,"_label":"input"},{"_id":"2wdl-apq-5w","_type":"edge","_outV":40016,"_inV":40044,"_label":"input"},{"_id":"2wdT-apq-5w","_type":"edge","_outV":40016,"_inV":40048,"_label":"input"},{"_id":"2wer-apq-5w","_type":"edge","_outV":40016,"_inV":40052,"_label":"input"},{"_id":"2weZ-apq-5w","_type":"edge","_outV":40016,"_inV":40056,"_label":"input"},{"_id":"2wfx-apq-5w","_type":"edge","_outV":40016,"_inV":40060,"_label":"input"},{"_id":"2wg5-apq-5w","_type":"edge","_outV":40016,"_inV":40064,"_label":"input"},{"_id":"2wgD-apq-5w","_type":"edge","_outV":40016,"_inV":40068,"_label":"input"},{"_id":"2whb-apq-5w","_type":"edge","_outV":40016,"_inV":40072,"_label":"input"},{"_id":"2whJ-apq-5w","_type":"edge","_outV":40016,"_inV":40076,"_label":"input"},{"_id":"2w9p-apq-86","_type":"edge","_outV":40016,"_inV":12,"_label":"instance-of"}],"totalSize":27}
     ],
diff --git a/falcon-ui/karma.conf.js b/falcon-ui/karma.conf.js
index 776249f..11189e8 100644
--- a/falcon-ui/karma.conf.js
+++ b/falcon-ui/karma.conf.js
@@ -1,21 +1,3 @@
-/**
- * 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.
- */
-
 // Karma configuration
 // Generated on Wed Sep 24 2014 21:15:41 GMT-0500 (CDT)
 
diff --git a/falcon-ui/pom.xml b/falcon-ui/pom.xml
index bbb917c..f15af2b 100644
--- a/falcon-ui/pom.xml
+++ b/falcon-ui/pom.xml
@@ -15,8 +15,7 @@
    See the License for the specific language governing permissions and
    limitations under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <parent>
     <groupId>org.apache.falcon</groupId>
@@ -33,7 +32,7 @@
       <plugin>
         <groupId>com.github.eirslett</groupId>
         <artifactId>frontend-maven-plugin</artifactId>
-        <version>0.0.23</version>
+        <version>0.0.14</version>
         <executions>
 
           <execution>
@@ -76,6 +75,27 @@
               <arguments>test</arguments>
             </configuration>
           </execution>
+
+	  <execution>
+            <id>grunt copy webapp</id>
+            <goals>
+              <goal>grunt</goal>
+            </goals>
+            <configuration>
+              <arguments>copy:webapp</arguments>
+            </configuration>
+          </execution>
+
+	  <execution>
+            <id>grunt copy ambariview</id>
+            <goals>
+              <goal>grunt</goal>
+            </goals>
+            <configuration>
+              <arguments>copy:ambariview</arguments>
+            </configuration>
+          </execution>
+
         </executions>
       </plugin>
 
@@ -84,7 +104,9 @@
         <artifactId>apache-rat-plugin</artifactId>
         <configuration>
           <excludes>
+            <exclude>.git*</exclude>
             <exclude>app/js/lib/**</exclude>
+            <exclude>app/css/*.css</exclude>
             <exclude>app/css/bootstrap/**</exclude>
             <exclude>app/test/lib/**</exclude>
             <exclude>app/css/fonts/**</exclude>
@@ -98,7 +120,6 @@
             <exclude>bower.json</exclude>
             <exclude>karma.conf.js</exclude>
             <exclude>bower.json</exclude>
-            <exclude>app/css/main.css</exclude>
 	    <exclude>app/css/img/**</exclude>
             <exclude>app/test/e2e/protractor.js</exclude>
             <exclude>app/js/directives/ng-tags-input.js</exclude>
diff --git a/falcon-ui/server.js b/falcon-ui/server.js
index 298e10a..7cd0ab0 100644
--- a/falcon-ui/server.js
+++ b/falcon-ui/server.js
@@ -23,7 +23,7 @@
     mockData = require('./express-data/mockData.js'),
     chartData = require('./express-data/chartData.js'),
     server = express(),
-    PORT = 3000;
+    PORT = process.env.PORT || 3000;
 
   server.use('/', express.static(__dirname + '/dist'));
   server.use(bodyParser());
@@ -152,6 +152,27 @@
     }
   });
 
+  server.get('/api/entities/status/:type/:name', function(req, res) {
+	var responseMessage = {
+          "status": "SUCCEEDED",
+          "message": "default/SUBMITTED\n",
+          "requestId": "default/2009721512@qtp-1933075111-15 - 96165552-6fec-46c5-9646-8b28887d09b0\n"
+        };
+	 res.json(200, responseMessage);
+  });
+
+  server.post('/api/entities/validate/:type', function (req, res) {
+    var type = req.params.type.toLowerCase(),
+	  text = req.text,
+      name = req.params.name,
+      responseMessage = {
+        "status": "SUCCEEDED",
+        "message": "default/Validated successfully (" + type + ") " + "\n",
+        "requestId": "default/546cbe05-2cb3-4e5c-8e7a-b1559d866c99\n"
+      };
+    res.json(200, responseMessage);
+  });
+
   server.post('/api/entities/submit/:type', function (req, res) {
     var type = req.params.type.toUpperCase(),
       text = req.text,
@@ -239,6 +260,8 @@
         "requestId": "falcon/default/13015853-8e40-4923-9d32-6d01053c31c6\n\n"
       },
       indexInArray = mockData.findByNameInList(type, name);
+
+	delete mockData.definitions[type.toUpperCase()][name];
     mockData.entitiesList[type].entity.splice(indexInArray, 1);
     res.json(200, responseMessage);
   });
@@ -474,7 +497,7 @@
         res.send(200, response);
       } else {
         res.send(404, response);
-      }
+      }cls
 
     } else {
       console.log('error');
@@ -508,6 +531,7 @@
   server.get('/api/admin/version', function(req, res) {
     setTimeout(function(){
       res.send(200, mockData.server);
+      //res.send(401);
     }, 3000);
   });
 
diff --git a/pom.xml b/pom.xml
index 8e836da..e468476 100644
--- a/pom.xml
+++ b/pom.xml
@@ -369,6 +369,7 @@
 
     <modules>
         <module>falcon-ui</module>
+        <module>falcon-ambari-view</module>
         <module>build-tools</module>
         <module>client</module>
         <module>cli</module>
