diff --git a/src/tools/uic/cpp/cppextractimages.cpp b/src/tools/uic/cpp/cppextractimages.cpp
index d452168..52c1b9d 100644
--- a/src/tools/uic/cpp/cppextractimages.cpp
+++ b/src/tools/uic/cpp/cppextractimages.cpp
@@ -134,7 +134,7 @@ void ExtractImages::acceptImage(DomImage *image)
         QTextStream *imageOut = new QTextStream(&f);
         imageOut->setCodec(QTextCodec::codecForName("UTF-8"));
 
-        CPP::WriteIconData::writeImage(*imageOut, QString(), image);
+        CPP::WriteIconData::writeImage(*imageOut, QString(), m_option.limitXPM_LineLength, image);
         delete imageOut;
     } else {
         CPP::WriteIconData::writeImage(f, image);
diff --git a/src/tools/uic/cpp/cppwriteicondata.cpp b/src/tools/uic/cpp/cppwriteicondata.cpp
index 81ef56b..e9aae2d 100644
--- a/src/tools/uic/cpp/cppwriteicondata.cpp
+++ b/src/tools/uic/cpp/cppwriteicondata.cpp
@@ -114,10 +114,11 @@ void WriteIconData::acceptImages(DomImages *images)
 
 void WriteIconData::acceptImage(DomImage *image)
 {
-    writeImage(output, option.indent, image);
+    writeImage(output, option.indent, option.limitXPM_LineLength, image);
 }
 
-void WriteIconData::writeImage(QTextStream &output, const QString &indent, DomImage *image)
+void WriteIconData::writeImage(QTextStream &output, const QString &indent,
+                               bool limitXPM_LineLength, const DomImage *image)
 {
     QString img = image->attributeName() + QLatin1String("_data");
     QString data = image->elementData()->text();
@@ -133,7 +134,8 @@ void WriteIconData::writeImage(QTextStream &output, const QString &indent, DomIm
         int a = 0;
         int column = 0;
         bool inQuote = false;
-        output << indent << "static const char* const " << img << "[] = { \n";
+        output << indent << "/* XPM */\n"
+               << indent << "static const char* const " << img << "[] = { \n";
         while (baunzip[a] != '\"')
             a++;
         for (; a < (int) length; a++) {
@@ -144,7 +146,8 @@ void WriteIconData::writeImage(QTextStream &output, const QString &indent, DomIm
                 inQuote = !inQuote;
             }
 
-            if (column++ >= 511 && inQuote) {
+            column++;
+            if (limitXPM_LineLength && column >= 512 && inQuote) {
                 output << "\"\n\""; // be nice with MSVC & Co.
                 column = 1;
             }
diff --git a/src/tools/uic/cpp/cppwriteicondata.h b/src/tools/uic/cpp/cppwriteicondata.h
index 40d56bc..42cfab0 100644
--- a/src/tools/uic/cpp/cppwriteicondata.h
+++ b/src/tools/uic/cpp/cppwriteicondata.h
@@ -64,7 +64,8 @@ public:
     void acceptImages(DomImages *images);
     void acceptImage(DomImage *image);
 
-    static void writeImage(QTextStream &output, const QString &indent, DomImage *image);
+    static void writeImage(QTextStream &output, const QString &indent,
+                           bool limitXPM_LineLength, const DomImage *image);
     static void writeImage(QIODevice &output, DomImage *image);
 
 private:
diff --git a/src/tools/uic/option.h b/src/tools/uic/option.h
index f1198a0..8556728 100644
--- a/src/tools/uic/option.h
+++ b/src/tools/uic/option.h
@@ -61,6 +61,7 @@ struct Option
     unsigned int autoConnection : 1;
     unsigned int dependencies : 1;
     unsigned int extractImages : 1;
+    unsigned int limitXPM_LineLength : 1;
     unsigned int implicitIncludes: 1;
     Generator generator;
 
@@ -85,6 +86,7 @@ struct Option
           autoConnection(1),
           dependencies(0),
           extractImages(0),
+          limitXPM_LineLength(0),
           implicitIncludes(1),
           generator(CppGenerator),
           prefix(QLatin1String("Ui_"))
diff --git a/src/tools/uic3/converter.cpp b/src/tools/uic3/converter.cpp
index e1b4b38..2ee939d 100644
--- a/src/tools/uic3/converter.cpp
+++ b/src/tools/uic3/converter.cpp
@@ -518,6 +518,7 @@ DomUI *Ui3Reader::generateUi4(const QDomElement &widget)
     if (m_extractImages) {
         Option opt;
         opt.extractImages = m_extractImages;
+        opt.limitXPM_LineLength = (m_options & LimitXPM_LineLength) ? 1 : 0;
         opt.qrcOutputFile = m_qrcOutputFile;
         CPP::ExtractImages(opt).acceptUI(ui);
 
diff --git a/src/tools/uic3/form.cpp b/src/tools/uic3/form.cpp
index df1314f..9df644a 100644
--- a/src/tools/uic3/form.cpp
+++ b/src/tools/uic3/form.cpp
@@ -256,6 +256,7 @@ void Ui3Reader::createFormDecl(const QDomElement &e)
     d.option().headerProtection = false;
     d.option().copyrightHeader = false;
     d.option().extractImages = m_extractImages;
+    d.option().limitXPM_LineLength = (m_options & LimitXPM_LineLength) ? 1 : 0;
     d.option().qrcOutputFile = m_qrcOutputFile;
     d.option().implicitIncludes = (m_options & ImplicitIncludes) ? 1 : 0;
     if (trmacro.size())
diff --git a/src/tools/uic3/main.cpp b/src/tools/uic3/main.cpp
index 1ebb76a..d7657b1 100644
--- a/src/tools/uic3/main.cpp
+++ b/src/tools/uic3/main.cpp
@@ -149,6 +149,8 @@ int runUic3(int argc, char * argv[])
                 readerOptions &= ~Ui3Reader::CustomWidgetForwardDeclarations;
             } else if (opt == "layout-names") {
                 readerOptions |= Ui3Reader::PreserveLayoutNames;
+            } else if (opt == "limit-xpm-linelength") {
+                readerOptions |= Ui3Reader::LimitXPM_LineLength;
             } else if (opt == "nounload") {
                 // skip
             } else if (opt == "convert") {
@@ -251,6 +253,7 @@ int runUic3(int argc, char * argv[])
                  "Options:\n"
                  "\t-o file            Write output to file rather than stdout\n"
                  "\t-extract qrcFile   Create resource file and extract embedded images into \"image\" dir\n"
+                 "\t-limit-xpm-linelength Limit the line length of XPM files for -extract.\n"
                  "\t-pch file          Add #include \"file\" as the first statement in implementation\n"
                  "\t-nofwd             Omit forward declarations of custom classes\n"
                  "\t-layout-names      Preserve layout names of Qt Designer 3\n"
diff --git a/src/tools/uic3/ui3reader.cpp b/src/tools/uic3/ui3reader.cpp
index fd50a19..995adf1 100644
--- a/src/tools/uic3/ui3reader.cpp
+++ b/src/tools/uic3/ui3reader.cpp
@@ -518,7 +518,7 @@ bool Ui3Reader::isWidgetInTable(const QDomElement& e, const QString& connection,
     return false;
 }
 
-/*!
+/*!iconda
   Registers all database connections, cursors and forms.
 */
 
diff --git a/src/tools/uic3/ui3reader.h b/src/tools/uic3/ui3reader.h
index 144ef05..abe323e 100644
--- a/src/tools/uic3/ui3reader.h
+++ b/src/tools/uic3/ui3reader.h
@@ -68,7 +68,8 @@ typedef QList<QPair<int, Color> > ColorGroup;
 class Ui3Reader
 {
 public:
-    enum Options { CustomWidgetForwardDeclarations = 0x1, ImplicitIncludes = 0x2, PreserveLayoutNames = 0x4 };
+    enum Options { CustomWidgetForwardDeclarations = 0x1, ImplicitIncludes = 0x2,
+                   PreserveLayoutNames = 0x4, LimitXPM_LineLength = 0x8 };
 
     explicit Ui3Reader(QTextStream &stream, unsigned options);
     ~Ui3Reader();
