diff --git a/core/admin.py b/core/admin.py
index d25a154..1a46d04 100644
--- a/core/admin.py
+++ b/core/admin.py
@@ -1,6 +1,5 @@
 from troggle.core.models import *
 from django.contrib import admin
-from feincms.admin import editor
 from django.forms import ModelForm
 import django.forms as forms
 from core.forms import LogbookEntryForm
@@ -31,6 +30,10 @@ class ScannedImageInline(admin.TabularInline):
     model = ScannedImage
     extra = 4
 
+class OtherCaveInline(admin.TabularInline):
+    model = OtherCaveName
+    extra = 1
+
 class SurveyAdmin(TroggleModelAdmin):
     inlines = (ScannedImageInline,)
     search_fields = ('expedition__year','wallet_number')    
@@ -90,17 +93,13 @@ class PersonExpeditionAdmin(TroggleModelAdmin):
 
 class CaveAdmin(TroggleModelAdmin):
     search_fields = ('official_name','kataster_number','unofficial_number')
-    #inlines = (QMInline,)
+    inlines = (OtherCaveInline,)
     extra = 4
 
-class SubcaveAdmin(editor.TreeEditorMixin,TroggleModelAdmin):
-    pass
-
 admin.site.register(Photo)
-admin.site.register(Subcave, SubcaveAdmin)
 admin.site.register(Cave, CaveAdmin)
 admin.site.register(Area)
-admin.site.register(OtherCaveName)
+#admin.site.register(OtherCaveName)
 admin.site.register(CaveAndEntrance)
 admin.site.register(SurveyStation)
 admin.site.register(NewSubCave)
@@ -131,9 +130,4 @@ def export_as_xml(modeladmin, request, queryset):
     return response
 
 admin.site.add_action(export_as_xml)
-admin.site.add_action(export_as_json)
-
-try:
-    mptt.register(Subcave, order_insertion_by=['name'])
-except mptt.AlreadyRegistered:
-    print "mptt already registered"
+admin.site.add_action(export_as_json)
\ No newline at end of file
diff --git a/core/models.py b/core/models.py
index f794775..9247c66 100644
--- a/core/models.py
+++ b/core/models.py
@@ -1,10 +1,4 @@
 import urllib, urlparse, string, os, datetime, logging
-try:
-    import mptt
-except ImportError:
-    #I think we should be having troggle directory as the base import place
-    #but I  am leaving the following line in to make sure I do not break anything
-    import troggle.mptt as mptt
 from django.forms import ModelForm
 from django.db import models
 from django.contrib import admin
@@ -502,15 +496,6 @@ class Entrance(TroggleModel):
             if f[0] == self.findability:
                 return f[1]
                 
-class Subcave(TroggleModel):
-    description = models.TextField(blank=True, null=True)
-    title = models.CharField(max_length=200, )
-    cave = models.ForeignKey('Cave', blank=True, null=True, help_text="Only the top-level subcave should be linked to a cave!")
-    parent = models.ForeignKey('self', null=True, blank=True, related_name='children')
-    #adjoining = models.ManyToManyField('Subcave',blank=True, null=True,)
-    legacy_description_path = models.CharField(max_length=600, blank=True, null=True)
-    def __unicode__(self):
-        return self.title
 
     def get_absolute_url(self):
         
@@ -522,28 +507,6 @@ class Subcave(TroggleModel):
             res = '/'.join((self.get_root().cave.get_absolute_url(), self.title))
             
         return res
-            
-# This was the old way, before we were using django-mptt
-
-#    def get_absolute_url(self):
-#        urlString=self.name
-#        if self.parent:
-#            parent=self.parent
-#            while parent: #recursively walk up the tree, adding parents to the left of the URL
-#                urlString=parent.name+'/'+urlString
-#                if parent.cave:
-#                    cave=parent.cave
-#                parent=parent.parent
-#            urlString='cave/'+unicode(cave.kataster_number)+'/'+urlString
-#        else:
-#            urlString='cave/'+unicode(self.cave.kataster_number)+'/'+urlString
-
-            
-#        return urlparse.urljoin(settings.URL_ROOT, urlString)
-try:
-    mptt.register(Subcave, order_insertion_by=['title'])
-except mptt.AlreadyRegistered:
-    print "mptt already registered"
 
 class CaveDescription(TroggleModel):
     short_name = models.CharField(max_length=50, unique = True)
@@ -666,7 +629,7 @@ class Survey(TroggleModel):
     wallet_letter = models.CharField(max_length=1,blank=True,null=True)
     comments = models.TextField(blank=True,null=True)
     location = models.CharField(max_length=400,blank=True,null=True) #REDUNDANT
-    subcave = models.ForeignKey('Subcave', blank=True, null=True)
+    subcave = models.ForeignKey('NewSubCave', blank=True, null=True)
     #notes_scan = models.ForeignKey('ScannedImage',related_name='notes_scan',blank=True, null=True)  	#Replaced by contents field of ScannedImage model
     survex_block  = models.OneToOneField('SurvexBlock',blank=True, null=True)
     logbook_entry = models.ForeignKey('LogbookEntry')
diff --git a/core/views_caves.py b/core/views_caves.py
index fde7bbb..3f01c2f 100644
--- a/core/views_caves.py
+++ b/core/views_caves.py
@@ -56,19 +56,6 @@ def survexblock(request, survexpath):
     ftext = survexblock.text
     return render_with_context(request,'survexblock.html', {'survexblock':survexblock, 'ftext':ftext, })
 
-def subcave(request, cave_id, subcave):
-    print subcave
-    subcaveSeq=re.findall('(?:/)([^/]*)',subcave)
-    print subcaveSeq
-    cave=models.Cave.objects.get(kataster_number = cave_id)
-    subcave=models.Subcave.objects.get(title=subcaveSeq[0], cave=cave)
-    if len(subcaveSeq)>1: 
-        for subcaveUrlSegment in subcaveSeq[1:]:
-            if subcaveUrlSegment:
-                subcave=subcave.children.get(title=subcaveUrlSegment)
-    print subcave
-    return render_with_context(request,'subcave.html', {'subcave': subcave,'cave':cave})
-
 def surveyindex(request):
     surveys=Survey.objects.all()
     expeditions=Expedition.objects.order_by("-year")
diff --git a/feincms/__init__.py b/feincms/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/feincms/admin/__init__.py b/feincms/admin/__init__.py
deleted file mode 100644
index 5079662..0000000
--- a/feincms/admin/__init__.py
+++ /dev/null
@@ -1,12 +0,0 @@
-from django.contrib import admin
-
-from feincms.models import Region, Template
-
-
-admin.site.register(Region,
-    list_display=('title', 'key', 'inherited'),
-    )
-admin.site.register(Template,
-    list_display=('title', 'path'),
-    )
-
diff --git a/feincms/admin/editor.py b/feincms/admin/editor.py
deleted file mode 100644
index c5c688b..0000000
--- a/feincms/admin/editor.py
+++ /dev/null
@@ -1,183 +0,0 @@
-import re
-
-from django import forms, template
-from django.conf import settings
-from django.contrib import admin
-from django.contrib.admin.options import IncorrectLookupParameters
-from django.contrib.admin.util import unquote
-from django.core import serializers
-from django.core.exceptions import ImproperlyConfigured
-from django.db import connection, transaction
-from django.forms.formsets import all_valid
-from django.forms.models import inlineformset_factory
-from django.http import HttpResponseRedirect, HttpResponse
-from django.shortcuts import render_to_response
-from django.utils import simplejson
-from django.utils.encoding import force_unicode
-from django.utils.functional import update_wrapper
-from django.utils.translation import ugettext_lazy as _
-
-
-
-FEINCMS_ADMIN_MEDIA = getattr(settings, 'FEINCMS_ADMIN_MEDIA', '/media/sys/feincms/')
-
-
-class ItemEditorMixin(object):
-    """
-    This mixin needs an attribute on the ModelAdmin class:
-
-    show_on_top::
-        A list of fields which should be displayed at the top of the form.
-        This does not need to (and should not) include ``template''
-    """
-
-    def change_view(self, request, object_id, extra_context=None):
-
-        if not hasattr(self.model, '_feincms_content_types'):
-            raise ImproperlyConfigured, 'You need to create at least one content type for the %s model.' % (self.model.__name__)
-
-        class ModelForm(forms.ModelForm):
-            class Meta:
-                model = self.model
-
-        class SettingsFieldset(forms.ModelForm):
-            # This form class is used solely for presentation, the data will be saved
-            # by the ModelForm above
-
-            class Meta:
-                model = self.model
-                exclude = self.show_on_top+('template',)
-
-        inline_formset_types = [(
-            content_type,
-            inlineformset_factory(self.model, content_type, extra=1)
-            ) for content_type in self.model._feincms_content_types]
-
-        opts = self.model._meta
-        app_label = opts.app_label
-        obj = self.model._default_manager.get(pk=unquote(object_id))
-
-        if not self.has_change_permission(request, obj):
-            raise PermissionDenied
-
-        if request.method == 'POST':
-            model_form = ModelForm(request.POST, request.FILES, instance=obj)
-
-            inline_formsets = [
-                formset_class(request.POST, request.FILES, instance=obj,
-                    prefix=content_type.__name__.lower())
-                for content_type, formset_class in inline_formset_types]
-
-            if model_form.is_valid() and all_valid(inline_formsets):
-                model_form.save()
-                for formset in inline_formsets:
-                    formset.save()
-                return HttpResponseRedirect(".")
-
-            settings_fieldset = SettingsFieldset(request.POST, instance=obj)
-            settings_fieldset.is_valid()
-        else:
-            model_form = ModelForm(instance=obj)
-            inline_formsets = [
-                formset_class(instance=obj, prefix=content_type.__name__.lower())
-                for content_type, formset_class in inline_formset_types]
-
-            settings_fieldset = SettingsFieldset(instance=obj)
-
-        content_types = []
-        for content_type in self.model._feincms_content_types:
-            content_name = content_type._meta.verbose_name
-            content_types.append((content_name, content_type.__name__.lower()))
-
-        context = {
-            'title': _('Change %s') % force_unicode(opts.verbose_name),
-            'opts': opts,
-            'page': obj,
-            'page_form': model_form,
-            'inline_formsets': inline_formsets,
-            'content_types': content_types,
-            'settings_fieldset': settings_fieldset,
-            'top_fieldset': [model_form[field] for field in self.show_on_top],
-            'FEINCMS_ADMIN_MEDIA': FEINCMS_ADMIN_MEDIA,
-        }
-
-        return render_to_response([
-            'admin/feincms/%s/%s/item_editor.html' % (app_label, opts.object_name.lower()),
-            'admin/feincms/%s/item_editor.html' % app_label,
-            'admin/feincms/item_editor.html',
-            ], context, context_instance=template.RequestContext(request))
-
-
-class TreeEditorMixin(object):
-    def changelist_view(self, request, extra_context=None):
-        # handle AJAX requests
-        if request.is_ajax():
-            cmd = request.POST.get('__cmd')
-            if cmd=='save_tree':
-                return self._save_tree(request)
-            elif cmd=='delete_item':
-                return self._delete_item(request)
-
-            return HttpResponse('Oops. AJAX request not understood.')
-
-        from django.contrib.admin.views.main import ChangeList, ERROR_FLAG
-        opts = self.model._meta
-        app_label = opts.app_label
-
-        if not self.has_change_permission(request, None):
-            raise PermissionDenied
-        try:
-            cl = ChangeList(request, self.model, self.list_display,
-                self.list_display_links, self.list_filter, self.date_hierarchy,
-                self.search_fields, self.list_select_related, self.list_per_page,
-                self.list_editable, self)
-        except IncorrectLookupParameters:
-            # Wacky lookup parameters were given, so redirect to the main
-            # changelist page, without parameters, and pass an 'invalid=1'
-            # parameter via the query string. If wacky parameters were given and
-            # the 'invalid=1' parameter was already in the query string, something
-            # is screwed up with the database, so display an error page.
-            if ERROR_FLAG in request.GET.keys():
-                return render_to_response('admin/invalid_setup.html', {'title': _('Database error')})
-            return HttpResponseRedirect(request.path + '?' + ERROR_FLAG + '=1')
-
-        context = {
-            'FEINCMS_ADMIN_MEDIA': FEINCMS_ADMIN_MEDIA,
-            'title': cl.title,
-            'is_popup': cl.is_popup,
-            'cl': cl,
-            'has_add_permission': self.has_add_permission(request),
-            'root_path': self.admin_site.root_path,
-            'app_label': app_label,
-            'object_list': self.model._tree_manager.all(),
-        }
-        context.update(extra_context or {})
-        return render_to_response([
-            'admin/feincms/%s/%s/tree_editor.html' % (app_label, opts.object_name.lower()),
-            'admin/feincms/%s/tree_editor.html' % app_label,
-            'admin/feincms/tree_editor.html',
-            ], context, context_instance=template.RequestContext(request))
-
-    def _save_tree(self, request):
-        pagetree = simplejson.loads(request.POST['tree'])
-        # 0 = tree_id, 1 = parent_id, 2 = left, 3 = right, 4 = level, 5 = item_id
-        sql = "UPDATE %s SET %s=%%s, %s_id=%%s, %s=%%s, %s=%%s, %s=%%s WHERE %s=%%s" % (
-            self.model._meta.db_table,
-            self.model._meta.tree_id_attr,
-            self.model._meta.parent_attr,
-            self.model._meta.left_attr,
-            self.model._meta.right_attr,
-            self.model._meta.level_attr,
-            self.model._meta.pk.column)
-
-        connection.cursor().executemany(sql, pagetree)
-        transaction.commit_unless_managed()
-
-        return HttpResponse("OK", mimetype="text/plain")
-
-    def _delete_item(self, request):
-        page_id = request.POST['item_id']
-        obj = self.model._default_manager.get(pk=unquote(page_id))
-        obj.delete()
-        return HttpResponse("OK", mimetype="text/plain")
-
diff --git a/feincms/content/__init__.py b/feincms/content/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/feincms/content/file/__init__.py b/feincms/content/file/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/feincms/content/file/models.py b/feincms/content/file/models.py
deleted file mode 100644
index 4ad4f20..0000000
--- a/feincms/content/file/models.py
+++ /dev/null
@@ -1,20 +0,0 @@
-from django.db import models
-from django.template.loader import render_to_string
-from django.utils.translation import ugettext_lazy as _
-
-
-class FileContent(models.Model):
-    title = models.CharField(max_length=200)
-    file = models.FileField(_('file'), upload_to='filecontent')
-
-    class Meta:
-        abstract = True
-        verbose_name = _('file')
-        verbose_name_plural = _('files')
-
-    def render(self, **kwargs):
-        return render_to_string([
-            'content/file/%s.html' % self.region.key,
-            'content/file/default.html',
-            ], {'content': self})
-
diff --git a/feincms/content/image/__init__.py b/feincms/content/image/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/feincms/content/image/models.py b/feincms/content/image/models.py
deleted file mode 100644
index 2f1d2c4..0000000
--- a/feincms/content/image/models.py
+++ /dev/null
@@ -1,32 +0,0 @@
-from django.db import models
-from django.template.loader import render_to_string
-from django.utils.translation import ugettext_lazy as _
-
-class ImageContent(models.Model):
-    """
-    Create an ImageContent like this:
-
-    Cls.create_content_type(ImageContent, POSITION_CHOICES=(
-        ('left', 'Left'),
-        ('right', Right'),
-        ))
-    """
-
-    image = models.ImageField(_('image'), upload_to='imagecontent')
-
-    class Meta:
-        abstract = True
-        verbose_name = _('image')
-        verbose_name_plural = _('images')
-
-    def render(self, **kwargs):
-        return render_to_string([
-            'content/image/%s.html' % self.position,
-            'content/image/default.html',
-            ], {'content': self})
-
-    @classmethod
-    def handle_kwargs(cls, POSITION_CHOICES=()):
-        models.CharField(_('position'), max_length=10, choices=POSITION_CHOICES
-            ).contribute_to_class(cls, 'position')
-
diff --git a/feincms/content/richtext/__init__.py b/feincms/content/richtext/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/feincms/content/richtext/models.py b/feincms/content/richtext/models.py
deleted file mode 100644
index 9d5c01c..0000000
--- a/feincms/content/richtext/models.py
+++ /dev/null
@@ -1,16 +0,0 @@
-from django.db import models
-from django.utils.safestring import mark_safe
-from django.utils.translation import ugettext_lazy as _
-
-
-class RichTextContent(models.Model):
-    text = models.TextField(_('text'), blank=True)
-
-    class Meta:
-        abstract = True
-        verbose_name = _('rich text')
-        verbose_name_plural = _('rich texts')
-
-    def render(self, **kwargs):
-        return mark_safe(self.text)
-
diff --git a/feincms/content/rss/__init__.py b/feincms/content/rss/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/feincms/content/rss/models.py b/feincms/content/rss/models.py
deleted file mode 100644
index 8dd3aa6..0000000
--- a/feincms/content/rss/models.py
+++ /dev/null
@@ -1,39 +0,0 @@
-from datetime import datetime
-
-from django.db import models
-from django.utils.safestring import mark_safe
-from django.utils.translation import ugettext_lazy as _
-from django.template.loader import render_to_string
-
-import feedparser
-
-
-class RSSContent(models.Model):
-    title = models.CharField(help_text=_('The rss field is updated several times a day. A change in the title will only be visible on the home page after the next feed update.'), max_length=50)
-    link = models.URLField(_('link'))
-    rendered_content = models.TextField(_('Pre-rendered content'), blank=True, editable=False)
-    last_updated = models.DateTimeField(_('Last updated'), blank=True, null=True)
-    max_items = models.IntegerField(_('Max. items'), default=5)
-
-    class Meta:
-        abstract = True
-        verbose_name = _('RSS feed')
-        verbose_name_plural = _('RSS feeds')
-
-    def render(self, **kwargs):
-        return mark_safe(self.rendered_content)
-
-    def cache_content(self):
-        print u"Getting RSS feed at %s" % (self.link,)
-        feed = feedparser.parse(self.link)
-
-        print u"Pre-rendering content"
-        self.rendered_content = render_to_string('content/rss/content.html', {
-            'feed_title': self.title,
-            'feed_link': feed['feed']['link'],
-            'entries': feed['entries'][:self.max_items],
-            })
-        self.last_updated = datetime.now()
-
-        self.save()
-
diff --git a/feincms/content/video/__init__.py b/feincms/content/video/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/feincms/content/video/models.py b/feincms/content/video/models.py
deleted file mode 100644
index f198235..0000000
--- a/feincms/content/video/models.py
+++ /dev/null
@@ -1,26 +0,0 @@
-from django.db import models
-from django.utils.safestring import mark_safe
-from django.utils.translation import ugettext_lazy as _
-import re
-
-class VideoContent(models.Model):
-    video = models.URLField(_('video link'),help_text=_('This should be a link to a youtube video, i.e.: http://www.youtube.com/watch?v=zmj1rpzDRZ0'))
-
-    class Meta:
-        abstract = True
-        verbose_name = _('video')
-        verbose_name_plural = _('videos')
-
-    def render(self, **kwargs):
-        vid = re.search('(?<==)\w+',self.video)
-        ret = """
-            <div class="videocontent">
-            <object width="400" height="330">
-            <param name="movie" value="http://www.youtube.com/v/%s&hl=de&fs=1"></param>
-                <param name="allowFullScreen" value="true"></param>
-                <param name="allowscriptaccess" value="always"></param>
-                <embed src="http://www.youtube.com/v/%s&hl=de&fs=1&rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="400" height="330"></embed>
-            </object>
-            </div>
-            """ % (vid.group(0), vid.group(0))
-        return ret
diff --git a/feincms/locale/de/LC_MESSAGES/django.po b/feincms/locale/de/LC_MESSAGES/django.po
deleted file mode 100644
index 6b3ceea..0000000
--- a/feincms/locale/de/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,281 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-04-23 11:12+0200\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: models.py:33 module/page/models.py:131
-msgid "title"
-msgstr "Titel"
-
-#: models.py:34
-msgid "key"
-msgstr "Schlüssel"
-
-#: models.py:35
-msgid "inherited"
-msgstr "Vererbt"
-
-#: models.py:36
-msgid ""
-"Should the content be inherited by subpages if they do not define any "
-"content for this region?"
-msgstr ""
-"Soll der Inhalt dieser Region durch Unterseiten geerbt werden, sofern diese "
-"keinen eigenen Inhalt definieren?"
-
-#: models.py:39
-msgid "region"
-msgstr "Region"
-
-#: models.py:40
-msgid "regions"
-msgstr "Regionen"
-
-#: models.py:57
-msgid "template"
-msgstr "Template"
-
-#: models.py:58
-msgid "templates"
-msgstr "Templates"
-
-#: models.py:135
-msgid "ordering"
-msgstr "Sortierung"
-
-#: admin/editor.py:139
-msgid "Database error"
-msgstr "Datenbankfehler"
-
-#: content/file/models.py:8 content/file/models.py:12
-msgid "file"
-msgstr "Datei"
-
-#: content/file/models.py:13
-msgid "files"
-msgstr "Dateien"
-
-#: content/image/models.py:15 content/image/models.py:19
-msgid "image"
-msgstr "Bild"
-
-#: content/image/models.py:20
-msgid "images"
-msgstr "Bilder"
-
-#: content/image/models.py:30
-msgid "position"
-msgstr "Position"
-
-#: content/richtext/models.py:7
-msgid "text"
-msgstr "Text"
-
-#: content/richtext/models.py:11
-msgid "rich text"
-msgstr "Text"
-
-#: content/richtext/models.py:12
-msgid "rich texts"
-msgstr "Texte"
-
-#: content/rss/models.py:12
-msgid ""
-"The rss field is updated several times a day. A change in the title will "
-"only be visible on the home page after the next feed update."
-msgstr ""
-"Der RSS Feed wird mehrmals täglich aktualisiert. Eine Änderung des Titels "
-"erscheint erst nach der nächsten Feed-Aktualisierung auf der Webseite."
-
-#: content/rss/models.py:13
-msgid "link"
-msgstr "Link"
-
-#: content/rss/models.py:14
-msgid "Pre-rendered content"
-msgstr "Vor-gerenderter Inhalt"
-
-#: content/rss/models.py:15
-msgid "Last updated"
-msgstr "Letzte Aktualisierung"
-
-#: content/rss/models.py:16
-msgid "Max. items"
-msgstr "Maximale Anzahl"
-
-#: content/rss/models.py:20
-msgid "RSS feed"
-msgstr "RSS Feed"
-
-#: content/rss/models.py:21
-msgid "RSS feeds"
-msgstr "RSS Feeds"
-
-#: content/video/models.py:7
-msgid "video link"
-msgstr "Video-Link"
-
-#: content/video/models.py:7
-msgid ""
-"This should be a link to a youtube video, i.e.: http://www.youtube.com/watch?"
-"v=zmj1rpzDRZ0"
-msgstr ""
-"Dies sollte ein Link zu einem Youtube-Video sein, z.B.: http://www.youtube."
-"com/watch?v=zmj1rpzDRZ0"
-
-#: content/video/models.py:11
-msgid "video"
-msgstr "Video"
-
-#: content/video/models.py:12
-msgid "videos"
-msgstr "Videos"
-
-#: module/page/admin.py:17
-msgid "Other options"
-msgstr "Weitere Optionen"
-
-#: module/page/models.py:36 module/page/models.py:146
-msgid "navigation extension"
-msgstr "Navigations-Erweiterung"
-
-#: module/page/models.py:128 templates/admin/feincms/tree_editor.html:133
-msgid "active"
-msgstr "Aktiv"
-
-#: module/page/models.py:132
-msgid "This is used for the generated navigation too."
-msgstr "Dies wird auch für die generierte Navigation verwendet."
-
-#: module/page/models.py:135
-msgid "in navigation"
-msgstr "In der Navigation"
-
-#: module/page/models.py:136
-msgid "override URL"
-msgstr "Überschriebene URL"
-
-#: module/page/models.py:137
-msgid "Override the target URL for the navigation."
-msgstr "Überschreibe die Ziel-URL für die Navigation."
-
-#: module/page/models.py:138
-msgid "redirect to"
-msgstr "Weiterleiten zu"
-
-#: module/page/models.py:139
-msgid "Target URL for automatic redirects."
-msgstr "Ziel-URL für automatische Weiterleitungen."
-
-#: module/page/models.py:140
-msgid "Cached URL"
-msgstr "Zwischengespeicherte URL"
-
-#: module/page/models.py:148
-msgid ""
-"Select the module providing subpages for this page if you need to customize "
-"the navigation."
-msgstr "Wähle das Modul aus, welches weitere Navigationspunkte erstellt."
-
-#: module/page/models.py:151
-msgid "content title"
-msgstr "Inhaltstitel"
-
-#: module/page/models.py:152
-msgid "The first line is the main title, the following lines are subtitles."
-msgstr "Die erste Zeile ist der Haupttitel, die weiteren Zeilen Untertitel"
-
-#: module/page/models.py:155
-msgid "page title"
-msgstr "Seitentitel"
-
-#: module/page/models.py:156
-msgid "Page title for browser window. Same as title by default."
-msgstr ""
-"Seitentitel für das Browser-Fenster. Standardmässig gleich wie der Titel."
-
-#: module/page/models.py:157
-msgid "meta keywords"
-msgstr "Meta Begriffe"
-
-#: module/page/models.py:158
-msgid "This will be prepended to the default keyword list."
-msgstr "Diese Begriffe werden vor die Standard-Begriffsliste eingefügt."
-
-#: module/page/models.py:159
-msgid "meta description"
-msgstr "Meta Beschreibung"
-
-#: module/page/models.py:160
-msgid "This will be prepended to the default description."
-msgstr "Diese Beschreibung wird vor der Standard-Beschreibung eingefügt."
-
-#: module/page/models.py:163
-msgid "language"
-msgstr "Sprache"
-
-#: module/page/models.py:169
-msgid "page"
-msgstr "Seite"
-
-#: module/page/models.py:170
-msgid "pages"
-msgstr "Seiten"
-
-#: templates/admin/feincms/item_editor.html:122
-msgid "Home"
-msgstr "Startseite"
-
-#: templates/admin/feincms/item_editor.html:134
-msgid "Delete"
-msgstr "Löschen"
-
-#: templates/admin/feincms/item_editor.html:139
-msgid "Save"
-msgstr "Speichern"
-
-#: templates/admin/feincms/item_editor.html:143
-msgid "Change Template"
-msgstr "Template ändern"
-
-#: templates/admin/feincms/item_editor.html:158
-msgid "Region empty"
-msgstr "Region leer"
-
-#: templates/admin/feincms/item_editor.html:162
-msgid ""
-"Content from the parent site is automatically inherited. To override this "
-"behaviour, add some content."
-msgstr ""
-"Inhalt wird von der übergeordneten Seite geerbt. Füge Inhalt hinzu, um "
-"dieses Verhalten zu ändern"
-
-#: templates/admin/feincms/tree_editor.html:121
-#, python-format
-msgid "Add %(name)s"
-msgstr "%(name)s hinzufügen"
-
-#: templates/admin/feincms/tree_editor.html:132
-msgid "Page"
-msgstr "Seite"
-
-#: templates/admin/feincms/tree_editor.html:134
-msgid "in navi"
-msgstr "Im Menü"
-
-#: templates/admin/feincms/tree_editor.html:135
-msgid "delete"
-msgstr "Löschen"
diff --git a/feincms/management/__init__.py b/feincms/management/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/feincms/management/commands/__init__.py b/feincms/management/commands/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/feincms/management/commands/update_rsscontent.py b/feincms/management/commands/update_rsscontent.py
deleted file mode 100644
index ee3189f..0000000
--- a/feincms/management/commands/update_rsscontent.py
+++ /dev/null
@@ -1,12 +0,0 @@
-from django.core.management.base import NoArgsCommand
-
-from feincms.content.rss.models import RSSContent
-
-class Command(NoArgsCommand):
-    help = "Run this as a cronjob."
-
-    def handle_noargs(self, **options):
-        for cls in RSSContent._feincms_content_models:
-            for content in cls.objects.all():
-                content.cache_content()
-
diff --git a/feincms/models.py b/feincms/models.py
deleted file mode 100644
index 8963161..0000000
--- a/feincms/models.py
+++ /dev/null
@@ -1,224 +0,0 @@
-import copy
-
-from django.conf import settings
-from django.core.exceptions import ImproperlyConfigured
-from django.db import models
-from django.db.models import Q
-from django.http import Http404
-from django.utils import translation
-from django.utils.translation import ugettext_lazy as _
-
-import mptt
-
-
-class TypeRegistryMetaClass(type):
-    """
-    You can access the list of subclasses as <BaseClass>.types
-    """
-
-    def __init__(cls, name, bases, attrs):
-        if not hasattr(cls, 'types'):
-            cls.types = []
-        else:
-            cls.types.append(cls)
-
-
-class Region(models.Model):
-    """
-    A template region which will be a container for several page contents.
-
-    Often used regions might be "main" and "sidebar"
-    """
-
-    title = models.CharField(_('title'), max_length=50, unique=True)
-    key = models.CharField(_('key'), max_length=20, unique=True)
-    inherited = models.BooleanField(_('inherited'), default=False,
-        help_text=_('Should the content be inherited by subpages if they do not define any content for this region?'))
-
-    class Meta:
-        verbose_name = _('region')
-        verbose_name_plural = _('regions')
-
-    def __unicode__(self):
-        return self.title
-
-
-class Template(models.Model):
-    """
-    A template file on the disk which can be used by pages to render themselves.
-    """
-
-    title = models.CharField(max_length=200)
-    path = models.CharField(max_length=200)
-    regions = models.ManyToManyField(Region, related_name='templates')
-
-    class Meta:
-        ordering = ['title']
-        verbose_name = _('template')
-        verbose_name_plural = _('templates')
-
-    def __unicode__(self):
-        return self.title
-
-
-def first_template():
-    return Template.objects.all()[0]
-
-
-class Base(models.Model):
-    template = models.ForeignKey(Template, default=first_template)
-
-    class Meta:
-        abstract = True
-
-    @property
-    def content(self):
-        if not hasattr(self, '_content_proxy'):
-            self._content_proxy = ContentProxy(self)
-
-        return self._content_proxy
-
-    def _content_for_region(self, region):
-        if not hasattr(self, '_feincms_content_types'):
-            raise ImproperlyConfigured, 'You need to create at least one content type for the %s model.' % (self.__class__.__name__)
-
-        sql = ' UNION '.join([
-            'SELECT %d, COUNT(id) FROM %s WHERE parent_id=%s AND region_id=%s' % (
-                idx,
-                cls._meta.db_table,
-                self.pk,
-                region.id) for idx, cls in enumerate(self._feincms_content_types)])
-
-        from django.db import connection
-        cursor = connection.cursor()
-        cursor.execute(sql)
-
-        counts = [row[1] for row in cursor.fetchall()]
-
-        if not any(counts):
-            return []
-
-        contents = []
-        for idx, cnt in enumerate(counts):
-            if cnt:
-                contents += list(
-                    self._feincms_content_types[idx].objects.filter(
-                        parent=self,
-                        region=region).select_related('parent', 'region'))
-
-        return contents
-
-    @classmethod
-    def _create_content_base(cls):
-        class Meta:
-            abstract = True
-            ordering = ['ordering']
-
-        def __unicode__(self):
-            return u'%s on %s, ordering %s' % (self.region, self.parent, self.ordering)
-
-        def render(self, **kwargs):
-            render_fn = getattr(self, 'render_%s' % self.region.key, None)
-
-            if render_fn:
-                return render_fn(**kwargs)
-
-            raise NotImplementedError
-
-        attrs = {
-            '__module__': cls.__module__,
-            '__unicode__': __unicode__,
-            'render': render,
-            'Meta': Meta,
-            'parent': models.ForeignKey(cls, related_name='%(class)s_set'),
-            'region': models.ForeignKey(Region, related_name='%s_%%(class)s_set' % cls.__name__.lower()),
-            'ordering': models.IntegerField(_('ordering'), default=0),
-            }
-
-        cls._feincms_content_model = type('%sContent' % cls.__name__,
-            (models.Model,), attrs)
-
-        cls._feincms_content_types = []
-
-        return cls._feincms_content_model
-
-    @classmethod
-    def create_content_type(cls, model, **kwargs):
-        if not hasattr(cls, '_feincms_content_model'):
-            cls._create_content_base()
-
-        feincms_content_base = getattr(cls, '_feincms_content_model')
-
-        class Meta:
-            db_table = '%s_%s' % (cls._meta.db_table, model.__name__.lower())
-            verbose_name = model._meta.verbose_name
-            verbose_name_plural = model._meta.verbose_name_plural
-
-        attrs = {
-            '__module__': cls.__module__,
-            'Meta': Meta,
-            }
-
-        new_type = type(
-            model.__name__,
-            (model, feincms_content_base,), attrs)
-        cls._feincms_content_types.append(new_type)
-
-        if not hasattr(model, '_feincms_content_models'):
-            model._feincms_content_models = []
-
-        model._feincms_content_models.append(new_type)
-
-        if hasattr(new_type, 'handle_kwargs'):
-            new_type.handle_kwargs(**kwargs)
-        else:
-            for k, v in kwargs.items():
-                setattr(new_type, k, v)
-
-        return new_type
-
-
-class ContentProxy(object):
-    """
-    This proxy offers attribute-style access to the page contents of regions.
-
-    Example:
-    >>> page = Page.objects.all()[0]
-    >>> page.content.main
-    [A list of all page contents which are assigned to the region with key 'main']
-    """
-
-    def __init__(self, item):
-        self.item = item
-
-    def __getattr__(self, attr):
-        """
-        Get all item content instances for the specified item and region
-
-        If no item contents could be found for the current item and the region
-        has the inherited flag set, this method will go up the ancestor chain
-        until either some item contents have found or no ancestors are left.
-        """
-
-        item = self.__dict__['item']
-
-        try:
-            region = item.template.regions.get(key=attr)
-        except Region.DoesNotExist:
-            return []
-
-        def collect_items(obj):
-            contents = obj._content_for_region(region)
-
-            # go to parent if this model has a parent attribute
-            # TODO this should be abstracted into a property/method or something
-            # The link which should be followed is not always '.parent'
-            if not contents and hasattr(obj, 'parent_id') and obj.parent_id and region.inherited:
-                return collect_items(obj.parent)
-
-            return contents
-
-        contents = collect_items(item)
-        contents.sort(key=lambda c: c.ordering)
-        return contents
-
diff --git a/feincms/module/__init__.py b/feincms/module/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/feincms/module/page/__init__.py b/feincms/module/page/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/feincms/module/page/admin.py b/feincms/module/page/admin.py
deleted file mode 100644
index 486605f..0000000
--- a/feincms/module/page/admin.py
+++ /dev/null
@@ -1,33 +0,0 @@
-from django.contrib import admin
-from django.utils.translation import ugettext_lazy as _
-
-
-from feincms.admin import editor
-from feincms.module.page.models import Page
-
-
-class PageAdmin(editor.ItemEditorMixin, editor.TreeEditorMixin, admin.ModelAdmin):
-    # the fieldsets config here is used for the add_view, it has no effect
-    # for the change_view which is completely customized anyway
-    fieldsets = (
-        (None, {
-            'fields': ('active', 'in_navigation', 'template', 'title', 'slug',
-                'parent', 'language'),
-        }),
-        (_('Other options'), {
-            'classes': ('collapse',),
-            'fields': ('override_url', 'meta_keywords', 'meta_description'),
-        }),
-        )
-    list_display=('__unicode__', 'active', 'in_navigation',
-        'language', 'template')
-    list_filter=('active', 'in_navigation', 'language', 'template')
-    search_fields = ('title', 'slug', '_content_title', '_page_title',
-        'meta_keywords', 'meta_description')
-    prepopulated_fields={
-        'slug': ('title',),
-        }
-
-    show_on_top = ('title', 'active', 'in_navigation')
-
-admin.site.register(Page, PageAdmin)
diff --git a/feincms/module/page/models.py b/feincms/module/page/models.py
deleted file mode 100644
index 623ab88..0000000
--- a/feincms/module/page/models.py
+++ /dev/null
@@ -1,232 +0,0 @@
-from django.conf import settings
-from django.db import models
-from django.db.models import Q
-from django.http import Http404
-from django.utils import translation
-from django.utils.translation import ugettext_lazy as _
-
-import mptt
-
-from feincms.models import TypeRegistryMetaClass, Region, Template,\
-    Base, ContentProxy
-
-
-def get_object(path, fail_silently=False):
-    dot = path.rindex('.')
-    try:
-        return getattr(__import__(path[:dot], {}, {}, ['']), path[dot+1:])
-    except ImportError:
-        if not fail_silently:
-            raise
-
-    return None
-
-
-class PagePretender(object):
-    def __init__(self, **kwargs):
-        for k, v in kwargs.items():
-            setattr(self, k, v)
-
-    def get_absolute_url(self):
-        return self.url
-
-
-class NavigationExtension(object):
-    __metaclass__ = TypeRegistryMetaClass
-    name = _('navigation extension')
-
-    def children(self, page, **kwargs):
-        raise NotImplementedError
-
-
-class PageManager(models.Manager):
-    def active(self):
-        return self.filter(active=True)
-
-    def page_for_path(self, path, raise404=False):
-        """
-        Return a page for a path.
-
-        Example:
-        Page.objects.page_for_path(request.path)
-        """
-
-        stripped = path.strip('/')
-
-        try:
-            return self.active().filter(override_url='/%s/' % stripped)[0]
-        except IndexError:
-            pass
-
-        tokens = stripped.split('/')
-
-        count = len(tokens)
-
-        filters = {'%sisnull' % ('parent__' * count): True}
-
-        for n, token in enumerate(tokens):
-            filters['%sslug' % ('parent__' * (count-n-1))] = token
-
-        try:
-            return self.active().filter(**filters)[0]
-        except IndexError:
-            if raise404:
-                raise Http404
-            raise self.model.DoesNotExist
-
-    def page_for_path_or_404(self, path):
-        """
-        Wrapper for page_for_path which raises a Http404 if no page
-        has been found for the passed path.
-        """
-        return self.page_for_path(path, raise404=True)
-
-    def best_match_for_path(self, path, raise404=False):
-        """
-        Return the best match for a path.
-        """
-
-        tokens = path.strip('/').split('/')
-
-        for count in range(len(tokens), -1, -1):
-            try:
-                return self.page_for_path('/'.join(tokens[:count]))
-            except self.model.DoesNotExist:
-                pass
-
-        if raise404:
-            raise Http404
-        return None
-
-    def in_navigation(self):
-        return self.active().filter(in_navigation=True)
-
-    def toplevel_navigation(self):
-        return self.in_navigation().filter(parent__isnull=True)
-
-    def for_request(self, request, raise404=False):
-        page = self.page_for_path(request.path, raise404)
-        page.setup_request(request)
-        return page
-
-    def for_request_or_404(self, request):
-        return self.page_for_path_or_404(request.path, raise404=True)
-
-    def best_match_for_request(self, request, raise404=False):
-        page = self.best_match_for_path(request.path, raise404)
-        page.setup_request(request)
-        return page
-
-    def from_request(self, request):
-        if hasattr(request, '_feincms_page'):
-            return request._feincms_page
-
-        return self.for_request(request)
-
-
-class Page(Base):
-    active = models.BooleanField(_('active'), default=False)
-
-    # structure and navigation
-    title = models.CharField(_('title'), max_length=100,
-        help_text=_('This is used for the generated navigation too.'))
-    slug = models.SlugField()
-    parent = models.ForeignKey('self', blank=True, null=True, related_name='children')
-    in_navigation = models.BooleanField(_('in navigation'), default=True)
-    override_url = models.CharField(_('override URL'), max_length=200, blank=True,
-        help_text=_('Override the target URL for the navigation.'))
-    redirect_to = models.CharField(_('redirect to'), max_length=200, blank=True,
-        help_text=_('Target URL for automatic redirects.'))
-    _cached_url = models.CharField(_('Cached URL'), max_length=200, blank=True,
-        editable=False, default='')
-
-    # navigation extensions
-    NE_CHOICES = [(
-        '%s.%s' % (cls.__module__, cls.__name__), cls.name) for cls in NavigationExtension.types]
-    navigation_extension = models.CharField(_('navigation extension'),
-        choices=NE_CHOICES, blank=True, max_length=50,
-        help_text=_('Select the module providing subpages for this page if you need to customize the navigation.'))
-
-    # content
-    _content_title = models.TextField(_('content title'), blank=True,
-        help_text=_('The first line is the main title, the following lines are subtitles.'))
-
-    # meta stuff TODO keywords and description?
-    _page_title = models.CharField(_('page title'), max_length=100, blank=True,
-        help_text=_('Page title for browser window. Same as title by default.'))
-    meta_keywords = models.TextField(_('meta keywords'), blank=True,
-        help_text=_('This will be prepended to the default keyword list.'))
-    meta_description = models.TextField(_('meta description'), blank=True,
-        help_text=_('This will be prepended to the default description.'))
-
-    # language
-    language = models.CharField(_('language'), max_length=10,
-        choices=settings.LANGUAGES)
-    translations = models.ManyToManyField('self', blank=True)
-
-    class Meta:
-        ordering = ['tree_id', 'lft']
-        verbose_name = _('page')
-        verbose_name_plural = _('pages')
-
-    objects = PageManager()
-
-    def __unicode__(self):
-        return u'%s (%s)' % (self.title, self.get_absolute_url())
-
-    def save(self, *args, **kwargs):
-        super(Page, self).save(*args, **kwargs)
-        pages = self.get_descendants(include_self=True)
-        for page in pages:
-            page._generate_cached_url()
-
-    def _generate_cached_url(self):
-        if self.override_url:
-            self._cached_url = self.override_url
-        if self.is_root_node():
-            self._cached_url = u'/%s/' % (self.slug)
-        else:
-            self._cached_url = u'/%s/%s/' % ('/'.join([page.slug for page in self.get_ancestors()]), self.slug)
-
-        super(Page, self).save()
-
-    def get_absolute_url(self):
-        return self._cached_url
-
-    @property
-    def page_title(self):
-        if self._page_title:
-            return self._page_title
-        return self.content_title
-
-    @property
-    def content_title(self):
-        if not self._content_title:
-            return self.title
-
-        try:
-            return self._content_title.splitlines()[0]
-        except IndexError:
-            return u''
-
-    @property
-    def content_subtitle(self):
-        return u'\n'.join(self._content_title.splitlines()[1:])
-
-    def setup_request(self, request):
-        translation.activate(self.language)
-        request.LANGUAGE_CODE = translation.get_language()
-        request._feincms_page = self
-
-    def extended_navigation(self):
-        if not self.navigation_extension:
-            return []
-
-        cls = get_object(self.navigation_extension, fail_silently=True)
-        if not cls:
-            return []
-
-        return cls().children(self)
-
-mptt.register(Page)
-
diff --git a/feincms/module/page/templatetags/__init__.py b/feincms/module/page/templatetags/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/feincms/module/page/templatetags/feincms_page_tags.py b/feincms/module/page/templatetags/feincms_page_tags.py
deleted file mode 100644
index 68b2ee3..0000000
--- a/feincms/module/page/templatetags/feincms_page_tags.py
+++ /dev/null
@@ -1,63 +0,0 @@
-from django import template
-from feincms.module.page.models import Page
-from feincms.templatetags.utils import *
-
-register = template.Library()
-
-
-class NavigationNode(SimpleAssignmentNodeWithVarAndArgs):
-    """
-    Example:
-    {% feincms_navigation of feincms_page as sublevel level=2 %}
-    {% for p in sublevel %}
-        <a href="{{ p.get_absolute_url }}">{{ p.title }}</a>
-    {% endfor %}
-    """
-
-    def what(self, instance, args):
-        level = int(args.get('level', 1))
-
-        if level <= 1:
-            return Page.objects.toplevel_navigation()
-
-        # mptt starts counting at 0, NavigationNode at 1; if we need the submenu
-        # of the current page, we have to add 2 to the mptt level
-        if instance.level+2 == level:
-            return instance.children.in_navigation()
-
-        try:
-            return instance.get_ancestors()[level-2].children.in_navigation()
-        except IndexError:
-            return []
-register.tag('feincms_navigation', do_simple_assignment_node_with_var_and_args_helper(NavigationNode))
-
-
-class ParentLinkNode(SimpleNodeWithVarAndArgs):
-    """
-    {% feincms_parentlink of feincms_page level=1 %}
-    """
-
-    def what(self, page, args):
-        level = int(args.get('level', 1))
-
-        if page.level+1 == level:
-            return page.get_absolute_url()
-        elif page.level+1 < level:
-            return '#'
-
-        try:
-            return page.get_ancestors()[level-1].get_absolute_url()
-        except IndexError:
-            return '#'
-register.tag('feincms_parentlink', do_simple_node_with_var_and_args_helper(ParentLinkNode))
-
-
-class BestMatchNode(SimpleAssignmentNodeWithVar):
-    """
-    {% feincms_bestmatch for request.path as feincms_page %}
-    """
-
-    def what(self, path):
-        return Page.objects.best_match_for_path(path)
-register.tag('feincms_bestmatch', do_simple_assignment_node_with_var_helper(BestMatchNode))
-
diff --git a/feincms/shortcuts.py b/feincms/shortcuts.py
deleted file mode 100644
index a0e4e19..0000000
--- a/feincms/shortcuts.py
+++ /dev/null
@@ -1,13 +0,0 @@
-from django.shortcuts import render_to_response
-from django.template import RequestContext
-
-from feincms.module.page.models import Page
-
-
-def render_to_response_best_match(request, template_name, dictionary=None):
-    dictionary = dictionary or {}
-    dictionary['feincms_page'] = Page.objects.best_match_for_request(request)
-
-    return render_to_response(template_name, dictionary,
-        context_instance=RequestContext(request))
-
diff --git a/feincms/templates/admin/feincms/item_editor.html b/feincms/templates/admin/feincms/item_editor.html
deleted file mode 100644
index c61b8c2..0000000
--- a/feincms/templates/admin/feincms/item_editor.html
+++ /dev/null
@@ -1,227 +0,0 @@
-{% extends "admin/change_form.html" %}
-{% load i18n admin_modify adminmedia %}
-
-{% block bodyclass %}{{ opts.app_label }}-{{ opts.object_name.lower }} change-form{% endblock %}
-{% block coltype %}{% if ordered_objects %}colMS{% else %}colM{% endif %}{% endblock %}
-
-{% block extrahead %}{{ block.super }}
-<link rel="stylesheet" type="text/css" href="{% admin_media_prefix %}css/forms.css" />
-
-<script type="text/javascript" src="../../../jsi18n/"></script>
-<script type="text/javascript" src="{{ FEINCMS_ADMIN_MEDIA }}jquery-1.3.min.js"></script>
-<script type="text/javascript" src="{{ FEINCMS_ADMIN_MEDIA }}jquery.ui.all.js"></script>
-<script type="text/javascript" src="{{ FEINCMS_ADMIN_MEDIA }}jquery.livequery.js"></script>
-<script type="text/javascript" src="{{ FEINCMS_ADMIN_MEDIA }}jquery.alerts.js"></script>
-
-<script type="text/javascript" src="{{ FEINCMS_ADMIN_MEDIA }}helper.js"></script>
-<script type="text/javascript" src="{{ FEINCMS_ADMIN_MEDIA }}listener.js"></script>
-
-<script type="text/javascript" src="/media/sys/feinheit/tinymce/tiny_mce.js"></script>
-
-<script type="text/javascript">
-
-    tinyMCE.init({
-        mode: "none",
-        theme: "advanced",
-        language: "en",
-        theme_advanced_toolbar_location: "top",
-        theme_advanced_toolbar_align: "left",
-        theme_advanced_statusbar_location: "bottom",
-        theme_advanced_buttons1: "fullscreen,|,formatselect,image,media,code,|,cut,copy,paste,|,bold,italic,|,bullist,numlist,|,link,unlink",
-        theme_advanced_buttons2: "",
-        theme_advanced_buttons3: "",
-        theme_advanced_path: false,
-        theme_advanced_blockformats: "p,h2,h3",
-        theme_advanced_resizing: true,
-        width: '600',
-        height: '300',
-        content_css: "/path_to_your_media/css/preview.css",
-        plugins: "advimage,advlink,fullscreen,table,preview,media,inlinepopups",
-        advimage_update_dimensions_onchange: true,
-        //file_browser_callback: "CustomFileBrowser",
-        relative_urls: false
-    });
-
-    function init_pagecontent() {
-        // handle special page content type needs
-        // this is not really extensible, but it works for now
-        $('.order-machine textarea[name*=richtext]:visible').each(function(){
-            tinyMCE.execCommand('mceAddControl', true, this.id);
-        });
-    }
-
-    IMG_ARROW_DOWN_PATH = "{{ FEINCMS_ADMIN_MEDIA }}img/arrow_down.gif";
-    IMG_ARROW_RIGHT_PATH = "{{ FEINCMS_ADMIN_MEDIA }}img/arrow_right.gif";
-    IMG_CIRCLE_PATH = "{{ FEINCMS_ADMIN_MEDIA }}img/circle.gif";
-    IMG_DELETELINK_PATH = "{{ FEINCMS_ADMIN_MEDIA }}img/icon_deletelink.gif";
-    IMG_MOVE_PATH = "{{ FEINCMS_ADMIN_MEDIA }}img/icon_move.gif";
-
-    REGIONS = [];
-    REGION_MAP = [];
-    {% for region in page.template.regions.all %}
-        REGIONS.push('{{ region.key }}');
-        REGION_MAP.push('{{ region.id }}');
-    {% endfor %}
-    ACTIVE_REGION = 0;
-
-    CONTENT_NAMES = {
-        {% for name, value in content_types %}'{{ value }}': '{{ name }}'{% if not forloop.last %},{% endif %}
-        {% endfor %}};
-
-    $(document).ready(function(){
-        // move contents into their corresponding regions and do some simple formatting
-        $("div[id$=_set]").children().each(function(){
-            if (!($(this).hasClass("header"))) {
-                $(this).find("select[name$=region]").addClass("region-choice-field").parents("tr").hide();
-                $(this).find("input[name$=DELETE]").addClass("delete-field").parents("tr").hide();
-                $(this).find("input[name$=ordering]").addClass("order-field").parents("tr").hide();
-                $(this).find("input[name$=id]").hide().prev().hide();
-                $(this).find("input[name$=parent]").hide().prev().hide();
-
-                var region_id = $(this).find(".region-choice-field").val();
-                region_id = REGION_MAP.indexOf(region_id);
-                var content_type = $(this).attr("id").substr(0, $(this).attr("id").indexOf("_"));
-                region_append(region_id,$(this), CONTENT_NAMES[content_type]);
-                set_item_field_value($(this),"region-choice-field",region_id)
-            }
-        });
-        // register regions as sortable for drag N drop
-        $(".order-machine").sortable({
-            handle: '.handle',
-            helper: 'clone',
-            stop: function(event, ui) {
-                richify_poor($(ui.item));
-            }
-        });
-        // hide content on drag n drop
-        $(".handle").mousedown(function(){
-            poorify_rich($(this).parents(".order-item"));
-        });
-        $(".handle").mouseup(function(){
-            richify_poor($(this).parents(".order-item"));
-        });
-        // convert text areas to rich text editors.
-        init_pagecontent();
-
-        if(window.location.hash) {
-            $(window.location.hash+'_tab').trigger('click');
-        }
-
-        // bring order to chaos
-        zucht_und_ordnung(true);
-
-        {% block extra-init-js %}{% endblock %}
-    });
-</script>
-
-<link rel="stylesheet" type="text/css" href="{{ FEINCMS_ADMIN_MEDIA }}css/layout.css" />
-<link rel="stylesheet" type="text/css" href="{{ FEINCMS_ADMIN_MEDIA }}css/jquery.alerts.css" media="screen" />
-
-{% endblock %}
-
-{% block breadcrumbs %}
-<div class="breadcrumbs">
-     <a href="../../../">{% trans "Home" %}</a> &rsaquo;
-     <a href="../../">{{ opts.app_label|capfirst|escape }}</a> &rsaquo;
-     <a href="../">{{ opts.verbose_name_plural|capfirst }}</a> &rsaquo;
-     {{ page.title|truncatewords:"18" }}
-</div>
-{% endblock %}
-
-{% block content %}
-
-<div id="content-main">
-
-{% block object-tools %}
-<ul class="object-tools">
-    {% if page.get_absolute_url %}
-        <li><a target="_blank" href="{{ page.get_absolute_url }}" class="viewsitelink">{% trans "View on site" %}</a></li>
-    {% endif %}
-</ul>
-{% endblock %}
-
-<hr/>
-
-<form name="main_form" enctype="multipart/form-data" action="." method="post" id="{{ opts.module_name }}_form">
-
-<div id="overview">
-    <p style="float:right;" class="deletelink-box"><a href="delete/" class="deletelink">{% trans "Delete" %}</a></p>
-    {% for field in top_fieldset %}
-        {{ field.label_tag }}
-        <span>{{ field }}{{ field.errors }}</span>
-    {% endfor %}
-    <input type="submit" class="submit_form" value="{% trans 'Save' %}" />
-    <hr/>
-    {{ page_form.template.label_tag }}
-    <span>{{ page_form.template }}{{ page_form.template.errors }}</span>
-    <input type="button" class="cancel" value="{% trans 'Change Template' %}" />
-    <hr/>
-</div>
-<div id="main_wrapper">
-    <div class="navi_tab tab_active" id="settings_tab">Settings</div>
-    {% for region in page.template.regions.all %}<div class="navi_tab tab_inactive" id="{{ region.key }}_tab">{{ region.title }}</div>{% endfor %}
-    <div id="main">
-        <div id="settings_body">
-            <table>
-                {{ settings_fieldset.as_table }}
-            </table>
-        </div>
-        {% for region in page.template.regions.all %}
-        <div id="{{ region.key }}_body" class="panel">
-            <div class="empty-machine-msg">
-                {% trans "Region empty" %}
-            </div>
-            <div class="empty-machine-msg" style="margin-left:20px; margin-top:20px;">
-                {% if region.inherited %}
-                    {% trans "Content from the parent site is automatically inherited. To override this behaviour, add some content." %}
-                {% endif %}
-            </div>
-            <div class="order-machine">
-
-            </div>
-
-            <div class="machine-control">
-                <div class="control-unit">
-                    <span>Add New item:</span> <br/>
-                    <select name="order-machine-add-select">
-                    {% for n,v  in content_types %} <option value="{{ v }}">{{ n }}</option> {% endfor %}
-                    </select>
-                    <input type="button" class="order-machine-add-button button" value="OK" />
-                </div>
-                <div class="control-unit">
-                    <span>Move selected item to:</span>  <br/>
-                    <select name="order-machine-move-select">
-                    {% for r in page.template.regions.all %} {% ifnotequal region r %} <option value="{{ r.key }}">{{ r.title }}</option> {% endifnotequal %} {% endfor %}
-                    </select>
-                    <input type="button" class="order-machine-move-button button" value="OK" />
-                </div>
-            </div>
-         </div>
-        {% endfor %}
-    </div>
-</div>
-
-
-<div id="inlines" style="display:none">
-{% for formset in inline_formsets %}
-    <div id="{{ formset.rel_name }}">
-        <div class="header">
-            {{ formset.management_form }}
-            <h3>{{ formset.rel_name }}</h3>
-        </div>
-        {% for form in formset.forms %}
-            <div id="{{ formset.rel_name }}_item_{{ forloop.counter0 }}">
-            <table>
-            {{ form.as_table }}
-            </table>
-            </div>
-        {% endfor %}
-    </div>
-{% endfor %}
-</div>
-
-</form>
-
-</div>
-{% endblock %}
-
diff --git a/feincms/templates/admin/feincms/tree_editor.html b/feincms/templates/admin/feincms/tree_editor.html
deleted file mode 100644
index bbde798..0000000
--- a/feincms/templates/admin/feincms/tree_editor.html
+++ /dev/null
@@ -1,145 +0,0 @@
-{% extends "admin/change_list.html" %}
-{% load i18n admin_modify adminmedia mptt_tags %}
-
-{% block title %}{{ block.super }}{% endblock %}
-
-{% block extrahead %}{{ block.super }}
-<script type="text/javascript" src="../../../jsi18n/"></script>
-<script type="text/javascript" src="{{ FEINCMS_ADMIN_MEDIA }}jquery-1.3.min.js"></script>
-<script type="text/javascript" src="{{ FEINCMS_ADMIN_MEDIA }}jquery.ui.all.js"></script>
-<script type="text/javascript" src="{{ FEINCMS_ADMIN_MEDIA }}jquery.livequery.js"></script>
-<script type="text/javascript" src="{{ FEINCMS_ADMIN_MEDIA }}jquery.alerts.js"></script>
-
-<script type="text/javascript" src="{{ FEINCMS_ADMIN_MEDIA }}helper.js"></script>
-<script type="text/javascript" src="{{ FEINCMS_ADMIN_MEDIA }}listener.js"></script>
-
-<script type="text/javascript" src="{{ FEINCMS_ADMIN_MEDIA }}jquery.treeTable.js"></script>
-<script type="text/javascript" src="{{ FEINCMS_ADMIN_MEDIA }}jquery.json-1.3.js"></script>
-<script type="text/javascript">
-
-
-
-    ancestors = [{% for page in object_list %}'{{ page.parent_id|default_if_none:"0" }}'{% if not forloop.last %},{% endif %} {% endfor %}];
-
-    tablestr = '';
-    {% for page in object_list %}tablestr += add_row({{ forloop.counter }}, {{ page.id }}, "{{ page.parent_id|default_if_none:"-1" }}", "{{ page.title }}", ["{{ page.active }}", "{{ page.in_navigation }}"]);
-    {% endfor %}
-
-    function add_row(node_id, page_id, parent_id, page_title, attrs) {
-        var str = '<tr id="node-' + node_id + '" class="page-id-' + page_id + ' ';
-        if (parseInt(parent_id) >= 0)
-            str += 'child-of-node-'+ancestors.indexOf(parent_id);
-        str += '">';
-        str += '<td><div class="wrap nohover">';
-        str += '<div class="insert-as-child"></div>';
-        str += '<span class="title-col"><a href="'+page_id+'"><strong>'+page_title+'</strong></a><img class="move-node" src="{{ FEINCMS_ADMIN_MEDIA }}img/icon_move.gif" /></span>';
-        str += '<div class="insert-as-sibling"></div>';
-        str += '</div></td>';
-        for (key in attrs)
-            str += '<td>'+attrs[key]+'</td>';
-        str += '<td><img class="del-page" src="{{ FEINCMS_ADMIN_MEDIA }}img/icon_deletelink.gif"/></td></tr>';
-        return str;
-    }
-
-    $(document).ready(function()  {
-            // build table
-            $("#sitetree tbody").append(tablestr);
-            // register
-            $("#sitetree").treeTable();
-            // configure draggable
-            $("#sitetree .title-col").draggable({
-              helper:  function(){ return $(this).parent().clone(); } ,
-              handle: ".move-node",
-              opacity: .75,
-              refreshPositions: true,
-              revert: "invalid",
-              revertDuration: 300,
-              scroll: true
-            });
-            // configure droppable to insert as child
-            $("#sitetree .insert-as-child").each(function() {
-              $(this).droppable({
-                accept: ".title-col",
-                tolerance: "intersect",
-                drop: function(e, ui) {
-                    handle_drop_event($(ui.draggable).parents("tr"), $(this).parents("tr"), "child")
-                },
-                over: function(e, ui) {
-                  $(this).parent().removeClass("nohover").addClass("hover-as-child");
-                },
-                out: function(e, ui) {
-                  $(this).parent().removeClass("hover-as-child").addClass("nohover");
-                }
-              });
-            });
-            // configure droppable to insert as sibling
-            $("#sitetree .insert-as-sibling").each(function() {
-              $(this).droppable({
-                accept: ".title-col",
-                tolerance: "intersect",
-                drop: function(e, ui) {
-                    handle_drop_event($(ui.draggable).parents("tr"), $(this).parents("tr"), "sibling")
-                },
-                over: function(e, ui) {
-                  var row = '<div style="background-color:#bcf; height:4px; width:100%; margin:-8px 0px 4px -5px; position:relative; z-index:10;"></div>'
-                  $(row).insertBefore($(this).parent());
-                },
-                out: function(e, ui) {
-                  $(this).parent().prev().remove();
-                }
-              });
-            });
-
-            $(".wrap").live('click',function() {
-                if ($(this).find(".expander").length > 0)
-                    $(this).parents("tr").toggleBranch();
-            });
-
-            $(".save_tree").click(function(){
-                    save_page_tree();
-            });
-
-            $(".del-page").click(function(){
-                handle_page_delete($(this).parents("tr"));
-            });
-
-    });
-
-</script>
-
-<link rel="stylesheet" type="text/css" href="{{ FEINCMS_ADMIN_MEDIA }}css/layout.css" />
-<link rel="stylesheet" type="text/css" href="{{ FEINCMS_ADMIN_MEDIA }}css/jquery.alerts.css" media="screen" />
-<link href="{{ FEINCMS_ADMIN_MEDIA }}css/jquery.treeTable.css" rel="stylesheet" type="text/css" />
-
-{% endblock %}
-
-{% block content %}
-
-<div id="content-main">
-    {% block object-tools %}
-    {% if has_add_permission %}
-    <ul class="object-tools"><li><a href="add/{% if is_popup %}?_popup=1{% endif %}" class="addlink">{% blocktrans with cl.opts.verbose_name as name %}Add {{ name }}{% endblocktrans %}</a></li></ul>
-    {% endif %}
-    {% endblock %}
-</div>
-
-<input type="button" value="save tree" class="save_tree" style="margin: 20px 5px -10px 460px;"/>
-
-<div id="sitetree-wrapper">
-<table id="sitetree" border="1">
-    <thead>
-    <tr id="table_header">
-        <th width="400">{% trans  "Page" %}</th>
-        <th>{% trans  "active" %}</th>
-        <th>{% trans  "in navi" %}</th>
-        <th>{% trans  "delete" %}</th>
-    </tr>
-    </thead>
-    <tbody>
-
-    </tbody>
-</table>
-</div>
-
-{% endblock %}
-
diff --git a/feincms/templates/content/rss/content.html b/feincms/templates/content/rss/content.html
deleted file mode 100644
index c1eaaf9..0000000
--- a/feincms/templates/content/rss/content.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<h2><a href="{{ feed_link }}">{{ feed_title }}</a></h2>
-
-<ul>
-{% for entry in entries %}
-    <li><a href="{{ entry.link }}">{{ entry.title }}</a></li>
-{% endfor %}
-</ul>
-
diff --git a/feincms/templatetags/__init__.py b/feincms/templatetags/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/feincms/templatetags/feincms_tags.py b/feincms/templatetags/feincms_tags.py
deleted file mode 100644
index da03d9f..0000000
--- a/feincms/templatetags/feincms_tags.py
+++ /dev/null
@@ -1,75 +0,0 @@
-from django import template
-from feincms.module.page.models import Page
-
-register = template.Library()
-
-
-@register.simple_tag
-def feincms_render_region(page, region, request):
-    """
-    {% feincms_render_region feincms_page "main" request %}
-    """
-
-    contents = getattr(page.content, region)
-
-    return u''.join(content.render(request=request) for content in contents)
-
-
-@register.simple_tag
-def feincms_render_content(content, request):
-    """
-    {% feincms_render_content pagecontent request %}
-    """
-
-    return content.render(request=request)
-
-
-class NaviLevelNode(template.Node):
-    """ Gets navigation based on current page OR request, dependant on choice of second parameter (of vs. from).
-
-        Top navigation level is 1.
-        If navigation level + 1 > page.level, the ouput is none, because there is no well-defined sub-sub-navigation for a page.
-
-        Example usage:
-        1) {% feincms_get_navi_level 1 of page as pages %}
-        2) {% feincms_get_navi_level 1 from request as pages %}
-
-        Side-note:  If not using mptt to retrieve pages, the ordering cannot be dertermined by 'id'.
-        Instead, as a "hack", we can sort by field 'lft', because we understand how mptt works :-)
-    """
-    def __init__(self, level, switch, obj, dummy, varname):
-        self.level = long(int(level) - 1)
-        self.obj = template.Variable(obj)
-        self.varname = varname
-        self.switch = switch
-
-    def render(self, context):
-        if self.switch == 'of':
-            # obj is a Page
-            page = self.obj.resolve(context)
-        else: # self.switch == 'from'
-            # obj is a request
-            page = Page.objects.from_request(self.obj.resolve(context))
-
-        if int(self.level) == 0:
-            # top level
-            pages = Page.objects.filter(in_navigation=True, level=long(0)).order_by('lft')
-        elif self.level <= page.level:
-            ancestor = page.get_ancestors()[int(self.level) - 1]
-            pages = Page.objects.filter(in_navigation=True, parent__pk=ancestor.pk).order_by('lft')
-        elif self.level == page.level + 1:
-            pages = Page.objects.filter(in_navigation=True, parent__pk=page.pk).order_by('lft')
-        else:
-            pages = []
-
-        context[self.varname] = pages
-        return ''
-
-@register.tag
-def feincms_get_navi_level(parser, token):
-    try:
-        tag_name, level, switch, obj, dummy, varname = token.split_contents()
-    except ValueError:
-        raise template.TemplateSyntaxError, "%r tag requires exactly five arguments" % token.contents.split()[0]
-    return NaviLevelNode(level, switch, obj, dummy, varname)
-
diff --git a/feincms/templatetags/utils.py b/feincms/templatetags/utils.py
deleted file mode 100644
index 5f3fc9d..0000000
--- a/feincms/templatetags/utils.py
+++ /dev/null
@@ -1,150 +0,0 @@
-'''
-I really hate repeating myself. These are helpers that avoid typing the
-whole thing over and over when implementing additional template tags
-
-They help implementing tags of the form
-
-{% tag as var_name %} (SimpleAssignmentNode)
-and
-{% tag of template_var as var_name %} (SimpleAssignmentNodeWithVar)
-'''
-
-from django import template
-
-def _parse_args(argstr):
-    try:
-        args = {}
-        for token in argstr.split(','):
-            k, v = token.split('=')
-            args[k] = v
-
-        return args
-
-    except TypeError:
-        raise template.TemplateSyntaxError('Malformed arguments')
-
-def do_simple_node_with_var_and_args_helper(cls):
-    def _func(parser, token):
-        try:
-            tag_name, of_, in_var_name, args = token.contents.split()
-        except ValueError:
-            raise template.TemplateSyntaxError
-
-        return cls(tag_name, in_var_name, args)
-
-    return _func
-
-class SimpleNodeWithVarAndArgs(template.Node):
-    def __init__(self, tag_name, in_var_name, args):
-        self.tag_name = tag_name
-        self.in_var = template.Variable(in_var_name)
-        self.args = args
-
-    def render(self, context):
-        try:
-            instance = self.in_var.resolve(context)
-        except template.VariableDoesNotExist:
-            return ''
-
-        return self.what(instance, _parse_args(self.args))
-
-def do_simple_node_with_var_helper(cls):
-    def _func(parser, token):
-        try:
-            tag_name, of_, in_var_name = token.contents.split()
-        except ValueError:
-            raise template.TemplateSyntaxError
-
-        return cls(tag_name, in_var_name)
-
-    return _func
-
-class SimpleNodeWithVar(template.Node):
-    def __init__(self, tag_name, in_var_name):
-        self.tag_name = tag_name
-        self.in_var = template.Variable(in_var_name)
-
-    def render(self, context):
-        try:
-            instance = self.in_var.resolve(context)
-        except template.VariableDoesNotExist:
-            return ''
-
-        return self.what(instance)
-
-def do_simple_assignment_node_helper(cls):
-    def _func(parser, token):
-        try:
-            tag_name, as_, var_name = token.contents.split()
-        except ValueError:
-            raise template.TemplateSyntaxError
-
-        return cls(tag_name, var_name)
-
-    return _func
-
-class SimpleAssignmentNode(template.Node):
-    def __init__(self, tag_name, var_name):
-        self.tag_name = tag_name
-        self.var_name = var_name
-
-    def render(self, context):
-        context[self.var_name] = self.what()
-        return ''
-
-def do_simple_assignment_node_with_var_helper(cls):
-    def _func(parser, token):
-        try:
-            tag_name, of_, in_var_name, as_, var_name = token.contents.split()
-        except ValueError:
-            raise template.TemplateSyntaxError
-
-        return cls(tag_name, in_var_name, var_name)
-
-    return _func
-
-class SimpleAssignmentNodeWithVar(template.Node):
-    def __init__(self, tag_name, in_var_name, var_name):
-        self.tag_name = tag_name
-        self.in_var = template.Variable(in_var_name)
-        self.var_name = var_name
-
-    def render(self, context):
-        try:
-            instance = self.in_var.resolve(context)
-        except template.VariableDoesNotExist:
-            context[self.var_name] = []
-            return ''
-
-        context[self.var_name] = self.what(instance)
-        return ''
-
-def do_simple_assignment_node_with_var_and_args_helper(cls):
-    def _func(parser, token):
-        try:
-            tag_name, of_, in_var_name, as_, var_name, args = token.contents.split()
-        except ValueError:
-            raise template.TemplateSyntaxError
-
-        return cls(tag_name, in_var_name, var_name, args)
-
-    return _func
-
-class SimpleAssignmentNodeWithVarAndArgs(template.Node):
-    def __init__(self, tag_name, in_var_name, var_name, args):
-        self.tag_name = tag_name
-        self.in_var = template.Variable(in_var_name)
-        self.var_name = var_name
-        self.args = args
-
-    def render(self, context):
-        try:
-            instance = self.in_var.resolve(context)
-        except template.VariableDoesNotExist:
-            context[self.var_name] = []
-            return ''
-
-        context[self.var_name] = self.what(instance, _parse_args(self.args))
-
-        return ''
-
diff --git a/feincms/views/__init__.py b/feincms/views/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/feincms/views/base.py b/feincms/views/base.py
deleted file mode 100644
index 47ca887..0000000
--- a/feincms/views/base.py
+++ /dev/null
@@ -1,23 +0,0 @@
-from django.http import HttpResponseRedirect
-from django.shortcuts import render_to_response
-from django.template import RequestContext
-from django.utils import translation
-
-from feincms.module.page.models import Page
-
-
-def handler(request, path=None):
-    if path is None:
-        path = request.path
-
-    page = Page.objects.page_for_path_or_404(path)
-
-    if page.redirect_to:
-        return HttpResponseRedirect(page.redirect_to)
-
-    page.setup_request(request)
-
-    return render_to_response(page.template.path, {
-        'feincms_page': page,
-        }, context_instance=RequestContext(request))
-
diff --git a/feincms/views/decorators.py b/feincms/views/decorators.py
deleted file mode 100644
index e31bcdd..0000000
--- a/feincms/views/decorators.py
+++ /dev/null
@@ -1,16 +0,0 @@
-try:
-    from functools import wraps
-except ImportError:
-    from django.utils.functional import wraps
-
-from feincms.module.page.models import Page
-
-
-def add_page_to_extra_context(view_func):
-    def inner(request, *args, **kwargs):
-        kwargs.setdefault('extra_context', {})
-        kwargs['extra_context']['feincms_page'] = Page.objects.best_match_for_request(request)
-
-        return view_func(request, *args, **kwargs)
-    return wraps(view_func)(inner)
-
diff --git a/feincms/views/generic/__init__.py b/feincms/views/generic/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/feincms/views/generic/create_update.py b/feincms/views/generic/create_update.py
deleted file mode 100644
index 8ffe4c7..0000000
--- a/feincms/views/generic/create_update.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from django.views.generic import create_update
-from feincms.views.decorators import add_page_to_extra_context
-
-
-create_object = add_page_to_extra_context(create_update.create_object)
-update_object = add_page_to_extra_context(create_update.update_object)
-delete_object = add_page_to_extra_context(create_update.delete_object)
-
diff --git a/feincms/views/generic/date_based.py b/feincms/views/generic/date_based.py
deleted file mode 100644
index 1b0474a..0000000
--- a/feincms/views/generic/date_based.py
+++ /dev/null
@@ -1,12 +0,0 @@
-from django.views.generic import date_based
-from feincms.views.decorators import add_page_to_extra_context
-
-
-archive_index = add_page_to_extra_context(date_based.archive_index)
-archive_year = add_page_to_extra_context(date_based.archive_year)
-archive_month = add_page_to_extra_context(date_based.archive_month)
-archive_week = add_page_to_extra_context(date_based.archive_week)
-archive_day = add_page_to_extra_context(date_based.archive_day)
-archive_today = add_page_to_extra_context(date_based.archive_today)
-object_detail = add_page_to_extra_context(date_based.object_detail)
-
diff --git a/feincms/views/generic/list_detail.py b/feincms/views/generic/list_detail.py
deleted file mode 100644
index 6684e5a..0000000
--- a/feincms/views/generic/list_detail.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from django.views.generic import list_detail
-from feincms.views.decorators import add_page_to_extra_context
-
-
-object_list = add_page_to_extra_context(list_detail.object_list)
-object_detail = add_page_to_extra_context(list_detail.object_detail)
-
diff --git a/feincms/views/generic/simple.py b/feincms/views/generic/simple.py
deleted file mode 100644
index 22f1b7e..0000000
--- a/feincms/views/generic/simple.py
+++ /dev/null
@@ -1,6 +0,0 @@
-from django.views.generic import simple
-from feincms.views.decorators import add_page_to_extra_context
-
-
-direct_to_template = add_page_to_extra_context(simple.direct_to_template)
-
diff --git a/settings.py b/settings.py
index 99624e7..0b2b172 100644
--- a/settings.py
+++ b/settings.py
@@ -86,8 +86,6 @@ INSTALLED_APPS = (
     'troggle.profiles',
     'troggle.core',
     'troggle.imagekit', 
-    'mptt', #This is django-mptt (modifed preorder tree traversal) which allows the tree structure of subcaves.
-    'feincms' #This is a little content management app that does the javascript admin page for mptt.
 )
 
 FEINCMS_ADMIN_MEDIA=MEDIA_URL + 'feincms/'
diff --git a/urls.py b/urls.py
index 0123080..5226598 100644
--- a/urls.py
+++ b/urls.py
@@ -67,7 +67,7 @@ urlpatterns = patterns('',
     url(r'^logbook/?$',views_other.downloadLogbook, name="downloadlogbook"),
     url(r'^cave/(?P<cave_id>[^/]+)/qm\.csv/?$', views_other.downloadQMs, name="downloadqms"),        
     (r'^downloadqms$', views_other.downloadQMs),
-    url(r'^cave/(?P<cave_id>[^/]+)(?P<subcave>/.*)/?$', subcave, name="subcave"),
+   
     url(r'^eyecandy$', views_other.eyecandy),
 
     (r'^admin/doc/?', include('django.contrib.admindocs.urls')),