diff --git contextual.css contextual.css
index 4bf694b..8dc0a5e 100644
--- contextual.css
+++ contextual.css
@@ -20,7 +20,8 @@ div.admin-links {
 .node,
 div.commment,
 div.view,
-div.view-data-node-body { position:relative; }
+div.view-data-node-body,
+div.views-row { position:relative; }
 
 .block div.view { position:static; }
 
@@ -122,4 +123,4 @@ div.admin-links a:hover {
 
   div.admin-links a.icon-delete { background-position:-215px -155px; }
   div.admin-links a.icon-edit { background-position:-215px -180px; }
-  div.admin-links a.icon-configure { background-position:-215px -205px; }
\ No newline at end of file
+  div.admin-links a.icon-configure { background-position:-215px -205px; }
diff --git contextual.module contextual.module
index 733d583..4776b5c 100644
--- contextual.module
+++ contextual.module
@@ -143,7 +143,7 @@ function views_admin_link($type, $object) {
         }
         break;
     }
-    if (!empty($view_name)) && module_exists('views_ui')) {
+    if ((!empty($view_name)) && module_exists('views_ui')) {
       $links['views-edit'] = array(
         'title' => t('Edit view'),
         'href' => "admin/build/views/edit/{$view_name}",
@@ -209,4 +209,14 @@ function contextual_preprocess_node(&$vars) {
  */
 function contextual_preprocess_comment(&$vars) {
   $vars['content'] .= theme('contextual', contextual_get_links('comment', $vars['comment']));
-}
\ No newline at end of file
+}
+
+/**
+ * Implementation of hook_views_api()
+ */
+function contextual_views_api() {
+  return array(
+    'api' => 2,
+    'path' => drupal_get_path('module', 'contextual') . '/views',
+  );
+}
diff --git views/contextual.views.inc views/contextual.views.inc
new file mode 100644
index 0000000..79df53b
--- /dev/null
+++ views/contextual.views.inc
@@ -0,0 +1,39 @@
+<?php
+
+/**
+ * @file 
+ * Views integration routines
+ */
+
+/**
+ * Implementation of hook_views_data()
+ */
+function contextual_views_data() {
+  $data['node']['contextual'] = array(
+    'title' => t('Contextual links'),
+    'help' => t('Administrative links for the node'),
+    'field' => array(
+      'handler' => 'contextual_handler_field_contextual',
+    ),
+  );
+
+  return $data;
+}
+
+
+/**
+ * Implementation of hook_views_handlers()
+ */
+function contextual_views_handlers() {
+  return array(
+    'info' => array(
+      'path' => drupal_get_path('module', 'contextual') . '/views',
+    ),
+    'handlers' => array(
+      'contextual_handler_field_contextual' => array(
+        'file' => 'contextual_handler_field_contextual.inc',
+        'parent' => 'views_handler_field',
+      ),
+    ),
+  );
+}
diff --git views/contextual_handler_field_contextual.inc views/contextual_handler_field_contextual.inc
new file mode 100644
index 0000000..fd2d5fd
--- /dev/null
+++ views/contextual_handler_field_contextual.inc
@@ -0,0 +1,62 @@
+<?php
+
+/**
+ * Handler for rendering contextual links for nodes
+ */
+class contextual_handler_field_contextual extends views_handler_field {
+  /**
+   * Overrides query()
+   */
+  function query() {
+    // Do nothing
+  }
+
+  /**
+   * Renders the links
+   */
+  function render($values) {
+    $nid = $values->nid;
+    return theme('contextual', contextual_get_links('node', node_load($nid)));
+  }
+
+  /**
+   * Labels are unwanted
+   */
+  function label() {
+    return '';
+  }
+
+  /**
+   * Advanced render doesn't make sens
+   */
+  function allow_advanced_render() {
+    return FALSE;
+  }
+
+  /**
+   * Removing unwanted options
+   */
+  function options_form(&$form, &$form_state) {
+    parent::options_form($form, $form_state);
+
+    unset($form['label']);
+    unset($form['empty']);
+    unset($form['empty_zero']);
+    unset($form['hide_empty']);
+  }
+
+  /**
+   * No options
+   */
+  function options_defition() {
+    $options = parent::options_definition();
+
+    unset($options['label']);
+    unset($options['empty']);
+    unset($options['empty_zero']);
+    unset($options['hide_empty']);
+
+    return $options;
+  }
+   
+}
