]> git.lyx.org Git - lyx.git/blobdiff - src/text2.C
fix "make dist" target
[lyx.git] / src / text2.C
index 726c4e0c305138ac10fefdc8b6476a86bf513248..08df463fd1ae5c1541bd1e439ed4bd570efb9049 100644 (file)
@@ -17,6 +17,7 @@
 #pragma implementation "lyxtext.h"
 #endif
 
+#include "lyxtext.h"
 #include "LString.h"
 #include "lyxparagraph.h"
 #include "insets/inseterror.h"
 #include "LyXView.h"
 #include "support/textutils.h"
 #include "undo.h"
-#include "minibuffer.h"
 #include "buffer.h"
 #include "bufferparams.h"
 #include "lyx_gui_misc.h"
-#include "lyxtext.h"
 #include "gettext.h"
 #include "BufferView.h"
 #include "LyXView.h"
-#include "lyxrow.h"
 #include "CutAndPaste.h"
 #include "Painter.h"
 #include "font.h"
 #include "debug.h"
 #include "lyxrc.h"
 #include "FloatList.h"
+#include "language.h"
 
 using std::copy;
 using std::find;
@@ -88,7 +87,7 @@ void LyXText::init()
                current_font = GetFont(bv_owner->buffer(), par, 0);
                while (par) {
                        InsertParagraph(bv_owner, par, lastrow);
-                       par = par->Next();
+                       par = par->next();
                }
                SetCursor(bv_owner, firstrow->par(), 0);
        } else
@@ -134,7 +133,7 @@ void LyXText::init(BufferView * bview)
        current_font = GetFont(bview->buffer(), par, 0);
        while (par) {
                InsertParagraph(bview, par, lastrow);
-               par = par->Next();
+               par = par->next();
        }
        SetCursorIntern(bview, firstrow->par(), 0);
        sel_cursor = cursor;
@@ -183,11 +182,7 @@ LyXFont const LyXText::GetFont(Buffer const * buf, LyXParagraph * par,
 
        char par_depth = par->GetDepth();
        // We specialize the 95% common case:
-       if (
-#ifndef NEW_INSETS
-               par->footnoteflag == LyXParagraph::NO_FOOTNOTE &&
-#endif
-               !par_depth) {
+       if (!par_depth) {
                if (pos >= 0){
                        // 95% goes here
                        if (layout.labeltype == LABEL_MANUAL
@@ -248,14 +243,6 @@ LyXFont const LyXText::GetFont(Buffer const * buf, LyXParagraph * par,
 
        tmpfont.realize(textclasslist.TextClass(buf->params.textclass).defaultfont());
 
-#ifndef NEW_INSETS
-       // Cosmetic improvement: If this is an open footnote, make the font 
-       // smaller.
-       if (par->footnoteflag == LyXParagraph::OPEN_FOOTNOTE
-           && par->footnotekind == LyXParagraph::FOOTNOTE) {
-               tmpfont.decSize();
-       }
-#endif
        return tmpfont;
 }
 
@@ -297,12 +284,6 @@ void LyXText::SetCharFont(Buffer const * buf, LyXParagraph * par,
 
        layoutfont.realize(textclasslist.TextClass(buf->params.textclass).defaultfont());
 
-#ifndef NEW_INSETS
-       if (par->footnoteflag == LyXParagraph::OPEN_FOOTNOTE
-           && par->footnotekind == LyXParagraph::FOOTNOTE) {
-               layoutfont.decSize();
-       }
-#endif
        // Now, reduce font against full layout font
        font.reduce(layoutfont);
 
@@ -403,118 +384,6 @@ void LyXText::InsertParagraph(BufferView * bview, LyXParagraph * par,
 }
 
 
-#ifndef NEW_INSETS
-void LyXText::ToggleFootnote(BufferView * bview)
-{
-       LyXParagraph * par = cursor.par()->ParFromPos(cursor.pos());
-       if (par->next
-           && par->next->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE) {
-               OpenFootnote(bview);
-               bview->owner()->getMiniBuffer()->Set(_("Opened float"));
-       } else {
-               bview->owner()->getMiniBuffer()->Set(_("Closed float"));
-               CloseFootnote(bview);
-       }
-}
-#endif
-
-
-#ifndef NEW_INSETS
-void LyXText::OpenStuff(BufferView * bview)
-{
-       if (cursor.pos() == 0 && cursor.par()->bibkey){
-               cursor.par()->bibkey->Edit(bview, 0, 0, 0);
-       } else if (cursor.pos() < cursor.par()->Last() 
-                && cursor.par()->GetChar(cursor.pos()) == LyXParagraph::META_INSET
-                && cursor.par()->GetInset(cursor.pos())->Editable()) {
-               bview->owner()->getMiniBuffer()
-                       ->Set(cursor.par()->GetInset(cursor.pos())->EditMessage());
-               if (cursor.par()->GetInset(cursor.pos())->Editable() != Inset::HIGHLY_EDITABLE)
-                       SetCursorParUndo(bview->buffer());
-               cursor.par()->GetInset(cursor.pos())->Edit(bview, 0, 0, 0);
-       }
-#ifndef NEW_INSETS
-       else {
-               ToggleFootnote(bview);
-       }
-#endif
-}
-#endif
-
-
-#ifndef NEW_INSETS
-void LyXText::CloseFootnote(BufferView * bview)
-{
-       LyXParagraph * tmppar;
-       LyXParagraph * par = cursor.par()->ParFromPos(cursor.pos());
-   
-       // if the cursor is not in an open footnote, or 
-       // there is no open footnote in this paragraph, just return.
-       if (cursor.par()->footnoteflag != LyXParagraph::OPEN_FOOTNOTE) {
-      
-               if (!par->next ||
-                   par->next->footnoteflag != LyXParagraph::OPEN_FOOTNOTE) {
-                       bview->owner()->getMiniBuffer()
-                               ->Set(_("Nothing to do"));
-                       return;
-               }
-   
-               // ok, move the cursor right before the footnote
-               // just a little faster than using CursorRight()
-               for (cursor.pos(0);
-                    cursor.par()->ParFromPos(cursor.pos()) != par;) {
-                               cursor.pos(cursor.pos() + 1);
-                       }
-               
-               // now the cursor is at the beginning of the physical par
-               SetCursor(bview, cursor.par(),
-                         cursor.pos() +
-                         cursor.par()->ParFromPos(cursor.pos())->size());
-       } else  {
-               /* we are in a footnote, so let us move at the beginning */ 
-               /* this is just faster than using just CursorLeft() */ 
-       
-               tmppar = cursor.par();
-               while (tmppar->footnoteflag == LyXParagraph::OPEN_FOOTNOTE) {
-                       // just a little bit faster than movin the cursor
-                       tmppar = tmppar->Previous();
-               }
-               SetCursor(bview, tmppar, tmppar->Last());
-       }
-   
-       // the cursor must be exactly before the footnote
-       par = cursor.par()->ParFromPos(cursor.pos());
-   
-       status = LyXText::NEED_MORE_REFRESH;
-       refresh_row = cursor.row();
-       refresh_y = cursor.y() - cursor.row()->baseline();
-   
-       tmppar = cursor.par();
-       LyXParagraph * endpar = par->NextAfterFootnote()->Next();
-       Row * row = cursor.row();
-   
-       tmppar->CloseFootnote(cursor.pos());
-
-       while (tmppar != endpar) {
-               RemoveRow(row->next());
-               if (row->next())
-                       tmppar = row->next()->par();
-               else
-                       tmppar = 0;
-       }
-   
-       AppendParagraph(bview, cursor.row());
-   
-       SetCursor(bview, cursor.par(), cursor.pos());
-       sel_cursor = cursor;
-   
-       // just necessary
-       if (cursor.row()->next())
-               SetHeightOfRow(bview, cursor.row()->next());
-}
-#endif
-
-
 /* used in setlayout */
 // Asger is not sure we want to do this...
 void LyXText::MakeFontEntriesLayoutSpecific(Buffer const * buf,
@@ -526,7 +395,7 @@ void LyXText::MakeFontEntriesLayoutSpecific(Buffer const * buf,
 
        LyXFont layoutfont, tmpfont;
        for (LyXParagraph::size_type pos = 0;
-            pos < par->Last(); ++pos) {
+            pos < par->size(); ++pos) {
                if (pos < BeginningOfMainBody(buf, par))
                        layoutfont = layout.labelfont;
                else
@@ -544,82 +413,39 @@ LyXParagraph * LyXText::SetLayout(BufferView * bview,
                                  LyXCursor & send_cur,
                                  LyXTextClass::size_type layout)
 {
-#ifndef NEW_INSETS
-       LyXParagraph * endpar = send_cur.par()->LastPhysicalPar()->Next();
-#else
-       LyXParagraph * endpar = send_cur.par()->Next();
-#endif
+       LyXParagraph * endpar = send_cur.par()->next();
        LyXParagraph * undoendpar = endpar;
-
+       
        if (endpar && endpar->GetDepth()) {
                while (endpar && endpar->GetDepth()) {
-#ifndef NEW_INSETS
-                       endpar = endpar->LastPhysicalPar()->Next();
-#else
-                       endpar = endpar->Next();
-#endif
+                       endpar = endpar->next();
                        undoendpar = endpar;
                }
        } else if (endpar) {
-               endpar = endpar->Next(); // because of parindents etc.
+               endpar = endpar->next(); // because of parindents etc.
        }
-   
+       
        SetUndo(bview->buffer(), Undo::EDIT,
-#ifndef NEW_INSETS
-               sstart_cur.par()->ParFromPos(sstart_cur.pos())->previous,
-#else
-               sstart_cur.par()->previous,
-#endif
+               sstart_cur.par()->previous(),
                undoendpar);
-
+       
        /* ok we have a selection. This is always between sstart_cur
         * and sel_end cursor */ 
        cur = sstart_cur;
-   
+       
        LyXLayout const & lyxlayout =
                textclasslist.Style(bview->buffer()->params.textclass, layout);
-   
+       
        while (cur.par() != send_cur.par()) {
-#ifndef NEW_INSETS
-               if (cur.par()->footnoteflag == sstart_cur.par()->footnoteflag) {
-#endif
-                       cur.par()->SetLayout(bview->buffer()->params, layout);
-                       MakeFontEntriesLayoutSpecific(bview->buffer(), cur.par());
-#ifndef NEW_INSETS
-                       LyXParagraph * fppar = cur.par()->FirstPhysicalPar();
-#else
-                       LyXParagraph * fppar = cur.par();
-#endif
-                       fppar->added_space_top = lyxlayout.fill_top ?
-                               VSpace(VSpace::VFILL) : VSpace(VSpace::NONE);
-                       fppar->added_space_bottom = lyxlayout.fill_bottom ? 
-                               VSpace(VSpace::VFILL) : VSpace(VSpace::NONE); 
-                       if (lyxlayout.margintype == MARGIN_MANUAL)
-                               cur.par()->SetLabelWidthString(lyxlayout.labelstring());
-                       if (lyxlayout.labeltype != LABEL_BIBLIO
-                           && fppar->bibkey) {
-                               delete fppar->bibkey;
-                               fppar->bibkey = 0;
-                       }
-#ifndef NEW_INSETS
-               }
-#endif
-               cur.par(cur.par()->Next());
-       }
-#ifndef NEW_INSETS
-       if (cur.par()->footnoteflag == sstart_cur.par()->footnoteflag) {
-#endif
-               cur.par()->SetLayout(bview->buffer()->params, layout);
+               cur.par()->SetLayout(layout);
                MakeFontEntriesLayoutSpecific(bview->buffer(), cur.par());
-#ifndef NEW_INSETS
-               LyXParagraph * fppar = cur.par()->FirstPhysicalPar();
-#else
                LyXParagraph * fppar = cur.par();
-#endif
-               fppar->added_space_top = lyxlayout.fill_top ?
-                       VSpace(VSpace::VFILL) : VSpace(VSpace::NONE);
-               fppar->added_space_bottom = lyxlayout.fill_bottom ? 
-                       VSpace(VSpace::VFILL) : VSpace(VSpace::NONE); 
+               fppar->params.spaceTop(lyxlayout.fill_top ?
+                                      VSpace(VSpace::VFILL)
+                                      : VSpace(VSpace::NONE));
+               fppar->params.spaceBottom(lyxlayout.fill_bottom ? 
+                                         VSpace(VSpace::VFILL)
+                                         : VSpace(VSpace::NONE));
                if (lyxlayout.margintype == MARGIN_MANUAL)
                        cur.par()->SetLabelWidthString(lyxlayout.labelstring());
                if (lyxlayout.labeltype != LABEL_BIBLIO
@@ -627,12 +453,26 @@ LyXParagraph * LyXText::SetLayout(BufferView * bview,
                        delete fppar->bibkey;
                        fppar->bibkey = 0;
                }
-#ifndef NEW_INSETS
+               cur.par(cur.par()->next());
+       }
+       cur.par()->SetLayout(layout);
+       MakeFontEntriesLayoutSpecific(bview->buffer(), cur.par());
+       LyXParagraph * fppar = cur.par();
+       fppar->params.spaceTop(lyxlayout.fill_top ?
+                              VSpace(VSpace::VFILL) : VSpace(VSpace::NONE));
+       fppar->params.spaceBottom(lyxlayout.fill_bottom ? 
+                                 VSpace(VSpace::VFILL) : VSpace(VSpace::NONE));
+       if (lyxlayout.margintype == MARGIN_MANUAL)
+               cur.par()->SetLabelWidthString(lyxlayout.labelstring());
+       if (lyxlayout.labeltype != LABEL_BIBLIO
+           && fppar->bibkey) {
+               delete fppar->bibkey;
+               fppar->bibkey = 0;
        }
-#endif
        return endpar;
 }
 
+
 // set layout over selection and make a total rebreak of those paragraphs
 void LyXText::SetLayout(BufferView * bview, LyXTextClass::size_type layout)
 {
@@ -657,8 +497,8 @@ void LyXText::SetLayout(BufferView * bview, LyXTextClass::size_type layout)
        SetCursor(bview, sel_end_cursor.par(), sel_end_cursor.pos(),
                  false);
        UpdateCounters(bview, cursor.row());
-       ClearSelection();
-       SetSelection();
+       ClearSelection(bview);
+       SetSelection(bview);
        SetCursor(bview, tmpcursor.par(), tmpcursor.pos(), true);
 }
 
@@ -674,35 +514,22 @@ void  LyXText::IncDepth(BufferView * bview)
        }
 
        // We end at the next paragraph with depth 0
-       LyXParagraph * endpar =
-#ifndef NEW_INSETS
-               sel_end_cursor.par()->LastPhysicalPar()->Next();
-#else
-               sel_end_cursor.par()->Next();
-#endif
+       LyXParagraph * endpar = sel_end_cursor.par()->next();
+
        LyXParagraph * undoendpar = endpar;
 
        if (endpar && endpar->GetDepth()) {
                while (endpar && endpar->GetDepth()) {
-#ifndef NEW_INSETS
-                       endpar = endpar->LastPhysicalPar()->Next();
-#else
-                       endpar = endpar->Next();
-#endif
+                       endpar = endpar->next();
                        undoendpar = endpar;
                }
        }
        else if (endpar) {
-               endpar = endpar->Next(); // because of parindents etc.
+               endpar = endpar->next(); // because of parindents etc.
        }
        
        SetUndo(bview->buffer(), Undo::EDIT,
-#ifndef NEW_INSETS
-               sel_start_cursor
-               .par()->ParFromPos(sel_start_cursor.pos())->previous,
-#else
-               sel_start_cursor.par()->previous,
-#endif
+               sel_start_cursor.par()->previous(),
                undoendpar);
 
        LyXCursor tmpcursor = cursor; // store the current cursor
@@ -716,54 +543,33 @@ void  LyXText::IncDepth(BufferView * bview)
        while (true) {
                // NOTE: you can't change the depth of a bibliography entry
                if (
-#ifndef NEW_INSETS
-                       cursor.par()->footnoteflag ==
-                   sel_start_cursor.par()->footnoteflag &&
-#endif
                    textclasslist.Style(bview->buffer()->params.textclass,
                                      cursor.par()->GetLayout()
                                     ).labeltype != LABEL_BIBLIO) {
-                       LyXParagraph * prev =
-#ifndef NEW_INSETS
-                               cursor.par()->FirstPhysicalPar()->Previous();
-#else
-                               cursor.par()->Previous();
-#endif
+                       LyXParagraph * prev = cursor.par()->previous();
+
                        if (prev 
                            && (prev->GetDepth() - cursor.par()->GetDepth() > 0
                                || (prev->GetDepth() == cursor.par()->GetDepth()
                                    && textclasslist.Style(bview->buffer()->params.textclass,
                                                      prev->GetLayout()).isEnvironment()))) {
-#ifndef NEW_INSETS
-                               cursor.par()->FirstPhysicalPar()->depth++;
-#else
-                               cursor.par()->depth++;
-#endif
+                               cursor.par()->params.depth(cursor.par()->params.depth() + 1);
                                anything_changed = true;
                                }
                }
                if (cursor.par() == sel_end_cursor.par())
                        break;
-               cursor.par(cursor.par()->Next());
+               cursor.par(cursor.par()->next());
        }
    
        // if nothing changed set all depth to 0
        if (!anything_changed) {
                cursor = sel_start_cursor;
                while (cursor.par() != sel_end_cursor.par()) {
-#ifndef NEW_INSETS
-                       cursor.par()->FirstPhysicalPar()->depth = 0;
-#else
-                       cursor.par()->depth = 0;
-#endif
-                       cursor.par(cursor.par()->Next());
+                       cursor.par()->params.depth(0);
+                       cursor.par(cursor.par()->next());
                }
-#ifndef NEW_INSETS
-               if (cursor.par()->footnoteflag == sel_start_cursor.par()->footnoteflag)
-                       cursor.par()->FirstPhysicalPar()->depth = 0;
-#else
-                       cursor.par()->depth = 0;
-#endif
+               cursor.par()->params.depth(0);
        }
    
        RedoParagraphs(bview, sel_start_cursor, endpar);
@@ -775,8 +581,8 @@ void  LyXText::IncDepth(BufferView * bview)
        sel_cursor = cursor;
        SetCursor(bview, sel_end_cursor.par(), sel_end_cursor.pos());
        UpdateCounters(bview, cursor.row());
-       ClearSelection();
-       SetSelection();
+       ClearSelection(bview);
+       SetSelection(bview);
        SetCursor(bview, tmpcursor.par(), tmpcursor.pos());
 }
 
@@ -791,34 +597,21 @@ void  LyXText::DecDepth(BufferView * bview)
                sel_start_cursor = cursor; // dummy selection
                sel_end_cursor = cursor;
        }
-#ifndef NEW_INSETS
-       LyXParagraph * endpar = sel_end_cursor.par()->LastPhysicalPar()->Next();
-#else
-       LyXParagraph * endpar = sel_end_cursor.par()->Next();
-#endif
+       LyXParagraph * endpar = sel_end_cursor.par()->next();
        LyXParagraph * undoendpar = endpar;
 
        if (endpar && endpar->GetDepth()) {
                while (endpar && endpar->GetDepth()) {
-#ifndef NEW_INSETS
-                       endpar = endpar->LastPhysicalPar()->Next();
-#else
-                       endpar = endpar->Next();
-#endif
+                       endpar = endpar->next();
                        undoendpar = endpar;
                }
        }
        else if (endpar) {
-               endpar = endpar->Next(); // because of parindents etc.
+               endpar = endpar->next(); // because of parindents etc.
        }
    
        SetUndo(bview->buffer(), Undo::EDIT,
-#ifndef NEW_INSETS
-               sel_start_cursor
-               .par()->ParFromPos(sel_start_cursor.pos())->previous,
-#else
-               sel_start_cursor.par()->previous,
-#endif
+               sel_start_cursor.par()->previous(),
                undoendpar);
 
        LyXCursor tmpcursor = cursor; // store the current cursor
@@ -828,19 +621,11 @@ void  LyXText::DecDepth(BufferView * bview)
        cursor = sel_start_cursor;
 
        while (true) {
-#ifndef NEW_INSETS
-               if (cursor.par()->footnoteflag ==
-                   sel_start_cursor.par()->footnoteflag) {
-                       if (cursor.par()->FirstPhysicalPar()->depth)
-                               cursor.par()->FirstPhysicalPar()->depth--;
-               }
-#else
-                       if (cursor.par()->depth)
-                               cursor.par()->depth--;
-#endif
+               if (cursor.par()->params.depth())
+                       cursor.par()->params.depth(cursor.par()->params.depth() - 1);
                if (cursor.par() == sel_end_cursor.par())
                        break;
-               cursor.par(cursor.par()->Next());
+               cursor.par(cursor.par()->next());
        }
 
        RedoParagraphs(bview, sel_start_cursor, endpar);
@@ -852,8 +637,8 @@ void  LyXText::DecDepth(BufferView * bview)
        sel_cursor = cursor;
        SetCursor(bview, sel_end_cursor.par(), sel_end_cursor.pos());
        UpdateCounters(bview, cursor.row());
-       ClearSelection();
-       SetSelection();
+       ClearSelection(bview);
+       SetSelection(bview);
        SetCursor(bview, tmpcursor.par(), tmpcursor.pos());
 }
 
@@ -889,28 +674,12 @@ void LyXText::SetFont(BufferView * bview, LyXFont const & font, bool toggleall)
        // and sel_end cursor
    
        SetUndo(bview->buffer(), Undo::EDIT,
-#ifndef NEW_INSETS
-               sel_start_cursor.par()->ParFromPos(sel_start_cursor.pos())->previous, 
-               sel_end_cursor.par()->ParFromPos(sel_end_cursor.pos())->next
-#else
-               sel_start_cursor.par()->previous, 
-               sel_end_cursor.par()->next
-#endif
-               ); 
+               sel_start_cursor.par()->previous(),
+               sel_end_cursor.par()->next()); 
        cursor = sel_start_cursor;
        while (cursor.par() != sel_end_cursor.par() ||
-              (
-#ifndef NEW_INSETS
-                      cursor.par()->footnoteflag == sel_start_cursor.par()->footnoteflag &&
-#endif
-               cursor.pos() < sel_end_cursor.pos())) 
-       {
-               if (cursor.pos() < cursor.par()->Last()
-#ifndef NEW_INSETS
-                   && cursor.par()->footnoteflag
-                   == sel_start_cursor.par()->footnoteflag
-#endif
-                       ) {
+              (cursor.pos() < sel_end_cursor.pos())) {
+               if (cursor.pos() < cursor.par()->size()) {
                        // an open footnote should behave
                        // like a closed one
                        LyXFont newfont = GetFont(bview->buffer(), 
@@ -923,19 +692,19 @@ void LyXText::SetFont(BufferView * bview, LyXFont const & font, bool toggleall)
                        cursor.pos(cursor.pos() + 1);
                } else {
                        cursor.pos(0);
-                       cursor.par(cursor.par()->Next());
+                       cursor.par(cursor.par()->next());
                }
        }
    
-       RedoParagraphs(bview, sel_start_cursor, sel_end_cursor.par()->Next());
+       RedoParagraphs(bview, sel_start_cursor, sel_end_cursor.par()->next());
    
        // we have to reset the selection, because the
        // geometry could have changed
        SetCursor(bview, sel_start_cursor.par(), sel_start_cursor.pos());
        sel_cursor = cursor;
        SetCursor(bview, sel_end_cursor.par(), sel_end_cursor.pos());
-       ClearSelection();
-       SetSelection();
+       ClearSelection(bview);
+       SetSelection(bview);
        SetCursor(bview, tmpcursor.par(), tmpcursor.pos(), true,
                  tmpcursor.boundary());
 }
@@ -947,11 +716,8 @@ void LyXText::RedoHeightOfParagraph(BufferView * bview, LyXCursor const & cur)
        int y = cur.y() - tmprow->baseline();
 
        SetHeightOfRow(bview, tmprow);
-#ifndef NEW_INSETS
-       LyXParagraph * first_phys_par = tmprow->par()->FirstPhysicalPar();
-#else
        LyXParagraph * first_phys_par = tmprow->par();
-#endif
+
        // find the first row of the paragraph
        if (first_phys_par != tmprow->par())
                while (tmprow->previous()
@@ -980,11 +746,8 @@ void LyXText::RedoDrawingOfParagraph(BufferView * bview, LyXCursor const & cur)
    
        int y = cur.y() - tmprow->baseline();
        SetHeightOfRow(bview, tmprow);
-#ifndef NEW_INSETS
-       LyXParagraph * first_phys_par = tmprow->par()->FirstPhysicalPar();
-#else
        LyXParagraph * first_phys_par = tmprow->par();
-#endif
+
        // find the first row of the paragraph
        if (first_phys_par != tmprow->par())
                while (tmprow->previous() && tmprow->previous()->par() != first_phys_par)  {
@@ -1022,11 +785,7 @@ void LyXText::RedoParagraphs(BufferView * bview, LyXCursor const & cur,
        if (!tmprow->previous()){
                first_phys_par = FirstParagraph();   // a trick/hack for UNDO
        } else {
-#ifndef NEW_INSETS
-               first_phys_par = tmprow->par()->FirstPhysicalPar();
-#else
                first_phys_par = tmprow->par();
-#endif
                // find the first row of the paragraph
                if (first_phys_par != tmprow->par())
                        while (tmprow->previous() &&
@@ -1075,7 +834,7 @@ void LyXText::RedoParagraphs(BufferView * bview, LyXCursor const & cur,
                                tmprow = firstrow;
                        while (tmprow->next() && tmprow->next()->par() == tmppar)
                                tmprow = tmprow->next();
-                       tmppar = tmppar->Next();
+                       tmppar = tmppar->next();
                }
        } while (tmppar != endpar);
    
@@ -1117,8 +876,10 @@ bool LyXText::FullRebreak(BufferView * bview)
  * They also delete the corresponding row */
    
 // need the selection cursor:
-void LyXText::SetSelection()
+void LyXText::SetSelection(BufferView * bview)
 {
+       const bool lsel = selection;
+
        if (!selection) {
                last_sel_cursor = sel_cursor;
                sel_start_cursor = sel_cursor;
@@ -1164,6 +925,9 @@ void LyXText::SetSelection()
        if (sel_start_cursor.par() == sel_end_cursor.par() && 
            sel_start_cursor.pos() == sel_end_cursor.pos())
                selection = false;
+
+       if (inset_owner && (selection || lsel))
+               inset_owner->SetUpdateStatus(bview, InsetText::SELECTION);
 }
 
 
@@ -1185,15 +949,15 @@ string const LyXText::selectionAsString(Buffer const * buffer) const
        // First paragraph in selection
        result += sel_start_cursor.par()->String(buffer,
                                                 sel_start_cursor.pos(),
-                                                sel_start_cursor.par()->Last())
+                                                sel_start_cursor.par()->size())
                + "\n\n";
        
        // The paragraphs in between (if any)
        LyXCursor tmpcur(sel_start_cursor);
-       tmpcur.par(tmpcur.par()->Next());
+       tmpcur.par(tmpcur.par()->next());
        while (tmpcur.par() != sel_end_cursor.par()) {
-               result += tmpcur.par()->String(buffer, 0, tmpcur.par()->Last()) + "\n\n";
-               tmpcur.par(tmpcur.par()->Next()); // Or NextAfterFootnote??
+               result += tmpcur.par()->String(buffer, 0, tmpcur.par()->size()) + "\n\n";
+               tmpcur.par(tmpcur.par()->next()); // Or NextAfterFootnote??
        }
 
        // Last paragraph in selection
@@ -1203,10 +967,8 @@ string const LyXText::selectionAsString(Buffer const * buffer) const
 }
 
 
-void LyXText::ClearSelection() const
+void LyXText::ClearSelection(BufferView * /*bview*/) const
 {
-       if (selection)
-               status = LyXText::NEED_MORE_REFRESH;
        selection = false;
        mark_set = false;
 }
@@ -1223,7 +985,7 @@ void LyXText::CursorEnd(BufferView * bview) const
        if (!cursor.row()->next() || cursor.row()->next()->par() != cursor.row()->par())
                SetCursor(bview, cursor.par(), RowLast(cursor.row()) + 1);
        else {
-               if (cursor.par()->Last() && 
+               if (cursor.par()->size() &&
                    (cursor.par()->GetChar(RowLast(cursor.row())) == ' '
                     || cursor.par()->IsNewline(RowLast(cursor.row()))))
                        SetCursor(bview, cursor.par(), RowLast(cursor.row()));
@@ -1233,49 +995,29 @@ void LyXText::CursorEnd(BufferView * bview) const
 }
 
 
-void  LyXText::CursorTop(BufferView * bview) const
+void LyXText::CursorTop(BufferView * bview) const
 {
-       while (cursor.par()->Previous())
-               cursor.par(cursor.par()->Previous());
+       while (cursor.par()->previous())
+               cursor.par(cursor.par()->previous());
        SetCursor(bview, cursor.par(), 0);
 }
 
 
-void  LyXText::CursorBottom(BufferView * bview) const
+void LyXText::CursorBottom(BufferView * bview) const
 {
-       while (cursor.par()->Next())
-               cursor.par(cursor.par()->Next());
-       SetCursor(bview, cursor.par(), cursor.par()->Last());
+       while (cursor.par()->next())
+               cursor.par(cursor.par()->next());
+       SetCursor(bview, cursor.par(), cursor.par()->size());
 }
    
    
-/* returns a pointer to the row near the specified y-coordinate
-* (relative to the whole text). y is set to the real beginning
-* of this row */
-Row * LyXText::GetRowNearY(int & y) const
-{
-       Row * tmprow = firstrow;
-       int tmpy = 0;
-
-       while (tmprow->next() && tmpy + tmprow->height() <= y) {
-               tmpy += tmprow->height();
-               tmprow = tmprow->next();
-       }
-
-       y = tmpy;   // return the real y
-       return tmprow;
-}
-
-
 void LyXText::ToggleFree(BufferView * bview,
                         LyXFont const & font, bool toggleall)
 {
        // If the mask is completely neutral, tell user
        if (font == LyXFont(LyXFont::ALL_IGNORE)) {
                // Could only happen with user style
-               bview->owner()->getMiniBuffer()
-                       ->Set(_("No font change defined. Use Character under"
-                               " the Layout menu to define font change."));
+               bview->owner()->message(_("No font change defined. Use Character under the Layout menu to define font change."));
                return;
        }
 
@@ -1293,11 +1035,13 @@ void LyXText::ToggleFree(BufferView * bview,
        /* Implicit selections are cleared afterwards and cursor is set to the
           original position. */
        if (implicitSelection) {
-               ClearSelection();
+               ClearSelection(bview);
                cursor = resetCursor;
                SetCursor(bview, cursor.par(), cursor.pos());
                sel_cursor = cursor;
        }
+       if (inset_owner)
+               inset_owner->SetUpdateStatus(bview, InsetText::CURSOR_PAR);
 }
 
 
@@ -1313,104 +1057,6 @@ LyXText::BeginningOfMainBody(Buffer const * buf,
 }
 
 
-#ifndef NEW_INSETS
-/* if there is a selection, reset every environment you can find
-* in the selection, otherwise just the environment you are in */ 
-void LyXText::MeltFootnoteEnvironment(BufferView * bview)
-{
-       LyXParagraph * tmppar, * firsttmppar;
-   
-       ClearSelection();
-   
-       /* is is only allowed, if the cursor is IN an open footnote.
-        * Otherwise it is too dangerous */ 
-       if (cursor.par()->footnoteflag != LyXParagraph::OPEN_FOOTNOTE)
-               return;
-   
-       SetUndo(bview->buffer(), Undo::FINISH, 
-               cursor.par()->PreviousBeforeFootnote()->previous,
-               cursor.par()->NextAfterFootnote()->next);
-
-       /* ok, move to the beginning of the footnote. */ 
-       while (cursor.par()->footnoteflag == LyXParagraph::OPEN_FOOTNOTE)
-               cursor.par(cursor.par()->Previous());
-   
-       SetCursor(bview, cursor.par(), cursor.par()->Last());
-       /* this is just faster than using CursorLeft(); */ 
-   
-       firsttmppar = cursor.par()->ParFromPos(cursor.pos());
-       tmppar = firsttmppar;
-       /* tmppar is now the paragraph right before the footnote */
-
-       bool first_footnote_par_is_not_empty = tmppar->next->size();
-   
-       while (tmppar->next
-              && tmppar->next->footnoteflag == LyXParagraph::OPEN_FOOTNOTE) {
-               tmppar = tmppar->next;   /* I use next instead of Next(),
-                                         * because there cannot be any
-                                         * footnotes in a footnote
-                                         * environment */
-               tmppar->footnoteflag = LyXParagraph::NO_FOOTNOTE;
-      
-               /* remember the captions and empty paragraphs */
-               if ((textclasslist.Style(bview->buffer()->params.textclass,
-                                        tmppar->GetLayout())
-                    .labeltype == LABEL_SENSITIVE)
-                   || !tmppar->Last())
-                       tmppar->SetLayout(bview->buffer()->params, 0);
-       }
-   
-       // now we will paste the ex-footnote, if the layouts allow it
-       // first restore the layout of the paragraph right behind
-       // the footnote
-       if (tmppar->next) 
-               tmppar->next->MakeSameLayout(cursor.par());
-
-       // first the end
-       if (!tmppar->GetLayout()
-           || (tmppar->Next()
-               && (!tmppar->Next()->Last()
-                   || tmppar->Next()->HasSameLayout(tmppar)))) {
-               if (tmppar->Next()->Last()
-                   && tmppar->Next()->IsLineSeparator(0))
-                       tmppar->Next()->Erase(0);
-               tmppar->PasteParagraph(bview->buffer()->params);
-       }
-
-       tmppar = tmppar->Next();  /* make sure tmppar cannot be touched
-                                  * by the pasting of the beginning */
-
-       /* then the beginning */ 
-       /* if there is no space between the text and the footnote, so we insert
-        * a blank 
-        * (only if the previous par and the footnotepar are not empty!) */
-       if (!firsttmppar->next->GetLayout()
-           || firsttmppar->HasSameLayout(firsttmppar->next)) {
-               if (firsttmppar->size()
-                   && !firsttmppar->IsSeparator(firsttmppar->size() - 1)
-                   && first_footnote_par_is_not_empty) {
-                       firsttmppar->next->InsertChar(0, ' ');
-               }
-               firsttmppar->PasteParagraph(bview->buffer()->params);
-       }
-   
-       /* now redo the paragaphs */
-       RedoParagraphs(bview, cursor, tmppar);
-   
-       SetCursor(bview, cursor.par(), cursor.pos());
-   
-       /* sometimes it can happen, that there is a counter change */ 
-       Row * row = cursor.row();
-       while (row->next() && row->par() != tmppar && row->next()->par() != tmppar)
-               row = row->next();
-       UpdateCounters(bview, row);
-   
-   
-       ClearSelection();
-}
-#endif
-
-
 /* the DTP switches for paragraphs. LyX will store them in the 
 * first physicla paragraph. When a paragraph is broken, the top settings 
 * rest, the bottom settings are given to the new one. So I can make shure, 
@@ -1433,58 +1079,36 @@ void LyXText::SetParagraph(BufferView * bview,
        }
 
        // make sure that the depth behind the selection are restored, too
-#ifndef NEW_INSETS
-       LyXParagraph * endpar = sel_end_cursor.par()->LastPhysicalPar()->Next();
-#else
-       LyXParagraph * endpar = sel_end_cursor.par()->Next();
-#endif
+       LyXParagraph * endpar = sel_end_cursor.par()->next();
        LyXParagraph * undoendpar = endpar;
 
        if (endpar && endpar->GetDepth()) {
                while (endpar && endpar->GetDepth()) {
-#ifndef NEW_INSETS
-                       endpar = endpar->LastPhysicalPar()->Next();
-#else
-                       endpar = endpar->Next();
-#endif
+                       endpar = endpar->next();
                        undoendpar = endpar;
                }
        }
        else if (endpar) {
-               endpar = endpar->Next(); // because of parindents etc.
+               endpar = endpar->next(); // because of parindents etc.
        }
    
        SetUndo(bview->buffer(), Undo::EDIT,
-#ifndef NEW_INSETS
-               sel_start_cursor
-               .par()->ParFromPos(sel_start_cursor.pos())->previous,
-#else
-               sel_start_cursor.par()->previous,
-#endif
+               sel_start_cursor.par()->previous(),
                undoendpar);
 
        
        LyXParagraph * tmppar = sel_end_cursor.par();
-#ifndef NEW_INSETS
-       while (tmppar != sel_start_cursor.par()->FirstPhysicalPar()->Previous()) {
-               SetCursor(bview, tmppar->FirstPhysicalPar(), 0);
-#else
-       while (tmppar != sel_start_cursor.par()->Previous()) {
+       while (tmppar != sel_start_cursor.par()->previous()) {
                SetCursor(bview, tmppar, 0);
-#endif
                status = LyXText::NEED_MORE_REFRESH;
                refresh_row = cursor.row();
                refresh_y = cursor.y() - cursor.row()->baseline();
-#ifndef NEW_INSETS
-               if (cursor.par()->footnoteflag ==
-                   sel_start_cursor.par()->footnoteflag) {
-#endif
-                       cursor.par()->line_top = line_top;
-                       cursor.par()->line_bottom = line_bottom;
-                       cursor.par()->pagebreak_top = pagebreak_top;
-                       cursor.par()->pagebreak_bottom = pagebreak_bottom;
-                       cursor.par()->added_space_top = space_top;
-                       cursor.par()->added_space_bottom = space_bottom;
+                       cursor.par()->params.lineTop(line_top);
+                       cursor.par()->params.lineBottom(line_bottom);
+                       cursor.par()->params.pagebreakTop(pagebreak_top);
+                       cursor.par()->params.pagebreakBottom(pagebreak_bottom);
+                       cursor.par()->params.spaceTop(space_top);
+                       cursor.par()->params.spaceBottom(space_bottom);
                        // does the layout allow the new alignment?
                        if (align == LYX_ALIGN_LAYOUT)
                                align = textclasslist
@@ -1496,122 +1120,28 @@ void LyXText::SetParagraph(BufferView * bview,
                                if (align == textclasslist
                                    .Style(bview->buffer()->params.textclass,
                                           cursor.par()->GetLayout()).align)
-                                       cursor.par()->align = LYX_ALIGN_LAYOUT;
+                                       cursor.par()->params.align(LYX_ALIGN_LAYOUT);
                                else
-                                       cursor.par()->align = align;
+                                       cursor.par()->params.align(align);
                        }
                        cursor.par()->SetLabelWidthString(labelwidthstring);
-                       cursor.par()->noindent = noindent;
-#ifndef NEW_INSETS
-               }
-               
-               tmppar = cursor.par()->FirstPhysicalPar()->Previous();
-#else
-               tmppar = cursor.par()->Previous();
-#endif
+                       cursor.par()->params.noindent(noindent);
+               tmppar = cursor.par()->previous();
        }
        
        RedoParagraphs(bview, sel_start_cursor, endpar);
        
-       ClearSelection();
+       ClearSelection(bview);
        SetCursor(bview, sel_start_cursor.par(), sel_start_cursor.pos());
        sel_cursor = cursor;
        SetCursor(bview, sel_end_cursor.par(), sel_end_cursor.pos());
-       SetSelection();
+       SetSelection(bview);
        SetCursor(bview, tmpcursor.par(), tmpcursor.pos());
        if (inset_owner)
            bview->updateInset(inset_owner, true);
 }
 
 
-void LyXText::SetParagraphExtraOpt(BufferView * bview, int type,
-                                   string const & width,
-                                   string const & widthp,
-                                   int alignment, bool hfill,
-                                   bool start_minipage)
-{
-       LyXCursor tmpcursor = cursor;
-       LyXParagraph * tmppar;
-       if (!selection) {
-               sel_start_cursor = cursor;
-               sel_end_cursor = cursor;
-       }
-
-       // make sure that the depth behind the selection are restored, too
-#ifndef NEW_INSETS
-       LyXParagraph * endpar = sel_end_cursor.par()->LastPhysicalPar()->Next();
-#else
-       LyXParagraph * endpar = sel_end_cursor.par()->Next();
-#endif
-       LyXParagraph * undoendpar = endpar;
-
-       if (endpar && endpar->GetDepth()) {
-               while (endpar && endpar->GetDepth()) {
-#ifndef NEW_INSETS
-                       endpar = endpar->LastPhysicalPar()->Next();
-#else
-                       endpar = endpar->Next();
-#endif
-                       undoendpar = endpar;
-               }
-       }
-       else if (endpar) {
-               endpar = endpar->Next(); // because of parindents etc.
-       }
-   
-       SetUndo(bview->buffer(), Undo::EDIT,
-#ifndef NEW_INSETS
-               sel_start_cursor
-               .par()->ParFromPos(sel_start_cursor.pos())->previous,
-#else
-               sel_start_cursor.par()->previous,
-#endif
-               undoendpar);
-       
-       tmppar = sel_end_cursor.par();
-#ifndef NEW_INSETS
-       while(tmppar != sel_start_cursor.par()->FirstPhysicalPar()->Previous()) {
-                SetCursor(bview, tmppar->FirstPhysicalPar(), 0);
-#else
-       while(tmppar != sel_start_cursor.par()->Previous()) {
-                SetCursor(bview, tmppar, 0);
-#endif
-                status = LyXText::NEED_MORE_REFRESH;
-                refresh_row = cursor.row();
-                refresh_y = cursor.y() - cursor.row()->baseline();
-#ifndef NEW_INSETS
-                if (cursor.par()->footnoteflag ==
-                    sel_start_cursor.par()->footnoteflag) {
-#endif
-                        if (type == LyXParagraph::PEXTRA_NONE) {
-                                if (cursor.par()->pextra_type != LyXParagraph::PEXTRA_NONE) {
-                                        cursor.par()->UnsetPExtraType(bview->buffer()->params);
-                                        cursor.par()->pextra_type = LyXParagraph::PEXTRA_NONE;
-                                }
-                        } else {
-                                cursor.par()->SetPExtraType(bview->buffer()->params,
-                                                         type, width, widthp);
-                                cursor.par()->pextra_hfill = hfill;
-                                cursor.par()->pextra_start_minipage = start_minipage;
-                                cursor.par()->pextra_alignment = alignment;
-                        }
-#ifndef NEW_INSETS
-               }
-                tmppar = cursor.par()->FirstPhysicalPar()->Previous();
-#else
-                tmppar = cursor.par()->Previous();
-#endif
-        }
-       RedoParagraphs(bview, sel_start_cursor, endpar);
-       ClearSelection();
-       SetCursor(bview, sel_start_cursor.par(), sel_start_cursor.pos());
-       sel_cursor = cursor;
-       SetCursor(bview, sel_end_cursor.par(), sel_end_cursor.pos());
-       SetSelection();
-       SetCursor(bview, tmpcursor.par(), tmpcursor.pos());
-}
-
-
 char loweralphaCounter(int n)
 {
        if (n < 1 || n > 26)
@@ -1621,7 +1151,9 @@ char loweralphaCounter(int n)
 }
 
 
-static inline
+namespace {
+
+inline
 char alphaCounter(int n)
 {
        if (n < 1 || n > 26)
@@ -1631,7 +1163,7 @@ char alphaCounter(int n)
 }
 
 
-static inline
+inline
 char hebrewCounter(int n)
 {
        static const char hebrew[22] = {
@@ -1646,7 +1178,7 @@ char hebrewCounter(int n)
 }
 
 
-static inline
+inline
 string const romanCounter(int n)
 {
        static char const * roman[20] = {
@@ -1661,14 +1193,12 @@ string const romanCounter(int n)
                return roman[n-1];
 }
 
+} // namespace anon
+
 
 // set the counter of a paragraph. This includes the labels
 void LyXText::SetCounter(Buffer const * buf, LyXParagraph * par) const
 {
-#ifndef NEW_INSETS
-       // this is only relevant for the beginning of paragraph
-       par = par->FirstPhysicalPar();
-#endif
        LyXLayout const & layout =
                textclasslist.Style(buf->params.textclass, 
                                    par->GetLayout());
@@ -1678,69 +1208,32 @@ void LyXText::SetCounter(Buffer const * buf, LyXParagraph * par) const
 
        /* copy the prev-counters to this one, unless this is the start of a 
           footnote or of a bibliography or the very first paragraph */
-       if (par->Previous()
-#ifndef NEW_INSETS
-           && !(par->Previous()->footnoteflag == LyXParagraph::NO_FOOTNOTE 
-                   && par->footnoteflag == LyXParagraph::OPEN_FOOTNOTE
-                   && par->footnotekind == LyXParagraph::FOOTNOTE)
-#endif
+       if (par->previous()
            && !(textclasslist.Style(buf->params.textclass,
-                               par->Previous()->GetLayout()
+                               par->previous()->GetLayout()
                                ).labeltype != LABEL_BIBLIO
                 && layout.labeltype == LABEL_BIBLIO)) {
                for (int i = 0; i < 10; ++i) {
-                       par->setCounter(i, par->Previous()->GetFirstCounter(i));
+                       par->setCounter(i, par->previous()->GetFirstCounter(i));
                }
-#ifndef NEW_INSETS
-               par->appendix = par->Previous()->FirstPhysicalPar()->appendix;
-#else
-               par->appendix = par->Previous()->appendix;
-#endif
-               if (!par->appendix && par->start_of_appendix){
-                 par->appendix = true;
+               par->params.appendix(par->previous()->params.appendix());
+               if (!par->params.appendix() && par->params.startOfAppendix()) {
+                 par->params.appendix(true);
                  for (int i = 0; i < 10; ++i) {
                    par->setCounter(i, 0);
                  }  
                }
-#ifndef NEW_INSETS
-               par->enumdepth = par->Previous()->FirstPhysicalPar()->enumdepth;
-               par->itemdepth = par->Previous()->FirstPhysicalPar()->itemdepth;
-#else
-               par->enumdepth = par->Previous()->enumdepth;
-               par->itemdepth = par->Previous()->itemdepth;
-#endif
+               par->enumdepth = par->previous()->enumdepth;
+               par->itemdepth = par->previous()->itemdepth;
        } else {
                for (int i = 0; i < 10; ++i) {
                        par->setCounter(i, 0);
                }  
-               par->appendix = par->start_of_appendix;
+               par->params.appendix(par->params.startOfAppendix());
                par->enumdepth = 0;
                par->itemdepth = 0;
        }
 
-#ifndef NEW_INSETS
-        // if this is an open marginnote and this is the first
-        // entry in the marginnote and the enclosing
-        // environment is an enum/item then correct for the
-        // LaTeX behaviour (ARRae)
-        if (par->footnoteflag == LyXParagraph::OPEN_FOOTNOTE
-          && par->footnotekind == LyXParagraph::MARGIN
-           && par->Previous()
-           && par->Previous()->footnoteflag != LyXParagraph::OPEN_FOOTNOTE
-           && (par->PreviousBeforeFootnote()
-               && textclasslist.Style(buf->params.textclass,
-                                 par->PreviousBeforeFootnote()->GetLayout()
-                                ).labeltype >= LABEL_COUNTER_ENUMI)) {
-                // Any itemize or enumerate environment in a marginnote
-                // that is embedded in an itemize or enumerate
-                // paragraph is seen by LaTeX as being at a deeper
-                // level within that enclosing itemization/enumeration
-                // even if there is a "standard" layout at the start of
-                // the marginnote.
-                par->enumdepth++;
-                par->itemdepth++;
-        }
-#endif
        /* Maybe we have to increment the enumeration depth.
         * BUT, enumeration in a footnote is considered in isolation from its
         *      surrounding paragraph so don't increment if this is the
@@ -1748,29 +1241,19 @@ void LyXText::SetCounter(Buffer const * buf, LyXParagraph * par) const
         * AND, bibliographies can't have their depth changed ie. they
         *      are always of depth 0
         */
-       if (par->Previous()
-           && par->Previous()->GetDepth() < par->GetDepth()
+       if (par->previous()
+           && par->previous()->GetDepth() < par->GetDepth()
            && textclasslist.Style(buf->params.textclass,
-                             par->Previous()->GetLayout()
+                             par->previous()->GetLayout()
                             ).labeltype == LABEL_COUNTER_ENUMI
            && par->enumdepth < 3
-#ifndef NEW_INSETS
-           && !(par->Previous()->footnoteflag == LyXParagraph::NO_FOOTNOTE 
-                   && par->footnoteflag == LyXParagraph::OPEN_FOOTNOTE
-                   && par->footnotekind == LyXParagraph::FOOTNOTE)
-#endif
            && layout.labeltype != LABEL_BIBLIO) {
                par->enumdepth++;
        }
 
        /* Maybe we have to decrement the enumeration depth, see note above */
-       if (par->Previous()
-           && par->Previous()->GetDepth() > par->GetDepth()
-#ifndef NEW_INSETS
-           && !(par->Previous()->footnoteflag == LyXParagraph::NO_FOOTNOTE
-                   && par->footnoteflag == LyXParagraph::OPEN_FOOTNOTE
-                   && par->footnotekind == LyXParagraph::FOOTNOTE)
-#endif
+       if (par->previous()
+           && par->previous()->GetDepth() > par->GetDepth()
            && layout.labeltype != LABEL_BIBLIO) {
                par->enumdepth = par->DepthHook(par->GetDepth())->enumdepth;
                par->setCounter(6 + par->enumdepth,
@@ -1782,12 +1265,12 @@ void LyXText::SetCounter(Buffer const * buf, LyXParagraph * par) const
                        par->setCounter(i, 0);
        }
    
-       if (!par->labelstring.empty()) {
-               par->labelstring.erase();
+       if (!par->params.labelString().empty()) {
+               par->params.labelString(string());
        }
    
        if (layout.margintype == MARGIN_MANUAL) {
-               if (par->labelwidthstring.empty()) {
+               if (par->params.labelWidthString().empty()) {
                        par->SetLabelWidthString(layout.labelstring());
                }
        } else {
@@ -1802,21 +1285,21 @@ void LyXText::SetCounter(Buffer const * buf, LyXParagraph * par) const
                        par->incCounter(i);     // increment the counter  
         
                        // Is there a label? Useful for Chapter layout
-                       if (!par->appendix){
+                       if (!par->params.appendix()) {
                                if (!layout.labelstring().empty())
-                                       par->labelstring = layout.labelstring();
+                                       par->params.labelString(layout.labelstring());
                                else
-                                       par->labelstring.erase();
+                                       par->params.labelString(string());
                         } else {
                                if (!layout.labelstring_appendix().empty())
-                                       par->labelstring = layout.labelstring_appendix();
+                                       par->params.labelString(layout.labelstring_appendix());
                                else
-                                       par->labelstring.erase();
+                                       par->params.labelString(string());
                        }
 
                        std::ostringstream s;
 
-                       if (!par->appendix) {
+                       if (!par->params.appendix()) {
                                switch (2 * LABEL_COUNTER_CHAPTER -
                                        textclass.maxcounter() + i) {
                                case LABEL_COUNTER_CHAPTER:
@@ -1939,7 +1422,7 @@ void LyXText::SetCounter(Buffer const * buf, LyXParagraph * par) const
                                }
                        }
 
-                       par->labelstring += s.str().c_str();
+                       par->params.labelString(par->params.labelString() +s.str().c_str());
                        // We really want to remove the c_str as soon as
                        // possible...
                        
@@ -1991,7 +1474,7 @@ void LyXText::SetCounter(Buffer const * buf, LyXParagraph * par) const
                                break;
                        }
 
-                       par->labelstring = s.str().c_str();
+                       par->params.labelString(s.str().c_str());
                        // we really want to get rid of that c_str()
 
                        for (i += par->enumdepth + 1; i < 10; ++i)
@@ -2007,7 +1490,7 @@ void LyXText::SetCounter(Buffer const * buf, LyXParagraph * par) const
                        par->bibkey = new InsetBibKey(p);
                }
                par->bibkey->setCounter(number);
-               par->labelstring = layout.labelstring();
+               par->params.labelString(layout.labelstring());
                
                // In biblio should't be following counters but...
        } else {
@@ -2017,23 +1500,6 @@ void LyXText::SetCounter(Buffer const * buf, LyXParagraph * par) const
                if (layout.labeltype == LABEL_SENSITIVE) {
                        bool isOK (par->InInset() && par->InInset()->owner() &&
                                   (par->InInset()->owner()->LyxCode() == Inset::FLOAT_CODE));
-#ifndef NEW_INSETS
-                       if (par->footnoteflag != LyXParagraph::NO_FOOTNOTE
-                           && (par->footnotekind == LyXParagraph::FIG
-                               || par->footnotekind == LyXParagraph::WIDE_FIG)) {
-                               s = (par->getParLanguage(buf->params)->lang() == "hebrew")
-                                       ? ":øåéà" : "Figure:";
-                       } else if (par->footnoteflag != LyXParagraph::NO_FOOTNOTE
-                                && (par->footnotekind == LyXParagraph::TAB
-                                    || par->footnotekind == LyXParagraph::WIDE_TAB)) {
-                               s = (par->getParLanguage(buf->params)->lang() == "hebrew")
-                                       ? ":äìáè" : "Table:";
-                       } else if (par->footnoteflag != LyXParagraph::NO_FOOTNOTE
-                                  && par->footnotekind == LyXParagraph::ALGORITHM) {
-                               s = (par->getParLanguage(buf->params)->lang() == "hebrew")
-                                       ? ":íúéøåâìà" : "Algorithm:";
-                       } else
-#endif
                        if (isOK) {
                                InsetFloat * tmp = static_cast<InsetFloat*>(par->InInset()->owner());
                                Floating const & fl
@@ -2047,7 +1513,7 @@ void LyXText::SetCounter(Buffer const * buf, LyXParagraph * par) const
                                        ? " :úåòîùî Ã¸Ã±Ã§" : "Senseless: ";
                        }
                }
-               par->labelstring = s;
+               par->params.labelString(s);
                
                /* reset the enumeration counter. They are always resetted
                 * when there is any other layout between */ 
@@ -2062,23 +1528,12 @@ void LyXText::SetCounter(Buffer const * buf, LyXParagraph * par) const
 void LyXText::UpdateCounters(BufferView * bview, Row * row) const
 {
        LyXParagraph * par;
+
        if (!row) {
                row = firstrow;
                par = row->par();
        } else {
-               if (row->par()->next
-#ifndef NEW_INSETS
-                   && row->par()->next->footnoteflag != LyXParagraph::OPEN_FOOTNOTE
-#endif
-                       ) {
-#ifndef NEW_INSETS
-                       par = row->par()->LastPhysicalPar()->Next();
-#else
-                       par = row->par()->Next();
-#endif
-               } else {
-                       par = row->par()->next;
-               }
+               par = row->par()->next();
        }
 
        while (par) {
@@ -2089,41 +1544,16 @@ void LyXText::UpdateCounters(BufferView * bview, Row * row) const
                
                /* now  check for the headline layouts. remember that they
                 * have a dynamic left margin */ 
-               if (
-#ifndef NEW_INSETS
-                       !par->IsDummy() &&
-#endif
-                   ( textclasslist.Style(bview->buffer()->params.textclass,
-                                            par->layout).margintype == MARGIN_DYNAMIC
-                        || textclasslist.Style(bview->buffer()->params.textclass,
-                                               par->layout).labeltype == LABEL_SENSITIVE)
-                       ) {
-        
+               if ((textclasslist.Style(bview->buffer()->params.textclass,
+                                        par->layout).margintype == MARGIN_DYNAMIC
+                    || textclasslist.Style(bview->buffer()->params.textclass,
+                                           par->layout).labeltype == LABEL_SENSITIVE)) {
+                       
                        /* Rebreak the paragraph */ 
                        RemoveParagraph(row);
                        AppendParagraph(bview, row);
-
-#ifndef NEW_INSETS
-                       /* think about the damned open footnotes! */ 
-                       while (par->Next() &&
-                              (par->Next()->footnoteflag == LyXParagraph::OPEN_FOOTNOTE
-                               || par->Next()->IsDummy())){
-                               par = par->Next();
-                               if (par->IsDummy()) {
-                                       while (row->par() != par)
-                                               row = row->next();
-                                       RemoveParagraph(row);
-                                       AppendParagraph(bview, row);
-                               }
-                       }
-#endif
                }
-#ifndef NEW_INSETS
-               par = par->LastPhysicalPar()->Next();
-#else
-               par = par->Next();
-#endif
-     
+               par = par->next();
        }
 }
 
@@ -2134,14 +1564,8 @@ void LyXText::InsertInset(BufferView * bview, Inset * inset)
        if (!cursor.par()->InsertInsetAllowed(inset))
                return;
        SetUndo(bview->buffer(), Undo::INSERT,
-#ifndef NEW_INSETS
-               cursor.par()->ParFromPos(cursor.pos())->previous, 
-               cursor.par()->ParFromPos(cursor.pos())->next
-#else
-               cursor.par()->previous, 
-               cursor.par()->next
-#endif
-               );
+               cursor.par()->previous(),
+               cursor.par()->next());
        cursor.par()->InsertInset(cursor.pos(), inset);
        InsertChar(bview, LyXParagraph::META_INSET);  /* just to rebreak and refresh correctly.
                                      * The character will not be inserted a
@@ -2189,64 +1613,29 @@ void LyXText::CutSelection(BufferView * bview, bool doclear)
    
        // OK, we have a selection. This is always between sel_start_cursor
        // and sel_end_cursor
-#ifndef NEW_INSETS
-       // Check whether there are half footnotes in the selection
-       if (sel_start_cursor.par()->footnoteflag != LyXParagraph::NO_FOOTNOTE
-           || sel_end_cursor.par()->footnoteflag != LyXParagraph::NO_FOOTNOTE) {
-       LyXParagraph * tmppar = sel_start_cursor.par();
-               while (tmppar != sel_end_cursor.par()){
-                       if (tmppar->footnoteflag != sel_end_cursor.par()->footnoteflag) {
-                               WriteAlert(_("Impossible operation"),
-                                          _("Don't know what to do with half floats."),
-                                          _("sorry."));
-                               return;
-                       }
-                       tmppar = tmppar->Next();
-               }
-       }
-#endif
 
        // make sure that the depth behind the selection are restored, too
-#ifndef NEW_INSETS
-       LyXParagraph * endpar = sel_end_cursor.par()->LastPhysicalPar()->Next();
-#else
-       LyXParagraph * endpar = sel_end_cursor.par()->Next();
-#endif
+       LyXParagraph * endpar = sel_end_cursor.par()->next();
        LyXParagraph * undoendpar = endpar;
     
        if (endpar && endpar->GetDepth()) {
                while (endpar && endpar->GetDepth()) {
-#ifndef NEW_INSETS
-                       endpar = endpar->LastPhysicalPar()->Next();
-#else
-                       endpar = endpar->Next();
-#endif
+                       endpar = endpar->next();
                        undoendpar = endpar;
                }
        } else if (endpar) {
-               endpar = endpar->Next(); // because of parindents etc.
+               endpar = endpar->next(); // because of parindents etc.
        }
     
        SetUndo(bview->buffer(), Undo::DELETE,
-#ifndef NEW_INSETS
-               sel_start_cursor
-               .par()->ParFromPos(sel_start_cursor.pos())->previous,
-#else
-               sel_start_cursor.par()->previous,
-#endif
+               sel_start_cursor.par()->previous(),
                undoendpar);
     
        CutAndPaste cap;
 
        // there are two cases: cut only within one paragraph or
        // more than one paragraph
-#ifndef NEW_INSETS
-       if (sel_start_cursor.par()->ParFromPos(sel_start_cursor.pos()) 
-           == sel_end_cursor.par()->ParFromPos(sel_end_cursor.pos()))
-#else
-       if (sel_start_cursor.par() == sel_end_cursor.par())
-#endif
-               {
+       if (sel_start_cursor.par() == sel_end_cursor.par()) {
                // only within one paragraph
                endpar = sel_start_cursor.par();
                int pos = sel_end_cursor.pos();
@@ -2266,7 +1655,7 @@ void LyXText::CutSelection(BufferView * bview, bool doclear)
                sel_end_cursor.pos(pos);
                cursor.pos(sel_end_cursor.pos());
        }
-       endpar = endpar->Next();
+       endpar = endpar->next();
 
        // sometimes necessary
        if (doclear)
@@ -2274,7 +1663,7 @@ void LyXText::CutSelection(BufferView * bview, bool doclear)
 
        RedoParagraphs(bview, sel_start_cursor, endpar);
    
-       ClearSelection();
+       ClearSelection(bview);
        cursor = sel_start_cursor;
        SetCursor(bview, cursor.par(), cursor.pos());
        sel_cursor = cursor;
@@ -2301,27 +1690,8 @@ void LyXText::CopySelection(BufferView * bview)
        // ok we have a selection. This is always between sel_start_cursor
        // and sel_end cursor
 
-#ifndef NEW_INSETS
-       /* check wether there are half footnotes in the selection */
-       if (sel_start_cursor.par()->footnoteflag != LyXParagraph::NO_FOOTNOTE
-           || sel_end_cursor.par()->footnoteflag != LyXParagraph::NO_FOOTNOTE) {
-               LyXParagraph * tmppar = sel_start_cursor.par();
-               while (tmppar != sel_end_cursor.par()) {
-                       if (tmppar->footnoteflag !=
-                           sel_end_cursor.par()->footnoteflag) {
-                               WriteAlert(_("Impossible operation"),
-                                          _("Don't know what to do"
-                                            " with half floats."),
-                                          _("sorry."));
-                               return;
-                       }
-                       tmppar = tmppar->Next();
-               }
-       }
-#endif
-   
        // copy behind a space if there is one
-       while (sel_start_cursor.par()->Last() > sel_start_cursor.pos()
+       while (sel_start_cursor.par()->size() > sel_start_cursor.pos()
               && sel_start_cursor.par()->IsLineSeparator(sel_start_cursor.pos())
               && (sel_start_cursor.par() != sel_end_cursor.par()
                   || sel_start_cursor.pos() < sel_end_cursor.pos()))
@@ -2340,33 +1710,28 @@ void LyXText::PasteSelection(BufferView * bview)
        CutAndPaste cap;
 
        // this does not make sense, if there is nothing to paste
-       if (!cap.checkPastePossible(cursor.par(), cursor.pos()))
+       if (!cap.checkPastePossible(cursor.par()))
                return;
 
        SetUndo(bview->buffer(), Undo::INSERT,
-#ifndef NEW_INSETS
-               cursor.par()->ParFromPos(cursor.pos())->previous, 
-               cursor.par()->ParFromPos(cursor.pos())->next
-#else
-               cursor.par()->previous, 
-               cursor.par()->next
-#endif
-               ); 
+               cursor.par()->previous(),
+               cursor.par()->next()); 
 
        LyXParagraph * endpar;
        LyXParagraph * actpar = cursor.par();
 
        int pos = cursor.pos();
-       cap.pasteSelection(&actpar, &endpar, pos, bview->buffer()->params.textclass);
+       cap.pasteSelection(&actpar, &endpar, pos,
+                          bview->buffer()->params.textclass);
     
        RedoParagraphs(bview, cursor, endpar);
        
        SetCursor(bview, cursor.par(), cursor.pos());
-       ClearSelection();
+       ClearSelection(bview);
    
        sel_cursor = cursor;
        SetCursor(bview, actpar, pos);
-       SetSelection();
+       SetSelection(bview);
        UpdateCounters(bview, cursor.row());
 }
 
@@ -2378,33 +1743,13 @@ LyXParagraph * LyXText::FirstParagraph() const
 }
 
 
-// returns true if the specified string is at the specified position
-bool LyXText::IsStringInText(LyXParagraph * par,
-                            LyXParagraph::size_type pos,
-                            string const & str) const
-{
-       if (!par)
-               return false;
-
-       LyXParagraph::size_type i = 0;
-       while (pos + i < par->Last()
-              && string::size_type(i) < str.length()
-              && str[i] == par->GetChar(pos + i)) {
-               ++i;
-       }
-       if (str.length() == string::size_type(i))
-               return true;
-       return false;
-}
-
-
 // sets the selection over the number of characters of string, no check!!
 void LyXText::SetSelectionOverString(BufferView * bview, string const & str)
 {
        sel_cursor = cursor;
        for (int i = 0; str[i]; ++i)
                CursorRight(bview);
-       SetSelection();
+       SetSelection(bview);
 }
 
 
@@ -2439,62 +1784,13 @@ void LyXText::ReplaceSelectionWithString(BufferView * bview,
 }
 
 
-// if the string can be found: return true and set the cursor to
-// the new position
-bool LyXText::SearchForward(BufferView * bview, string const & str) const
-{
-       LyXParagraph * par = cursor.par();
-       LyXParagraph::size_type pos = cursor.pos();
-       while (par && !IsStringInText(par, pos, str)) {
-               if (pos < par->Last() - 1)
-                       ++pos;
-               else {
-                       pos = 0;
-                       par = par->Next();
-               }
-       }
-       if (par) {
-               SetCursor(bview, par, pos);
-               return true;
-       }
-       else
-               return false;
-}
-
-
-bool LyXText::SearchBackward(BufferView * bview, string const & str) const
-{
-       LyXParagraph * par = cursor.par();
-       int pos = cursor.pos();
-
-       do {
-               if (pos > 0)
-                       --pos;
-               else {
-                       // We skip empty paragraphs (Asger)
-                       do {
-                               par = par->Previous();
-                               if (par)
-                                       pos = par->Last() - 1;
-                       } while (par && pos < 0);
-               }
-       } while (par && !IsStringInText(par, pos, str));
-  
-       if (par) {
-               SetCursor(bview, par, pos);
-               return true;
-       } else
-               return false;
-}
-
-
 // needed to insert the selection
 void LyXText::InsertStringA(BufferView * bview, string const & str)
 {
        LyXParagraph * par = cursor.par();
        LyXParagraph::size_type pos = cursor.pos();
        LyXParagraph::size_type a = 0;
-       LyXParagraph * endpar = cursor.par()->Next();
+       LyXParagraph * endpar = cursor.par()->next();
        
        SetCursorParUndo(bview->buffer());
        
@@ -2502,7 +1798,7 @@ void LyXText::InsertStringA(BufferView * bview, string const & str)
                textclasslist.Style(bview->buffer()->params.textclass, 
                                    cursor.par()->GetLayout()).isEnvironment();
        // only to be sure, should not be neccessary
-       ClearSelection();
+       ClearSelection(bview);
        
        // insert the string, don't insert doublespace
        string::size_type i = 0;
@@ -2555,7 +1851,7 @@ void LyXText::InsertStringA(BufferView * bview, string const & str)
                                ++pos;
                        }
                        par->BreakParagraph(bview->buffer()->params, pos, flag);
-                       par = par->Next();
+                       par = par->next();
                        pos = 0;
                }
                ++i;
@@ -2565,7 +1861,7 @@ void LyXText::InsertStringA(BufferView * bview, string const & str)
        SetCursor(bview, cursor.par(), cursor.pos());
        sel_cursor = cursor;
        SetCursor(bview, par, pos);
-       SetSelection();
+       SetSelection(bview);
 }
 
 
@@ -2611,10 +1907,10 @@ bool LyXText::GotoNextInset(BufferView * bview,
        LyXCursor res = cursor;
        Inset * inset;
        do {
-               if (res.pos() < res.par()->Last() - 1) {
+               if (res.pos() < res.par()->size() - 1) {
                        res.pos(res.pos() + 1);
                } else  {
-                       res.par(res.par()->Next());
+                       res.par(res.par()->next());
                        res.pos(0);
                }
       
@@ -2730,19 +2026,12 @@ bool LyXText::UpdateInset(BufferView * bview, Inset * inset)
   
        LyXParagraph * par = FirstParagraph();
        do {
-#ifndef NEW_INSETS
-               // make sure the paragraph is open
-               if (par->footnoteflag != LyXParagraph::CLOSED_FOOTNOTE){
-#endif
                        pos = par->GetPositionOfInset(inset);
                        if (pos != -1){
                                CheckParagraph(bview, par, pos);
                                return true;
                        }
-#ifndef NEW_INSETS
-               }
-#endif
-               par = par->Next();
+               par = par->next();
        } while (par);
   
        return false;
@@ -2762,33 +2051,6 @@ void LyXText::SetCursor(BufferView * bview, LyXParagraph * par,
 void LyXText::SetCursor(BufferView *bview, LyXCursor & cur, LyXParagraph * par,
                        LyXParagraph::size_type pos, bool boundary) const
 {
-#ifndef NEW_INSETS
-       // correct the cursor position if impossible
-       if (pos > par->Last()){
-               LyXParagraph * tmppar = par->ParFromPos(pos);
-               pos = par->PositionInParFromPos(pos);
-               par = tmppar;
-       }
-       if (par->IsDummy() && par->previous &&
-           par->previous->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE) {
-               while (par->previous &&
-                      ((par->previous->IsDummy() &&
-                        (par->previous->previous->footnoteflag ==
-                         LyXParagraph::CLOSED_FOOTNOTE)) ||
-                       (par->previous->footnoteflag ==
-                        LyXParagraph::CLOSED_FOOTNOTE))) {
-                       par = par->previous ;
-                       if (par->IsDummy() &&
-                           (par->previous->footnoteflag ==
-                            LyXParagraph::CLOSED_FOOTNOTE))
-                               pos += par->size() + 1;
-               }
-               if (par->previous) {
-                       par = par->previous;
-               }
-               pos += par->size() + 1;
-       }
-#endif
        cur.par(par);
        cur.pos(pos);
        cur.boundary(boundary);
@@ -2886,14 +2148,14 @@ void LyXText::SetCurrentFont(BufferView * bview) const
                --pos;
 
        if (pos > 0) {
-               if (pos == cursor.par()->Last())
+               if (pos == cursor.par()->size())
                        --pos;
                else if (cursor.par()->IsSeparator(pos)) {
                        if (pos > cursor.row()->pos() &&
                            bidi_level(pos) % 2 == 
                            bidi_level(pos - 1) % 2)
                                --pos;
-                       else if (pos + 1 < cursor.par()->Last())
+                       else if (pos + 1 < cursor.par()->size())
                                ++pos;
                }
        }
@@ -2902,13 +2164,15 @@ void LyXText::SetCurrentFont(BufferView * bview) const
                cursor.par()->GetFontSettings(bview->buffer()->params, pos);
        real_current_font = GetFont(bview->buffer(), cursor.par(), pos);
 
-       if (cursor.pos() == cursor.par()->Last() &&
+       if (cursor.pos() == cursor.par()->size() &&
            IsBoundary(bview->buffer(), cursor.par(), cursor.pos()) &&
            !cursor.boundary()) {
                Language const * lang =
                        cursor.par()->getParLanguage(bview->buffer()->params);
                current_font.setLanguage(lang);
+               current_font.setNumber(LyXFont::OFF);
                real_current_font.setLanguage(lang);
+               real_current_font.setNumber(LyXFont::OFF);
        }
 }
 
@@ -2960,9 +2224,9 @@ void LyXText::CursorLeft(BufferView * bview, bool internal) const
                if (!internal && !boundary &&
                    IsBoundary(bview->buffer(), cursor.par(), cursor.pos() + 1))
                        SetCursor(bview, cursor.par(), cursor.pos() + 1, true, true);
-       } else if (cursor.par()->Previous()) { // steps into the above paragraph.
-               LyXParagraph * par = cursor.par()->Previous();
-               SetCursor(bview, par, par->Last());
+       } else if (cursor.par()->previous()) { // steps into the above paragraph.
+               LyXParagraph * par = cursor.par()->previous();
+               SetCursor(bview, par, par->size());
        }
 }
 
@@ -2972,13 +2236,13 @@ void LyXText::CursorRight(BufferView * bview, bool internal) const
        if (!internal && cursor.boundary() &&
            !cursor.par()->IsNewline(cursor.pos()))
                SetCursor(bview, cursor.par(), cursor.pos(), true, false);
-       else if (cursor.pos() < cursor.par()->Last()) {
+       else if (cursor.pos() < cursor.par()->size()) {
                SetCursor(bview, cursor.par(), cursor.pos() + 1, true, false);
                if (!internal &&
                    IsBoundary(bview->buffer(), cursor.par(), cursor.pos()))
                        SetCursor(bview, cursor.par(), cursor.pos(), true, true);
-       } else if (cursor.par()->Next())
-               SetCursor(bview, cursor.par()->Next(), 0);
+       } else if (cursor.par()->next())
+               SetCursor(bview, cursor.par()->next(), 0);
 }
 
 
@@ -3002,18 +2266,18 @@ void LyXText::CursorUpParagraph(BufferView * bview) const
        if (cursor.pos() > 0) {
                SetCursor(bview, cursor.par(), 0);
        }
-       else if (cursor.par()->Previous()) {
-               SetCursor(bview, cursor.par()->Previous(), 0);
+       else if (cursor.par()->previous()) {
+               SetCursor(bview, cursor.par()->previous(), 0);
        }
 }
 
 
 void LyXText::CursorDownParagraph(BufferView * bview) const
 {
-       if (cursor.par()->Next()) {
-               SetCursor(bview, cursor.par()->Next(), 0);
+       if (cursor.par()->next()) {
+               SetCursor(bview, cursor.par()->next(), 0);
        } else {
-               SetCursor(bview, cursor.par(), cursor.par()->Last());
+               SetCursor(bview, cursor.par(), cursor.par()->size());
        }
 }
 
@@ -3059,11 +2323,11 @@ void LyXText::DeleteEmptyParagraphMechanism(BufferView * bview,
                // Only if the cursor has really moved
                
                if (old_cursor.pos() > 0
-                   && old_cursor.pos() < old_cursor.par()->Last()
+                   && old_cursor.pos() < old_cursor.par()->size()
                    && old_cursor.par()->IsLineSeparator(old_cursor.pos())
                    && old_cursor.par()->IsLineSeparator(old_cursor.pos() - 1)) {
                        old_cursor.par()->Erase(old_cursor.pos() - 1);
-                       RedoParagraphs(bview, old_cursor, old_cursor.par()->Next());
+                       RedoParagraphs(bview, old_cursor, old_cursor.par()->next());
                        // correct cursor
                        if (old_cursor.par() == cursor.par() &&
                            cursor.pos() > old_cursor.pos()) {
@@ -3084,31 +2348,12 @@ void LyXText::DeleteEmptyParagraphMechanism(BufferView * bview,
        LyXCursor tmpcursor;
 
        if (old_cursor.par() != cursor.par()) {
-               if ((old_cursor.par()->Last() == 0
-                     || (old_cursor.par()->Last() == 1
-                         && old_cursor.par()->IsLineSeparator(0)))
-#ifndef NEW_INSETS
-                    && old_cursor.par()->FirstPhysicalPar()
-                    == old_cursor.par()->LastPhysicalPar()
-#endif
-                       ) {
+               if ((old_cursor.par()->size() == 0
+                     || (old_cursor.par()->size() == 1
+                         && old_cursor.par()->IsLineSeparator(0)))) {
                        // ok, we will delete anything
                        
                        // make sure that you do not delete any environments
-#ifndef NEW_INSETS
-                       if ((
-                               old_cursor.par()->footnoteflag != LyXParagraph::OPEN_FOOTNOTE &&
-                            !(old_cursor.row()->previous() 
-                              && old_cursor.row()->previous()->par()->footnoteflag == LyXParagraph::OPEN_FOOTNOTE)
-                            && !(old_cursor.row()->next() 
-                                 && old_cursor.row()->next()->par()->footnoteflag == LyXParagraph::OPEN_FOOTNOTE))
-                           || (old_cursor.par()->footnoteflag == LyXParagraph::OPEN_FOOTNOTE
-                               && ((old_cursor.row()->previous() 
-                                    && old_cursor.row()->previous()->par()->footnoteflag == LyXParagraph::OPEN_FOOTNOTE)
-                                   || (old_cursor.row()->next()
-                                       && old_cursor.row()->next()->par()->footnoteflag == LyXParagraph::OPEN_FOOTNOTE))
-                                   )) {
-#endif
                                status = LyXText::NEED_MORE_REFRESH;
                                deleted = true;
                                
@@ -3117,25 +2362,21 @@ void LyXText::DeleteEmptyParagraphMechanism(BufferView * bview,
                                        refresh_y = old_cursor.y() - old_cursor.row()->baseline() - refresh_row->height();
                                        tmpcursor = cursor;
                                        cursor = old_cursor; // that undo can restore the right cursor position
-                                       LyXParagraph * endpar = old_cursor.par()->next;
+                                       LyXParagraph * endpar = old_cursor.par()->next();
                                        if (endpar && endpar->GetDepth()) {
                                                while (endpar && endpar->GetDepth()) {
-#ifndef NEW_INSETS
-                                                       endpar = endpar->LastPhysicalPar()->Next();
-#else
-                                                       endpar = endpar->Next();
-#endif
+                                                       endpar = endpar->next();
                                                }
                                        }
                                        SetUndo(bview->buffer(), Undo::DELETE,
-                                               old_cursor.par()->previous,
+                                               old_cursor.par()->previous(),
                                                endpar);
                                        cursor = tmpcursor;
 
                                        // delete old row
                                        RemoveRow(old_cursor.row());
                                        if (OwnerParagraph() == old_cursor.par()) {
-                                               OwnerParagraph(OwnerParagraph()->next);
+                                               OwnerParagraph(OwnerParagraph()->next());
                                        }
                                        // delete old par
                                        delete old_cursor.par();
@@ -3156,18 +2397,14 @@ void LyXText::DeleteEmptyParagraphMechanism(BufferView * bview,
                                        
                                        tmpcursor = cursor;
                                        cursor = old_cursor; // that undo can restore the right cursor position
-                                       LyXParagraph * endpar = old_cursor.par()->next;
+                                       LyXParagraph * endpar = old_cursor.par()->next();
                                        if (endpar && endpar->GetDepth()) {
                                                while (endpar && endpar->GetDepth()) {
-#ifndef NEW_INSETS
-                                                       endpar = endpar->LastPhysicalPar()->Next();
-#else
-                                                       endpar = endpar->Next();
-#endif
+                                                       endpar = endpar->next();
                                                }
                                        }
                                        SetUndo(bview->buffer(), Undo::DELETE,
-                                               old_cursor.par()->previous,
+                                               old_cursor.par()->previous(),
                                                endpar);
                                        cursor = tmpcursor;
 
@@ -3175,8 +2412,9 @@ void LyXText::DeleteEmptyParagraphMechanism(BufferView * bview,
                                        RemoveRow(old_cursor.row());
                                        // delete old par
                                        if (OwnerParagraph() == old_cursor.par()) {
-                                               OwnerParagraph(OwnerParagraph()->next);
+                                               OwnerParagraph(OwnerParagraph()->next());
                                        }
+
                                        delete old_cursor.par();
                                        
                                        /* Breakagain the next par. Needed
@@ -3200,13 +2438,10 @@ void LyXText::DeleteEmptyParagraphMechanism(BufferView * bview,
                                        // correct selection
                                        sel_cursor = cursor;
                                }
-#ifndef NEW_INSETS
-                       }
-#endif
                }
                if (!deleted) {
                        if (old_cursor.par()->StripLeadingSpaces(bview->buffer()->params.textclass)) {
-                               RedoParagraphs(bview, old_cursor, old_cursor.par()->Next());
+                               RedoParagraphs(bview, old_cursor, old_cursor.par()->next());
                                // correct cursor y
                                SetCursorIntern(bview, cursor.par(), cursor.pos());
                                sel_cursor = cursor;
@@ -3220,7 +2455,7 @@ LyXParagraph * LyXText::GetParFromID(int id)
 {
        LyXParagraph * result = FirstParagraph();
        while (result && result->id() != id)
-               result = result->next;
+               result = result->next();
        return result;
 }
 
@@ -3288,27 +2523,28 @@ bool LyXText::TextHandleUndo(BufferView * bview, Undo * undo)
                LyXParagraph * tmppar3 = undo->par;
                undo->par = 0; // otherwise the undo destructor would delete the paragraph
                LyXParagraph * tmppar4 = tmppar3;
-               if (tmppar4){
-                       while (tmppar4->next)
-                               tmppar4 = tmppar4->next;
+
+               if (tmppar4) {
+                       while (tmppar4->next())
+                               tmppar4 = tmppar4->next();
                } // get last undo par
     
                // now remove the old text if there is any
-               if (before != behind || (!behind && !before)){
+               if (before != behind || (!behind && !before)) {
                        if (before)
-                               tmppar5 = before->next;
+                               tmppar5 = before->next();
                        else
                                tmppar5 = OwnerParagraph();
                        tmppar2 = tmppar3;
-                       while (tmppar5 && tmppar5 != behind){
+                       while (tmppar5 && tmppar5 != behind) {
                                tmppar = tmppar5;
-                               tmppar5 = tmppar5->next;
+                               tmppar5 = tmppar5->next();
                                // a memory optimization for edit: Only layout information
                                // is stored in the undo. So restore the text informations.
                                if (undo->kind == Undo::EDIT) {
                                        tmppar2->setContentsFromPar(tmppar);
                                        tmppar->clearContents();
-                                       tmppar2 = tmppar2->next;
+                                       tmppar2 = tmppar2->next();
                                }
                        }
                }
@@ -3316,66 +2552,29 @@ bool LyXText::TextHandleUndo(BufferView * bview, Undo * undo)
                // put the new stuff in the list if there is one
                if (tmppar3){
                        if (before)
-                               before->next = tmppar3;
+                               before->next(tmppar3);
                        else
                                OwnerParagraph(tmppar3);
-                       tmppar3->previous = before;
+                       tmppar3->previous(before);
                } else {
                        if (!before)
                                OwnerParagraph(behind);
                }
                if (tmppar4) {
-                       tmppar4->next = behind;
+                       tmppar4->next(behind);
                        if (behind)
-                               behind->previous = tmppar4;
+                               behind->previous(tmppar4);
                }
     
     
                // Set the cursor for redoing
                if (before) {
-#ifndef NEW_INSETS
-                       SetCursorIntern(bview, before->FirstSelfrowPar(), 0);
-#else
                        SetCursorIntern(bview, before, 0);
-#endif
-#ifndef NEW_INSETS
-                       // check wether before points to a closed float and open it if necessary
-                       if (before && before->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE
-                           && before->next && before->next->footnoteflag != LyXParagraph::NO_FOOTNOTE){
-                               tmppar4 = before;
-                               while (tmppar4->previous && 
-                                      tmppar4->previous->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE)
-                                       tmppar4 = tmppar4->previous;
-                               while (tmppar4 && tmppar4->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE){
-                                       tmppar4->footnoteflag = LyXParagraph::OPEN_FOOTNOTE;
-                                       tmppar4 = tmppar4->next;
-                               }
-                       }
-#endif
                }
 
-#ifndef NEW_INSETS
-               // open a cosed footnote at the end if necessary
-               if (behind && behind->previous && 
-                   behind->previous->footnoteflag != LyXParagraph::NO_FOOTNOTE &&
-                   behind->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE){
-                       while (behind && behind->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE){
-                               behind->footnoteflag = LyXParagraph::OPEN_FOOTNOTE;
-                               behind = behind->next;
-                       }
-               }
-#endif
-    
                // calculate the endpar for redoing the paragraphs.
                if (behind) {
-#ifndef NEW_INSETS
-                       if (behind->footnoteflag != LyXParagraph::CLOSED_FOOTNOTE)
-                               endpar = behind->LastPhysicalPar()->Next();
-                       else
-                               endpar = behind->NextAfterFootnote()->LastPhysicalPar()->Next();
-#else
-                               endpar = behind->Next();
-#endif
+                               endpar = behind->next();
                } else
                        endpar = behind;
     
@@ -3473,31 +2672,27 @@ Undo * LyXText::CreateUndo(Buffer * buf, Undo::undo_kind kind,
        }
        // create a new Undo
        LyXParagraph * undopar;
-       LyXParagraph * tmppar;
-       LyXParagraph * tmppar2;
 
        LyXParagraph * start = 0;
        LyXParagraph * end = 0;
-  
+
        if (before)
-               start = before->next;
+               start = const_cast<LyXParagraph*>(before->next());
        else
                start = FirstParagraph();
        if (behind)
-               end = behind->previous;
+               end = const_cast<LyXParagraph*>(behind->previous());
        else {
                end = FirstParagraph();
-               while (end->next)
-                       end = end->next;
+               while (end->next())
+                       end = end->next();
        }
-
-       if (start && end && (start != end->next) &&
-           ((before != behind) || (!before && !behind)))
-       {
-               tmppar = start;
-               tmppar2 = tmppar->Clone();
+       if (start && end && (start != end->next()) &&
+           ((before != behind) || (!before && !behind))) {
+               LyXParagraph * tmppar = start;
+               LyXParagraph * tmppar2 = new LyXParagraph(*tmppar);
                tmppar2->id(tmppar->id());
-
+               
                // a memory optimization: Just store the layout information
                // when only edit
                if (kind == Undo::EDIT){
@@ -3507,31 +2702,26 @@ Undo * LyXText::CreateUndo(Buffer * buf, Undo::undo_kind kind,
 
                undopar = tmppar2;
   
-               while (tmppar != end && tmppar->next) {
-                       tmppar = tmppar->next;
-                       tmppar2->next = tmppar->Clone();
-                       tmppar2->next->id(tmppar->id());
+               while (tmppar != end && tmppar->next()) {
+                       tmppar = tmppar->next();
+                       tmppar2->next(new LyXParagraph(*tmppar));
+                       tmppar2->next()->id(tmppar->id());
                        // a memory optimization: Just store the layout
                        // information when only edit
                        if (kind == Undo::EDIT){
                                //tmppar2->next->text.clear();
                                tmppar2->clearContents();
                        }
-                       tmppar2->next->previous = tmppar2;
-                       tmppar2 = tmppar2->next;
+                       tmppar2->next()->previous(tmppar2);
+                       tmppar2 = tmppar2->next();
                }
-               tmppar2->next = 0;
+               tmppar2->next(0);
        } else
                undopar = 0; // nothing to replace (undo of delete maybe)
 
-#ifndef NEW_INSETS
-       int cursor_par = cursor.par()->ParFromPos(cursor.pos())->id();
-       int cursor_pos =  cursor.par()->PositionInParFromPos(cursor.pos());
-#else
        int cursor_par = cursor.par()->id();
        int cursor_pos =  cursor.pos();
-#endif
-
+       
        Undo * undo = new Undo(kind, 
                               before_number, behind_number,  
                               cursor_par, cursor_pos, 
@@ -3547,31 +2737,22 @@ void LyXText::SetCursorParUndo(Buffer * buf)
        if (inset_owner)
                return;
        SetUndo(buf, Undo::FINISH,
-#ifndef NEW_INSETS
-               cursor.par()->ParFromPos(cursor.pos())->previous, 
-               cursor.par()->ParFromPos(cursor.pos())->next
-#else
-               cursor.par()->previous, 
-               cursor.par()->next
-#endif
-               ); 
+               cursor.par()->previous(),
+               cursor.par()->next()); 
 }
 
 
 void LyXText::toggleAppendix(BufferView * bview)
 {
-#ifndef NEW_INSETS
-       LyXParagraph * par = cursor.par()->FirstPhysicalPar();
-#else
        LyXParagraph * par = cursor.par();
-#endif
-       bool start = !par->start_of_appendix;
+       bool start = !par->params.startOfAppendix();
 
        // ensure that we have only one start_of_appendix in this document
        LyXParagraph * tmp = FirstParagraph();
-       for (; tmp; tmp = tmp->next)
-               tmp->start_of_appendix = 0;
-       par->start_of_appendix = start;
+       for (; tmp; tmp = tmp->next())
+               tmp->params.startOfAppendix(false);
+
+       par->params.startOfAppendix(start);
 
        // we can set the refreshing parameters now
        status = LyXText::NEED_MORE_REFRESH;