]> git.lyx.org Git - lyx.git/blobdiff - src/text.C
another pesky \#warning snuck in
[lyx.git] / src / text.C
index dd45c0c0b7fb34336bb02bcd787699bc84510ad3..0997ed241e06991a9c2f0843ee07a61b7de2a2ce 100644 (file)
@@ -13,9 +13,9 @@
 #include <cctype>
 #include <algorithm>
 
+#include "lyxtext.h"
 #include "layout.h"
 #include "lyxparagraph.h"
-#include "lyxtext.h"
 #include "support/textutils.h"
 #include "insets/insetbib.h"
 #include "insets/insettext.h"
 #include "gettext.h"
 #include "bufferparams.h"
 #include "buffer.h"
-#include "minibuffer.h"
 #include "debug.h"
 #include "lyxrc.h"
 #include "LyXView.h"
-#include "lyxrow.h"
 #include "Painter.h"
 #include "tracer.h"
 #include "font.h"
 #include "encoding.h"
 #include "lyxscreen.h"
 #include "bufferview_funcs.h"
+#include "language.h"
+#include "lyxfunc.h"
 
 using std::max;
 using std::min;
 using std::endl;
 using std::pair;
 
-static const int LYX_PAPER_MARGIN = 20;
+namespace {
+
+int const LYX_PAPER_MARGIN = 20;
+
+} // namespace anon
 
 extern int bibitemMaxWidth(BufferView *, LyXFont const &);
 
@@ -48,12 +52,21 @@ extern int bibitemMaxWidth(BufferView *, LyXFont const &);
 int LyXText::workWidth(BufferView * bview) const
 {
        if (inset_owner) {
-               return inset_owner->textWidth(bview->painter());
+               return inset_owner->textWidth(bview);
        }
        return bview->workWidth();
 }
 
 
+int LyXText::GetRealCursorX(BufferView * bview) const
+{
+       int x = cursor.x();
+       if (the_locking_inset && (the_locking_inset->getLyXText(bview)!=this))
+               x = the_locking_inset->getLyXText(bview)->GetRealCursorX(bview);
+       return x;
+}
+
+
 unsigned char LyXText::TransformChar(unsigned char c, LyXParagraph * par,
                        LyXParagraph::size_type pos) const
 {
@@ -65,7 +78,11 @@ unsigned char LyXText::TransformChar(unsigned char c, LyXParagraph * par,
 
        unsigned char const prev_char = pos > 0 ? par->GetChar(pos-1) : ' ';
        unsigned char next_char = ' ';
+#ifndef NEW_INSETS
        for (LyXParagraph::size_type i = pos+1; i < par->Last(); ++i)
+#else
+       for (LyXParagraph::size_type i = pos+1; i < par->size(); ++i)
+#endif
                if (!Encodings::IsComposeChar_arabic(par->GetChar(i))) {
                        next_char = par->GetChar(i);
                        break;
@@ -120,7 +137,7 @@ int LyXText::SingleWidth(BufferView * bview, LyXParagraph * par,
 int LyXText::SingleWidth(BufferView * bview, LyXParagraph * par,
                         LyXParagraph::size_type pos, char c) const
 {
-       LyXFont font = GetFont(bview->buffer(), par, pos);
+       LyXFont const font = GetFont(bview->buffer(), par, pos);
 
        // The most common case is handled first (Asger)
        if (IsPrintable(c)) {
@@ -196,12 +213,21 @@ int LyXText::SingleWidth(BufferView * bview, LyXParagraph * par,
 // Returns the paragraph position of the last character in the specified row
 LyXParagraph::size_type LyXText::RowLast(Row const * row) const
 {
+#ifndef NEW_INSETS
        if (row->next() == 0)
                return row->par()->Last() - 1;
        else if (row->next()->par() != row->par()) 
                return row->par()->Last() - 1;
        else 
                return row->next()->pos() - 1;
+#else
+       if (row->next() == 0)
+               return row->par()->size() - 1;
+       else if (row->next()->par() != row->par()) 
+               return row->par()->size() - 1;
+       else 
+               return row->next()->pos() - 1;
+#endif
 }
 
 
@@ -344,16 +370,17 @@ void LyXText::ComputeBidiTables(Buffer const * buf, Row * row) const
 bool LyXText::IsBoundary(Buffer const * buf, LyXParagraph * par,
                         LyXParagraph::size_type pos) const
 {
-       if (!lyxrc.rtl_support)
-               return false;    // This is just for speedup
+       if (!lyxrc.rtl_support || pos == 0)
+               return false;
 
        if (!bidi_InRange(pos - 1)) {
-               lyxerr << "LyXText::IsBoundary This shouldn't happen\n";
+               /// This can happen if pos is the first char of a row.
+               /// Returning false in this case is incorrect!
                return false;
        }
 
        bool const rtl = bidi_level(pos - 1) % 2;
-       bool rtl2 = bidi_InRange(pos)
+       bool const rtl2 = bidi_InRange(pos)
                ? bidi_level(pos) % 2
                : par->isRightToLeftPar(buf->params);
        return rtl != rtl2;
@@ -368,7 +395,7 @@ bool LyXText::IsBoundary(Buffer const * buf, LyXParagraph * par,
                return false;    // This is just for speedup
 
        bool const rtl = font.isVisibleRightToLeft();
-       bool rtl2 = bidi_InRange(pos)
+       bool const rtl2 = bidi_InRange(pos)
                ? bidi_level(pos) % 2
                : par->isRightToLeftPar(buf->params);
        return rtl != rtl2;
@@ -392,7 +419,8 @@ void LyXText::draw(BufferView * bview, Row const * row,
                int const wid = lyxfont::width('n', font);
                int const asc = lyxfont::maxAscent(font);
                int const y = offset + row->baseline();
-               int xp[3], yp[3];
+               int xp[3];
+               int yp[3];
                
                if (bidi_level(pos) % 2 == 0) {
                        xp[0] = int(x + wid * 0.375);
@@ -504,10 +532,12 @@ void LyXText::draw(BufferView * bview, Row const * row,
 //                     tmpinset->update(bview, font, false);
                        tmpinset->draw(bview, font, offset+row->baseline(), x,
                                       cleared);
+#ifdef SEEMS_TO_BE_NOT_NEEDED
                        if (status == CHANGED_IN_DRAW) {
                                UpdateInset(bview, tmpinset);
                                status = CHANGED_IN_DRAW;
                        }
+#endif
                }
                ++vpos;
 
@@ -676,9 +706,9 @@ int LyXText::LeftMargin(BufferView * bview, Row const * row) const
                if (!row->par()->GetLayout()) {
                        // find the previous same level paragraph
 #ifndef NEW_INSETS
-                       if (row->par()->FirstPhysicalPar()->Previous()) {
+                       if (row->par()->FirstPhysicalPar()->previous()) {
 #else
-                       if (row->par()->Previous()) {
+                       if (row->par()->previous()) {
 #endif
                                LyXParagraph * newpar = row->par()
                                        ->DepthHook(row->par()->GetDepth());
@@ -707,7 +737,11 @@ int LyXText::LeftMargin(BufferView * bview, Row const * row) const
                               newpar->GetLayout()).isEnvironment()) {
                        Row dummyrow;
                        dummyrow.par(newpar);
+#ifndef NEW_INSETS
                        dummyrow.pos(newpar->Last());
+#else
+                       dummyrow.pos(newpar->size());
+#endif
                        x = LeftMargin(bview, &dummyrow);
                } else {
                        // this is no longer an error, because this function
@@ -715,17 +749,17 @@ int LyXText::LeftMargin(BufferView * bview, Row const * row) const
                        // a layout. Since there is always a redo,
                        // LeftMargin() is always called
 #ifndef NEW_INSETS
-                       row->par()->FirstPhysicalPar()->depth = 0;
+                       row->par()->FirstPhysicalPar()->params.depth(0);
 #else
-                       row->par()->depth = 0;
+                       row->par()->params.depth(0);
 #endif
                }
                
                if (newpar && !row->par()->GetLayout()) {
 #ifndef NEW_INSETS
-                       if (newpar->FirstPhysicalPar()->noindent)
+                       if (newpar->FirstPhysicalPar()->params.noindent())
 #else
-                       if (newpar->noindent)
+                       if (newpar->params.noindent())
 #endif
                                parindent.erase();
                        else
@@ -824,13 +858,14 @@ int LyXText::LeftMargin(BufferView * bview, Row const * row) const
        }
        break;
        }
+#ifndef NO_PEXTRA
        if ((workWidth(bview) > 0) &&
-           (row->par()->pextra_type == LyXParagraph::PEXTRA_INDENT)) {
-               if (!row->par()->pextra_widthp.empty()) {
+           (row->par()->params.pextraType() == LyXParagraph::PEXTRA_INDENT)) {
+               if (!row->par()->params.pextraWidthp().empty()) {
                        x += workWidth(bview) *
-                               lyx::atoi(row->par()->pextra_widthp) / 100;
-               } else if (!row->par()->pextra_width.empty()) {
-                       int xx = VSpace(row->par()->pextra_width).inPixels(bview);
+                               lyx::atoi(row->par()->params.pextraWidthp()) / 100;
+               } else if (!row->par()->params.pextraWidth().empty()) {
+                       int xx = VSpace(row->par()->params.pextraWidth()).inPixels(bview);
                        if (xx > workWidth(bview))
                                xx = workWidth(bview) * 80 / 100;
                        x += xx;
@@ -839,18 +874,19 @@ int LyXText::LeftMargin(BufferView * bview, Row const * row) const
                        x += lyxfont::width("XXXXXX", font);
                }
        }
+#endif
        
        int align; // wrong type
 #ifndef NEW_INSETS
-       if (row->par()->FirstPhysicalPar()->align == LYX_ALIGN_LAYOUT)
+       if (row->par()->FirstPhysicalPar()->params.align() == LYX_ALIGN_LAYOUT)
                align = layout.align;
        else
-               align = row->par()->FirstPhysicalPar()->align;
+               align = row->par()->FirstPhysicalPar()->params.align();
 #else
-       if (row->par()->align == LYX_ALIGN_LAYOUT)
+       if (row->par()->params.align() == LYX_ALIGN_LAYOUT)
                align = layout.align;
        else
-               align = row->par()->align;
+               align = row->par()->params.align();
 #endif 
        // set the correct parindent
        if (row->pos() == 0) {
@@ -864,7 +900,7 @@ int LyXText::LeftMargin(BufferView * bview, Row const * row) const
                    && row->par() == row->par()->FirstPhysicalPar()
 #endif
                    && align == LYX_ALIGN_BLOCK
-                   && !row->par()->noindent
+                   && !row->par()->params.noindent()
                    && (row->par()->layout ||
                        bview->buffer()->params.paragraph_separation ==
                        BufferParams::PARSEP_INDENT))
@@ -914,14 +950,14 @@ int LyXText::RightMargin(Buffer const * buf, Row const * row) const
                
 #ifndef NEW_INSETS
                do {
-                       newpar = newpar->FirstPhysicalPar()->Previous();
+                       newpar = newpar->FirstPhysicalPar()->previous();
                        if (newpar) 
                                newpar = newpar->FirstPhysicalPar();
                } while (newpar && newpar->GetDepth() >= row->par()->GetDepth()
                         && newpar->footnoteflag == row->par()->footnoteflag);
 #else
                do {
-                       newpar = newpar->Previous();
+                       newpar = newpar->previous();
                } while (newpar
                         && newpar->GetDepth() >= row->par()->GetDepth());
 #endif
@@ -946,9 +982,9 @@ int LyXText::RightMargin(Buffer const * buf, Row const * row) const
                        // a layout. Since there is always a redo,
                        // LeftMargin() is always called
 #ifndef NEW_INSETS
-                       row->par()->FirstPhysicalPar()->depth = 0;
+                       row->par()->FirstPhysicalPar()->params.depth(0);
 #else
-                       row->par()->depth = 0;
+                       row->par()->params.depth(0);
 #endif
                }
        }
@@ -969,7 +1005,11 @@ int LyXText::LabelEnd(BufferView * bview, Row const * row) const
            == MARGIN_MANUAL) {
                Row tmprow;
                tmprow = *row;
+#ifndef NEW_INSETS
                tmprow.pos(row->par()->Last());
+#else
+               tmprow.pos(row->par()->size());
+#endif
                return LeftMargin(bview, &tmprow);  /* just the beginning 
                                                of the main body */
        } else
@@ -986,7 +1026,11 @@ LyXText::NextBreakPoint(BufferView * bview, Row const * row, int width) const
        LyXParagraph * par = row->par();
 
        if (width < 0)
+#ifndef NEW_INSETS
                return par->Last();
+#else
+               return par->size();
+#endif
 
        LyXParagraph::size_type const pos = row->pos();
 
@@ -1004,10 +1048,18 @@ LyXText::NextBreakPoint(BufferView * bview, Row const * row, int width) const
 
        if (layout.margintype == MARGIN_RIGHT_ADDRESS_BOX) {
                /* special code for right address boxes, only newlines count */
+#ifndef NEW_INSETS
                while (i < par->Last()) {
+#else
+               while (i < par->size()) {
+#endif
                        if (par->IsNewline(i)) {
                                last_separator = i;
+#ifndef NEW_INSETS
                                i = par->Last() - 1; // this means break
+#else
+                               i = par->size() - 1; // this means break
+#endif
                                //x = width;
                        } else if (par->GetChar(i) == LyXParagraph::META_INSET &&
                                   par->GetInset(i) && par->GetInset(i)->display()){
@@ -1017,8 +1069,13 @@ LyXText::NextBreakPoint(BufferView * bview, Row const * row, int width) const
                }
        } else {
                // Last position is an invariant
+#ifndef NEW_INSETS
                LyXParagraph::size_type const last = 
                        par->Last();
+#else
+               LyXParagraph::size_type const last = 
+                       par->size();
+#endif
                // this is the usual handling
                int x = LeftMargin(bview, row);
                bool doitonetime = true;
@@ -1101,7 +1158,7 @@ LyXText::NextBreakPoint(BufferView * bview, Row const * row, int width) const
 int LyXText::Fill(BufferView * bview, Row * row, int paper_width) const
 {
        if (paper_width < 0)
-               return 0;
+               return 20;
 
        int w;
        // get the pure distance
@@ -1146,6 +1203,8 @@ int LyXText::Fill(BufferView * bview, Row * row, int paper_width) const
        }
        
        int const fill = paper_width - w - RightMargin(bview->buffer(), row);
+       if (fill < 0)
+               return 0;
        return fill;
 }
 
@@ -1176,8 +1235,8 @@ int LyXText::LabelFill(BufferView * bview, Row const * row) const
        }
        
        int fill = 0;
-       if (!row->par()->labelwidthstring.empty()) {
-               fill = max(lyxfont::width(row->par()->labelwidthstring,
+       if (!row->par()->params.labelWidthString().empty()) {
+               fill = max(lyxfont::width(row->par()->params.labelWidthString(),
                                          GetFont(bview->buffer(), row->par(), -2)) - w,
                           0);
        }
@@ -1320,8 +1379,12 @@ void LyXText::SetHeightOfRow(BufferView * bview, Row * row_ptr) const
    
    LyXLayout const & layout = textclasslist.Style(bview->buffer()->params.textclass,
                                                  firstpar->GetLayout());
-   
+
+#ifndef NEW_INSETS
    LyXFont font = GetFont(bview->buffer(), par, par->Last() - 1);
+#else
+   LyXFont font = GetFont(bview->buffer(), par, par->size() - 1);
+#endif
    LyXFont::FONT_SIZE const size = font.size();
    font = GetFont(bview->buffer(), par, -1);
    font.setSize(size);
@@ -1329,8 +1392,8 @@ void LyXText::SetHeightOfRow(BufferView * bview, Row * row_ptr) const
    LyXFont labelfont = GetFont(bview->buffer(), par, -2);
 
    float spacing_val = 1.0;
-   if (!row_ptr->par()->spacing.isDefault()) {
-          spacing_val = row_ptr->par()->spacing.getValue();
+   if (!row_ptr->par()->params.spacing().isDefault()) {
+          spacing_val = row_ptr->par()->params.spacing().getValue();
    } else {
           spacing_val = bview->buffer()->params.spacing.getValue();
    }
@@ -1352,7 +1415,7 @@ void LyXText::SetHeightOfRow(BufferView * bview, Row * row_ptr) const
                   tmpfont = GetFont(bview->buffer(), row_ptr->par(), pos);
                   tmpinset = row_ptr->par()->GetInset(pos);
                   if (tmpinset) {
-                          tmpinset->update(bview, tmpfont);
+//                        tmpinset->update(bview, tmpfont);
                           asc = tmpinset->ascent(bview, tmpfont);
                           desc = tmpinset->descent(bview, tmpfont);
                           maxwidth += tmpinset->width(bview, tmpfont);
@@ -1387,49 +1450,54 @@ void LyXText::SetHeightOfRow(BufferView * bview, Row * row_ptr) const
 
    row_ptr->ascent_of_text(maxasc);
    
-   /* is it a top line? */ 
+   // is it a top line?
    if (!row_ptr->pos() && (row_ptr->par() == firstpar)) {
       
-      /* some parksips VERY EASY IMPLEMENTATION */ 
+          // some parksips VERY EASY IMPLEMENTATION
       if (bview->buffer()->params.paragraph_separation ==
          BufferParams::PARSEP_SKIP) {
         if (layout.isParagraph()
             && firstpar->GetDepth() == 0
-            && firstpar->Previous())
+            && firstpar->previous())
            maxasc += bview->buffer()->params.getDefSkip().inPixels(bview);
-        else if (firstpar->Previous()
+        else if (firstpar->previous()
                  && textclasslist.Style(bview->buffer()->params.textclass,
-                          firstpar->Previous()->GetLayout()).isParagraph()
-                 && firstpar->Previous()->GetDepth() == 0)
+                          firstpar->previous()->GetLayout()).isParagraph()
+                 && firstpar->previous()->GetDepth() == 0)
           // is it right to use defskip here too? (AS)
           maxasc += bview->buffer()->params.getDefSkip().inPixels(bview);
       }
       
-      /* the paper margins */ 
-      if (!row_ptr->par()->previous && bv_owner)
+      // the paper margins
+#ifndef NEW_INSETS
+      if (!row_ptr->par()->previous_ && bv_owner)
         maxasc += LYX_PAPER_MARGIN;
+#else
+      if (!row_ptr->par()->previous() && bv_owner)
+        maxasc += LYX_PAPER_MARGIN;
+#endif
       
-      /* add the vertical spaces, that the user added */
-      if (firstpar->added_space_top.kind() != VSpace::NONE)
-        maxasc += int(firstpar->added_space_top.inPixels(bview));
+      // add the vertical spaces, that the user added
+      if (firstpar->params.spaceTop().kind() != VSpace::NONE)
+        maxasc += int(firstpar->params.spaceTop().inPixels(bview));
       
-      /* do not forget the DTP-lines! 
-       * there height depends on the font of the nearest character */
-      if (firstpar->line_top)
+      // do not forget the DTP-lines!
+      // there height depends on the font of the nearest character
+      if (firstpar->params.lineTop())
         maxasc += 2 * lyxfont::ascent('x', GetFont(bview->buffer(),
                                                    firstpar, 0));
       
-      /* and now the pagebreaks */ 
-      if (firstpar->pagebreak_top)
+      // and now the pagebreaks
+      if (firstpar->params.pagebreakTop())
         maxasc += 3 * DefaultHeight();
       
-      /*  this is special code for the chapter, since the label of this
-       * layout is printed in an extra row */ 
+      // This is special code for the chapter, since the label of this
+      // layout is printed in an extra row
       if (layout.labeltype == LABEL_COUNTER_CHAPTER
          && bview->buffer()->params.secnumdepth >= 0) {
              float spacing_val = 1.0;
-             if (!row_ptr->par()->spacing.isDefault()) {
-                     spacing_val = row_ptr->par()->spacing.getValue();
+             if (!row_ptr->par()->params.spacing().isDefault()) {
+                     spacing_val = row_ptr->par()->params.spacing().getValue();
              } else {
                      spacing_val = bview->buffer()->params.spacing.getValue();
              }
@@ -1442,15 +1510,15 @@ void LyXText::SetHeightOfRow(BufferView * bview, Row * row_ptr) const
                            spacing_val);
       }
       
-      /* special code for the top label */ 
+      // special code for the top label
       if ((layout.labeltype == LABEL_TOP_ENVIRONMENT
           || layout.labeltype == LABEL_BIBLIO
           || layout.labeltype == LABEL_CENTERED_TOP_ENVIRONMENT)
          && row_ptr->par()->IsFirstInSequence()
          && !row_ptr->par()->GetLabelstring().empty()) {
              float spacing_val = 1.0;
-             if (!row_ptr->par()->spacing.isDefault()) {
-                     spacing_val = row_ptr->par()->spacing.getValue();
+             if (!row_ptr->par()->params.spacing().isDefault()) {
+                     spacing_val = row_ptr->par()->params.spacing().getValue();
              } else {
                      spacing_val = bview->buffer()->params.spacing.getValue();
              }
@@ -1466,11 +1534,11 @@ void LyXText::SetHeightOfRow(BufferView * bview, Row * row_ptr) const
                      + layout.labelbottomsep *  DefaultHeight());
       }
    
-      /* and now the layout spaces, for example before and after a section, 
-       * or between the items of a itemize or enumerate environment */ 
+      // and now the layout spaces, for example before and after a section, 
+      // or between the items of a itemize or enumerate environment
       
-      if (!firstpar->pagebreak_top) {
-        LyXParagraph * prev = row_ptr->par()->Previous();
+      if (!firstpar->params.pagebreakTop()) {
+        LyXParagraph * prev = row_ptr->par()->previous();
         if (prev)
            prev = row_ptr->par()->DepthHook(row_ptr->par()->GetDepth());
         if (prev && prev->GetLayout() == firstpar->GetLayout()
@@ -1490,7 +1558,7 @@ void LyXText::SetHeightOfRow(BufferView * bview, Row * row_ptr) const
            if (tmptop > 0)
               layoutasc = (tmptop * DefaultHeight());
         }
-        else if (row_ptr->par()->line_top){
+        else if (row_ptr->par()->params.lineTop()) {
            tmptop = layout.topsep;
            
            if (tmptop > 0)
@@ -1503,49 +1571,62 @@ void LyXText::SetHeightOfRow(BufferView * bview, Row * row_ptr) const
                                         prev->GetLayout()).parsep * DefaultHeight());
         }
         else {
-               if (firstpar->Previous()
-                   && firstpar->Previous()->GetDepth() == 0
-                   && firstpar->Previous()->GetLayout() != firstpar->GetLayout()) {
-                  /* avoid parsep */ 
+               if (firstpar->previous()
+                   && firstpar->previous()->GetDepth() == 0
+                   && firstpar->previous()->GetLayout() != firstpar->GetLayout()) {
+                       // avoid parsep
                }
-           else if (firstpar->Previous()){
+           else if (firstpar->previous()){
               maxasc += int(layout.parsep * DefaultHeight());
            }
         }
       }
    }
    
-   /* is it a bottom line? */ 
+   // is it a bottom line?
    if (
 #ifndef NEW_INSETS
           row_ptr->par()->ParFromPos(RowLast(row_ptr) + 1) == par
 #else
           row_ptr->par() == par
 #endif
-       && (!row_ptr->next() || row_ptr->next()->par() != row_ptr->par())) {     
+       && (!row_ptr->next() || row_ptr->next()->par() != row_ptr->par())) {
          
-         /* the paper margins */ 
-         if (!par->next && bv_owner)
+          // the paper margins
+#ifndef NEW_INSETS
+         if (!par->next_ && bv_owner)
            maxdesc += LYX_PAPER_MARGIN;
-       
-         /* add the vertical spaces, that the user added */
-         if (firstpar->added_space_bottom.kind() != VSpace::NONE)
-                 maxdesc += int(firstpar->added_space_bottom.inPixels(bview));
+#else
+         if (!par->next() && bv_owner)
+           maxdesc += LYX_PAPER_MARGIN;
+#endif
+         
+         // add the vertical spaces, that the user added
+         if (firstpar->params.spaceBottom().kind() != VSpace::NONE)
+                 maxdesc += int(firstpar->params.spaceBottom().inPixels(bview));
          
-         /* do not forget the DTP-lines! 
-          * there height depends on the font of the nearest character */
-         if (firstpar->line_bottom)
+         // do not forget the DTP-lines!
+         // there height depends on the font of the nearest character
+#ifndef NEW_INSETS
+         if (firstpar->params.lineBottom())
                  maxdesc += 2 * lyxfont::ascent('x', GetFont(bview->buffer(),
                                                              par, par->Last() - 1));
+#else
+         if (firstpar->params.lineBottom())
+                 maxdesc += 2 * lyxfont::ascent('x',
+                                                GetFont(bview->buffer(),
+                                                        par, par->size() - 1));
+#endif
          
-         /* and now the pagebreaks */
-         if (firstpar->pagebreak_bottom)
+         // and now the pagebreaks
+         if (firstpar->params.pagebreakBottom())
            maxdesc += 3 * DefaultHeight();
          
-         /* and now the layout spaces, for example before and after a section, 
-          * or between the items of a itemize or enumerate environment */
-         if (!firstpar->pagebreak_bottom && row_ptr->par()->Next()) {
-            LyXParagraph * nextpar = row_ptr->par()->Next();
+         // and now the layout spaces, for example before and after
+         // a section, or between the items of a itemize or enumerate
+         // environment
+         if (!firstpar->params.pagebreakBottom() && row_ptr->par()->next()) {
+            LyXParagraph * nextpar = row_ptr->par()->next();
             LyXParagraph * comparepar = row_ptr->par();
             float usual = 0;
             float unusual = 0;
@@ -1573,11 +1654,11 @@ void LyXText::SetHeightOfRow(BufferView * bview, Row * row_ptr) const
          }
        }
    
-   /* incalculate the layout spaces */ 
+   // incalculate the layout spaces
    maxasc += int(layoutasc * 2 / (2 + firstpar->GetDepth()));
    maxdesc += int(layoutdesc * 2 / (2 + firstpar->GetDepth()));
 
-   /* calculate the new height of the text */ 
+   // calculate the new height of the text
    height -= row_ptr->height();
    
    row_ptr->height(maxasc + maxdesc + labeladdon);
@@ -1607,8 +1688,11 @@ void LyXText::AppendParagraph(BufferView * bview, Row * row) const
    
    // The last character position of a paragraph is an invariant so we can 
    // safely get it here. (Asger)
+#ifndef NEW_INSETS
    int const lastposition = row->par()->Last();
-
+#else
+   int const lastposition = row->par()->size();
+#endif
    do {
       // Get the next breakpoint
       int z = NextBreakPoint(bview, row, workWidth(bview));
@@ -1638,11 +1722,15 @@ void LyXText::BreakAgain(BufferView * bview, Row * row) const
    bool not_ready = true;
    
    do  {
-      /* get the next breakpoint */
+          // get the next breakpoint
        LyXParagraph::size_type z = NextBreakPoint(bview, row, workWidth(bview));
       Row * tmprow = row;
-      
+
+#ifndef NEW_INSETS
       if (z < row->par()->Last()) {
+#else
+      if (z < row->par()->size()) {
+#endif
         if (!row->next() || (row->next() && row->next()->par() != row->par())) {
                 // insert a new row
            ++z;
@@ -1685,8 +1773,12 @@ void LyXText::BreakAgainOneRow(BufferView * bview, Row * row)
        // get the next breakpoint
        LyXParagraph::size_type z = NextBreakPoint(bview, row, workWidth(bview));
        Row * tmprow = row;
-       
+
+#ifndef NEW_INSETS
        if (z < row->par()->Last()) {
+#else
+       if (z < row->par()->size()) {
+#endif
                if (!row->next()
                    || (row->next() && row->next()->par() != row->par())) {
                        /* insert a new row */ 
@@ -1727,30 +1819,37 @@ void LyXText::BreakParagraph(BufferView * bview, char keep_layout)
                               cursor.par()->GetLayout());
 
    // this is only allowed, if the current paragraph is not empty or caption
-   if ((cursor.par()->Last() <= 0
 #ifndef NEW_INSETS
-       && !cursor.par()->IsDummy()
-#endif
-          )
-       && 
-       layout.labeltype!= LABEL_SENSITIVE)
-     return;
+   if ((cursor.par()->Last() <= 0
+       && !cursor.par()->IsDummy())
+       && layout.labeltype!= LABEL_SENSITIVE)
+          return;
 
    SetUndo(bview->buffer(), Undo::INSERT,
-#ifndef NEW_INSETS
-          cursor.par()->ParFromPos(cursor.pos())->previous, 
-          cursor.par()->ParFromPos(cursor.pos())->next
+          cursor.par()->ParFromPos(cursor.pos())->previous_, 
+          cursor.par()->ParFromPos(cursor.pos())->next_); 
 #else
-          cursor.par()->previous, 
-          cursor.par()->next
+   if ((cursor.par()->size() <= 0)
+       && layout.labeltype!= LABEL_SENSITIVE)
+          return;
+   
+   SetUndo(bview->buffer(), Undo::INSERT,
+          cursor.par()->previous(), 
+          cursor.par()->next()); 
 #endif
-          ); 
 
-   // please break always behind a space
+   // Always break behind a space
+   //
+   // It is better to erase the space (Dekel)
+#ifndef NEW_INSETS
    if (cursor.pos() < cursor.par()->Last()
+#else
+   if (cursor.pos() < cursor.par()->size()
+#endif
        && cursor.par()->IsLineSeparator(cursor.pos()))
-     cursor.pos(cursor.pos() + 1);
-   
+          cursor.par()->Erase(cursor.pos());
+           // cursor.pos(cursor.pos() + 1);
+
    // break the paragraph
    if (keep_layout)
      keep_layout = 2;
@@ -1763,10 +1862,18 @@ void LyXText::BreakParagraph(BufferView * bview, char keep_layout)
    if (layout.labeltype == LABEL_SENSITIVE) {
      if (!cursor.pos())
             // set to standard-layout
+#ifndef NEW_INSETS
             cursor.par()->SetLayout(bview->buffer()->params, 0);
+#else
+            cursor.par()->SetLayout(0);
+#endif
      else
             // set to standard-layout
-            cursor.par()->Next()->SetLayout(bview->buffer()->params, 0);
+#ifndef NEW_INSETS
+            cursor.par()->next()->SetLayout(bview->buffer()->params, 0);
+#else
+            cursor.par()->next()->SetLayout(0);
+#endif
    }
    
    /* if the cursor is at the beginning of a row without prior newline, 
@@ -1796,19 +1903,23 @@ void LyXText::BreakParagraph(BufferView * bview, char keep_layout)
    cursor.row()->fill(Fill(bview, cursor.row(), workWidth(bview)));
 
    SetHeightOfRow(bview, cursor.row());
+
+#ifndef NEW_INSETS
+   while (cursor.par()->next()->Last()
+#else
+   while (cursor.par()->next()->size()
+#endif
+         && cursor.par()->next()->IsNewline(0))
+          cursor.par()->next()->Erase(0);
    
-   while (cursor.par()->Next()->Last()
-         && cursor.par()->Next()->IsNewline(0))
-          cursor.par()->Next()->Erase(0);
-   
-   InsertParagraph(bview, cursor.par()->Next(), cursor.row());
+   InsertParagraph(bview, cursor.par()->next(), cursor.row());
 
    UpdateCounters(bview, cursor.row()->previous());
    
    /* This check is necessary. Otherwise the new empty paragraph will
     * be deleted automatically. And it is more friendly for the user! */ 
    if (cursor.pos())
-          SetCursor(bview, cursor.par()->Next(), 0);
+          SetCursor(bview, cursor.par()->next(), 0);
    else
           SetCursor(bview, cursor.par(), 0);
    
@@ -1828,8 +1939,8 @@ void LyXText::OpenFootnote(BufferView * bview)
    LyXParagraph * par = cursor.par()->ParFromPos(cursor.pos());
    
    /* if there is no footnote in this paragraph, just return. */ 
-   if (!par->next
-       || par->next->footnoteflag != LyXParagraph::CLOSED_FOOTNOTE)
+   if (!par->next_
+       || par->next_->footnoteflag != LyXParagraph::CLOSED_FOOTNOTE)
      return;
    
    /* ok, move the cursor right before the footnote */ 
@@ -1852,7 +1963,7 @@ void LyXText::OpenFootnote(BufferView * bview)
    refresh_y = cursor.y() - cursor.row()->baseline();
    
    tmppar = cursor.par();
-   endpar = cursor.par()->Next();
+   endpar = cursor.par()->next();
    row = cursor.row();
    
    tmppar->OpenFootnote(cursor.pos());
@@ -1861,17 +1972,17 @@ void LyXText::OpenFootnote(BufferView * bview)
    row->fill(Fill(bview, row, workWidth(bview)));
    SetHeightOfRow(bview, row);
    // CHECK See comment on top of text.C
-   tmppar = tmppar->Next();
+   tmppar = tmppar->next();
    
    while (tmppar != endpar) {
       if (tmppar) {
         InsertParagraph(bview, tmppar, row);
         while (row->next() && row->next()->par() == tmppar)
           row = row->next();
-        tmppar = tmppar->Next();
+        tmppar = tmppar->next();
       }
    }
-   SetCursor(bview, par->next, 0);
+   SetCursor(bview, par->next_, 0);
    sel_cursor = cursor;
 }
 #endif
@@ -1880,8 +1991,8 @@ void LyXText::OpenFootnote(BufferView * bview)
 // Just a macro to make some thing easier. 
 void LyXText::RedoParagraph(BufferView * bview) const
 {
-       ClearSelection();
-       RedoParagraphs(bview, cursor, cursor.par()->Next());
+       ClearSelection(bview);
+       RedoParagraphs(bview, cursor, cursor.par()->next());
        SetCursorIntern(bview, cursor.par(), cursor.pos());
 }
 
@@ -1892,11 +2003,11 @@ void LyXText::InsertChar(BufferView * bview, char c)
 {
        SetUndo(bview->buffer(), Undo::INSERT,
 #ifndef NEW_INSETS
-               cursor.par()->ParFromPos(cursor.pos())->previous
-               cursor.par()->ParFromPos(cursor.pos())->next
+               cursor.par()->ParFromPos(cursor.pos())->previous_,
+               cursor.par()->ParFromPos(cursor.pos())->next_
 #else
-               cursor.par()->previous
-               cursor.par()->next
+               cursor.par()->previous(),
+               cursor.par()->next()
 #endif
                );
 
@@ -1909,9 +2020,13 @@ void LyXText::InsertChar(BufferView * bview, char c)
 
 
        if (lyxrc.auto_number) {
+               static string const number_operators = "+-/*";
+               static string const number_unary_operators = "+-";
+               static string const number_seperators = ".,:";
+
                if (current_font.number() == LyXFont::ON) {
-                       if (!isdigit(c) && !strchr("+-/*", c) &&
-                           !(strchr(".,",c) &&
+                       if (!isdigit(c) && !contains(number_operators, c) &&
+                           !(contains(number_seperators, c) &&
                              cursor.pos() >= 1 &&
                              cursor.pos() < cursor.par()->size() &&
                              GetFont(bview->buffer(),
@@ -1928,7 +2043,7 @@ void LyXText::InsertChar(BufferView * bview, char c)
 
                        if (cursor.pos() > 0) {
                                char const c = cursor.par()->GetChar(cursor.pos() - 1);
-                               if (strchr("+-",c) &&
+                               if (contains(number_unary_operators, c) &&
                                    (cursor.pos() == 1 ||
                                     cursor.par()->IsSeparator(cursor.pos() - 2) ||
                                     cursor.par()->IsNewline(cursor.pos() - 2) )
@@ -1937,7 +2052,7 @@ void LyXText::InsertChar(BufferView * bview, char c)
                                                    cursor.par(),
                                                    cursor.pos() - 1,
                                                    current_font);
-                               } else if (strchr(".,", c) &&
+                               } else if (contains(number_seperators, c) &&
                                           cursor.pos() >= 2 &&
                                           GetFont(bview->buffer(),
                                                   cursor.par(),
@@ -1971,7 +2086,11 @@ void LyXText::InsertChar(BufferView * bview, char c)
                                     * current font */
 
        // Get the font that is used to calculate the baselineskip
+#ifndef NEW_INSETS
        LyXParagraph::size_type const lastpos = cursor.par()->Last();
+#else
+       LyXParagraph::size_type const lastpos = cursor.par()->size();
+#endif
        LyXFont rawparfont = cursor.par()->GetFontSettings(bview->buffer()->params,
                                                           lastpos - 1);
 
@@ -1984,15 +2103,19 @@ void LyXText::InsertChar(BufferView * bview, char c)
                        && cursor.par()->IsNewline(cursor.pos() - 1))
                    || (cursor.pos() == 0
 #ifndef NEW_INSETS
-                       && !(cursor.par()->Previous()
-                            && cursor.par()->Previous()->footnoteflag
+                       && !(cursor.par()->previous()
+                            && cursor.par()->previous()->footnoteflag
                             == LyXParagraph::OPEN_FOOTNOTE)
 #endif
                            )) {
                        if (cursor.pos() == 0 )
-                               bview->owner()->getMiniBuffer()->Set(_("You cannot insert a space at the beginning of a paragraph.  Please read the Tutorial."));
+                               bview->owner()->getLyXFunc()
+                                       ->Dispatch(LFUN_MESSAGE,
+                                                  _("You cannot insert a space at the beginning of a paragraph.  Please read the Tutorial."));
                        else
-                               bview->owner()->getMiniBuffer()->Set(_("You cannot type two spaces this way.  Please read the Tutorial."));
+                               bview->owner()->getLyXFunc()
+                                       ->Dispatch(LFUN_MESSAGE,
+                                                  _("You cannot type two spaces this way.  Please read the Tutorial."));
                        charInserted();
                        return;
                }
@@ -2009,8 +2132,12 @@ void LyXText::InsertChar(BufferView * bview, char c)
                /* No newline at first position 
                 * of a paragraph or behind labels. 
                 * TeX does not allow that. */
-               
+
+#ifndef NEW_INSETS
                if (cursor.pos() < cursor.par()->Last() &&
+#else
+               if (cursor.pos() < cursor.par()->size() &&
+#endif
                    cursor.par()->IsLineSeparator(cursor.pos()))
                        // newline always after a blank!
                        CursorRight(bview);
@@ -2077,8 +2204,12 @@ void LyXText::InsertChar(BufferView * bview, char c)
                        else
                                need_break_row = 0;
             
-                       // check, wether the last characters font has changed. 
+                       // check, wether the last characters font has changed.
+#ifndef NEW_INSETS
                        if (cursor.pos() && cursor.pos() == cursor.par()->Last()
+#else
+                       if (cursor.pos() && cursor.pos() == cursor.par()->size()
+#endif
                            && rawparfont != rawtmpfont)
                                RedoHeightOfParagraph(bview, cursor);
                        
@@ -2139,7 +2270,11 @@ void LyXText::InsertChar(BufferView * bview, char c)
        }
 
        // check, wether the last characters font has changed.
+#ifndef NEW_INSETS
        if (cursor.pos() && cursor.pos() == cursor.par()->Last()
+#else
+       if (cursor.pos() && cursor.pos() == cursor.par()->size()
+#endif
            && rawparfont != rawtmpfont) {
                RedoHeightOfParagraph(bview, cursor);
        } else {
@@ -2186,21 +2321,18 @@ void LyXText::PrepareToPrint(BufferView * bview,
 
         bool const is_rtl =
                row->par()->isRightToLeftPar(bview->buffer()->params);
-#ifndef NEW_INSETS
-
        if (is_rtl) {
-               x = RightMargin(bview->buffer(), row);
+               x = (workWidth(bview) > 0)
+                       ? RightMargin(bview->buffer(), row) : 0;
+#ifndef NEW_INSETS
                if (row->par()->footnoteflag == LyXParagraph::OPEN_FOOTNOTE) {
                        LyXFont font(LyXFont::ALL_SANE);
                        font.setSize(LyXFont::SIZE_SMALL);
                        x += lyxfont::width("Mwide-figM", font);
                }
-       } else
 #endif
-               if (workWidth(bview) > 0)
-               x = LeftMargin(bview, row);
-       else
-               x = 0;
+       } else
+               x = (workWidth(bview) > 0) ? LeftMargin(bview, row) : 0;
        
        // is there a manual margin with a manual label
        if (textclasslist.Style(bview->buffer()->params.textclass,
@@ -2225,15 +2357,15 @@ void LyXText::PrepareToPrint(BufferView * bview,
                // set x how you need it
        int align;
 #ifndef NEW_INSETS
-       if (row->par()->FirstPhysicalPar()->align == LYX_ALIGN_LAYOUT)
+       if (row->par()->FirstPhysicalPar()->params.align() == LYX_ALIGN_LAYOUT)
          align = textclasslist.Style(bview->buffer()->params.textclass, row->par()->GetLayout()).align;
        else
-         align = row->par()->FirstPhysicalPar()->align;
+         align = row->par()->FirstPhysicalPar()->params.align();
 #else
-       if (row->par()->align == LYX_ALIGN_LAYOUT)
+       if (row->par()->params.align() == LYX_ALIGN_LAYOUT)
          align = textclasslist.Style(bview->buffer()->params.textclass, row->par()->GetLayout()).align;
        else
-         align = row->par()->align;
+         align = row->par()->params.align();
 #endif
           
        // center displayed insets 
@@ -2301,15 +2433,23 @@ void LyXText::CursorRightOneWord(BufferView * bview) const
        LyXCursor tmpcursor = cursor;
        // CHECK See comment on top of text.C
 
+#ifndef NEW_INSETS
        if (tmpcursor.pos() == tmpcursor.par()->Last()
-           && tmpcursor.par()->Next()) {
-                       tmpcursor.par(tmpcursor.par()->Next());
+#else
+       if (tmpcursor.pos() == tmpcursor.par()->size()
+#endif
+           && tmpcursor.par()->next()) {
+                       tmpcursor.par(tmpcursor.par()->next());
                        tmpcursor.pos(0);
        } else {
                int steps = 0;
 
                // Skip through initial nonword stuff.
+#ifndef NEW_INSETS
                while (tmpcursor.pos() < tmpcursor.par()->Last() &&
+#else
+               while (tmpcursor.pos() < tmpcursor.par()->size() &&
+#endif
                        ! tmpcursor.par()->IsWord( tmpcursor.pos() ) ) 
                {
                  //    printf("Current pos1 %d", tmpcursor.pos()) ;
@@ -2317,7 +2457,11 @@ void LyXText::CursorRightOneWord(BufferView * bview) const
                        ++steps;
                }
                // Advance through word.
+#ifndef NEW_INSETS
                while (tmpcursor.pos() < tmpcursor.par()->Last() &&
+#else
+               while (tmpcursor.pos() < tmpcursor.par()->size() &&
+#endif
                        tmpcursor.par()->IsWord( tmpcursor.pos() ) )
                {
                  //     printf("Current pos2 %d", tmpcursor.pos()) ;
@@ -2332,13 +2476,21 @@ void LyXText::CursorRightOneWord(BufferView * bview) const
 void LyXText::CursorTab(BufferView * bview) const
 {
     LyXCursor tmpcursor = cursor;
+#ifndef NEW_INSETS
     while (tmpcursor.pos() < tmpcursor.par()->Last()
+#else
+    while (tmpcursor.pos() < tmpcursor.par()->size()
+#endif
            && !tmpcursor.par()->IsNewline(tmpcursor.pos()))
         tmpcursor.pos(tmpcursor.pos() + 1);
-   
+
+#ifndef NEW_INSETS
     if (tmpcursor.pos() == tmpcursor.par()->Last()){
-        if (tmpcursor.par()->Next()) {
-            tmpcursor.par(tmpcursor.par()->Next());
+#else
+    if (tmpcursor.pos() == tmpcursor.par()->size()){
+#endif
+        if (tmpcursor.par()->next()) {
+            tmpcursor.par(tmpcursor.par()->next());
             tmpcursor.pos(0);
         }
     } else
@@ -2372,9 +2524,13 @@ void LyXText::CursorLeftOneWord(BufferView * bview)  const
                || tmpcursor.par()->IsHfill(tmpcursor.pos() - 1))) {
                tmpcursor.pos(tmpcursor.pos() - 1);
        } else if (!tmpcursor.pos()) {
-               if (tmpcursor.par()->Previous()){
-                       tmpcursor.par(tmpcursor.par()->Previous());
+               if (tmpcursor.par()->previous()){
+                       tmpcursor.par(tmpcursor.par()->previous());
+#ifndef NEW_INSETS
                        tmpcursor.pos(tmpcursor.par()->Last());
+#else
+                       tmpcursor.pos(tmpcursor.par()->size());
+#endif
                }
        } else {                // Here, tmpcursor != 0 
                while (tmpcursor.pos() > 0 &&
@@ -2398,14 +2554,18 @@ void LyXText::SelectWord(BufferView * bview)
        // set the sel cursor
        sel_cursor = cursor;
 
+#ifndef NEW_INSETS
        while (cursor.pos() < cursor.par()->Last()
+#else
+       while (cursor.pos() < cursor.par()->size()
+#endif
               && !cursor.par()->IsSeparator(cursor.pos())
               && !cursor.par()->IsKomma(cursor.pos()) )
                cursor.pos(cursor.pos() + 1);
        SetCursor(bview, cursor.par(), cursor.pos() );
        
        // finally set the selection
-       SetSelection();
+       SetSelection(bview);
 }
 
 
@@ -2416,7 +2576,11 @@ void LyXText::SelectWord(BufferView * bview)
 bool LyXText::SelectWordWhenUnderCursor(BufferView * bview) 
 {
        if (!selection &&
+#ifndef NEW_INSETS
            cursor.pos() > 0 && cursor.pos() < cursor.par()->Last()
+#else
+           cursor.pos() > 0 && cursor.pos() < cursor.par()->size()
+#endif
            && !cursor.par()->IsSeparator(cursor.pos())
            && !cursor.par()->IsKomma(cursor.pos())
            && !cursor.par()->IsSeparator(cursor.pos() -1)
@@ -2438,20 +2602,41 @@ string const LyXText::SelectNextWord(BufferView * bview,
        // If this is not the very first word, skip rest of
        // current word because we are probably in the middle
        // of a word if there is text here.
-       if (cursor.pos() || cursor.par()->previous) {
+#ifndef NEW_INSETS
+       if (cursor.pos() || cursor.par()->previous_) {
                while (cursor.pos() < cursor.par()->Last()
                       && cursor.par()->IsLetter(cursor.pos()))
                        cursor.pos(cursor.pos() + 1);
        }
+#else
+       if (cursor.pos() || cursor.par()->previous()) {
+               while (cursor.pos() < cursor.par()->size()
+                      && cursor.par()->IsLetter(cursor.pos()))
+                       cursor.pos(cursor.pos() + 1);
+       }
+#endif
+       
        // Now, skip until we have real text (will jump paragraphs)
+#ifndef NEW_INSETS
        while ((cursor.par()->Last() > cursor.pos()
+#else
+       while ((cursor.par()->size() > cursor.pos()
+#endif
                && (!cursor.par()->IsLetter(cursor.pos())
                    || cursor.par()->getFont(bview->buffer()->params, cursor.pos())
                    .latex() == LyXFont::ON))
-              || (cursor.par()->Last() == cursor.pos() 
-                  && cursor.par()->Next())){
+#ifndef NEW_INSETS
+              || (cursor.par()->Last() == cursor.pos()
+#else
+              || (cursor.par()->size() == cursor.pos()
+#endif
+                  && cursor.par()->next())){
+#ifndef NEW_INSETS
                if (cursor.pos() == cursor.par()->Last()) {
-                       cursor.par(cursor.par()->Next());
+#else
+               if (cursor.pos() == cursor.par()->size()) {
+#endif
+                       cursor.par(cursor.par()->next());
                        cursor.pos(0);
                } else
                        cursor.pos(cursor.pos() + 1);
@@ -2470,7 +2655,11 @@ string const LyXText::SelectNextWord(BufferView * bview,
 
        // and find the end of the word 
        // (optional hyphens are part of a word)
+#ifndef NEW_INSETS
        while (cursor.pos() < cursor.par()->Last()
+#else
+       while (cursor.pos() < cursor.par()->size()
+#endif
               && (cursor.par()->IsLetter(cursor.pos())) 
                   || (cursor.par()->GetChar(cursor.pos()) == LyXParagraph::META_INSET
                       && cursor.par()->GetInset(cursor.pos()) != 0
@@ -2504,7 +2693,11 @@ void LyXText::SelectSelectedWord(BufferView * bview)
        std::ostringstream latex;
        
        // now find the end of the word
+#ifndef NEW_INSETS
        while (cursor.pos() < cursor.par()->Last()
+#else
+       while (cursor.pos() < cursor.par()->size()
+#endif
               && (cursor.par()->IsLetter(cursor.pos())
                   || (cursor.par()->GetChar(cursor.pos()) == LyXParagraph::META_INSET
                       && cursor.par()->GetInset(cursor.pos()) != 0
@@ -2516,14 +2709,18 @@ void LyXText::SelectSelectedWord(BufferView * bview)
        SetCursor(bview, cursor.par(), cursor.pos());
        
        // finally set the selection
-       SetSelection();
+       SetSelection(bview);
 }
 
 
 /* -------> Delete from cursor up to the end of the current or next word. */
 void LyXText::DeleteWordForward(BufferView * bview)
 {
+#ifndef NEW_INSETS
        if (!cursor.par()->Last())
+#else
+       if (!cursor.par()->size())
+#endif
                CursorRight(bview);
        else {
                LyXCursor tmpcursor = cursor;
@@ -2533,7 +2730,7 @@ void LyXText::DeleteWordForward(BufferView * bview)
                SetCursor(bview, tmpcursor, tmpcursor.par(), tmpcursor.pos());
                sel_cursor = cursor;
                cursor = tmpcursor;
-               SetSelection(); 
+               SetSelection(bview); 
                
                /* -----> Great, CutSelection() gets rid of multiple spaces. */
                CutSelection(bview);
@@ -2544,7 +2741,11 @@ void LyXText::DeleteWordForward(BufferView * bview)
 /* -------> Delete from cursor to start of current or prior word. */
 void LyXText::DeleteWordBackward(BufferView * bview)
 {
+#ifndef NEW_INSETS
        if (!cursor.par()->Last())
+#else
+       if (!cursor.par()->size())
+#endif
               CursorLeft(bview);
        else {
               LyXCursor tmpcursor = cursor;
@@ -2554,7 +2755,7 @@ void LyXText::DeleteWordBackward(BufferView * bview)
               SetCursor(bview, tmpcursor, tmpcursor.par(), tmpcursor.pos());
               sel_cursor = cursor;
               cursor = tmpcursor;
-              SetSelection();
+              SetSelection(bview);
               CutSelection(bview);
        }
 }
@@ -2563,7 +2764,11 @@ void LyXText::DeleteWordBackward(BufferView * bview)
 /* -------> Kill to end of line. */
 void LyXText::DeleteLineForward(BufferView * bview)
 {
+#ifndef NEW_INSETS
        if (!cursor.par()->Last())
+#else
+       if (!cursor.par()->size())
+#endif
                // Paragraph is empty, so we just go to the right
                CursorRight(bview);
        else {
@@ -2576,7 +2781,7 @@ void LyXText::DeleteLineForward(BufferView * bview)
                SetCursor(bview, tmpcursor, tmpcursor.par(), tmpcursor.pos());
                sel_cursor = cursor;
                cursor = tmpcursor;
-               SetSelection();
+               SetSelection(bview);
                // What is this test for ??? (JMarc)
                if (!selection) {
                        DeleteWordForward(bview);
@@ -2598,18 +2803,21 @@ void LyXText::ChangeWordCase(BufferView * bview, LyXText::TextCase action)
 {
 #ifndef NEW_INSETS
        LyXParagraph * tmppar = cursor.par()->ParFromPos(cursor.pos());
-#else
-       LyXParagraph * tmppar = cursor.par();
-#endif
 
-       SetUndo(bview->buffer(),Undo::FINISH, tmppar->previous, tmppar->next); 
+       SetUndo(bview->buffer(),Undo::FINISH,
+               tmppar->previous_, tmppar->next_); 
 
-#ifndef NEW_INSETS
        LyXParagraph::size_type tmppos = 
                cursor.par()->PositionInParFromPos(cursor.pos());
 #else
+       LyXParagraph * tmppar = cursor.par();
+
+       SetUndo(bview->buffer(),Undo::FINISH,
+               tmppar->previous(), tmppar->next()); 
+
        LyXParagraph::size_type tmppos = cursor.pos();
 #endif
+
        while (tmppos < tmppar->size()) {
                unsigned char c = tmppar->GetChar(tmppos);
                if (IsKommaChar(c) || IsLineSeparatorChar(c))
@@ -2644,8 +2852,13 @@ void LyXText::Delete(BufferView * bview)
 
        LyXCursor old_cursor = cursor;
        int const old_cur_par_id = old_cursor.par()->id();
-       int const old_cur_par_prev_id = old_cursor.par()->previous ?
-               old_cursor.par()->previous->id() : 0;
+#ifndef NEW_INSETS
+       int const old_cur_par_prev_id = old_cursor.par()->previous_ ?
+               old_cursor.par()->previous_->id() : 0;
+#else
+       int const old_cur_par_prev_id = old_cursor.par()->previous() ?
+               old_cursor.par()->previous()->id() : 0;
+#endif
        
        // just move to the right
        CursorRight(bview);
@@ -2656,7 +2869,12 @@ void LyXText::Delete(BufferView * bview)
        // and that can very well delete the par or par->previous in
        // old_cursor. Will a solution where we compare paragraph id's
        //work better?
-       if ((cursor.par()->previous ? cursor.par()->previous->id() : 0)
+       if (
+#ifndef NEW_INSETS
+               (cursor.par()->previous_ ? cursor.par()->previous_->id() : 0)
+#else
+               (cursor.par()->previous() ? cursor.par()->previous()->id() : 0)
+#endif
            == old_cur_par_prev_id
            && cursor.par()->id() != old_cur_par_id)
                return; // delete-empty-paragraph-mechanism has done it
@@ -2667,11 +2885,11 @@ void LyXText::Delete(BufferView * bview)
                cursor = old_cursor; // to make sure undo gets the right cursor position
                SetUndo(bview->buffer(), Undo::DELETE,
 #ifndef NEW_INSETS
-                       cursor.par()->ParFromPos(cursor.pos())->previous, 
-                       cursor.par()->ParFromPos(cursor.pos())->next
+                       cursor.par()->ParFromPos(cursor.pos())->previous_
+                       cursor.par()->ParFromPos(cursor.pos())->next_
 #else
-                       cursor.par()->previous, 
-                       cursor.par()->next
+                       cursor.par()->previous()
+                       cursor.par()->next()
 #endif
                        ); 
                cursor = tmpcursor;
@@ -2683,7 +2901,11 @@ void LyXText::Delete(BufferView * bview)
 void LyXText::Backspace(BufferView * bview)
 {
        // Get the font that is used to calculate the baselineskip
+#ifndef NEW_INSETS
        LyXParagraph::size_type lastpos = cursor.par()->Last();
+#else
+       LyXParagraph::size_type lastpos = cursor.par()->size();
+#endif
        LyXFont rawparfont = cursor.par()->GetFontSettings(bview->buffer()->params,
                                                         lastpos - 1);
 
@@ -2698,31 +2920,31 @@ void LyXText::Backspace(BufferView * bview)
                if ((lastpos == 0
                     || (lastpos == 1 && cursor.par()->IsSeparator(0)))
 #ifndef NEW_INSETS
-                   && !(cursor.par()->Next() 
+                   && !(cursor.par()->next() 
                         && cursor.par()->footnoteflag == LyXParagraph::NO_FOOTNOTE
-                        && cursor.par()->Next()->footnoteflag == LyXParagraph::OPEN_FOOTNOTE)
+                        && cursor.par()->next()->footnoteflag == LyXParagraph::OPEN_FOOTNOTE)
 #endif
                        ) {
                        // This is an empty paragraph and we delete it just by moving the cursor one step
                        // left and let the DeleteEmptyParagraphMechanism handle the actual deletion
                        // of the paragraph.
                        
-                       if (cursor.par()->previous) {
 #ifndef NEW_INSETS
-                               LyXParagraph * tmppar = cursor.par()->previous->FirstPhysicalPar();
-#else
-                               LyXParagraph * tmppar = cursor.par()->previous;
-#endif
+                       if (cursor.par()->previous_) {
+                               LyXParagraph * tmppar = cursor.par()->previous_->FirstPhysicalPar();
                                if (cursor.par()->GetLayout() == tmppar->GetLayout()
-#ifndef NEW_INSETS
                                    && cursor.par()->footnoteflag == tmppar->footnoteflag
+#else
+                       if (cursor.par()->previous()) {
+                               LyXParagraph * tmppar = cursor.par()->previous();
+                               if (cursor.par()->GetLayout() == tmppar->GetLayout()
 #endif
                                    && cursor.par()->GetAlign() == tmppar->GetAlign()) {
-                                       // Inherit botom DTD from the paragraph below.
+                                       // Inherit bottom DTD from the paragraph below.
                                        // (the one we are deleting)
-                                       tmppar->line_bottom = cursor.par()->line_bottom;
-                                       tmppar->added_space_bottom = cursor.par()->added_space_bottom;
-                                       tmppar->pagebreak_bottom = cursor.par()->pagebreak_bottom;
+                                       tmppar->params.lineBottom(cursor.par()->params.lineBottom());
+                                       tmppar->params.spaceBottom(cursor.par()->params.spaceBottom());
+                                       tmppar->params.pagebreakBottom(cursor.par()->params.pagebreakBottom());
                                }
                                
                                CursorLeft(bview);
@@ -2740,16 +2962,16 @@ void LyXText::Backspace(BufferView * bview)
                }
 
 #ifndef NEW_INSETS
-               if (cursor.par()->ParFromPos(cursor.pos())->previous){
+               if (cursor.par()->ParFromPos(cursor.pos())->previous_) {
                        SetUndo(bview->buffer(), Undo::DELETE,
-                               cursor.par()->ParFromPos(cursor.pos())->previous->previous,
-                               cursor.par()->ParFromPos(cursor.pos())->next);
+                               cursor.par()->ParFromPos(cursor.pos())->previous_->previous_,
+                               cursor.par()->ParFromPos(cursor.pos())->next_);
                }
 #else
-               if (cursor.par()->previous) {
+               if (cursor.par()->previous()) {
                        SetUndo(bview->buffer(), Undo::DELETE,
-                               cursor.par()->previous->previous,
-                               cursor.par()->next);
+                               cursor.par()->previous()->previous(),
+                               cursor.par()->next());
                }
 #endif
                
@@ -2760,10 +2982,16 @@ void LyXText::Backspace(BufferView * bview)
                // not a good idea since it triggers the auto-delete
                // mechanism. So we do a CursorLeftIntern()-lite,
                // without the dreaded mechanism. (JMarc)
-               if (cursor.par()->Previous()) { 
+               if (cursor.par()->previous()) { 
                        // steps into the above paragraph.
-                       SetCursorIntern(bview, cursor.par()->Previous(), 
-                                       cursor.par()->Previous()->Last(), false);
+#ifndef NEW_INSETS
+                       SetCursorIntern(bview, cursor.par()->previous(),
+                                       cursor.par()->previous()->Last(), false);
+#else
+                       SetCursorIntern(bview, cursor.par()->previous(),
+                                       cursor.par()->previous()->size(),
+                                       false);
+#endif
                }
 
                /* Pasting is not allowed, if the paragraphs have different
@@ -2821,11 +3049,11 @@ void LyXText::Backspace(BufferView * bview)
                 * any paragraphs */ 
                SetUndo(bview->buffer(), Undo::DELETE,
 #ifndef NEW_INSETS
-                       cursor.par()->ParFromPos(cursor.pos())->previous
-                       cursor.par()->ParFromPos(cursor.pos())->next
+                       cursor.par()->ParFromPos(cursor.pos())->previous_,
+                       cursor.par()->ParFromPos(cursor.pos())->next_
 #else
-                       cursor.par()->previous
-                       cursor.par()->next
+                       cursor.par()->previous(),
+                       cursor.par()->next()
 #endif
                        ); 
                // We used to do CursorLeftIntern() here, but it is
@@ -2873,9 +3101,17 @@ void LyXText::Backspace(BufferView * bview)
                        }
                        if (cursor.par()->IsLineSeparator(cursor.pos() - 1))
                                cursor.pos(cursor.pos() - 1);
-                       
-                       if (cursor.pos() < cursor.par()->Last() && !cursor.par()->IsSeparator(cursor.pos())) {
+
+#ifndef NEW_INSETS
+                       if (cursor.pos() < cursor.par()->Last()
+                           && !cursor.par()->IsSeparator(cursor.pos())) {
+#else
+                       if (cursor.pos() < cursor.par()->size()
+                           && !cursor.par()->IsSeparator(cursor.pos())) {
+#endif
                                cursor.par()->InsertChar(cursor.pos(), ' ');
+                               SetCharFont(bview->buffer(), cursor.par(), 
+                                           cursor.pos(), current_font);
                                // refresh the positions
                                tmprow = row;
                                while (tmprow->next() && tmprow->next()->par() == row->par()) {
@@ -2895,7 +3131,11 @@ void LyXText::Backspace(BufferView * bview)
                        }
 
                        // delete newlines at the beginning of paragraphs
+#ifndef NEW_INSETS
                        while (cursor.par()->Last() &&
+#else
+                       while (cursor.par()->size() &&
+#endif
                               cursor.par()->IsNewline(cursor.pos()) &&
                               cursor.pos() == BeginningOfMainBody(bview->buffer(),
                                                                   cursor.par())) {
@@ -2920,7 +3160,11 @@ void LyXText::Backspace(BufferView * bview)
                                Row * tmprow = row->previous();
                                
                                // maybe the current row is now empty
+#ifndef NEW_INSETS
                                if (row->pos() >= row->par()->Last()) {
+#else
+                               if (row->pos() >= row->par()->size()) {
+#endif
                                        // remove it
                                        RemoveRow(row);
                                        need_break_row = 0;
@@ -2946,9 +3190,15 @@ void LyXText::Backspace(BufferView * bview)
                                //current_font = rawtmpfont;
                                //real_current_font = realtmpfont;
                                // check, whether the last character's font has changed.
+#ifndef NEW_INSETS
                                if (rawparfont !=
                                    cursor.par()->GetFontSettings(bview->buffer()->params,
                                                                  cursor.par()->Last() - 1))
+#else
+                               if (rawparfont !=
+                                   cursor.par()->GetFontSettings(bview->buffer()->params,
+                                                                 cursor.par()->size() - 1))
+#endif
                                        RedoHeightOfParagraph(bview, cursor);
                                return;
                        }
@@ -2956,14 +3206,22 @@ void LyXText::Backspace(BufferView * bview)
                
                // break the cursor row again
                if (row->next() && row->next()->par() == row->par() &&
+#ifndef NEW_INSETS
                    (RowLast(row) == row->par()->Last() - 1 ||
+#else
+                   (RowLast(row) == row->par()->size() - 1 ||
+#endif
                     NextBreakPoint(bview, row, workWidth(bview)) != RowLast(row))) {
                        
                        /* it can happen that a paragraph loses one row
                         * without a real breakup. This is when a word
                         * is to long to be broken. Well, I don t care this 
-                        * hack ;-) */ 
+                        * hack ;-) */
+#ifndef NEW_INSETS
                        if (RowLast(row) == row->par()->Last() - 1)
+#else
+                       if (RowLast(row) == row->par()->size() - 1)
+#endif
                                RemoveRow(row->next());
                        
                        refresh_y = y;
@@ -3007,7 +3265,11 @@ void LyXText::Backspace(BufferView * bview)
                SetCursor(bview, cursor.par(), cursor.pos(), false,
                          !cursor.boundary());
 
+#ifndef NEW_INSETS
        lastpos = cursor.par()->Last();
+#else
+       lastpos = cursor.par()->size();
+#endif
        if (cursor.pos() == lastpos)
                SetCurrentFont(bview);
        
@@ -3028,7 +3290,7 @@ void LyXText::Backspace(BufferView * bview)
 void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset,
                            Row * row_ptr, int y, bool cleared)
 {
-       /* returns a printed row */
+       // returns a printed row
        Painter & pain = bview->painter();
        
        bool const is_rtl =
@@ -3036,11 +3298,10 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset,
        
        LyXParagraph::size_type const last = RowLastPrintable(row_ptr);
 
-       LyXParagraph::size_type vpos, pos;
-       float x;
+       LyXParagraph::size_type vpos;
+       LyXParagraph::size_type pos;
+
        float tmpx;
-       int y_top;
-       int y_bottom;
 
        LyXFont font(LyXFont::ALL_SANE);
        int maxdesc;
@@ -3050,6 +3311,7 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset,
                return;
        }
 
+       float x;
        float fill_separator;
        float fill_hfill;
        float fill_label_hfill;
@@ -3061,7 +3323,7 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset,
        x += x_offset;
        
        // clear the area where we want to paint/print
-       int ww = bview->workWidth();
+       int const ww = bview->workWidth();
 
        bool clear_area = true;
        Inset * inset = 0;
@@ -3077,10 +3339,15 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset,
        } else if (clear_area) {
 #ifdef WITH_WARNINGS
 #warning Should be fixed with a lyxinset::clear_width(bv, font) function! (Jug)
+#warning Should we not fix this in the Painter, please have a look Lars! (Jug)
 #endif
-               int const w = (inset_owner ?
-                              inset_owner->width(bview, font)-2 : ww);
-               pain.fillRectangle(x_offset, y_offset, w, row_ptr->height());
+               int const y = y_offset < 0 ? 0 : y_offset;
+               int const h = y_offset < 0 ?
+                       row_ptr->height() + y_offset : row_ptr->height();
+               int const w = inset_owner ?
+                       inset_owner->width(bview, font) - 2 : ww;
+               int const x = x_offset;
+               pain.fillRectangle(x, y, w, h);
        } else if (inset != 0) {
                int h = row_ptr->baseline() - inset->ascent(bview, font);
                if (h > 0) {
@@ -3105,7 +3372,7 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset,
        if (selection) {
                int const w = (inset_owner ?
                               inset_owner->width(bview, font) : ww);
-               /* selection code */
+               // selection code
                if (bidi_same_direction) {
                        if (sel_start_cursor.row() == row_ptr &&
                            sel_end_cursor.row() == row_ptr) {
@@ -3200,7 +3467,9 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset,
                                      sel_start_cursor.pos() <= pos) &&
                                     (sel_end_cursor.row() != row_ptr ||
                                      pos < sel_end_cursor.pos()) )
-                                       pain.fillRectangle(x_offset + int(old_tmpx),
+                                       // Here we do not use x_offset as x_offset was
+                                       // added to x.
+                                       pain.fillRectangle(int(old_tmpx),
                                                           y_offset,
                                                           int(tmpx - old_tmpx + 1),
                                                           row_ptr->height(),
@@ -3297,7 +3566,7 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset,
 
                // Draw appendix lines
                LyXParagraph * p = row_ptr->par()->PreviousBeforeFootnote()->FirstPhysicalPar();
-               if (p->appendix){
+               if (p->params.appendix()) {
                        pain.line(1, y_offset,
                                  1, y_offset + row_ptr->height(),
                                  LColor::appendixline);
@@ -3307,15 +3576,16 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset,
                                  LColor::appendixline);
                }
 
+#ifndef NO_PEXTRA
                // Draw minipage line
                bool const minipage =
-                       (p->pextra_type == LyXParagraph::PEXTRA_MINIPAGE);
+                       (p->params.pextraType() == LyXParagraph::PEXTRA_MINIPAGE);
                if (minipage)
                        pain.line(LYX_PAPER_MARGIN/5, y_offset,
                                  LYX_PAPER_MARGIN/5, 
                                  y_offset + row_ptr->height() - 1,
                                  LColor::minipageline);
-
+#endif
                // Draw depth lines
                int const depth = p->GetDepth();
                for (int i = 1; i <= depth; ++i) {
@@ -3345,7 +3615,7 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset,
 #else
        LyXParagraph * firstpar = row_ptr->par();
 #endif
-       if (firstpar->appendix){
+       if (firstpar->params.appendix()) {
                pain.line(1, y_offset,
                          1, y_offset + row_ptr->height(),
                          LColor::appendixline);
@@ -3353,16 +3623,16 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset,
                          ww - 2, y_offset + row_ptr->height(),
                          LColor::appendixline);
        }
-
+#ifndef NO_PEXTRA
        // Draw minipage line
        bool const minipage =
-               (firstpar->pextra_type == LyXParagraph::PEXTRA_MINIPAGE);
+               (firstpar->params.pextraType() == LyXParagraph::PEXTRA_MINIPAGE);
        if (minipage)
                pain.line(LYX_PAPER_MARGIN/5 + box_x, y_offset,
                          LYX_PAPER_MARGIN/5 + box_x, 
                          y_offset + row_ptr->height() - 1,
                          LColor::minipageline);
-
+#endif
        // Draw depth lines
        int const depth = firstpar->GetDepth();
        if (depth > 0) {
@@ -3391,7 +3661,11 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset,
 
                for (int i = 1; i <= depth; ++i) {
                        int const line_x = (LYX_PAPER_MARGIN / 5) *
-                               (i + minipage) + box_x;
+                               (i
+#ifndef NO_PEXTRA
+                                + minipage
+#endif
+                                       ) + box_x + x_offset;
                        pain.line(line_x, y_offset, line_x,
                                  y_offset + row_ptr->height() - 1 - (i - next_depth - 1) * 3,
                                  LColor::depthbar);
@@ -3412,27 +3686,30 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset,
                textclasslist.Style(bview->buffer()->params.textclass,
                                    row_ptr->par()->GetLayout());
 
-       y_top = 0;
-       y_bottom = row_ptr->height();
+       int y_top = 0;
+       int y_bottom = row_ptr->height();
        
-       /* is it a first row? */ 
+       // is it a first row?
        if (!row_ptr->pos() && (row_ptr->par() == firstpar)) {
                
-               /* start of appendix? */
-               if (row_ptr->par()->start_of_appendix){
+               // start of appendix?
+               if (row_ptr->par()->params.startOfAppendix()) {
                        pain.line(1, y_offset,
                                  ww - 2, y_offset,
                                  LColor::appendixline);
                }
                
-               /* think about the margins */ 
+               // think about the margins
                if (!row_ptr->previous() && bv_owner)
                        y_top += LYX_PAPER_MARGIN;
                
-               if (row_ptr->par()->pagebreak_top){ /* draw a top pagebreak  */
+               // draw a top pagebreak
+               if (row_ptr->par()->params.pagebreakTop()) {
                        LyXFont pb_font;
                        pb_font.setColor(LColor::pagebreak).decSize();
-                       int w = 0, a = 0, d = 0;
+                       int w = 0;
+                       int a = 0;
+                       int d = 0;
                        pain.line(0, y_offset + y_top + 2*DefaultHeight(),
                                  ww, 
                                  y_offset + y_top + 2 * DefaultHeight(),
@@ -3453,8 +3730,8 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset,
                        y_top += 3 * DefaultHeight();
                }
                
-               if (row_ptr->par()->added_space_top.kind() == VSpace::VFILL) {
-                       /* draw a vfill top  */
+               if (row_ptr->par()->params.spaceTop().kind() == VSpace::VFILL) {
+                       // draw a vfill top
                        pain.line(0, y_offset + 2 + y_top,
                                  LYX_PAPER_MARGIN, y_offset + 2 + y_top,
                                  LColor::vfillline);
@@ -3472,25 +3749,26 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset,
                        y_top += 3 * DefaultHeight();
                }
                
-               /* think about user added space */ 
-               y_top += int(row_ptr->par()->added_space_top.inPixels(bview));
+               // think about user added space
+               y_top += int(row_ptr->par()->params.spaceTop().inPixels(bview));
                
-               /* think about the parskip */ 
-               /* some parskips VERY EASY IMPLEMENTATION */ 
+               // think about the parskip
+               // some parskips VERY EASY IMPLEMENTATION
                if (bview->buffer()->params.paragraph_separation == BufferParams::PARSEP_SKIP) {
                        if (layout.latextype == LATEX_PARAGRAPH
                            && firstpar->GetDepth() == 0
-                           && firstpar->Previous())
+                           && firstpar->previous())
                                y_top += bview->buffer()->params.getDefSkip().inPixels(bview);
-                       else if (firstpar->Previous()
+                       else if (firstpar->previous()
                                 && textclasslist.Style(bview->buffer()->params.textclass,
-                                                       firstpar->Previous()->GetLayout()).latextype == LATEX_PARAGRAPH
-                                && firstpar->Previous()->GetDepth() == 0)
+                                                       firstpar->previous()->GetLayout()).latextype == LATEX_PARAGRAPH
+                                && firstpar->previous()->GetDepth() == 0)
                                // is it right to use defskip here, too? (AS) 
                                y_top += bview->buffer()->params.getDefSkip().inPixels(bview);
                }
                
-               if (row_ptr->par()->line_top) {      /* draw a top line  */
+               if (row_ptr->par()->params.lineTop()) {
+                       // draw a top line
                        y_top +=  lyxfont::ascent('x',
                                                  GetFont(bview->buffer(),
                                                          row_ptr->par(), 0));
@@ -3507,7 +3785,7 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset,
                                                              row_ptr->par(), 0));
                }
                
-               /* should we print a label? */ 
+               // should we print a label?
                if (layout.labeltype >= LABEL_STATIC
                    && (layout.labeltype != LABEL_STATIC
                        || layout.latextype != LATEX_ENVIRONMENT
@@ -3520,11 +3798,14 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset,
                                
                                if (layout.labeltype == LABEL_COUNTER_CHAPTER) {
                                        if (bview->buffer()->params.secnumdepth >= 0) {
-                                               /* this is special code for the chapter layout. This is printed in
-                                                * an extra row and has a pagebreak at the top. */
+                                               // this is special code for
+                                               // the chapter layout. This is
+                                               // printed in an extra row
+                                               // and has a pagebreak at
+                                               // the top.
                                                float spacing_val = 1.0;
-                                               if (!row_ptr->par()->spacing.isDefault()) {
-                                                       spacing_val = row_ptr->par()->spacing.getValue();
+                                               if (!row_ptr->par()->params.spacing().isDefault()) {
+                                                       spacing_val = row_ptr->par()->params.spacing().getValue();
                                                } else {
                                                        spacing_val = bview->buffer()->params.spacing.getValue();
                                                }
@@ -3553,13 +3834,14 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset,
                                                tmpx = x - lyxfont::width(layout.labelsep, font)
                                                        - lyxfont::width(tmpstring, font);
 
-                                       /* draw it! */
+                                       // draw it!
                                        pain.text(int(tmpx),
                                                  y_offset + row_ptr->baseline(),
                                                  tmpstring, font);
                                }
                        }
-                       /* the labels at the top of an environment. More or less for bibliography */ 
+                       // the labels at the top of an environment.
+                       // More or less for bibliography
                } else if (layout.labeltype == LABEL_TOP_ENVIRONMENT ||
                           layout.labeltype == LABEL_BIBLIO ||
                           layout.labeltype == LABEL_CENTERED_TOP_ENVIRONMENT) {
@@ -3570,8 +3852,8 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset,
                                        string const tmpstring =
                                                row_ptr->par()->GetLabelstring();
                                        float spacing_val = 1.0;
-                                       if (!row_ptr->par()->spacing.isDefault()) {
-                                               spacing_val = row_ptr->par()->spacing.getValue();
+                                       if (!row_ptr->par()->params.spacing().isDefault()) {
+                                               spacing_val = row_ptr->par()->params.spacing().getValue();
                                        } else {
                                                spacing_val = bview->buffer()->params.spacing.getValue();
                                        }
@@ -3609,7 +3891,7 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset,
                }
        }
        
-       /* is it a last row? */
+       // is it a last row?
 #ifndef NEW_INSETS
        LyXParagraph * par = row_ptr->par()->LastPhysicalPar();
 #else
@@ -3623,29 +3905,30 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset,
 #endif
                && (!row_ptr->next() || row_ptr->next()->par() != row_ptr->par()))
        {
-               /* think about the margins */ 
+               // think about the margins
                if (!row_ptr->next() && bv_owner)
                        y_bottom -= LYX_PAPER_MARGIN;
                
-               /* draw a bottom pagebreak */ 
-               if (firstpar->pagebreak_bottom) {
+               // draw a bottom pagebreak
+               if (firstpar->params.pagebreakBottom()) {
                        LyXFont pb_font;
                        pb_font.setColor(LColor::pagebreak).decSize();
-                       int w = 0, a = 0, d = 0;
-                       pain.line(0,
-                                 y_offset + y_bottom - 2 * DefaultHeight(), 
-                                 ww, 
-                                 y_offset + y_bottom - 2 * DefaultHeight(),
-                                 LColor::pagebreak,
-                                 Painter::line_onoffdash)
-                               .rectText(0,
-                                         0,
+                       int const y_place = y_offset + y_bottom
+                               - 2 * DefaultHeight();
+                       
+                       int w = 0;
+                       int a = 0;
+                       int d = 0;
+                       pain
+                               .line(0, y_place, ww, y_place,
+                                     LColor::pagebreak,
+                                     Painter::line_onoffdash)
+                               .rectText(0, 0,
                                          _("Page Break (bottom)"),
                                          pb_font,
                                          LColor::background,
                                          LColor::background, false, w, a, d);
-                       pain.rectText((ww - w) / 2,
-                                     y_offset + y_top + 2 * DefaultHeight() + d,
+                       pain.rectText((ww - w) / 2, y_place + d,
                                      _("Page Break (bottom)"),
                                      pb_font,
                                      LColor::background,
@@ -3653,31 +3936,42 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset,
                        y_bottom -= 3 * DefaultHeight();
                }
                
-               if (firstpar->added_space_bottom.kind() == VSpace::VFILL) {
-                       /* draw a vfill bottom  */
-                       pain.line(0, y_offset + y_bottom - 3 * DefaultHeight(),
-                                 LYX_PAPER_MARGIN,
-                                 y_offset + y_bottom - 3 * DefaultHeight(),
+               if (firstpar->params.spaceBottom().kind() == VSpace::VFILL) {
+                       // draw a vfill bottom
+                       int const y_place = y_offset + y_bottom
+                               - 3 * DefaultHeight();
+                       
+                       pain.line(0, y_place,
+                                 LYX_PAPER_MARGIN, y_place,
                                  LColor::vfillline);
                        pain.line(0, y_offset + y_bottom - 2,
                                  LYX_PAPER_MARGIN,
                                  y_offset + y_bottom - 2,
                                  LColor::vfillline);
                        pain.line(LYX_PAPER_MARGIN / 2,
-                                 y_offset + y_bottom - 3 * DefaultHeight(),
+                                 y_place,
                                  LYX_PAPER_MARGIN / 2,
                                  y_offset + y_bottom - 2,
                                  LColor::vfillline);
                        y_bottom -= 3 * DefaultHeight();
                }
                
-               /* think about user added space */ 
-               y_bottom -= int(firstpar->added_space_bottom.inPixels(bview));
+               // think about user added space
+               y_bottom -= int(firstpar->params.spaceBottom().inPixels(bview));
                
-               if (firstpar->line_bottom) {
-                       /* draw a bottom line */
-                       y_bottom -= lyxfont::ascent('x', GetFont(bview->buffer(),
-                                                                par, par->Last() - 1));
+               if (firstpar->params.lineBottom()) {
+                       // draw a bottom line
+#ifndef NEW_INSETS
+                       y_bottom -= lyxfont::ascent('x',
+                                                   GetFont(bview->buffer(),
+                                                           par,
+                                                           par->Last() - 1));
+#else
+                       y_bottom -= lyxfont::ascent('x',
+                                                   GetFont(bview->buffer(),
+                                                           par,
+                                                           par->size() - 1));
+#endif
                        int const w = (inset_owner ?
                                       inset_owner->width(bview, font) : ww);
                        int const xp = static_cast<int>(inset_owner ? x : 0);
@@ -3685,10 +3979,17 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset,
                                  w, y_offset + y_bottom,
                                  LColor::topline, Painter::line_solid,
                                  Painter::line_thick);
+#ifndef NEW_INSETS
                        y_bottom -= lyxfont::ascent('x',
                                                    GetFont(bview->buffer(),
                                                            par,
                                                            par->Last() - 1));
+#else
+                       y_bottom -= lyxfont::ascent('x',
+                                                   GetFont(bview->buffer(),
+                                                           par,
+                                                           par->size() - 1));
+#endif
                }
 
                // draw an endlabel
@@ -3747,7 +4048,7 @@ void LyXText::GetVisibleRow(BufferView * bview, int y_offset, int x_offset,
                }
        }
        
-       /* draw the text in the pixmap */  
+       // draw the text in the pixmap
        
        vpos = row_ptr->pos();
 
@@ -3944,15 +4245,16 @@ void LyXText::InsertFootnoteEnvironment(BufferView * bview,
                 _("Sorry."));
      return;
    }
+#ifndef NO_PEXTRA
    /* no marginpars in minipages */
    if (kind == LyXParagraph::MARGIN 
-      && cursor.par()->pextra_type == LyXParagraph::PEXTRA_MINIPAGE) {
+      && cursor.par()->params.pextraType() == LyXParagraph::PEXTRA_MINIPAGE) {
       WriteAlert(_("Impossible operation"), 
                 _("You can't insert a marginpar in a minipage!"), 
                 _("Sorry."));
       return;
    }
-   
+#endif
    /* this doesnt make sense, if there is no selection */ 
    bool dummy_selection = false;
    if (!selection) {
@@ -3970,7 +4272,7 @@ void LyXText::InsertFootnoteEnvironment(BufferView * bview,
    
    while (tmppar != sel_end_cursor.par()->ParFromPos(sel_end_cursor.pos()) && 
          tmppar->footnoteflag == LyXParagraph::NO_FOOTNOTE)
-     tmppar = tmppar->next;
+     tmppar = tmppar->next_;
    
    if (tmppar != sel_end_cursor.par()->ParFromPos(sel_end_cursor.pos())
        || tmppar->footnoteflag != LyXParagraph::NO_FOOTNOTE) {
@@ -3984,8 +4286,8 @@ void LyXText::InsertFootnoteEnvironment(BufferView * bview,
     * and sel_end cursor */
 
    SetUndo(bview->buffer(), Undo::FINISH, 
-          sel_start_cursor.par()->ParFromPos(sel_start_cursor.pos())->previous, 
-          sel_end_cursor.par()->ParFromPos(sel_end_cursor.pos())->next); 
+          sel_start_cursor.par()->ParFromPos(sel_start_cursor.pos())->previous_
+          sel_end_cursor.par()->ParFromPos(sel_end_cursor.pos())->next_); 
    
    if (sel_end_cursor.pos() > 0 
        && sel_end_cursor.par()->IsLineSeparator(sel_end_cursor.pos() - 1))
@@ -3997,14 +4299,14 @@ void LyXText::InsertFootnoteEnvironment(BufferView * bview,
 
    sel_end_cursor.par()->BreakParagraphConservative(bview->buffer()->params, sel_end_cursor.pos());
    
-   sel_end_cursor.par(sel_end_cursor.par()->Next());
+   sel_end_cursor.par(sel_end_cursor.par()->next());
    sel_end_cursor.pos(0);
    
    // don't forget to insert a dummy layout paragraph if necessary
    if (sel_start_cursor.par()->GetLayout() != sel_end_cursor.par()->layout){
      sel_end_cursor.par()->BreakParagraphConservative(bview->buffer()->params, 0);
      sel_end_cursor.par()->layout = LYX_DUMMY_LAYOUT;
-     sel_end_cursor.par(sel_end_cursor.par()->next);
+     sel_end_cursor.par(sel_end_cursor.par()->next_);
    }
    else
      sel_end_cursor.par()->layout = LYX_DUMMY_LAYOUT;
@@ -4022,7 +4324,7 @@ void LyXText::InsertFootnoteEnvironment(BufferView * bview,
    
    sel_start_cursor.par()->BreakParagraphConservative(bview->buffer()->params,
                                                    sel_start_cursor.pos());
-   tmppar = sel_start_cursor.par()->Next();
+   tmppar = sel_start_cursor.par()->next();
    
    if (dummy_selection) {
           tmppar->Clear();
@@ -4059,14 +4361,14 @@ void LyXText::InsertFootnoteEnvironment(BufferView * bview,
    while (tmppar != sel_end_cursor.par()) {
       tmppar->footnoteflag = LyXParagraph::OPEN_FOOTNOTE;
       tmppar->footnotekind = kind;
-      tmppar = tmppar->Next();
+      tmppar = tmppar->next();
    }
 
-   RedoParagraphs(bview, sel_start_cursor, sel_end_cursor.par()->Next());
+   RedoParagraphs(bview, sel_start_cursor, sel_end_cursor.par()->next());
    
-   SetCursor(bview, sel_start_cursor.par()->Next(), 0);
+   SetCursor(bview, sel_start_cursor.par()->next(), 0);
 
-   ClearSelection();
+   ClearSelection(bview);
 }
 #endif
 
@@ -4077,7 +4379,7 @@ Row * LyXText::GetRow(LyXParagraph * par,
 {
        if (!firstrow)
                return 0;
-
+       
        Row * tmprow = firstrow;
        y = 0;