diff -Nurp content_profile_old/content_profile.module content_profile/content_profile.module
--- content_profile_old/content_profile.module	2008-11-05 21:41:50.000000000 +0100
+++ content_profile/content_profile.module	2008-11-14 15:09:19.000000000 +0100
@@ -472,6 +472,9 @@ function content_profile_theme() {
     'content_profile_display_tab_edit' => array(
       'file' => 'content_profile.theme.inc',
     ),
+    'content_profile_pageroute_empty' => array(
+      'arguments' => array('file' => 'content_profile.pageroute.inc', 'type_name' => NULL)
+    ),
   );
 }
 
@@ -483,3 +486,15 @@ function content_profile_simpletest() {
   $tests = file_scan_directory(drupal_get_path('module', 'content_profile') .'/tests', '\.test');
   return array_keys($tests);
 }
+
+/**
+ * Pageroute hook for pagetypes supporting content profiles
+ */
+function content_profile_pageroute_info() {
+  return array(
+    'content_profile' => array(
+      'view_profile' => 'content_profile.pageroute',
+      'edit_profile' => 'content_profile.pageroute',
+    )
+  );
+}
diff -Nurp content_profile_old/content_profile.pageroute.inc content_profile/content_profile.pageroute.inc
--- content_profile_old/content_profile.pageroute.inc	1970-01-01 01:00:00.000000000 +0100
+++ content_profile/content_profile.pageroute.inc	2008-11-14 14:57:42.000000000 +0100
@@ -0,0 +1,115 @@
+<?php
+// $Id$
+
+/**
+ * @file
+ * Pagetypes for pageroute content profile integration
+ */
+
+include_once(drupal_get_path('module', 'pageroute') .'/pageroute.page.inc');
+include_once(drupal_get_path('module', 'pageroute') .'/pageroute.page_add.inc');
+include_once(drupal_get_path('module', 'pageroute') .'/pageroute.page_edit.inc');
+include_once(drupal_get_path('module', 'pageroute') .'/pageroute.page_view.inc');
+
+/**
+ * Page edit type
+ */
+class content_profile_page_edit_profile extends pageroute_page_edit {
+
+  function set_form(&$form, &$form_state, &$args) {     
+      $args['hide_pageroute_buttons'] = FALSE;
+      $args['default_target'] = PAGEROUTE_CURRENT;
+
+      $node = $form_state['node'];
+  
+      if (!$node) {
+        $node = node_load(array(
+          'type' => $this->options['content-type'],
+          'uid' => pageroute_page_get_uid($page),
+        ));
+      }
+
+      return pageroute_page_edit::set_node_edit_form($form, $form_state, $this, $args, $node);
+  }
+
+  public static function ui($page, &$form) {
+    
+    $form['options']['content-type'] = array(
+      '#type' => 'select',
+      '#title' => t('Profile content type'),
+      '#options' => content_profile_get_types('names'),
+      '#default_value' => $page->options['content-type'],
+      '#weight' => 2,
+      '#description' => t('Select a content profile type.'),
+    );
+
+    pageroute_page::node_ui($page, &$form, TRUE);
+  }
+    
+  public static function help() {
+    return t('A page of this type will present a content profile node editing form of a configurable content-profile-type. It will edit the node with the id taken from the first argument of the pageroute. Furthermore this type can be configured to show a node adding form if the content profile is not existing. So you can build a pageroute that manages the creation and editing of content profiles.');
+  }
+  
+  public static function info() {
+    return array('name' => t('Content profile editing form'));
+  }
+}
+
+/**
+ * Page view type
+ */
+class content_profile_page_view_profile extends pageroute_page_view {  
+  /*
+   * Returns the page display for the configured node
+   */
+  public function set_form(&$form, &$form_state, &$args) {
+    $args['hide_pageroute_buttons'] = FALSE;
+    $args['default_target'] = PAGEROUTE_CURRENT;    
+
+    $node = node_load(array(
+      'type' => $this->options['content-type'],
+      'uid' => pageroute_page_get_uid($page),
+    ));
+
+    if ($node->nid && node_access('view', $node)) {
+      if (empty($this->title)) {
+        drupal_set_title(check_plain($node->title));
+      }
+      node_tag_new($node->nid);
+      $form += array('pageroute-view' => array('#value' => node_view($node, FALSE, TRUE, FALSE)));
+    }
+    else {
+      $type_name = node_get_types('name', $page->options['content-type']);
+      $form += array('pageroute-view' => array('#value' => theme('content_profile_empty', $type_name)));
+    }
+  }
+  
+  public static function ui($page, &$form) {
+    $form['options']['content-type'] = array(
+      '#type' => 'select',
+      '#title' => t('Profile content type'),
+      '#options' => content_profile_get_types('names'),
+      '#required' => TRUE,
+      '#default_value' => $page->options['content-type'],
+      '#weight' => 2,
+      '#description' => t('You can only use content types marked as \'content profile\''),
+    );
+  }
+  
+  public static function help() {
+    return t('The lonely node display page can be used to view this lonely node. This might be useful for displaying the lonely node aftercreation or update. There will be a (themeable) message if there is no node that can be displayed.');
+  }
+
+  public static function info() {
+    return array('name' => t('Content profile display'));
+  }
+}
+
+/**
+ * Theme function for empty content profiles
+ */
+function theme_content_profile_pageroute_empty($type_name) {
+
+  return '<div class="content-profile-pageroute-empty">'.
+    t('You have not created a @type yet. Go ahead and create one!', array('@type' => $type_name)) .'</div>';
+}
