diff --git a/offapi/Package_offapi_idl.mk b/offapi/Package_offapi_idl.mk
new file mode 100644
--- /dev/null
+++ b/offapi/Package_offapi_idl.mk
@@ -0,0 +1,29 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org.	If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+$(eval $(call gb_UnoApiTarget_autopackage_idl,offapi))
+
diff --git a/offapi/Package_offapi_inc.mk b/offapi/Package_offapi_inc.mk
new file mode 100644
--- /dev/null
+++ b/offapi/Package_offapi_inc.mk
@@ -0,0 +1,29 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org.	If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+$(eval $(call gb_UnoApiTarget_autopackage_inc,offapi))
+
diff --git a/offapi/UnoApi_types.mk b/offapi/UnoApi_types.mk
new file mode 100644
--- /dev/null
+++ b/offapi/UnoApi_types.mk
@@ -0,0 +1,36 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org.	If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+$(eval $(call gb_UnoApiTarget_UnoApiTarget,types))
+
+$(eval $(call gb_UnoApiTarget_add_merge_rdbfiles,types,\
+    udkapi \
+    offapi \
+))
+
+
+# vim: set noet sw=4 ts=4:
diff --git a/offapi/com/sun/star/drawing/XSlidePreviewCacheListener.idl b/offapi/com/sun/star/drawing/XSlidePreviewCacheListener.idl
new file mode 100644
--- /dev/null
+++ b/offapi/com/sun/star/drawing/XSlidePreviewCacheListener.idl
@@ -0,0 +1,55 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org.  If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef __com_sun_star_drawing_XSlidePreviewCacheListener_idl__
+#define __com_sun_star_drawing_XSlidePreviewCacheListener_idl__
+
+#ifndef __com_sun_star_uno_XInterface_idl__
+#include <com/sun/star/uno/XInterface.idl>
+#endif
+
+module com { module sun { module star { module drawing {
+
+/** Listener for asynchronous preview creations.  Called when a slide
+    preview has been created that was previously requested via a call to
+    <method>XSlidePreviewCache::getSlidePreview()</method>.  The
+    implementor may then call <method>getSlidePreview()</method> a second
+    time to get the up-to-date version of the preview.
+*/
+interface XSlidePreviewCacheListener
+{
+    /** Called by a <interface>XSlidePreviewCache</interface> object when a
+        preview has been created for the slide with the given index.
+        @param nSlideIndex
+            The index of the slide for which a new preview has been created.
+    */
+    void notifyPreviewCreation ([in] long nSlideIndex);
+};
+
+}; }; }; }; // ::com::sun::star::drawing
+
+#endif
diff --git a/offapi/com/sun/star/drawing/XSlideSorterBase.idl b/offapi/com/sun/star/drawing/XSlideSorterBase.idl
new file mode 100644
--- /dev/null
+++ b/offapi/com/sun/star/drawing/XSlideSorterBase.idl
@@ -0,0 +1,137 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org.  If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef __com_sun_star_drawing_XSlideSorterBase_idl__
+#define __com_sun_star_drawing_XSlideSorterBase_idl__
+
+#ifndef __com_sun_star_drawing_framework_XView_idl__
+#include <com/sun/star/drawing/framework/XView.idl>
+#endif
+#ifndef __com_sun_star_drawing_XDrawView_idl__
+#include <com/sun/star/drawing/XDrawView.idl>
+#endif
+#ifndef __com_sun_star_awt_XWindow_idl__
+#include <com/sun/star/awt/XWindow.idl>
+#endif
+#ifndef __com_sun_star_container_XIndexAccess_idl__
+#include <com/sun/star/container/XIndexAccess.idl>
+#endif
+#ifndef __com_sun_star_frame_XController_idl__
+#include <com/sun/star/frame/XController.idl>
+#endif
+#ifndef __com_sun_star_util_Color_idl__
+#include <com/sun/star/util/Color.idl>
+#endif
+
+module com {  module sun {  module star {  module drawing {
+
+/** This interface exists only because services do not directly support
+    multiple inheritance and attributes.
+    <p>It provides the interfaces and attributes that every object that
+    implements the <type>SlideSorter</type> service.</p>
+*/
+interface XSlideSorterBase
+{
+    /** This interface is included to mark a <type>SlideSorter</type> object
+        as view of the drawing framework and to provide a
+        <type>ResourceId</type>.
+    */
+    interface ::com::sun::star::drawing::framework::XView;
+
+    /** The <type>XDrawView</type> interface is included to provide access
+        to the current slide (especially write access).
+    */
+    interface ::com::sun::star::drawing::XDrawView;
+
+    /** The set of slides that are displayed by the implementing object.
+        <p>The default value is the set of all slides of the document for
+        which a slide sorter is created.</p>
+    */
+    [attribute] ::com::sun::star::container::XIndexAccess DocumentSlides;
+
+    /** Set this flag to <TRUE/> in order to have the current slide
+        highlighted.
+        <p>The default value is <FALSE/>.</p>
+    */
+    [attribute] boolean IsHighlightCurrentSlide;
+
+    /** Set this flag to <TRUE/> in order to visualize the selection of
+        slides (typically a bold frame around the selected slides).
+        <p>The default value is <TRUE/>.</p>
+    */
+    [attribute] boolean IsShowSelection;
+
+    /** Set this flag to <TRUE/> to visualize to where the focus is by
+        showing a dotted rectangle around the focused slide.
+        <p>The default value is <TRUE/>.</p>
+    */
+    [attribute] boolean IsShowFocus;
+
+    /** When this flag has the value <TRUE/> then every time the current
+        slide is changed the visual area is shifted so that the new current
+        slide is display in the center of the slide sorter window.
+        <p>It is not always possible to move the current slide into the
+        exact center of the window, for example when slides are located near
+        the start or end of a document.</p>
+        <p>The default value is <FALSE/>.
+    */
+    [attribute] boolean IsCenterSelection;
+
+    /** This flag controls whether updates of previews are created during
+        full screen presentations (<FALSE/>) or not (<TRUE/>).  The
+        suspension of preview creations is an optimization for not slowing
+        down a running presentation.
+        <p>The default value is <TRUE/>.</p>
+    */
+    [attribute] boolean IsSuspendPreviewUpdatesDuringFullScreenPresentation;
+
+    /** The orientation of a slide sorter can be either vertical (<TRUE/>)
+        or horizontal (<FALSE/>).
+    */
+    [attribute] boolean IsOrientationVertical;
+
+    /** This flag is a hint to make scrolling look smooth.
+    */
+    [attribute] boolean IsSmoothScrolling;
+
+    [attribute] ::com::sun::star::util::Color BackgroundColor;
+    [attribute] ::com::sun::star::util::Color TextColor;
+    [attribute] ::com::sun::star::util::Color SelectionColor;
+    [attribute] ::com::sun::star::util::Color HighlightColor;
+
+    /** This flag controls whether the model can be modified by using
+        keyboard or mouse.
+        <p>The default value is <TRUE/>.</p>
+    */
+    [attribute] boolean IsUIReadOnly;
+};
+
+
+
+}; }; }; };
+
+#endif
diff --git a/offapi/com/sun/star/drawing/framework/BorderType.idl b/offapi/com/sun/star/drawing/framework/BorderType.idl
new file mode 100644
--- /dev/null
+++ b/offapi/com/sun/star/drawing/framework/BorderType.idl
@@ -0,0 +1,46 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org.  If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef __com_sun_star_drawing_framework_BorderType_idl__
+#define __com_sun_star_drawing_framework_BorderType_idl__
+
+
+module com { module sun { module star { module drawing { module framework {
+
+/** See XPaneBorderPainter and its addBorder() and removeBorder() methods
+    for an explanation of the border type and its values.
+*/
+enum BorderType
+{
+    INNER_BORDER,
+    OUTER_BORDER,
+    TOTAL_BORDER
+};
+
+}; }; }; }; }; // ::com::sun::star::drawing::framework
+
+#endif
diff --git a/offapi/com/sun/star/frame/UntitledNumbersConst.idl b/offapi/com/sun/star/frame/UntitledNumbersConst.idl
new file mode 100644
--- /dev/null
+++ b/offapi/com/sun/star/frame/UntitledNumbersConst.idl
@@ -0,0 +1,39 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org.  If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef __com_sun_star_frame_UntitledNumbersConst_idl__
+#define __com_sun_star_frame_UntitledNumbersConst_idl__
+
+ module com {  module sun {  module star {  module frame {
+
+constants UntitledNumbersConst
+{
+    const long INVALID_NUMBER = 0;
+};
+
+}; }; }; };
+
+#endif
diff --git a/offapi/com/sun/star/rendering/ARGBColor.idl b/offapi/com/sun/star/rendering/ARGBColor.idl
new file mode 100644
--- /dev/null
+++ b/offapi/com/sun/star/rendering/ARGBColor.idl
@@ -0,0 +1,55 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org.  If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef __com_sun_star_rendering_ARGBColor_idl__
+#define __com_sun_star_rendering_ARGBColor_idl__
+
+#ifndef __com_sun_star_rendering_ColorComponent_idl__
+#include <com/sun/star/rendering/ColorComponent.idl>
+#endif
+
+module com { module sun { module star { module rendering {
+
+/// ARGB color quad
+struct ARGBColor
+{
+    /** Alpha component.<p>
+
+        Valid range is [0,1.0], with 0.0 denoting fully transparent,
+        and 1.0 fully opaque.
+     */
+    ColorComponent Alpha;
+    /// Red component. Valid range is [0,1.0]
+    ColorComponent Red;
+    /// Green component. Valid range is [0,1.0]
+    ColorComponent Green;
+    /// Blue component. Valid range is [0,1.0]
+    ColorComponent Blue;
+};
+
+}; }; }; };
+
+#endif
diff --git a/offapi/com/sun/star/rendering/BitmapCanvas.idl b/offapi/com/sun/star/rendering/BitmapCanvas.idl
new file mode 100644
--- /dev/null
+++ b/offapi/com/sun/star/rendering/BitmapCanvas.idl
@@ -0,0 +1,57 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org.  If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef __com_sun_star_rendering_BitmapCanvas_idl__
+#define __com_sun_star_rendering_BitmapCanvas_idl__
+
+#ifndef __com_sun_star_rendering_XBitmap_idl__
+#include <com/sun/star/rendering/XBitmap.idl>
+#endif
+#ifndef __com_sun_star_rendering_XBitmapCanvas_idl__
+#include <com/sun/star/rendering/XBitmapCanvas.idl>
+#endif
+
+
+module com { module sun { module star { module rendering {
+
+// TODO: Multiple-inheritance interfaces
+
+/** This service provides the interfaces for a <type>XBitmapCanvas</type>
+ */
+service BitmapCanvas
+{
+    /** Canvas interface, to issue rendering operations.
+     */
+    interface XBitmapCanvas;
+
+    /** Bitmap interface, to directly manipulate the pixel.
+     */
+    interface XBitmap;
+};
+
+}; }; }; };
+
+#endif
diff --git a/offapi/com/sun/star/rendering/Canvas.idl b/offapi/com/sun/star/rendering/Canvas.idl
new file mode 100644
--- /dev/null
+++ b/offapi/com/sun/star/rendering/Canvas.idl
@@ -0,0 +1,42 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org.  If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef __com_sun_star_rendering_Canvas_idl__
+#define __com_sun_star_rendering_Canvas_idl__
+
+#ifndef __com_sun_star_rendering_XCanvas_idl__
+#include <com/sun/star/rendering/XCanvas.idl>
+#endif
+
+
+module com { module sun { module star { module rendering {
+
+/// Service providing an <type>XCanvas</type> interface
+service Canvas: XCanvas;
+
+}; }; }; };
+
+#endif
diff --git a/offapi/com/sun/star/rendering/Color.idl b/offapi/com/sun/star/rendering/Color.idl
new file mode 100644
--- /dev/null
+++ b/offapi/com/sun/star/rendering/Color.idl
@@ -0,0 +1,41 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org.  If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef __com_sun_star_rendering_Color_idl__
+#define __com_sun_star_rendering_Color_idl__
+
+#ifndef __com_sun_star_rendering_ColorComponent_idl__
+#include <com/sun/star/rendering/ColorComponent.idl>
+#endif
+
+module com { module sun { module star { module rendering {
+
+/// Shorthand for the device-dependent color components, and easier to read
+typedef sequence<ColorComponent> Color;
+
+}; }; }; };
+
+#endif
diff --git a/offapi/com/sun/star/rendering/ColorComponent.idl b/offapi/com/sun/star/rendering/ColorComponent.idl
new file mode 100644
--- /dev/null
+++ b/offapi/com/sun/star/rendering/ColorComponent.idl
@@ -0,0 +1,38 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org.  If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef __com_sun_star_rendering_ColorComponent_idl__
+#define __com_sun_star_rendering_ColorComponent_idl__
+
+module com { module sun { module star { module rendering {
+
+/// Shorthand for the device-dependent color components, and easier to read
+typedef double ColorComponent;
+
+}; }; }; };
+
+#endif
diff --git a/offapi/com/sun/star/rendering/RGBColor.idl b/offapi/com/sun/star/rendering/RGBColor.idl
new file mode 100644
--- /dev/null
+++ b/offapi/com/sun/star/rendering/RGBColor.idl
@@ -0,0 +1,49 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org.  If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef __com_sun_star_rendering_RGBColor_idl__
+#define __com_sun_star_rendering_RGBColor_idl__
+
+#ifndef __com_sun_star_rendering_ColorComponent_idl__
+#include <com/sun/star/rendering/ColorComponent.idl>
+#endif
+
+module com { module sun { module star { module rendering {
+
+/// RGB color triplet
+struct RGBColor
+{
+    /// Red component. Valid range is [0,1.0]
+    ColorComponent Red;
+    /// Green component. Valid range is [0,1.0]
+    ColorComponent Green;
+    /// Blue component. Valid range is [0,1.0]
+    ColorComponent Blue;
+};
+
+}; }; }; };
+
+#endif
diff --git a/offapi/com/sun/star/util/SearchAlgorithms.idl b/offapi/com/sun/star/util/SearchAlgorithms.idl
new file mode 100644
--- /dev/null
+++ b/offapi/com/sun/star/util/SearchAlgorithms.idl
@@ -0,0 +1,50 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org.  If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef __com_sun_star_lang_SearchAlgorithms_idl__
+#define __com_sun_star_lang_SearchAlgorithms_idl__
+
+
+//=============================================================================
+
+module com { module sun { module star { module util {
+
+//=============================================================================
+
+
+published enum SearchAlgorithms {
+	ABSOLUTE,		// "normal" a kind of Boyer-Moore
+	REGEXP,                 // regular expression
+	APPROXIMATE		// Leveinstein distance
+};
+
+
+//=============================================================================
+}; }; }; };
+
+#endif
+
diff --git a/offapi/com/sun/star/util/SearchFlags.idl b/offapi/com/sun/star/util/SearchFlags.idl
new file mode 100644
--- /dev/null
+++ b/offapi/com/sun/star/util/SearchFlags.idl
@@ -0,0 +1,94 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org.  If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef __com_sun_star_lang_SearchFlags_idl__
+#define __com_sun_star_lang_SearchFlags_idl__
+
+
+//=============================================================================
+
+module com { module sun { module star { module util {
+
+//=============================================================================
+
+
+
+published constants SearchFlags
+{
+	//Flag for all search methods
+
+	/**
+		@deprecated : the constant ALL_IGNORE_CASE is never supported -
+						it must use the transliteration flags of
+						the SearchOptions.
+						<p>@see TransliterationModulesNew
+	*/
+	const long	ALL_IGNORE_CASE		= 0x00000001;
+
+	/// Flag for normal (Boyer-Moore) search
+	const long 	NORM_WORD_ONLY		= 0x00000010;
+
+	/// Flag for "regular expression" search / interpret as extended regular expression
+	const long 	REG_EXTENDED		= 0x00000100;
+	/** Flag for "regular expression" search / No replace, i.e., avoid sub regular
+		 expresions, return true/false to match
+
+<!-- JRH: Check this for sense of the expression. -->
+	*/
+	const long 	REG_NOSUB		= 0x00000200;
+
+	/// Flag for "regular expression" search / Special new  line treatment
+	const long 	REG_NEWLINE		= 0x00000400;
+
+	/** A NEWLINE character in string will not be matched by  a period outside bracket
+		expression or by any form of a non matching list.
+		A circumflex (^) in pattern when used to specify expression anchoring
+<!-- JRH: anhoring to anchoring.  -->
+		will match the zero length string immediately after a newline in string,
+		regardless of the setting of REG_NOTBOL
+		A dollar-sign ($) in pattern when used to specify expression anchoring,
+		will match zero-length string immediately before a new line in string,
+		regardless of the setting of REG_NOTEOL
+*/
+	const long 	REG_NOT_BEGINOFLINE	= 0x00000800;
+
+	/** The first character in the string is not the beginning of the line therefore ^  will not
+		match with first character of the string
+	*/
+	const long 	REG_NOT_ENDOFLINE	= 0x00001000;
+
+
+	/// Flags for "Weight Levenshtein-Distance" search
+	const long 	LEV_RELAXED		= 0x00010000;
+};
+
+
+//=============================================================================
+}; }; }; };
+
+#endif
+
diff --git a/offapi/com/sun/star/util/SearchOptions.idl b/offapi/com/sun/star/util/SearchOptions.idl
new file mode 100644
--- /dev/null
+++ b/offapi/com/sun/star/util/SearchOptions.idl
@@ -0,0 +1,85 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org.  If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef __com_sun_star_lang_SearchOptions_idl__
+#define __com_sun_star_lang_SearchOptions_idl__
+
+
+#include <com/sun/star/lang/Locale.idl>
+#include <com/sun/star/uno/XInterface.idl>
+#include <com/sun/star/util/SearchAlgorithms.idl>
+
+//=============================================================================
+
+module com { module sun { module star { module util {
+
+//=============================================================================
+
+
+published  struct SearchOptions  {
+	//-------------------------------------------------------------------------
+	/// search type, can be: ABSOLUTE, REGEXP, APPROXIMATE
+	SearchAlgorithms	algorithmType;
+
+	/** some flags - can be mixed
+
+		@see SearchFlags
+	*/
+	long 			searchFlag;
+
+	/// the search text
+	string			searchString;
+
+	/** the replace text
+	(is for optional replacing - SearchOption is only the data container for it)*/
+	string			replaceString;
+
+	/// this is the language for case insensitive search
+	::com::sun::star::lang::Locale  Locale;
+
+	/** this many characters can be different between the found and search word
+	in a "Weight Levenshtein-Distance"*/
+	long			changedChars;
+
+	/** this many characters can be missed in the found word
+	in a "Weight Levenshtein-Distance"*/
+	long			deletedChars;
+
+	/// this many characters can be additional in the found word in a "Weight Levenshtein-Distance"
+	long			insertedChars;
+
+	/** asian flags for the transliteration. Same meaning as the enum of TransliteratorModule
+
+		@see com/sun/star/i18n/XTransliteration.idl
+	*/
+	long			transliterateFlags;
+};
+
+}; }; }; };
+
+#endif
+
diff --git a/offapi/com/sun/star/util/SearchResult.idl b/offapi/com/sun/star/util/SearchResult.idl
new file mode 100644
--- /dev/null
+++ b/offapi/com/sun/star/util/SearchResult.idl
@@ -0,0 +1,66 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org.  If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef __com_sun_star_lang_SearchResult_idl__
+#define __com_sun_star_lang_SearchResult_idl__
+
+
+//=============================================================================
+
+module com { module sun { module star { module util {
+
+//=============================================================================
+
+
+published  struct SearchResult  {
+	//-------------------------------------------------------------------------
+	/** Number of subexpressions,
+	if it is 0, then no match found; this value is 1 for ABSOLUTE and APPROXIMATE match.
+	The start and endOffset are always dependent on the search direction.
+	For example:
+	if you search "X" in the text "-X-" the offset are:
+		for forward: 	start = 1, end = 2
+        for backward:   start = 2, end = 1
+    Forward, the startOffset is inclusive, the endOffset exclusive.
+    Backward, the startOffset is exclusive, the endOffset inclusive.
+
+	For regular expressions it can be greater than 1.
+	If the value is 1, startoffset[0] and endoffset[0] points to the matching sub string
+	if value is > 1, still startoffset[0] and endoffset[0] points to the matching substring for whole regular expression
+	startoffset[i] and endoffset[i] points to the matching substring of i th matching substring.
+	*/
+	long subRegExpressions;
+	sequence<long> startOffset;		// inclusive
+	sequence<long> endOffset;  		// exclusive
+};
+
+
+//=============================================================================
+}; }; }; };
+
+#endif
+
diff --git a/offapi/prj/makefile.mk b/offapi/prj/makefile.mk
new file mode 100644
--- /dev/null
+++ b/offapi/prj/makefile.mk
@@ -0,0 +1,40 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org.  If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+PRJ=..
+TARGET=prj
+
+.INCLUDE : settings.mk
+
+.IF "$(VERBOSE)"!=""
+VERBOSEFLAG :=
+.ELSE
+VERBOSEFLAG := -s
+.ENDIF
+
+all:
+	cd $(PRJ) && $(GNUMAKE) $(VERBOSEFLAG) -r -j$(MAXPROCESS) $(gb_MAKETARGET)
