WebSockets will not work over HTTPS
If the server is being accessed through HTTPS, anything that relies on WebSockets will fail silently and only show an error on the JavaScript command line. The most important feature that's unavailable when this happens is being able to submit jobs.

``` javascript
[blocked] The page at 'https://qiita.ibdmdb.org/analysis/wait/1' was loaded over HTTPS, but ran insecure content from 'ws://qiita.ibdmdb.org/moi-ws/': this content should also be loaded over HTTPS. moi.js:77
Uncaught SecurityError: Failed to construct 'WebSocket': An insecure WebSocket connection may not be initiated from a page loaded over HTTPS.
```

For more information, see [this issue in moi](https://github.com/biocore/mustached-octo-ironman/issues/16) and this [StackOverflow question](http://stackoverflow.com/q/25496039/379593).

diff --git a/qiita_pet/handlers/analysis_handlers.py b/qiita_pet/handlers/analysis_handlers.py
index 318975f0..76e0814d 100644
--- a/qiita_pet/handlers/analysis_handlers.py
+++ b/qiita_pet/handlers/analysis_handlers.py
@@ -69,7 +69,10 @@ class SelectCommandsHandler(BaseHandler):
 
     @authenticated
     def post(self):
-        analysis = Analysis(int(self.get_argument('analysis-id')))
+        name = self.get_argument('name')
+        desc = self.get_argument('description')
+        analysis = Analysis.create(self.current_user, name, desc,
+                                   from_default=True)
         # set to third step since this page is third step in workflow
         analysis.step = SELECT_COMMANDS
         data_types = analysis.data_types
diff --git a/qiita_pet/handlers/websocket_handlers.py b/qiita_pet/handlers/websocket_handlers.py
index 60292857..6ceef421 100644
--- a/qiita_pet/handlers/websocket_handlers.py
+++ b/qiita_pet/handlers/websocket_handlers.py
@@ -1,15 +1,17 @@
 # adapted from
 # https://github.com/leporo/tornado-redis/blob/master/demos/websockets
-from json import loads
+from json import loads, dumps
+from itertools import chain
 
 import toredis
 from tornado.web import authenticated
 from tornado.websocket import WebSocketHandler
 from tornado.gen import engine, Task
+from future.utils import viewvalues
 
 from moi import r_client
-from qiita_db.analysis import Analysis
 from qiita_pet.handlers.base_handlers import BaseHandler
+from qiita_db.analysis import Analysis
 
 
 class MessageHandler(WebSocketHandler):
@@ -74,33 +76,41 @@ class MessageHandler(WebSocketHandler):
         self.redis.disconnect()
 
 
+class SelectedSocketHandler(WebSocketHandler, BaseHandler):
+    """Websocket for removing samples on default analysis display page"""
+    @authenticated
+    def on_message(self, msg):
+        # When the websocket receives a message from the javascript client,
+        # parse into JSON
+        msginfo = loads(msg)
+        default = Analysis(self.current_user.default_analysis)
+
+        if 'remove_sample' in msginfo:
+            data = msginfo['remove_sample']
+            default.remove_samples([data['proc_data']], data['samples'])
+        elif 'remove_pd' in msginfo:
+            data = msginfo['remove_pd']
+            default.remove_samples([data['proc_data']])
+        self.write_message(msg)
+
+
 class SelectSamplesHandler(WebSocketHandler, BaseHandler):
+    """Websocket for selecting and deselecting samples on list studies page"""
     @authenticated
     def on_message(self, msg):
-        """Selects or deselects samples on a message from the user
+        """Selects samples on a message from the user
 
         Parameters
         ----------
         msg : JSON str
             Message containing sample and prc_data information, in the form
-            {'action': action, 'proc_data': [p1, ...], 'samples': [[s1], ...]}
-            Where proc data in p1 matches to samples list in s1
+            {proc_data_id': [s1, s2, ...], ...]}
         """
-        # When the websocket receives a message from the javascript client,
-        # parse into JSON
         msginfo = loads(msg)
-        num_samples = sum(len(x) for x in msginfo["samples"])
         default = Analysis(self.current_user.default_analysis)
-        if msginfo["action"] == "select":
-            # match proc data with samples and add them
-            select = {}
-            for pid, samples in zip(msginfo["proc_data"], msginfo["samples"]):
-                select[pid] = samples
-                default.add_samples(select)
-            self.write_message("%d samples selected" % num_samples)
-        elif msginfo["action"] == "deselect":
-            for pid, samples in zip(msginfo["proc_data"], msginfo["samples"]):
-                default.remove_samples([pid], samples)
-            self.write_message("%d samples removed" % num_samples)
-        else:
-            raise ValueError("Unknown action: %s" % msginfo["action"])
+        default.add_samples(msginfo['sel'])
+        # Count total number of unique samples selected and return
+        self.write_message(dumps({
+            'sel': len(set(
+                chain.from_iterable(s for s in viewvalues(msginfo['sel']))))
+        }))
diff --git a/qiita_pet/static/vendor/js/moi.js b/qiita_pet/static/vendor/js/moi.js
index 8bdf770b..5013fbc1 100644
--- a/qiita_pet/static/vendor/js/moi.js
+++ b/qiita_pet/static/vendor/js/moi.js
@@ -18,13 +18,13 @@
  * @class manages WebSocket for job and group information
  *
  */
+
 var moi = new function () {
     this.VERSION = '0.1.0-dev';
 
     var
       /* the server end of the websocket */
-      host = 'ws://' + window.location.host + '/moi-ws/',
-      
+      host = null,
       /* the websocket */     
       ws = null,
 
@@ -66,16 +66,25 @@ var moi = new function () {
      * websocket. On construction, this method will send a message over the
      * socket to get all known job information associated with this client.
      *
-     * @param {group_id} A group ID to get initial data from, or null to fetch 
-     * all records associated with the user. 
+     * @param {host} The URL for the websocket, minus the ws:// header, or null
+     * to use the default moi-ws.
+     * @param {group_id} A group ID to get initial data from, or null to fetch
+     * all records associated with the user.
+     * @param {on_open} Optional function for action when websocket is opened.
+     * @param {on_close} Optional function for action when websocket is closed.
+     * @param {on_error} Optional function for action when websocket errors.
      */
-    this.init = function(group_id) {
+    this.init = function(host, group_id, on_open, on_close, on_error) {
+        host = host || window.location.host + '/moi-ws/';
         if (!("WebSocket" in window)) {
             alert("Your browser does not appear to support websockets!");
             return;
         }
-        ws = new WebSocket(host);
-        
+        //check if we need regular or secure websocket
+        socket = 'ws://';
+        if(window.location.protocol == "https:") { socket = 'wss://'; }
+        ws = new WebSocket(socket + host);
+
         var on_open_message = null;
         if (group_id == null) {
             on_open_message = [];
@@ -83,15 +92,21 @@ var moi = new function () {
             on_open_message = [group_id];
         }
 
-        ws.onopen = function() {ws.send(encode({"get": on_open_message}))};
-        ws.onclose = function(evt) {ws.send(encode({"close": null}))};
-        ws.onerror = function(evt) {};
+        on_open = on_open || function() { ws.send(encode({"get": on_open_message})); };
+        on_close = on_close || function(evt) { ws.send(encode({"close": null})); };
+        on_error = on_error || function(evt) {};
+
+        ws.onopen = on_open;
+        ws.onclose = on_close;
+        ws.onerror = on_error;
 
         ws.onmessage = function(evt) {
             message = decode(evt.data);
-            for(var action in message) 
-                if(action in callbacks) 
+            for(var action in message) {
+                if(action in callbacks) {
                     callbacks[action](message[action]);
+                }
+            }
         };
     };
 };
diff --git a/qiita_pet/templates/analysis_selected.html b/qiita_pet/templates/analysis_selected.html
index dc03cebf..5743c132 100644
--- a/qiita_pet/templates/analysis_selected.html
+++ b/qiita_pet/templates/analysis_selected.html
@@ -1,26 +1,44 @@
 {% extends sitebase.html %}
 {% block head %}
+<script src="/static/vendor/js/moi.js"></script>
 <script type="text/javascript">
+function error(evt) { $('#ws-error').html("<b>Server communication error. Sample removal will not be recorded. Please try again later.</b>"); };
+
 function remove_proc_data(pid, sid) {
-	if(confirm('Are you sure you want to remove all samples for this processed data?')) { 
-		$('#proc' + pid).remove();
-		$('#proc' + pid + '-samples').remove();
-		// remove study if all proc data removed
-		if($('#study'+ sid + '-table tbody').children().length === 1) { $('#study'+sid).remove(); }
-	}
+  if(confirm('Are you sure you want to remove all samples for this processed data?')) {
+    moi.send('remove_pd', {'proc_data': pid, 'samples': []});
+  }
 }
 
-function remove_sample(sid, pid, sample) {
-		document.getElementById(pid + '@' + sample).remove();
-		//decriment sample count for pid
-		var count = $('#proc' + pid + '-sample-count');
-		count.text(parseInt(count.text(), 10) - 1);
-		// remove proc data if all samples removed
-		if($('#proc' + pid + '-samples-table tbody').children().length === 0) { $('#proc'+pid).remove(); $('#proc' + pid + '-samples').remove(); }
-		// remove study if all proc data removed
-		if($('#study'+ sid + '-table tbody').children().length === 1) { $('#study'+sid).remove(); }
+function remove_pd_from_html(data) {
+    pid = data.proc_data;
+    alert('#proc' + pid);
+    $('#proc' + pid).remove();
+    $('#proc' + pid + '-samples').remove();
+    // remove study if all proc data removed
+    if($('#study'+ sid + '-table tbody').children().length === 1) { $('#study'+sid).remove(); }
 }
 
+function remove_sample(sid, pid, sample) { moi.send('remove_sample', {'proc_data': pid, 'samples': [sample], 'sid': sid}); }
+
+function remove_sample_from_html(data) {
+  pid = data.proc_data;
+  sample = data.samples[0];
+  sid = data.sid;
+  document.getElementById(pid + '@' + sample).remove();
+    //decriment sample count for pid
+    var count = $('#proc' + pid + '-sample-count');
+    count.text(parseInt(count.text(), 10) - 1);
+    // remove proc data if all samples removed
+    if($('#proc' + pid + '-samples-table tbody').children().length === 0) { $('#proc'+pid).remove(); $('#proc' + pid + '-samples').remove(); }
+    // remove study if all proc data removed
+    if($('#study'+ sid + '-table tbody').children().length === 1) { $('#study'+sid).remove(); }
+}
+$(document).ready(function() {
+      moi.init(window.location.host + '/analysis/selected/socket/', null, function(){}, error, error);
+      moi.add_callback('remove_pd', remove_pd_from_html);
+      moi.add_callback('remove_sample', remove_sample_from_html);
+    });
 </script>
 {% end %}
 
@@ -29,67 +47,102 @@ function remove_sample(sid, pid, sample) {
 {% from future.utils import viewitems %}
 {% set static_info = {'data_type', 'processed_date', 'algorithm', 'reference_name', 'reference_version', 'sequence_filepath', 'taxonomy_filepath', 'tree_filepath'}%}
 <h1>Selected Samples</h1>
+<span id="ws-error" style="color:red"></span>
 {% for sid, proc_datas in viewitems(sel_data) %}
   {% set study = Study(sid) %}
 <div class="row" id="study{{sid}}">
-	<div class="col-md-12" style="border:2px solid #a1a1a1; border-radius: 15px;">
-	  <h2><a href="/study/description/{{sid}}">{{study.title}}</a></h2>
-	  <h4>Processed Data</h4>
-	  <table class='table table-striped' id='study{{sid}}-table'>
-	  <tr>
-	  	<th class="col-sm-1">id</th><th class="col-sm-1">Datatype</th><th class="col-sm-2">Processed Date</th><th class="col-sm-2">Algorithm</th><th class="col-sm-2">Reference</th><th class="col-sm-1">Samples</th><th></th><th></th>
-	  </tr>
-	{% for pid, samples in viewitems(proc_datas) %}
-		<tr id="proc{{pid}}">
-	    <td>{{pid}} <a href="#" data-toggle="modal" data-target="#proc{{pid}}-settings-modal" onclick="return false;"><span class="glyphicon glyphicon-info-sign"></span></a></td>
-	    <td>{{proc_info[pid]["data_type"]}}</td>
-	    <td>{{proc_info[pid]["processed_date"]}}</td>
-	    <td>{{proc_info[pid]["algorithm"]}}</td>
-	    <td>{{proc_info[pid]["reference_name"]}} {{proc_info[pid]["reference_version"]}}</td>
-	    <td><span id="proc{{pid}}-sample-count">{% raw len(samples) %}</span></td>
-	    <td><a href="#" onclick="$('#proc{{pid}}-samples').toggle(); return false;">Show/Hide samples</a></td>
-	    <td><a href="#" onclick = 'remove_proc_data({{pid}}, {{sid}})'>Remove</a></td>
-		 </tr>
-		 <tr id="proc{{pid}}-samples" hidden><td colspan=7>
-		 <table class="table table-striped sample-table" id="proc{{pid}}-samples-table" style="width:50%">
-		{% for samp in samples %}
-		 	<tr id="{{pid}}@{{samp}}"><td>{{samp}}</td><td><a href="#" onclick="remove_sample('{{sid}}', '{{pid}}', '{{samp}}')">Remove</a></td></tr>
-		{% end %}
-		</table>
-		</td></tr>
-	{% end %}
-	</table>
-	</div>
+  <div class="col-md-12" style="border:2px solid #a1a1a1; border-radius: 15px;">
+    <h2><a href="/study/description/{{sid}}">{{study.title}}</a></h2>
+    <h4>Processed Data</h4>
+    <table class='table table-striped' id='study{{sid}}-table'>
+    <tr>
+      <th class="col-sm-1">id</th><th class="col-sm-1">Datatype</th><th class="col-sm-2">Processed Date</th><th class="col-sm-2">Algorithm</th><th class="col-sm-2">Reference</th><th class="col-sm-1">Samples</th><th></th><th></th>
+    </tr>
+  {% for pid, samples in viewitems(proc_datas) %}
+    <tr id="proc{{pid}}">
+      <td>{{pid}} <a href="#" data-toggle="modal" data-target="#proc{{pid}}-settings-modal" onclick="return false;"><span class="glyphicon glyphicon-info-sign"></span></a></td>
+      <td>{{proc_info[pid]["data_type"]}}</td>
+      <td>{{proc_info[pid]["processed_date"]}}</td>
+      <td>{{proc_info[pid]["algorithm"]}}</td>
+      <td>{{proc_info[pid]["reference_name"]}} {{proc_info[pid]["reference_version"]}}</td>
+      <td><span id="proc{{pid}}-sample-count">{% raw len(samples) %}</span></td>
+      <td><a href="#" onclick="$('#proc{{pid}}-samples').toggle(); return false;">Show/Hide samples</a></td>
+      <td><a href="#" onclick = 'remove_proc_data({{pid}}, {{sid}})'>Remove</a></td>
+     </tr>
+     <tr id="proc{{pid}}-samples" hidden><td colspan=7>
+     <table class="table table-striped sample-table" id="proc{{pid}}-samples-table" style="width:50%">
+    {% for samp in samples %}
+      <tr id="{{pid}}@{{samp}}"><td>{{samp}}</td><td><a href="#" onclick="remove_sample('{{sid}}', '{{pid}}', '{{samp}}')">Remove</a></td></tr>
+    {% end %}
+    </table>
+    </td></tr>
+    {% for pid in proc_datas %}
+<!-- modal view to enter analysis information -->
+    <div class="modal fade" id="proc{{pid}}-settings-modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
+      <div class="modal-dialog">
+        <div class="modal-content">
+          <div class="modal-header">
+            <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+            <h4 class="modal-title" id="myModalLabel">Processed Data {{pid}}</h4>
+          </div>
+          <form role="form" action="/analysis/3" method="post">
+          <input type="hidden" name="action" value="create">
+            <div class="modal-body">
+              <b>Datatype</b>: {{proc_info[pid]["data_type"]}} <br/>
+              <b>Processed Date</b>: {{proc_info[pid]["processed_date"]}} <br/>
+              <b>Algorithm</b>: {{proc_info[pid]["algorithm"]}} <br/>
+              <b>Reference</b>: {{proc_info[pid]["reference_name"]}} {{proc_info[pid]["reference_version"]}}<br/>
+  {% for key, val in viewitems(proc_info[pid]) %}
+    {% if key not in static_info %}
+      <b>{{key}}</b>: {{val}} <br/>
+    {% end %}
+  {% end %}
+            </div>
+            <div class="modal-footer">
+            </div>
+        </div>
+      </div>
+    </div>
+  {% end %}
+  {% end %}
+  </table>
+  </div>
 </div>
 {% end %}
 
-{% for pid in proc_datas%}
+{% if sel_data %}
+<button type="button" class="btn btn-success btn-lg" data-toggle="modal" data-target="#create-analysis-modal-view">
+  Create Analysis
+</button>
+{% end %}
+
 <!-- modal view to enter analysis information -->
-    <div class="modal fade" id="proc{{pid}}-settings-modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
+    <div class="modal fade" id="create-analysis-modal-view" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
       <div class="modal-dialog">
         <div class="modal-content">
           <div class="modal-header">
             <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
-            <h4 class="modal-title" id="myModalLabel">Processed Data {{pid}}</h4>
+            <h4 class="modal-title" id="myModalLabel">Create new meta-analysis</h4>
           </div>
-          <form role="form" action="/analysis/2" method="post">
+          <form role="form" action="/analysis/3" method="post">
           <input type="hidden" name="action" value="create">
             <div class="modal-body">
-							<b>Datatype</b>: {{proc_info[pid]["data_type"]}} <br/>
-							<b>Processed Date</b>: {{proc_info[pid]["processed_date"]}} <br/>
-							<b>Algorithm</b>: {{proc_info[pid]["algorithm"]}} <br/>
-							<b>Reference</b>: {{proc_info[pid]["reference_name"]}} {{proc_info[pid]["reference_version"]}}<br/>
-	{% for key, val in viewitems(proc_info[pid]) %}
-		{% if key not in static_info %}
-			<b>{{key}}</b>: {{val}} <br/>
-		{% end %}
-	{% end %}
+              <div>
+                <div class="form-group">
+                  <label for="name">Analysis name</label>
+                  <input type="text" class="form-control" id="name" name="name" placeholder="Analysis name">
+                </div>
+                <div class="form-group">
+                  <label for="description">Description</label>
+                  <input type="text" class="form-control" id="description" name="description" placeholder="Short description">
+                </div>
+              </div>
             </div>
             <div class="modal-footer">
+              <button type="submit" class="btn btn-primary">Create analysis</button>
             </div>
           </form>
         </div>
       </div>
     </div>
-  {% end %}
 {% end %}
\ No newline at end of file
diff --git a/qiita_pet/templates/list_studies.html b/qiita_pet/templates/list_studies.html
index 7c46e41c..0fc7f9da 100644
--- a/qiita_pet/templates/list_studies.html
+++ b/qiita_pet/templates/list_studies.html
@@ -8,58 +8,48 @@ td.details-control {
 </style>
 <script src="/static/vendor/js/jquery.dataTables.min.js"></script>
 <script src="/static/vendor/js/jquery.dataTables.plugin.natural.js"></script>
+<script src="/static/vendor/js/moi.js"></script>
 
 <script type="text/javascript">
 var current_study;
 var ajaxURL = "/study/search/?&user={{current_user.id}}&sEcho=" + Math.floor(Math.random()*1001);
-var ws = new WebSocket('ws://' + window.location.host + '/analysis/select-socket/');
-ws.onmessage = function(evt) { bootstrapAlert(evt.data, "success", 1500); };
-ws.onerror = function(evt) { $('#search-error').html("<b>Server communication error. Sample selection will not be recorded. Please try again later.</b>"); };
-ws.onclose = function(evt) { $('#search-error').html("<b>Server communication error. Sample selection will not be recorded. Please try again later.</b>"); };
+function error(evt) { $('#search-error').html("<b>Server communication error. Sample selection will not be recorded. Please try again later.</b>"); }
 
-function sel_desel_study(box) {
-  var action = "deselect";
-  if(box.checked) { action = "select"; }
-  data = $('#studies-table').dataTable().fnGetData(box.value);
-  var proc_data = [];
-  var samples = [];
+function sel_study(row) {
+  data = $('#studies-table').dataTable().fnGetData(row);
+  var proc_data = {};
   // Build list of processed data and associated samples for entire study
   for(var i=0;i<data.proc_data_info.length;i++) {
-    proc_data.push(data.proc_data_info[i].pid);
-    samples.push(data.proc_data_info[i].samples);
+    proc_data[data.proc_data_info[i].pid] = data.proc_data_info[i].samples;
   }
-  send_ws(action, proc_data, samples);
+  moi.send('sel', proc_data);
 }
 
-function sel_desel_proc_data(box, row, pid) {
-  var action = "deselect";
-  if(box.checked) { action = "select"; }
+function sel_proc_data(row, pid) {
   data = $('#studies-table').dataTable().fnGetData(row);
-  var samples = [];
+  var proc_data = {};
   for(var i=0;i<data.proc_data_info.length;i++) {
+    // Find the processed data and send associated samples
     if(data.proc_data_info[i].pid == pid) {
-      samples = data.proc_data_info[i].samples;
+      proc_data[pid] = data.proc_data_info[i].samples;
       break;
     }
   }
-  send_ws(action, [pid], [samples]);
+  moi.send('sel', proc_data);
 }
 
-function send_ws(action, proc_data, samples) {
-  ws.send(JSON.stringify({'action': action, 'proc_data':proc_data, 'samples':samples}));
-}
+function show_alert(data) { bootstrapAlert(data + ' samples selected.', "success", 2000); }
 
 $(document).ready(function() {
+        moi.init(window.location.host + '/study/list/socket/', null, function(){}, error, error);
+        moi.add_callback('sel', show_alert);
         function format ( d, row ) {
             // `d` is the original data object for the row
-            //assess if study checked.  Needed to see if all child proc data checkboxes should default to checked
-            check = "";
-            if(document.getElementById("study"+d.study_id+"-checkbox").checked) {check = "checked"; }
             // create formatted cell with proc data table
             var proc_data_table = '<h4>Processed Data</h4><table class="table" cellpadding="5" cellspacing="0" border="0" style="padding-left:50px;"><tr><th></th><th>ID</th><th>Data type</th><th>Processed Date</th><th>Algorithm</th><th>Reference</th><th>Samples</th></tr>';
             for(i=0;i<d.proc_data_info.length;i++) {
               var proc_data = d.proc_data_info[i];
-              proc_data_table += '<tr><td><input type="checkbox" '+ check +' class="proc-checkbox" onchange="sel_desel_proc_data(this,'+ row +','+ proc_data.pid +')"></td><td>' + proc_data.pid + '</td><td>' + proc_data.data_type + '</td><td>' + proc_data.processed_date + '</td><td>' + proc_data.algorithm + '</td><td>' + proc_data.reference_name + ' ' + proc_data.reference_version + '</td><td>' + proc_data.samples.length + '</td></tr>';
+              proc_data_table += '<tr><td><input type="button" class="btn btn-sm" value="Add" onclick="sel_proc_data('+ row +','+ proc_data.pid +')"></td><td>' + proc_data.pid + '</td><td>' + proc_data.data_type + '</td><td>' + proc_data.processed_date + '</td><td>' + proc_data.algorithm + '</td><td>' + proc_data.reference_name + ' ' + proc_data.reference_version + '</td><td>' + proc_data.samples.length + '</td></tr>';
             }
             proc_data_table += '</table>';
             return proc_data_table;
@@ -86,7 +76,7 @@ $(document).ready(function() {
               {"targets": [ 2 ],"visible": false},
               // render the study checkbox cell
               {"render": function ( data, type, row, meta ) {
-                    return "<input type='checkbox' value='"+ meta.row +"' id='study"+row.study_id+"-checkbox' class='study-checkbox' onchange='sel_desel_study(this)'>";
+                    return "<input type='button' id='study"+row.study_id+"-checkbox' class='btn btn-sm' value='Add' onclick='sel_study("+ meta.row +")'>";
               }, targets: [0]},
               // render the title cell
               {"render": function ( data, type, row, meta ) {
diff --git a/qiita_pet/templates/sitebase.html b/qiita_pet/templates/sitebase.html
index 4cf3197c..e733945b 100644
--- a/qiita_pet/templates/sitebase.html
+++ b/qiita_pet/templates/sitebase.html
@@ -106,7 +106,7 @@
             <li class="dropdown">
               <a href="#" data-toggle="dropdown" class="dropdown-toggle">Meta Analysis<b class="caret"></b></a>
               <ul class="dropdown-menu">
-                <li><a data-toggle="modal" data-target="#create-analysis-modal-view">Create Meta Analysis</a></li>
+                <li><a href="/analysis/selected/">View Selected Samples</a></li>
                 <li><a href="/analysis/show/">See Previous Analyses</a></li>
               </ul>
             </li>
@@ -192,36 +192,6 @@
       {% block content %}{% end %}
     </div>
 
-    <!-- modal view to enter analysis information -->
-    <div class="modal fade" id="create-analysis-modal-view" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
-      <div class="modal-dialog">
-        <div class="modal-content">
-          <div class="modal-header">
-            <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
-            <h4 class="modal-title" id="myModalLabel">Create new meta-analysis</h4>
-          </div>
-          <form role="form" action="/analysis/2" method="post">
-          <input type="hidden" name="action" value="create">
-            <div class="modal-body">
-              <div>
-                <div class="form-group">
-                  <label for="name">Analysis name</label>
-                  <input type="text" class="form-control" id="name" name="name" placeholder="Analysis name">
-                </div>
-                <div class="form-group">
-                  <label for="description">Description</label>
-                  <input type="text" class="form-control" id="description" name="description" placeholder="Short description">
-                </div>
-              </div>
-            </div>
-            <div class="modal-footer">
-              <button type="submit" class="btn btn-primary">Create analysis</button>
-            </div>
-          </form>
-        </div>
-      </div>
-    </div>
-
     <div id="footer">
     </div>
     <div id="overlay" class="navbar-brand" style="visibility: hidden; position: absolute; left: 0px; top: 0px; width: 100%; height: 100%; font-size: 13px; text-align: center; z-index: 1000; background-color: #333333; color: #FFFFFF;">
diff --git a/qiita_pet/test/test_analysis_handlers.py b/qiita_pet/test/test_analysis_handlers.py
index 988b6c7e..82d1691f 100644
--- a/qiita_pet/test/test_analysis_handlers.py
+++ b/qiita_pet/test/test_analysis_handlers.py
@@ -1,5 +1,7 @@
 from unittest import main
 from qiita_pet.test.tornado_test_base import TestHandlerBase
+from qiita_db.analysis import Analysis
+from qiita_db.util import get_count
 
 
 class TestSelectCommandsHandler(TestHandlerBase):
@@ -11,9 +13,16 @@ class TestSelectCommandsHandler(TestHandlerBase):
         self.assertEqual(response.code, 200)
 
     def test_post(self):
-        response = self.post('/analysis/3', {'analysis-id': 1})
+        new_aid = get_count('qiita.analysis') + 1
+        post_args = {
+            'name': 'post-test',
+            'description': "test of posting"}
+        response = self.post('/analysis/3', post_args)
         # Make sure page response loaded sucessfully
         self.assertEqual(response.code, 200)
+        # make sure analysis created
+        analysis = Analysis(new_aid)
+        self.assertEqual(analysis.name, 'post-test')
 
 
 class TestAnalysisWaitHandler(TestHandlerBase):
diff --git a/qiita_pet/webserver.py b/qiita_pet/webserver.py
index fb89c907..829e04f3 100644
--- a/qiita_pet/webserver.py
+++ b/qiita_pet/webserver.py
@@ -23,7 +23,7 @@ from qiita_pet.handlers.study_handlers import (
     CreateStudyAJAX, ShareStudyAJAX, StudyApprovalList,
     PreprocessingSummaryHandler, VAMPSHandler)
 from qiita_pet.handlers.websocket_handlers import (
-    MessageHandler, SelectSamplesHandler)
+    MessageHandler, SelectedSocketHandler, SelectSamplesHandler)
 from qiita_pet.handlers.logger_handlers import LogEntryViewerHandler
 from qiita_pet.handlers.upload import UploadFileHandler, StudyUploadFileHandler
 from qiita_pet.handlers.compute import (
@@ -64,7 +64,7 @@ class Application(tornado.web.Application):
             (r"/analysis/results/(.*)", AnalysisResultsHandler),
             (r"/analysis/show/", ShowAnalysesHandler),
             (r"/analysis/selected/", SelectedSamplesHandler),
-            (r"/analysis/select-socket/", SelectSamplesHandler),
+            (r"/analysis/selected/socket/", SelectedSocketHandler),
             (r"/moi-ws/", MOIMessageHandler),
             (r"/consumer/", MessageHandler),
             (r"/admin/error/", LogEntryViewerHandler),
@@ -76,6 +76,7 @@ class Application(tornado.web.Application):
             (r"/study/create/", StudyEditHandler),
             (r"/study/edit/(.*)", StudyEditHandler),
             (r"/study/list/", ListStudiesHandler),
+            (r"/study/list/socket/", SelectSamplesHandler),
             (r"/study/search/(.*)", SearchStudiesAJAX),
             (r"/study/add_files_to_raw_data", AddFilesToRawData),
             (r"/study/unlink_all_files", UnlinkAllFiles),
['qiita_pet/handlers/analysis_handlers.py', 'qiita_pet/templates/sitebase.html', 'qiita_pet/webserver.py', 'qiita_pet/handlers/websocket_handlers.py', 'qiita_pet/templates/analysis_selected.html', 'qiita_pet/test/test_analysis_handlers.py', 'qiita_pet/static/vendor/js/moi.js', 'qiita_pet/templates/list_studies.html']