diff --git a/src/main/java/org/olat/ims/qti/qpool/QTIImportProcessor.java b/src/main/java/org/olat/ims/qti/qpool/QTIImportProcessor.java
index 6106024213e9cc9bad9dc4ad69545c1e79a83faa..e7ee65978786c9329e29c3c2c3b1c45dab4d8353 100644
--- a/src/main/java/org/olat/ims/qti/qpool/QTIImportProcessor.java
+++ b/src/main/java/org/olat/ims/qti/qpool/QTIImportProcessor.java
@@ -234,7 +234,7 @@ class QTIImportProcessor {
 		boolean ooFormat = processItemQuestionType(poolItem, ident, itemEl);
 		if(StringHelper.containsNonWhitespace(editor)) {
 			poolItem.setEditor(editor);
-			poolItem.setEditor(editorVersion);
+			poolItem.setEditorVersion(editorVersion);
 		} else if(ooFormat) {
 			poolItem.setEditor("OpenOLAT");
 		}
diff --git a/src/main/java/org/olat/ims/qti21/pool/QTI21ImportProcessor.java b/src/main/java/org/olat/ims/qti21/pool/QTI21ImportProcessor.java
index 038316aa7ce6bb0f8f19aee980a3edc1306f1e28..c5297fc16a748d74febce497d14153324be0c6ce 100644
--- a/src/main/java/org/olat/ims/qti21/pool/QTI21ImportProcessor.java
+++ b/src/main/java/org/olat/ims/qti21/pool/QTI21ImportProcessor.java
@@ -25,13 +25,21 @@ import java.util.Locale;
 
 import org.olat.core.commons.persistence.DB;
 import org.olat.core.id.Identity;
+import org.olat.core.util.StringHelper;
+import org.olat.ims.qti.questionimport.ItemAndMetadata;
+import org.olat.ims.qti21.QTI21Constants;
 import org.olat.modules.qpool.QuestionItem;
+import org.olat.modules.qpool.QuestionType;
 import org.olat.modules.qpool.manager.QEducationalContextDAO;
 import org.olat.modules.qpool.manager.QItemTypeDAO;
 import org.olat.modules.qpool.manager.QLicenseDAO;
 import org.olat.modules.qpool.manager.QPoolFileStorage;
 import org.olat.modules.qpool.manager.QuestionItemDAO;
 import org.olat.modules.qpool.manager.TaxonomyLevelDAO;
+import org.olat.modules.qpool.model.QItemType;
+import org.olat.modules.qpool.model.QuestionItemImpl;
+
+import uk.ac.ed.ph.jqtiplus.node.item.AssessmentItem;
 
 /**
  * 
@@ -41,15 +49,77 @@ import org.olat.modules.qpool.manager.TaxonomyLevelDAO;
  */
 public class QTI21ImportProcessor {
 	
+	private final Identity owner;
+	private final Locale defaultLocale;
+	
+	private final QItemTypeDAO qItemTypeDao;
+	private final QuestionItemDAO questionItemDao;
+	private final QPoolFileStorage qpoolFileStorage;
+	
 	public QTI21ImportProcessor(Identity owner, Locale defaultLocale, String filename, File file,
 			QuestionItemDAO questionItemDao, QItemTypeDAO qItemTypeDao, QEducationalContextDAO qEduContextDao,
 			TaxonomyLevelDAO taxonomyLevelDao, QLicenseDAO qLicenseDao, QPoolFileStorage qpoolFileStorage,
 			DB dbInstance) {
-		// TODO Auto-generated constructor stub
+		this.owner = owner;
+		this.defaultLocale = defaultLocale;
+		this.qItemTypeDao = qItemTypeDao;
+		this.questionItemDao = questionItemDao;
+		this.qpoolFileStorage = qpoolFileStorage;
 	}
 
 	public List<QuestionItem> process() {
 		return null;
 	}
+	
+
+	protected QuestionItemImpl processItem(AssessmentItem assessmentItem, String comment, String originalItemFilename,
+			String editor, String editorVersion, ItemAndMetadata metadata) {
+		//filename
+		String filename;
+		String ident = assessmentItem.getIdentifier();
+		if(originalItemFilename != null) {
+			filename = originalItemFilename;
+		} else if(StringHelper.containsNonWhitespace(ident)) {
+			filename = StringHelper.transformDisplayNameToFileSystemName(ident) + ".xml";
+		} else {
+			filename = "item.xml";
+		}
+		String dir = qpoolFileStorage.generateDir();
+		
+		//title
+		String title = assessmentItem.getTitle();
+		if(!StringHelper.containsNonWhitespace(title)) {
+			title = assessmentItem.getLabel();
+		}
+		if(!StringHelper.containsNonWhitespace(title)) {
+			title = ident;
+		}
+
+		QuestionItemImpl poolItem = questionItemDao.create(title, QTI21Constants.QTI_21_FORMAT, dir, filename);
+		//description
+		poolItem.setDescription(comment);
+		//language from default
+		poolItem.setLanguage(defaultLocale.getLanguage());
+		//question type first
+		if(StringHelper.containsNonWhitespace(editor)) {
+			poolItem.setEditor(editor);
+			poolItem.setEditorVersion(editorVersion);
+		}
+		//if question type not found, can be overridden by the metadatas
+		//processItemMetadata(poolItem, itemEl);
+		if(poolItem.getType() == null) {
+			QItemType defType = qItemTypeDao.loadByType(QuestionType.UNKOWN.name());
+			poolItem.setType(defType);
+		}
+		/*if(docInfos != null) {
+			processSidecarMetadata(poolItem, docInfos);
+		}*/
+		if(metadata != null) {
+			//processItemMetadata(poolItem, metadata);
+		}
+		questionItemDao.persist(owner, poolItem);
+		return poolItem;
+	}
+	
 
 }
diff --git a/src/main/java/org/olat/ims/qti21/pool/QTI21QPoolServiceProvider.java b/src/main/java/org/olat/ims/qti21/pool/QTI21QPoolServiceProvider.java
index 81aaa6c144665ffb886c86903d2b28145bf87aa5..1f89ce41c7b31e4fbda2f27cbbbc203a2413b828 100644
--- a/src/main/java/org/olat/ims/qti21/pool/QTI21QPoolServiceProvider.java
+++ b/src/main/java/org/olat/ims/qti21/pool/QTI21QPoolServiceProvider.java
@@ -33,15 +33,23 @@ import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.media.MediaResource;
+import org.olat.core.helpers.Settings;
 import org.olat.core.id.Identity;
 import org.olat.core.logging.OLog;
 import org.olat.core.logging.Tracing;
+import org.olat.core.util.vfs.LocalImpl;
 import org.olat.core.util.vfs.VFSContainer;
 import org.olat.core.util.vfs.VFSItem;
 import org.olat.core.util.vfs.VFSLeaf;
 import org.olat.core.util.vfs.VFSManager;
 import org.olat.ims.qti.fileresource.TestFileResource;
 import org.olat.ims.qti21.QTI21Constants;
+import org.olat.ims.qti21.QTI21Service;
+import org.olat.ims.qti21.model.xml.AssessmentItemBuilder;
+import org.olat.ims.qti21.model.xml.interactions.EssayAssessmentItemBuilder;
+import org.olat.ims.qti21.model.xml.interactions.KPrimAssessmentItemBuilder;
+import org.olat.ims.qti21.model.xml.interactions.MultipleChoiceAssessmentItemBuilder;
+import org.olat.ims.qti21.model.xml.interactions.SingleChoiceAssessmentItemBuilder;
 import org.olat.ims.qti21.pool.QTI21AssessmentItemFactory.Type;
 import org.olat.ims.resources.IMSEntityResolver;
 import org.olat.modules.qpool.ExportFormatOptions;
@@ -58,12 +66,15 @@ import org.olat.modules.qpool.manager.QPoolFileStorage;
 import org.olat.modules.qpool.manager.QuestionItemDAO;
 import org.olat.modules.qpool.manager.TaxonomyLevelDAO;
 import org.olat.modules.qpool.model.DefaultExportFormat;
+import org.olat.modules.qpool.model.QuestionItemImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.xml.sax.InputSource;
 import org.xml.sax.XMLReader;
 import org.xml.sax.helpers.XMLReaderFactory;
 
+import uk.ac.ed.ph.jqtiplus.node.item.AssessmentItem;
+
 /**
  * 
  * Initial date: 05.02.2016<br>
@@ -79,6 +90,9 @@ public class QTI21QPoolServiceProvider implements QPoolSPI {
 
 	@Autowired
 	private DB dbInstance;
+	@Autowired
+	private QTI21Service qtiService;
+	
 	@Autowired
 	private QPoolFileStorage qpoolFileStorage;
 	@Autowired
@@ -212,6 +226,28 @@ public class QTI21QPoolServiceProvider implements QPoolSPI {
 	}
 
 	public QuestionItem createItem(Identity identity, Type type, String title, Locale locale) {
-		return null;
+		AssessmentItemBuilder itemBuilder = null;
+		switch(type) {
+			case sc: itemBuilder = new SingleChoiceAssessmentItemBuilder(qtiService.qtiSerializer()); break;
+			case mc: itemBuilder = new MultipleChoiceAssessmentItemBuilder(qtiService.qtiSerializer()); break;
+			case kprim: itemBuilder = new KPrimAssessmentItemBuilder(qtiService.qtiSerializer()); break;
+			//case fib: item = QTIEditHelper.createFIBItem(trans); break;
+			case essay: itemBuilder = new EssayAssessmentItemBuilder(qtiService.qtiSerializer()); break;
+			default: return null;
+		}
+
+		AssessmentItem assessmentItem = itemBuilder.getAssessmentItem();
+		assessmentItem.setLabel(title);
+		assessmentItem.setTitle(title);
+		
+		QTI21ImportProcessor processor = new QTI21ImportProcessor(identity, locale, null, null,
+				questionItemDao, qItemTypeDao, qEduContextDao, taxonomyLevelDao, qLicenseDao, qpoolFileStorage, dbInstance);
+		QuestionItemImpl qitem = processor.processItem(assessmentItem, "", null, "OpenOLAT", Settings.getVersion(), null);
+
+		VFSContainer baseDir = qpoolFileStorage.getContainer(qitem.getDirectory());
+		VFSLeaf leaf = baseDir.createChildLeaf(qitem.getRootFilename());
+		File itemFile = ((LocalImpl)leaf).getBasefile();
+		qtiService.persistAssessmentObject(itemFile, assessmentItem);
+		return qitem;
 	}
 }
\ No newline at end of file