Index: scribus/collect4output.cpp
===================================================================
--- scribus/collect4output.cpp	(revision 17759)
+++ scribus/collect4output.cpp	(working copy)
@@ -23,11 +23,12 @@
 #include "scpattern.h"
 #include "util_file.h"
 
+#include <QDir>
+#include <QMap>
 #include <QMessageBox>
 #include <QProgressBar>
 #include <QString>
-#include <QMap>
-#include <QDir>
+#include <QTextDocumentWriter>
 
 CollectForOutput::CollectForOutput(ScribusDoc* doc, QString outputDirectory, bool withFonts, bool withProfiles, bool compressDoc)
 	: QObject(ScCore),
@@ -74,15 +75,26 @@
 		return false;
 	if (!m_outputDirectory.endsWith("/"))
 		m_outputDirectory += "/";
-	QDir dir(m_outputDirectory);
-	if (!dir.exists())
+
+	QStringList directories;
+	directories.append(m_outputDirectory);
+	directories.append(m_outputDirectory + "images/");
+	if (m_withFonts)
+		directories.append(m_outputDirectory + "fonts/");
+	if (m_withProfiles)
+		directories.append(m_outputDirectory + "profiles/");
+
+	for (int i = 0; i < directories.count(); ++i)
 	{
-		bool created = dir.mkpath(m_outputDirectory);
+		QDir dir(directories[i]);
+		if (dir.exists()) continue;
+		
+		bool created = dir.mkpath(directories[i]);
 		if (!created)
 		{
 			QMessageBox::warning(ScCore->primaryMainWindow(), CommonStrings::trWarning,
-							 "<qt>" + tr("Cannot create directory:\n%1").arg(m_outputDirectory) + "</qt>",
-							 CommonStrings::tr_OK);
+			                     "<qt>" + tr("Cannot create directory:\n%1").arg(directories[i]) + "</qt>",
+			                     CommonStrings::tr_OK);
 			return false;
 		}
 	}
@@ -131,6 +143,18 @@
 	ScCore->fileWatcher->start();
 	collectedFiles.clear();
 	newFileName=newName;
+
+	QString filename = m_outputDirectory + "report.txt";
+	/*QFile f(filename);
+	if(!f.open(QIODevice::WriteOnly))
+		return false;
+	QString wr = "";
+	wr += m_message;
+	QByteArray utf8wr = wr.toUtf8();
+	QDataStream s(&f);
+	s.writeRawData(utf8wr.data(), utf8wr.length());
+	f.close();
+*/
 	return QString::null;
 }
 
@@ -138,6 +162,7 @@
 {
 	QFileInfo fi = QFileInfo(m_outputDirectory);
 	newName = m_outputDirectory;
+	m_message = "\nSOURCE DOCUMENT\n====================\n"+m_message +"\n";
 	if (!fi.exists())
 		return false;
 	if (!fi.isDir() || !fi.isWritable())
@@ -330,6 +355,7 @@
 
 bool CollectForOutput::collectFonts()
 {
+	//m_message = m_message + "\n\nUSED FONTS\n====================\n";
 	PrefsManager *prefsManager = PrefsManager::instance();
 	QMap<QString,int>::Iterator it3;
 	QMap<QString,int>::Iterator it3end = m_Doc->UsedFonts.end();
@@ -337,7 +363,8 @@
 	for (it3 = m_Doc->UsedFonts.begin(); it3 != it3end; ++it3)
 	{
 		QFileInfo itf(prefsManager->appPrefs.fontPrefs.AvailFonts[it3.key()].fontFilePath());
-		copyFileAtomic(prefsManager->appPrefs.fontPrefs.AvailFonts[it3.key()].fontFilePath(), m_outputDirectory + itf.fileName());
+		copyFileAtomic(prefsManager->appPrefs.fontPrefs.AvailFonts[it3.key()].fontFilePath(), m_outputDirectory + "fonts/" + itf.fileName());
+		//m_message = m_message + "fonts/" + itf.fileName() +"\n";
 		if (prefsManager->appPrefs.fontPrefs.AvailFonts[it3.key()].type() == ScFace::TYPE1)
 		{
 			QStringList metrics;
@@ -360,7 +387,8 @@
 			{
 				QString origAFM = metrics[a];
 				QFileInfo fi(origAFM);
-				copyFileAtomic(origAFM, m_outputDirectory + fi.fileName());
+				copyFileAtomic(origAFM, m_outputDirectory + "fonts/" + fi.fileName());
+				//m_message = m_message + "fonts/" + fi.fileName() +"\n";
 			}
 		}
 		if (uiCollect)
@@ -413,21 +441,24 @@
 
 bool CollectForOutput::collectProfiles()
 {
+	//m_message = m_message + "\n\nUSED PROFILES\n====================\n";
 	ProfilesL::Iterator itend = docProfiles.end();
 	int c=0;
 	for (ProfilesL::Iterator it = docProfiles.begin(); it != itend; ++it)
 	{
 		QString profileName(it.key());
 		QString profilePath(it.value());
-		copyFileAtomic(profilePath, m_outputDirectory + QFileInfo(profilePath).fileName());
+		copyFileAtomic(profilePath, m_outputDirectory + "profiles/" + QFileInfo(profilePath).fileName());
 		if (uiCollect)
 			emit profilesCollected(c++);
+		//m_message = m_message + "profiles/" + QFileInfo(profilePath).fileName();
 	}
 	return true;
 }
 
 QString CollectForOutput::collectFile(QString oldFile, QString newFile)
 {
+	//m_message = m_message + "USED IMAGES\n====================\n";
 	uint cnt = 1;
 	bool copy = true;
 
@@ -445,7 +476,10 @@
 		++cnt;
 	}
 	if (copy)
-		copyFileAtomic(oldFile, m_outputDirectory + newFile);
+	{
+		copyFileAtomic(oldFile, m_outputDirectory +"images/" + newFile);
+		//m_message = m_message + "images/" + newFile +"\n";
+	}
 	collectedFiles[newFile] = oldFile;
-	return m_outputDirectory + newFile;
+	return m_outputDirectory +"images/" + newFile;
 }
Index: scribus/collect4output.h
===================================================================
--- scribus/collect4output.h	(revision 17759)
+++ scribus/collect4output.h	(working copy)
@@ -61,6 +61,8 @@
 		QMap<QString, QString> collectedFiles;
 		/*! Reference to the preferences */
 		PrefsContext* dirs;
+		/*! Report text */
+		QString m_message;
 
 		/*! Ask user for output directory via GUI.
 		\retval true on success */
Index: scribus/scribus.cpp
===================================================================
--- scribus/scribus.cpp	(revision 17759)
+++ scribus/scribus.cpp	(working copy)
@@ -3883,9 +3883,17 @@
 			is12doc=true;
 		}
 
+		QDir docProfileDir(fi.absolutePath() + "/profiles");
 		ScCore->getCMSProfilesDir(fi.absolutePath()+"/", false, false);
+		if (docProfileDir.exists())
+			ScCore->getCMSProfilesDir(fi.absolutePath()+"/profiles", false, false);
+
+		QDir docFontDir(fi.absolutePath() + "/fonts");
 		prefsManager->appPrefs.fontPrefs.AvailFonts.AddScalableFonts(fi.absolutePath()+"/", FName);
+		if (docFontDir.exists())
+			prefsManager->appPrefs.fontPrefs.AvailFonts.AddScalableFonts(fi.absolutePath()+"/fonts", FName);
 		prefsManager->appPrefs.fontPrefs.AvailFonts.updateFontMap();
+
 		doc=new ScribusDoc();
 		doc->is12doc=is12doc;
 		doc->appMode = modeNormal;
