diff --git a/storm-dashboard.css b/storm-dashboard.css
index 1d7c5e5..b0bca82 100644
--- a/storm-dashboard.css
+++ b/storm-dashboard.css
@@ -1,4 +1,3 @@
-
 /* Creates two columns, each 50% of page width */
 
 #stormdashboard {
@@ -8,4 +7,16 @@ width: 100%
 div.stormdashboard {
 float: left;
 width: 50%;
+}
+
+#stormdashboard-block {
+  clear:both;
+  margin:0;
+  overflow: hidden;
+  padding: 10px
+}
+
+#stormdashboard-block .stormdashboard-icon {
+  display:inline;
+  float: left
 }
\ No newline at end of file
diff --git a/storm.module b/storm.module
index 94db7e3..2e909f1 100644
--- a/storm.module
+++ b/storm.module
@@ -176,7 +176,19 @@ function storm_theme() {
     ),
     'storm_dashboard' => array(
       'file'      => 'storm.theme.inc',
-      'arguments' => array(),
+      'arguments' => array('links' => array()),
+    ),
+    'storm_dashboard_block' => array(
+      'file'      => 'storm.theme.inc',
+      'arguments' => array('links' => array()),
+    ),
+    'storm_dashboard_link' => array(
+      'file'      => 'storm.theme.inc',
+      'arguments' => array('link_blocks' => array()),
+    ),
+    'storm_dashboard_links_weight_table' => array(
+      'file'      => 'storm.theme.inc',
+      'arguments' => array('form' => array()),
     ),
     'storm_number_items' => array(
       'file'      => 'storm.theme.inc',
@@ -191,15 +203,196 @@ function storm_theme() {
 
 
 /**
- * @function
- * Function to create dashboard (call to theme function)
+ * Function to create a dashboard (call to theme function)
+ *
+ * @param string $type dashboard type, used for storm_get_dashboard_links
+ * @param null|string $theme Theme function to use, if omitted it uses storm_dashboard
+ * @return string themed string
+ */
+function storm_dashboard($type = "page", $theme = NULL) {
+  if ('page' == $type) {
+    drupal_set_title(t('Storm Dashboard'));
+  }
+  drupal_add_css(drupal_get_path('module', 'storm') .'/storm-dashboard.css');
+
+  $link_blocks = storm_dashboard_get_links(TRUE, $type);
+  if (!empty($link_blocks)) {
+    // DIVIDE LINKS INTO TWO BLOCKS
+    $count = ceil(count($link_blocks) / 2);
+    $link_blocks = array_chunk($link_blocks, $count);
+  }
+
+  if (isset($theme)) {
+    $content = theme($theme, $link_blocks);
+  }
+  else {
+    $content = theme('storm_dashboard', $link_blocks);
+  }
+
+  return $content;
+}
+
+/**
+ * Return links array for the storm dashboard.
+ *
+ * @param bool $check_active when FALSE, returns all links, no matter if activated or not (needed for admin settings)
+ * @param string $type
+ * @internal param \when $bool $check_active
+ * @return array dashboard links
+ */
+function storm_dashboard_get_links($check_active = TRUE, $type = 'page') {
+
+  $links = module_invoke_all('storm_dashboard_links', $type);
+
+  if (!empty($links)) {
+
+    $default_dashboard_settings = variable_get('storm_'.$type.'dashboard_settings', array());
+
+    $weight = 0;
+    foreach ($links as $key => &$link_array) {
+
+      // ACTIVE CHECK
+      if ($check_active && isset($default_dashboard_settings[$link_array['path']]['active']) && $default_dashboard_settings[$link_array['path']]['active'] == FALSE) {
+        unset($links[$key]);
+        continue;
+      }
+
+      // MODULE EXIST CHECK
+      if (isset($link_array['destination_module']) && !module_exists($link_array['destination_module'])) {
+        unset($links[$key]);
+        continue;
+      }
+
+      // ACCESS CHECK
+      if (!empty($link_array['access_callback'])) {
+        if (function_exists($link_array['access_callback'])) {
+          if (!isset($link_array['access_arguments'])) {
+            $link_array['access_arguments'] = "";
+          }
+          // USE THE ACCESS CHECK OF THE MENU API
+          _menu_check_access($link_array, $link_array['map']);
+        }
+      }
+      elseif (isset($link_array['access_arguments'])) {
+        $link_array['access'] = user_access($link_array['access_arguments']);
+      }
+      else {
+        $link_array['access'] = TRUE;
+      }
+
+      if (!$link_array['access']) {
+        unset($links[$key]);
+      }
+
+      if (isset($default_dashboard_settings[$link_array['path']]['weight'])) {
+        $link_array['weight'] = $default_dashboard_settings[$link_array['path']]['weight'];
+      }
+      elseif (!isset($link_array['weight'])) {
+        $link_array['weight'] = $weight;
+        $weight++;
+      }
+
+    }
+
+    // HOOK FOR ALTERING LINKS
+    drupal_alter('storm_dashboard_links', $links, $type);
+
+    // SORT LINKS BY WEIGHT
+    uasort($links, '_storm_dashboard_sort_links');
+
+  }
+  return $links;
+}
+
+/**
+ * order the links by their weight
+ *
+ * @param unknown_type $a
+ * @param unknown_type $b
+ * @return unknown_type
  */
-function storm_dashboard() {
-  drupal_set_title(t('Storm Dashboard'));
-  drupal_add_css(drupal_get_path('module', 'storm'). '/storm-dashboard.css');
-  return theme('storm_dashboard');
+function _storm_dashboard_sort_links($a, $b) {
+  if (intval($a['weight']) == intval($b['weight'])) {
+      return 0;
+  }
+  elseif (intval($a['weight']) < intval($b['weight'])) {
+    return -1;
+  }
+  else {
+    return 1;
+  }
+}
+
+function storm_storm_dashboard_links($type) {
+  $links = array();
+  if ($type == 'page') {
+    $links[] = array(
+    'title' => t('Configuration'),
+    'icon' => 'stormconfiguration',
+    'path' => 'admin/settings/storm',
+    'params' => array(),
+    'access_arguments' => 'Storm: access administration pages',
+    'node_type' => '',
+    'add_type' => '',
+    'map' => array(),
+    'weight' => 15,
+    );
+    $links[] = array(
+      'theme' => 'storm_dashboard_link',
+      'title' => t('Attributes'),
+      'icon' => 'stormattributes',
+      'path' => 'storm/attributes',
+      'params' => array(),
+      'access_arguments' => 'Storm: access administration pages',
+      'map' => array(),
+      'weight' => 14,
+    );
+  }
+  elseif ($type == 'block') {
+    // block uses same links as url, but have own settings
+    $links = module_invoke_all('storm_dashboard_links', 'page');
+  }
+  return $links;
+}
+
+function storm_storm_dashboard_types() {
+  return array(
+    'page' => array(
+      'url' => 'storm',
+      'title' => t('Dashboard Page'),
+      'description' => t('You can disable or reorder the links from the the !dashboard here', array('!dashboard' => l(t('dashboard'), 'storm'))),
+    ),
+    'block' => array(
+      'url' => 'admin/build/block',
+      'title' => t('Dashboard Block'),
+      'description' => t('You can disable or reorder the links from the dashboard !block here', array('!block' => l(t('block'), 'admin/build/block'))),
+    ),
+  );
 }
 
+/**
+ * Implementation of hook_block()
+ */
+function storm_block($op = 'list', $delta = 0) {
+  switch ($op) {
+    case 'list' :
+      // DASHBOARD AS TOP NAVIGATION
+      $blocks['storm_dashboard_block']['info'] = t('Storm dashboard block');
+      return $blocks;
+      break;
+    case 'view':
+      switch ($delta) {
+        // DASHBOARD AS BLOCK
+        case 'storm_dashboard_block':
+          $block = array(
+            'subject' => '',
+            'content' => storm_dashboard('block', 'storm_dashboard_block'),
+          );
+          return $block;
+      }
+      break;
+  }
+}
 
 /**
  * @function
@@ -390,6 +583,57 @@ function storm_admin_settings() {
     '#weight' => $w++,
   );
 
+  // DASHBOARD SETTINGS
+  $form['storm_dashboard_settings'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Dashboard Settings'),
+    '#collapsible' => TRUE,
+    '#collapsed' => TRUE,
+  );
+
+  $types = module_invoke_all('storm_dashboard_types');
+  foreach($types as $type => $type_data) {
+    $all_links_options = array();
+    $all_links = storm_dashboard_get_links(FALSE, $type);
+    foreach($all_links as $link) {
+      $all_links_options[$link['path']] = l($link['title'], $link['path']);
+    }
+
+    $default_dashboard_settings = variable_get('storm_'.$type.'dashboard_settings', array());
+
+    $form['storm_dashboard_settings'][$type] = array(
+      '#type' => 'fieldset',
+      '#title' => $type_data['title'],
+      '#description' => $type_data['description'],
+      '#collapsible' => TRUE,
+      '#collapsed' => TRUE,
+    );
+    $form['storm_dashboard_settings'][$type]['dashboard_links'] = array(
+      '#theme' => 'storm_dashboard_links_weight_table',
+      '#infix' => $type,
+    );
+
+    $weight = 0;
+    foreach($all_links_options as $path => $title) {
+      $form['storm_dashboard_settings'][$type]['dashboard_links'][$path][$type.'_storm_dashboard_link_active_'.$path] = array(
+        '#type' => 'checkbox',
+        '#default_value' => isset($default_dashboard_settings[$path]['active']) ? $default_dashboard_settings[$path]['active'] : TRUE,
+      );
+      $form['storm_dashboard_settings'][$type]['dashboard_links'][$path][$type.'_storm_dashboard_link_weight_'.$path] = array(
+        '#type' => 'weight',
+        '#default_value' => isset($default_dashboard_settings[$path]['weight']) ? $default_dashboard_settings[$path]['weight'] : $weight,
+        '#delta' => 30,
+      );
+      $form['storm_dashboard_settings'][$type]['dashboard_links'][$path]['#value'] = $title;
+      $weight++;
+    }
+  }
+
+  if (empty($form['#submit'])) {
+    $form['#submit'] = array();
+  }
+  $form['#submit'] = array('storm_admin_settings_form_submit');
+
   return system_settings_form($form);
 }
 
@@ -412,6 +656,32 @@ function storm_admin_settings_icons_path_validate($form, $form_values) {
   }
 }
 
+function storm_admin_settings_form_submit($form, $form_state) {
+  $op = isset($form_state['values']['op']) ? $form_state['values']['op'] : '';
+  // RESET
+  if ($op == t('Reset to defaults')) {
+    $types = module_invoke_all('storm_dashboard_types');
+    foreach($types as $type => $type_data) {
+      variable_del('storm_'.$type.'dashboard_settings');
+    };
+    return;
+  }
+
+  // GET OPTIONS
+  $types = module_invoke_all('storm_dashboard_types');
+  foreach($types as $type => $type_data) {
+    $all_links = storm_dashboard_get_links(FALSE, $type);
+    $settings = array();
+    foreach ($all_links as $link) {
+      $path = $link['path'];
+      $settings[$path]['active'] = $form_state['values'][$type.'_storm_dashboard_link_active_'.$path];
+      $settings[$path]['weight'] = $form_state['values'][$type.'_storm_dashboard_link_weight_'.$path];
+    }
+    variable_set('storm_'.$type.'dashboard_settings', $settings);
+  }
+
+}
+
 // DATE / TIME MANIPULATION
 function storm_elements() {
   $type['datetime'] = array(
@@ -1379,4 +1649,4 @@ function storm_attribute_value($domain, $key) {
     return $attributes[$key];
   }
   return $key;
-}
+}
\ No newline at end of file
diff --git a/storm.theme.inc b/storm.theme.inc
index c4eb121..42ba646 100644
--- a/storm.theme.inc
+++ b/storm.theme.inc
@@ -89,38 +89,149 @@ function theme_storm_view_item($label, $value) {
   return $o;
 }
 
-// See 498108: Proposed to refactor creation of Storm Dashboard
-function theme_storm_dashboard() {
-  $o = '<div id="stormdashboard">';
-  $o .= '<dl class="stormdashboard">';
-  
-  $o .= '<div class="stormdashboard">';
-  $o .= theme('storm_link', '', 'stormorganization');
-  $o .= theme('storm_link', '', 'stormperson');
-  $o .= theme('storm_link', '', 'stormteam');
-  $o .= theme('storm_link', '', 'stormproject');
-  $o .= theme('storm_link', '', 'stormtask');
-  $o .= theme('storm_link', '', 'stormticket');
-  $o .= theme('storm_link', '', 'stormtimetracking');
-  $o .= '</div>';
+function theme_storm_dashboard($link_blocks) {
+  $content = '<div id="stormdashboard">';
+  if (!empty($link_blocks)) {
+    $content .= '<dl class="stormdashboard clear-block">';
+    foreach ($link_blocks as $block_id => $link_block_array) {
+      $content .= '<div class="stormdashboard">';
+      if (!empty($link_block_array)) {
+        foreach ($link_block_array as $key => $link_array) {
+          if (!empty($link_array['theme'])) {
+            $content .= theme($link_array['theme'], $link_array);
+          }
+          else {
+            $content .= theme('storm_dashboard_link', $link_array);
+          }
+        }
+      }
+      $content .= '</div>';
+    }
+    $content .= '</dl>';
+  }
+  else {
+    $content .= t('No dashboard links available');
+  }
+  $content .= '</div>';
 
-  $o .= '<div class="stormdashboard">';
-  $o .= theme('storm_link', '', 'stormnote');
-  $o .= theme('storm_link', '', 'storminvoice');
-  $o .= theme('storm_link', '', 'stormexpense');
-  $o .= theme('storm_link', '', 'stormknowledgebase');
-  $o .= theme('storm_link', '', 'stormattribute');
-  $o .= theme('storm_link', '', 'stormconfiguration');
-  
-  $o .= '</div>';
-  $o .= '</dl>';
-  $o .= '</div>';
-  return $o;
+  return $content;
+}
+
+function theme_storm_dashboard_block($link_blocks) {
+  $content = '<div id="stormdashboard-block">';
+  if (!empty($link_blocks)) {
+    foreach ($link_blocks as $block_id => $link_block_array) {
+      if (!empty($link_block_array)) {
+        foreach ($link_block_array as $key => $link_array) {
+          $content .= '<div class="stormdashboard-icon">';
+          if (!empty($link_array['theme'])) {
+            $content .= theme($link_array['theme'], $link_array);
+          }
+          else {
+            $content .= theme('storm_dashboard_link', $link_array);
+          }
+          $content .= '</div>';
+        }
+      }
+    }
+  }
+  else {
+    // no links, hide block
+    return '';
+  }
+  $content .= '</div>';
+  return $content;
+}
+
+function theme_storm_dashboard_link($link_array) {
+
+  $content = '';
+
+  // DEFAULT ICON
+  if (empty($link_array['icon'])) {
+    $dt_id = 'stormexpenses';
+  }
+  else {
+    $dt_id = $link_array['icon'];
+  }
+
+  $params = array();
+  if (!empty($link_array['nid'])) {
+    $params_key = $link_array['node_type'] .'_nid';
+    $params['query'] = array($params_key => $link_array['nid']);
+  }
+
+  $link = l($link_array['title'], $link_array['path'], $params);
+
+  // ADD PLUS SIGN (node/add)
+  if (!empty($link_array['add_type'])) {
+    $item = new stdClass();
+    $item->type = $link_array['add_type'];
+    if (empty($link_array['params'])) {
+      $link_array['params'] = array();
+    }
+    $link .= storm_icon_add('node/add/'. str_replace('_', '-', $link_array['add_type']), $item, $link_array['params']);
+  }
+
+
+  if (empty($link_array['nid']) || 0 == $link_array['nid']) {
+    if (variable_get('storm_icons_display', TRUE)) {
+      $content .= '<dt id="'. $dt_id .'" class="stormcomponent">';
+    }
+    else {
+      $content .= '<dt class="stormcomponent">';
+    }
+    $content .= $link;
+    $content .= '</dt>';
+  }
+  else {
+    $content = array(
+      '#prefix' => variable_get('storm_icons_display', TRUE) ? '<dt id="'. $dt_id .'" class="stormcomponent">' : '<dt class="stormcomponent">',
+      '#suffix' => '</dt>',
+      '#value' => $link,
+      '#weight' => $link_array['weight'],
+    );
+  }
+
+
+  return $content;
+}
+
+function theme_storm_dashboard_links_weight_table($form = array()) {
+  $type = $form['#infix'];
+  $rows = array();
+  foreach($form as $id => &$value) {
+    if ($id[0] == '#') {
+      continue;
+    }
+    $value[$type.'_storm_dashboard_link_weight_'.$id]['#attributes']['class'] = $type.'dashboard-link-table-weight';
+
+    $row = array();
+    $row[] = $value['#value'];
+    $row[] = drupal_render($value[$type.'_storm_dashboard_link_active_'.$id]);
+    $row[] = drupal_render($value[$type.'_storm_dashboard_link_weight_'.$id]);
+    unset($value['#value']);
+    if (!empty($row)) {
+      $rows[] = array(
+        'data' => $row,
+        'class' => 'draggable',
+      );
+    }
+  }
+  $headers = array(t('Link'), t('active'), t('Weight'));
+
+  $output = theme('table', $headers, $rows, array('id' => $type.'dashboard-link-table'));
+
+  drupal_add_tabledrag($type.'dashboard-link-table', 'order', 'sibling', $type.'dashboard-link-table-weight');
+
+  $output .= drupal_render($form);
+
+  return $output;
 }
 
 function theme_storm_link($source_module='', $destination_module='', $node_nid=0, $weight=0) {
   switch ($source_module) {
- 
+
    case "stormorganization":
       $params_key = 'organization_nid';
       break;
@@ -268,7 +379,7 @@ function theme_storm_link($source_module='', $destination_module='', $node_nid=0
       $params = array('query' => array($params_key => $node_nid));
     }
     $v = l($list_text, $list_path, $params);
-    
+
     if (!$add_icon_type=='') {
       $i = new stdClass();
       $i->type = $add_icon_type;
diff --git a/stormexpense/stormexpense.module b/stormexpense/stormexpense.module
index 72438c6..1713041 100644
--- a/stormexpense/stormexpense.module
+++ b/stormexpense/stormexpense.module
@@ -710,3 +710,23 @@ function stormexpense_views_api() {
     'path' => drupal_get_path('module', 'stormexpense'),
   );
 }
+
+function stormexpense_storm_dashboard_links($type) {
+  if ($type != 'page') {
+    return array();
+  }
+  $links = array();
+  $links[] = array(
+    'theme' => 'storm_dashboard_link',
+    'title' => t('Expenses'),
+    'icon' => 'stormexpenses',
+    'path' => 'storm/expenses',
+    'params' => array(),
+    'access_arguments' => 'Storm expense: access',
+    'node_type' => 'stormexpense',
+    'add_type' => 'stormexpense',
+    'map' => array(),
+    'weight' => 11,
+  );
+  return $links;
+}
diff --git a/storminvoice/storminvoice.module b/storminvoice/storminvoice.module
index 6f9cc9c..66bf72b 100644
--- a/storminvoice/storminvoice.module
+++ b/storminvoice/storminvoice.module
@@ -1131,3 +1131,23 @@ function storminvoice_token_values ($type, $object = NULL) {
   return $values;
   }
 }
+
+function storminvoice_storm_dashboard_links($type) {
+  if ($type != 'page') {
+    return array();
+  }
+  $links = array();
+  $links[] = array(
+    'theme' => 'storm_dashboard_link',
+    'title' => t('Invoices'),
+    'icon' => 'storminvoices',
+    'path' => 'storm/invoices',
+    'params' => array(),
+    'access_arguments' => 'Storm invoice: access',
+    'node_type' => 'storminvoice',
+    'add_type' => 'storminvoice',
+    'map' => array(),
+    'weight' => 10,
+  );
+  return $links;
+}
diff --git a/stormnote/stormnote.module b/stormnote/stormnote.module
index f527177..85e1bd0 100644
--- a/stormnote/stormnote.module
+++ b/stormnote/stormnote.module
@@ -431,3 +431,23 @@ function stormnote_views_api() {
     'path' => drupal_get_path('module', 'stormnote'),
   );
 }
+
+function stormnote_storm_dashboard_links($type) {
+  if ($type != 'page') {
+    return array();
+  }
+  $links = array();
+  $links[] = array(
+    'theme' => 'storm_dashboard_link',
+    'title' => t('Notes'),
+    'icon' => 'stormnotes',
+    'path' => 'storm/notes',
+    'params' => array(),
+    'access_arguments' => 'Storm note: access',
+    'node_type' => 'stormnote',
+    'add_type' => 'stormnote',
+    'map' => array(),
+    'weight' => 9,
+  );
+  return $links;
+}
diff --git a/stormorganization/stormorganization.module b/stormorganization/stormorganization.module
index 113e034..feb5b5b 100644
--- a/stormorganization/stormorganization.module
+++ b/stormorganization/stormorganization.module
@@ -512,3 +512,23 @@ function stormorganization_views_api() {
     'path' => drupal_get_path('module', 'stormorganization'),
   );
 }
+
+function stormorganization_storm_dashboard_links($type) {
+  if ($type != 'page') {
+    return array();
+  }
+  $links = array();
+  $links[] = array(
+    'theme' => 'storm_dashboard_link',
+    'title' => t('Organizations'),
+    'icon' => 'stormorganizations',
+    'path' => 'storm/organizations',
+    'params' => array(),
+    'access_arguments' => 'Storm organization: access',
+    'node_type' => 'stormorganization',
+    'add_type' => 'stormorganization',
+    'map' => array(),
+    'weight' => 1,
+  );
+  return $links;
+}
diff --git a/stormperson/stormperson.module b/stormperson/stormperson.module
index bb19702..7ca31f8 100644
--- a/stormperson/stormperson.module
+++ b/stormperson/stormperson.module
@@ -586,3 +586,23 @@ function stormperson_primary_email($node) {
     return $node->email;
   }
 }
+
+function stormperson_storm_dashboard_links($type) {
+  if ($type != 'page') {
+    return array();
+  }
+  $links = array();
+  $links[] = array(
+    'theme' => 'storm_dashboard_link',
+    'title' => t('People'),
+    'icon' => 'stormpeople',
+    'path' => 'storm/people',
+    'params' => array(),
+    'access_arguments' => 'Storm person: access',
+    'node_type' => 'stormperson',
+    'add_type' => 'stormperson',
+    'map' => array(),
+    'weight' => 2,
+  );
+  return $links;
+}
diff --git a/stormproject/stormproject.module b/stormproject/stormproject.module
index 10fbab7..ec38c4e 100644
--- a/stormproject/stormproject.module
+++ b/stormproject/stormproject.module
@@ -895,3 +895,23 @@ function stormproject_token_values ($type, $object = NULL) {
   }
   return $values;
 }
+
+function stormproject_storm_dashboard_links($type) {
+  if ($type != 'page') {
+    return array();
+  }
+  $links = array();
+  $links[] = array(
+    'theme' => 'storm_dashboard_link',
+    'title' => t('Projects'),
+    'icon' => 'stormprojects',
+    'path' => 'storm/projects',
+    'params' => array(),
+    'access_arguments' => 'Storm project: access',
+    'node_type' => 'stormproject',
+    'add_type' => 'stormproject',
+    'map' => array(),
+    'weight' => 4,
+  );
+  return $links;
+}
diff --git a/stormtask/stormtask.module b/stormtask/stormtask.module
index b17d0d3..54e68df 100644
--- a/stormtask/stormtask.module
+++ b/stormtask/stormtask.module
@@ -1079,3 +1079,23 @@ function stormtask_token_values ($type, $object = NULL) {
   }
   return $values;
 }
+
+function stormtask_storm_dashboard_links($type) {
+  if ($type != 'page') {
+    return array();
+  }
+  $links = array();
+  $links[] = array(
+    'theme' => 'storm_dashboard_link',
+    'title' => t('Tasks'),
+    'icon' => 'stormtasks',
+    'path' => 'storm/tasks',
+    'params' => array(),
+    'access_arguments' => 'Storm task: access',
+    'node_type' => 'stormtask',
+    'add_type' => 'stormtask',
+    'map' => array(),
+    'weight' => 5,
+  );
+  return $links;
+}
diff --git a/stormteam/stormteam.module b/stormteam/stormteam.module
index 924940f..4ed827d 100644
--- a/stormteam/stormteam.module
+++ b/stormteam/stormteam.module
@@ -717,3 +717,23 @@ function stormteam_user_return_teams($account = NULL) {
 
   return $teams;
 }
+
+function stormteam_storm_dashboard_links($type) {
+  if ($type != 'page') {
+    return array();
+  }
+  $links = array();
+  $links[] = array(
+    'theme' => 'storm_dashboard_link',
+    'title' => t('Teams'),
+    'icon' => 'stormteams',
+    'path' => 'storm/teams',
+    'params' => array(),
+    'access_arguments' => 'Storm team: access',
+    'node_type' => 'stormteam',
+    'add_type' => 'stormteam',
+    'map' => array(),
+    'weight' => 3,
+  );
+  return $links;
+}
diff --git a/stormticket/stormticket.module b/stormticket/stormticket.module
index 05b6afd..c2dfdde 100644
--- a/stormticket/stormticket.module
+++ b/stormticket/stormticket.module
@@ -905,3 +905,23 @@ function stormticket_token_values ($type, $object = NULL) {
   }
   return $values;
 }
+
+function stormticket_storm_dashboard_links($type) {
+  if ($type != 'page') {
+    return array();
+  }
+  $links = array();
+  $links[] = array(
+    'theme' => 'storm_dashboard_link',
+    'title' => t('Tickets'),
+    'icon' => 'stormtickets',
+    'path' => 'storm/tickets',
+    'params' => array(),
+    'access_arguments' => 'Storm ticket: access',
+    'node_type' => 'stormticket',
+    'add_type' => 'stormticket',
+    'map' => array(),
+    'weight' => 6,
+  );
+  return $links;
+}
\ No newline at end of file
diff --git a/stormtimetracking/stormtimetracking.module b/stormtimetracking/stormtimetracking.module
index 248e37c..cccb92f 100644
--- a/stormtimetracking/stormtimetracking.module
+++ b/stormtimetracking/stormtimetracking.module
@@ -722,3 +722,22 @@ function stormtimetracking_views_api() {
   );
 }
 
+function stormtimetracking_storm_dashboard_links($type) {
+  if ($type != 'page') {
+    return array();
+  }
+  $links = array();
+  $links[] = array(
+    'theme' => 'storm_dashboard_link',
+    'title' => t('Timetrackings'),
+    'icon' => 'stormtimetrackings',
+    'path' => 'storm/timetrackings',
+    'params' => array(),
+    'access_arguments' => 'Storm timetracking: access',
+    'node_type' => 'stormtimetracking',
+    'add_type' => 'stormtimetracking',
+    'map' => array(),
+    'weight' => 8,
+  );
+  return $links;
+}
