diff --git a/eck.entity.inc b/eck.entity.inc
index bb58914..c8392ad 100644
--- a/eck.entity.inc
+++ b/eck.entity.inc
@@ -208,6 +208,8 @@ function eck__entity__list($entity_type_name, $bundle_name) {
     $entities = array();
   }
   
+  $destination = drupal_get_destination();
+  
   //Because of the flexible paths capabilities, we are not guaranteed to see a local action for the add here,
   //so lets add a link ourselves until we figure out whether there is a better solution
   $crud_info = get_bundle_crud_info($entity_type->name, $bundle->name);
@@ -218,7 +220,7 @@ function eck__entity__list($entity_type_name, $bundle_name) {
              "eck administer {$entity_type->name} {$bundle->name} entities",
              "eck add {$entity_type->name} {$bundle->name} entities"
   ) ) ) 
-    $build['add'] = array('#markup' => "+ ".l(t('Add Entity'), $crud_info['add']['path']));
+    $build['add'] = array('#markup' => "+ ".l(t('Add Entity'), $crud_info['add']['path'], array('query' => $destination)));
 
   //Check that the user has permissions to view entity lists:
   if( eck__multiple_access_check(
@@ -484,6 +486,8 @@ function eck__entity__form_submit($form, &$state) {
   $entity->save();
 
   drupal_set_message(t("Entity {$entity->id} - @entity_label has been saved", array("@entity_label" => entity_label($form['#entity_type'], $entity)) ));
+  $uri = eck__entity__uri($entity);
+  $state['redirect'] = $uri['path'];
 }
 
 /**
diff --git a/eck.module b/eck.module
index d2b027a..68447ce 100644
--- a/eck.module
+++ b/eck.module
@@ -169,6 +169,7 @@ function entity_table($entities, $select = FALSE) {
     }
     
     $allowed_operations = '';
+    $destination = drupal_get_destination();
     //Check that the user has permissions to edit:
     if( eck__multiple_access_check( 
       array( 'eck administer entities', 
@@ -178,7 +179,7 @@ function entity_table($entities, $select = FALSE) {
             ), FALSE /* TODO: should also check user ownership perms. */ )
     ){
       $edit_path = str_replace('%', $id, $crud_info['edit']['path']);
-      $allowed_operations = l(t('edit'), $edit_path);
+      $allowed_operations = l(t('edit'), $edit_path, array('query' => $destination));
     }
     
     //Check that the user has permissions to delete:
@@ -190,7 +191,7 @@ function entity_table($entities, $select = FALSE) {
             ), FALSE /* TODO: should also check user ownership perms. */ )
     ){
       $delete_path = str_replace('%', $id, $crud_info['delete']['path']);
-      $allowed_operations .= (($allowed_operations)?'<br />':'').l(t('delete'), $delete_path);
+      $allowed_operations .= (($allowed_operations)?'<br />':'').l(t('delete'), $delete_path, array('query' => $destination));
     }
     $uri = entity_uri($entity_type, $entity);
     $row = array(l(entity_label($entity_type, $entity), $uri['path'], $uri['options']));
