diff --git a/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/ExperimentList.java b/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/ExperimentList.java
index 1fb6c7b13c6b0d2303db37408212b0434108bffb..1a8d1f4884de6fbff1613a891fc1ab97b7dadfa8 100644
--- a/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/ExperimentList.java
+++ b/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/ExperimentList.java
@@ -189,13 +189,13 @@ class ExperimentList extends JFrame
 	private ExperimentTableModel tableModel = null;
 	private	JScrollPane scrollPane;
 
-	ExperimentList(String sector, OracleConnection oconnection, StorageServiceConnection sconnection, DaqServiceConnection dconnection) {
+	ExperimentList(final String sector, final OracleConnection oconnection, final StorageServiceConnection sconnection, final DaqServiceConnection dconnection) {
 		this.sconnection = sconnection;
 		setTitle("Experiment Import"); 
 		setSize(1000, 500);
 		setBackground(Color.gray);
 
-		JPanel topPanel = new JPanel();
+		final JPanel topPanel = new JPanel();
 		topPanel.setBorder(BorderFactory.createLoweredSoftBevelBorder());
 		topPanel.setLayout( new BorderLayout() );
 		getContentPane().add( topPanel );
@@ -203,7 +203,7 @@ class ExperimentList extends JFrame
 		JPanel entryPanel = new JPanel(new FlowLayout());
 		topPanel.add(entryPanel, BorderLayout.NORTH);
 
-		JLabel entryLabel = new JLabel("Enter date range of experiment start date");
+		final JLabel entryLabel = new JLabel("Enter date range of experiment start date");
 		entryPanel.add(entryLabel);
 
 		UtilDateModel startModel = new UtilDateModel();
@@ -212,28 +212,28 @@ class ExperimentList extends JFrame
 		p.put("text.month", "Month");
 		p.put("text.year", "Year");
 		JDatePanelImpl startDatePanel = new JDatePanelImpl(startModel, p);
-		JDatePickerImpl startDatePicker = new JDatePickerImpl(startDatePanel, new DateLabelFormatter());
+		final JDatePickerImpl startDatePicker = new JDatePickerImpl(startDatePanel, new DateLabelFormatter());
 		entryPanel.add(startDatePicker);
 
 		UtilDateModel endModel = new UtilDateModel();
 		JDatePanelImpl endDatePanel = new JDatePanelImpl(endModel, p);
-		JDatePickerImpl endDatePicker = new JDatePickerImpl(endDatePanel, new DateLabelFormatter());
+		final JDatePickerImpl endDatePicker = new JDatePickerImpl(endDatePanel, new DateLabelFormatter());
 		entryPanel.add(endDatePicker);
 
-		JButton submitDatesBtn = new JButton("click to get experiments list");
+		final JButton submitDatesBtn = new JButton("click to get experiments list");
 		entryPanel.add(submitDatesBtn);
 
 		JPanel selectPanel = new JPanel(new FlowLayout());
 		topPanel.add(selectPanel, BorderLayout.SOUTH);
 
-		JButton submitSelectionBtn = new JButton("select experiments and click the button to import");
+		final JButton submitSelectionBtn = new JButton("select experiments and click the button to import");
 		selectPanel.add(submitSelectionBtn);
 		submitSelectionBtn.setVisible(false);
 
-		JButton submitSelectionStartExpBtn = new JButton("select experiments and click the button to import and start");
+		final JButton submitSelectionStartExpBtn = new JButton("select experiments and click the button to import and start");
 		selectPanel.add(submitSelectionStartExpBtn);
 		submitSelectionStartExpBtn.setVisible(false);
-
+		
 		submitDatesBtn.addActionListener(new ActionListener() {
 			public void actionPerformed(ActionEvent e)
 			{
@@ -244,7 +244,7 @@ class ExperimentList extends JFrame
 					submitSelectionStartExpBtn.setVisible(true);
 
 					DateLabelFormatter df = new DateLabelFormatter();
-					Date startSelectedDate = (Date) startDatePicker.getModel().getValue();
+					final Date startSelectedDate = (Date) startDatePicker.getModel().getValue();
 		            String start = df.valueToString(startSelectedDate);
 					Date endSelectedDate = (Date) endDatePicker.getModel().getValue();
 		            String end = df.valueToString(endSelectedDate);
@@ -302,7 +302,7 @@ class ExperimentList extends JFrame
 						//					addRole((String)table.getModel().getValueAt(selection[i], Column.PI.ordinal()), experimentName, Role.PI);
 						addRole((String)table.getModel().getValueAt(selection[i], Column.USER.ordinal()), experimentName, Role.USER);
 						if (sconnection.startExperiment(experimentName) == ServiceConnection.ServiceConnectionStatus.SUCCESS) {
-//							dconnection.startDaq(experimentName, experimentName);						
+							dconnection.startDaq(experimentName, experimentName);						
 						} else {
 							System.out.println("didn't start");
 						}
diff --git a/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/Gui.java b/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/Gui.java
index 9e09188b3ff5aa6ff22ab0257a7a8d420936557f..300f340a603486dcbc1d1b86bc331813cbcf750e 100644
--- a/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/Gui.java
+++ b/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/Gui.java
@@ -22,7 +22,7 @@ class Gui
 	{
 
 		String configFile = arg[0];
-		Properties configProperties = new Properties();
+		final Properties configProperties = new Properties();
 		setConfig(configFile, configProperties);
 
 		SwingUtilities.invokeLater(new Runnable() {
@@ -33,16 +33,16 @@ class Gui
 	}
 
 	private Gui(Properties configProperties) {		
-        System.setProperty("javax.net.ssl.trustStore", configProperties.getProperty("dm.truststore"));
+//        System.setProperty("javax.net.ssl.trustStore", configProperties.getProperty("dm.truststore"));
 
-        OracleConnection oconnection = new OracleConnection();
+        final OracleConnection oconnection = new OracleConnection();
 		try {
 			oconnection.connect(configProperties);
 		} catch (SQLException e1) {
 			JOptionPane.showMessageDialog(null, e1.getMessage());
 				System.exit(0);
 		}
-		StorageServiceConnection sconnection = new StorageServiceConnection();
+		final StorageServiceConnection sconnection = new StorageServiceConnection();
 		if (sconnection.init(configProperties.getProperty("dm.storageServ.connection")) != ServiceConnection.ServiceConnectionStatus.SUCCESS) {
 			System.exit(0);
 		}
diff --git a/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/LoginWindow.java b/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/LoginWindow.java
index ba6b80781688a0477b6273b5e0577a439ee7beca..0e83cedd25733a6fac0c4bb424177636910ef27a 100644
--- a/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/LoginWindow.java
+++ b/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/LoginWindow.java
@@ -17,7 +17,7 @@ public final class LoginWindow extends JFrame {
 	OracleConnection oconnection;
 	JPanel panel;
 
-	LoginWindow(StorageServiceConnection sconnection, OracleConnection oconnection, DaqServiceConnection dconnection) {
+	LoginWindow(final StorageServiceConnection sconnection, final OracleConnection oconnection, final DaqServiceConnection dconnection) {
 		this.sconnection = sconnection;
 		this.oconnection = oconnection;
 
@@ -30,7 +30,7 @@ public final class LoginWindow extends JFrame {
 		userLabel.setBounds(10, 10, 80, 25);
 		panel.add(userLabel);
 
-		JTextField userText = new JTextField(20);
+		final JTextField userText = new JTextField(20);
 		userText.setBounds(100, 10, 160, 25);
 		panel.add(userText);
 
@@ -38,7 +38,7 @@ public final class LoginWindow extends JFrame {
 		passwordLabel.setBounds(10, 40, 80, 25);
 		panel.add(passwordLabel);
 
-		JPasswordField passwordText = new JPasswordField(20);
+		final JPasswordField passwordText = new JPasswordField(20);
 		passwordText.setBounds(100, 40, 160, 25);
 		panel.add(passwordText);
 
@@ -46,7 +46,7 @@ public final class LoginWindow extends JFrame {
 		sectorLabel.setBounds(10, 70, 80, 25);
 		panel.add(sectorLabel);
 
-		JTextField sectorText = new JTextField(20);
+		final JTextField sectorText = new JTextField(20);
 		sectorText.setBounds(100, 70, 160, 25);
 		panel.add(sectorText);
 
diff --git a/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/serviceconn/NoOpTrustManager.java b/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/serviceconn/NoOpTrustManager.java
new file mode 100644
index 0000000000000000000000000000000000000000..33dcffbfeb10e0f1255850b70a8612c834d2977e
--- /dev/null
+++ b/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/serviceconn/NoOpTrustManager.java
@@ -0,0 +1,31 @@
+package gov.anl.dm.esafsync.serviceconn;
+
+
+import java.security.cert.X509Certificate;
+import javax.net.ssl.X509TrustManager;
+
+/**
+ * Dummy trust manager class.
+ *
+ * A trivial implementation of <code>X509TrustManager</code> that doesn't
+ * actually check the validity of a certificate. This allows us to make SSL
+ * connections to internal servers without requiring the installation and
+ * maintenance of certificates in the client keystore.
+ *
+ * @see NoServerVerificationSSLSocketFactory
+ */
+public class NoOpTrustManager implements X509TrustManager {
+
+    @Override
+    public void checkClientTrusted(X509Certificate[] cert, String authType) {
+    }
+
+    @Override
+    public void checkServerTrusted(X509Certificate[] cert, String authType) {
+    }
+
+    @Override
+    public X509Certificate[] getAcceptedIssuers() {
+        return new X509Certificate[0];
+    }
+}
diff --git a/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/serviceconn/NoServerVerificationSSLSocketFactory.java b/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/serviceconn/NoServerVerificationSSLSocketFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..b411af21adf52c9636239794c9de30bbae0f1323
--- /dev/null
+++ b/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/serviceconn/NoServerVerificationSSLSocketFactory.java
@@ -0,0 +1,150 @@
+package gov.anl.dm.esafsync.serviceconn;
+
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.Socket;
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
+import javax.net.SocketFactory;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSocketFactory;
+import javax.net.ssl.TrustManager;
+
+/**
+ * SSL socket factory that does not verify server credentials.
+ *
+ * A minor extension of <code>SSLSocketFactory</code> that installs a dummy
+ * trust manager. This allows creation of SSL sockets that don't verify the
+ * server certificates.
+ *
+ * @see NoOpTrustManager
+ */
+public class NoServerVerificationSSLSocketFactory extends SSLSocketFactory {
+
+    private SSLSocketFactory factory;
+
+    /**
+     * Default constructor.
+     */
+    public NoServerVerificationSSLSocketFactory() {
+        try {
+            TrustManager tm = new NoOpTrustManager();
+            SSLContext sslcontext = SSLContext.getInstance("TLS");
+            sslcontext.init(null, // No KeyManager required
+                    new TrustManager[]{tm},
+                    new java.security.SecureRandom());
+
+            factory = (SSLSocketFactory) sslcontext.getSocketFactory();
+        } catch (KeyManagementException | NoSuchAlgorithmException ex) {
+            ex.printStackTrace();
+        }
+    }
+
+    /**
+     * Get default (no server verification) socket factory.
+     *
+     * @return socket factory
+     */
+    public static SocketFactory getDefault() {
+        return new NoServerVerificationSSLSocketFactory();
+    }
+
+    /**
+     * Create SSL socket layered over an existing socket connected to the named
+     * host, at a given port.
+     *
+     * @param socket existing socket
+     * @param host
+     * @param port
+     * @param autoClose
+     * @return created socket
+     * @throws IOException in case of IO errors
+     */
+    @Override
+    public Socket createSocket(Socket socket, String host, int port, boolean autoClose)
+            throws IOException {
+        return factory.createSocket(socket, host, port, autoClose);
+    }
+
+    /**
+     * Create a socket and connect it to the specified remote address/port, and
+     * bind it to the specified local address/port.
+     *
+     * @param address server network address
+     * @param port server port
+     * @param localAddress client network address
+     * @param localPort client port
+     * @return created socket
+     * @throws IOException in case of IO errors
+     */
+    @Override
+    public Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort)
+            throws IOException {
+        return factory.createSocket(address, port, localAddress, localPort);
+    }
+
+    /**
+     * Create a socket and connect it to the specified remote address/port.
+     *
+     * @param address server network address
+     * @param port server port
+     * @return created socket
+     * @throws IOException in case of IO errors
+     */
+    @Override
+    public Socket createSocket(InetAddress address, int port) throws IOException {
+        return factory.createSocket(address, port);
+    }
+
+    /**
+     * Create a socket and connect it to the specified remote host/port, and
+     * bind it to the specified local address/port.
+     *
+     * @param host server host
+     * @param port server port
+     * @param localAddress client network address
+     * @param localPort client port
+     * @return created socket
+     * @throws IOException in case of IO errors
+     */
+    @Override
+    public Socket createSocket(String host, int port, InetAddress localAddress, int localPort)
+            throws IOException {
+        return factory.createSocket(host, port, localAddress, localPort);
+    }
+
+    /**
+     * Create a socket and connect it to the specified remote host/port, and
+     * bind it to the specified local address/port.
+     *
+     * @param host server host
+     * @param port server port
+     * @return created socket
+     * @throws IOException in case of IO errors
+     */
+    @Override
+    public Socket createSocket(String host, int port) throws IOException {
+        return factory.createSocket(host, port);
+    }
+
+    /**
+     * Get default cipher suites from socket factory.
+     *
+     * @return list of default ciphers
+     */
+    @Override
+    public String[] getDefaultCipherSuites() {
+        return factory.getSupportedCipherSuites();
+    }
+
+    /**
+     * Get supported cipher suites from socket factory.
+     *
+     * @return list of supported ciphers
+     */
+    @Override
+    public String[] getSupportedCipherSuites() {
+        return factory.getSupportedCipherSuites();
+    }
+
+}
diff --git a/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/serviceconn/ServiceConnection.java b/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/serviceconn/ServiceConnection.java
index b8d42ba02d47c1db6a321583072788229497d89f..db8fa154a09eaa06b4d5ad8d1271d1d2386220a3 100644
--- a/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/serviceconn/ServiceConnection.java
+++ b/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/serviceconn/ServiceConnection.java
@@ -10,9 +10,11 @@ import java.net.MalformedURLException;
 import java.net.ProtocolException;
 import java.net.URL;
 import java.net.URLEncoder;
-import java.util.Base64;
+// import java.util.Base64;
 import java.util.HashMap;
 import java.util.Map;
+import javax.xml.bind.DatatypeConverter;
+
 
 import javax.net.ssl.HttpsURLConnection;
 import javax.swing.JOptionPane;
@@ -116,8 +118,8 @@ public class ServiceConnection {
         	return ServiceConnectionStatus.ERROR;
         }
         
-//        System.setProperty("javax.net.ssl.trustStore", "/etc/pki/ca-trust/extracted/java/cacerts");
-
+        HttpsURLConnection.setDefaultSSLSocketFactory(new NoServerVerificationSSLSocketFactory());
+        
         return ServiceConnectionStatus.SUCCESS;
     }
 
@@ -327,12 +329,41 @@ public class ServiceConnection {
         }
     }
 
-    protected String encode(String s) {
-		byte[] encoded1 = Base64.getEncoder().encode(s.getBytes());
-		String encoded2 = Base64.getEncoder().encodeToString(encoded1);
-		return encoded2;    	
-    }
+//    // this method works with java 8 java.util.Base64
+//    protected String encode(String s) {
+//		byte[] encoded1 = Base64.getEncoder().encode(s.getBytes());
+//		String encoded2 = Base64.getEncoder().encodeToString(encoded1);
+//		return encoded2;    	
+//    }
     
+    public static String encode(String input) {
+        try {
+            // Input is twice encoded in order to avoid issues like
+            // '+' being interpreted as space
+            if (input == null) {
+                return input;
+            }
+            String s1 = DatatypeConverter.printBase64Binary(input.getBytes());
+            String s2 = DatatypeConverter.printBase64Binary(s1.getBytes());
+            return s2;
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            return null;
+        }
+    }
+
+//    public static String decode(String input) {
+//        try {
+//            // Input is twice encoded in order to avoid issues like
+//            // '+' being interpreted as space
+//            byte[] ba1 = DatatypeConverter.parseBase64Binary(input);
+//            byte[] ba2 = DatatypeConverter.parseBase64Binary(new String(ba1));
+//            return new String(ba2);
+//        } catch (Exception ex) {
+//            ex.printStackTrace();
+//            return null;
+//        }
+//    }
 //    private String verifySessionCookie()  {
 //        return session.verifyCookie();
 //    }