Paladox has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/268181

Change subject: Test
......................................................................

Test

Change-Id: I8442ad7a466ee5f710ccc37070eb5673dd5dfcaa
---
M WikibaseClient.settings.php
M WikibaseRepo.settings.php
M composer.lock
M extensions/Wikibase/client/WikibaseClient.i18n.magic.php
M extensions/Wikibase/client/i18n/en.json
M extensions/Wikibase/client/includes/api/PageTerms.php
M 
extensions/Wikibase/client/tests/phpunit/includes/DataAccess/WikibaseDataAccessTestItemSetUpHelper.php
M extensions/Wikibase/lib/includes/LanguageFallbackChain.php
M extensions/Wikibase/lib/includes/serializers/DescriptionSerializer.php
M extensions/Wikibase/lib/includes/serializers/MultilingualSerializer.php
M extensions/Wikibase/lib/includes/serializers/SerializationOptions.php
M extensions/Wikibase/lib/includes/store/sql/TermSqlIndex.php
M extensions/Wikibase/lib/tests/phpunit/LanguageFallbackChainTest.php
M extensions/Wikibase/lib/tests/phpunit/changes/EntityChangeFactoryTest.php
M extensions/Wikibase/repo/Wikibase.hooks.php
M extensions/Wikibase/repo/i18n/ar.json
M extensions/Wikibase/repo/i18n/de.json
M extensions/Wikibase/repo/i18n/en.json
M extensions/Wikibase/repo/i18n/pt.json
D extensions/Wikibase/repo/includes/EntitySearchTextGenerator.php
A extensions/Wikibase/repo/includes/FingerprintSearchTextGenerator.php
M extensions/Wikibase/repo/includes/ItemSearchTextGenerator.php
M extensions/Wikibase/repo/includes/LabelDescriptionDuplicateDetector.php
M extensions/Wikibase/repo/includes/WikibaseRepo.php
M extensions/Wikibase/repo/includes/api/MergeItems.php
M extensions/Wikibase/repo/includes/content/EntityContent.php
M extensions/Wikibase/repo/includes/content/ItemContent.php
M extensions/Wikibase/repo/includes/store/sql/SqlIdGenerator.php
M extensions/Wikibase/repo/includes/store/sql/SqlStore.php
M 
extensions/Wikibase/repo/tests/phpunit/includes/ChangeOp/ChangeOpQualifierTest.php
M 
extensions/Wikibase/repo/tests/phpunit/includes/ChangeOp/ChangeOpReferenceTest.php
M 
extensions/Wikibase/repo/tests/phpunit/includes/EntityParserOutputGeneratorTest.php
D 
extensions/Wikibase/repo/tests/phpunit/includes/EntitySearchTextGeneratorTest.php
A 
extensions/Wikibase/repo/tests/phpunit/includes/FingerprintSearchTextGeneratorTest.php
M 
extensions/Wikibase/repo/tests/phpunit/includes/ItemSearchTextGeneratorTest.php
M 
extensions/Wikibase/repo/tests/phpunit/includes/ParserOutputJsConfigBuilderTest.php
M extensions/Wikibase/repo/tests/phpunit/includes/api/ApiXmlFormatTest.php
M extensions/Wikibase/repo/tests/phpunit/includes/api/GetClaimsTest.php
M extensions/Wikibase/repo/tests/phpunit/includes/api/RemoveClaimsTest.php
M extensions/Wikibase/repo/tests/phpunit/includes/api/RemoveQualifiersTest.php
M extensions/Wikibase/repo/tests/phpunit/includes/api/RemoveReferencesTest.php
M extensions/Wikibase/repo/tests/phpunit/includes/api/ResultBuilderTest.php
M extensions/Wikibase/repo/tests/phpunit/includes/api/SetClaimTest.php
M extensions/Wikibase/repo/tests/phpunit/includes/api/SetClaimValueTest.php
M extensions/Wikibase/repo/tests/phpunit/includes/api/SetQualifierTest.php
M extensions/Wikibase/repo/tests/phpunit/includes/api/SetReferenceTest.php
M extensions/Wikibase/repo/tests/phpunit/includes/content/ItemContentTest.php
M 
extensions/Wikibase/repo/tests/phpunit/includes/store/sql/SqlIdGeneratorTest.php
M 
extensions/Wikibase/repo/tests/phpunit/includes/store/sql/TermSearchKeyBuilderTest.php
M extensions/Wikibase/repo/tests/phpunit/includes/store/sql/TermSqlIndexTest.php
M 
extensions/Wikibase/repo/tests/phpunit/includes/store/sql/WikiPageEntityStoreTest.php
M extensions/Wikibase/view/src/Module/TemplateModule.php
M extensions/Wikibase/view/src/Template/TemplateFactory.php
M extensions/Wikibase/view/src/Template/TemplateRegistry.php
M extensions/Wikibase/view/tests/phpunit/ClaimHtmlGeneratorTest.php
M extensions/Wikibase/view/tests/phpunit/ClaimsViewTest.php
M extensions/Wikibase/view/tests/phpunit/EntityTermsViewTest.php
M extensions/Wikibase/view/tests/phpunit/EntityViewFactoryTest.php
M extensions/Wikibase/view/tests/phpunit/EntityViewPlaceholderExpanderTest.php
M extensions/Wikibase/view/tests/phpunit/ItemViewTest.php
M extensions/Wikibase/view/tests/phpunit/PropertyViewTest.php
M extensions/Wikibase/view/tests/phpunit/SiteLinksViewTest.php
M extensions/Wikibase/view/tests/phpunit/SnakHtmlGeneratorTest.php
M extensions/Wikibase/view/tests/phpunit/ToolbarEditSectionGeneratorTest.php
M vendor/autoload.php
M vendor/composer/autoload_classmap.php
M vendor/composer/autoload_real.php
M vendor/composer/installed.json
68 files changed, 380 insertions(+), 439 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikidata 
refs/changes/81/268181/1

diff --git a/WikibaseClient.settings.php b/WikibaseClient.settings.php
index 46989f8..11dc45b 100644
--- a/WikibaseClient.settings.php
+++ b/WikibaseClient.settings.php
@@ -1,2 +1,2 @@
 <?php
-$wgWBClientSettings["sharedCacheKeyPrefix"] = "wikibase:WBL/1428401103";
\ No newline at end of file
+$wgWBClientSettings["sharedCacheKeyPrefix"] = "wikibase:WBL/1428487270";
\ No newline at end of file
diff --git a/WikibaseRepo.settings.php b/WikibaseRepo.settings.php
index 304aae9..03077ec 100644
--- a/WikibaseRepo.settings.php
+++ b/WikibaseRepo.settings.php
@@ -1,2 +1,2 @@
 <?php
-$wgWBRepoSettings["sharedCacheKeyPrefix"] = "wikibase:WBL/1428401103";
\ No newline at end of file
+$wgWBRepoSettings["sharedCacheKeyPrefix"] = "wikibase:WBL/1428487270";
\ No newline at end of file
diff --git a/composer.lock b/composer.lock
index 99296e8..31d8b3b 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1209,12 +1209,12 @@
             "source": {
                 "type": "git",
                 "url": 
"https://github.com/wikimedia/mediawiki-extensions-Wikibase.git";,
-                "reference": "86f87316c8f8c0ea438839f98aabd0345b23be4f"
+                "reference": "8d21687a97a5636b0b2522302343ada7f16088dc"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/86f87316c8f8c0ea438839f98aabd0345b23be4f";,
-                "reference": "86f87316c8f8c0ea438839f98aabd0345b23be4f",
+                "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/8d21687a97a5636b0b2522302343ada7f16088dc";,
+                "reference": "8d21687a97a5636b0b2522302343ada7f16088dc",
                 "shasum": ""
             },
             "require": {
@@ -1282,7 +1282,7 @@
                 "wikibaserepo",
                 "wikidata"
             ],
-            "time": "2015-04-07 09:45:04"
+            "time": "2015-04-07 20:21:37"
         },
         {
             "name": "wikibase/wikimedia-badges",
diff --git a/extensions/Wikibase/client/WikibaseClient.i18n.magic.php 
b/extensions/Wikibase/client/WikibaseClient.i18n.magic.php
index 83f72ff..3c45198 100644
--- a/extensions/Wikibase/client/WikibaseClient.i18n.magic.php
+++ b/extensions/Wikibase/client/WikibaseClient.i18n.magic.php
@@ -78,6 +78,11 @@
        'property' => array( 0, 'propriété' ),
 );
 
+/** Western Frisian (Frysk) */
+$magicWords['fy'] = array(
+       'property' => array( 0, 'eigenskip' ),
+);
+
 /** Hindi (हिन्दी) */
 $magicWords['hi'] = array(
        'noexternallanglinks' => array( 0, 'कोई_अंतरविकी_कड़ियाँ_नहीं', 
'कोई_अंतरविकि_कड़ियाँ_नहीं' ),
diff --git a/extensions/Wikibase/client/i18n/en.json 
b/extensions/Wikibase/client/i18n/en.json
index 5b222e6..33f1ba7 100644
--- a/extensions/Wikibase/client/i18n/en.json
+++ b/extensions/Wikibase/client/i18n/en.json
@@ -14,7 +14,7 @@
        "apihelp-query+pageterms-description": "Get terms associated with a 
page via an associated data item.",
        "apihelp-query+pageterms-example-simple": "Get all terms associated 
with the page 'London', in the user language.",
        "apihelp-query+pageterms-example-label-en": "Get labels and aliases 
associated with the page 'London', in English.",
-       "apihelp-query+pageterms-param-terms": "The kinds of terms to get, e.g. 
'label', 'description', or 'alias'.",
+       "apihelp-query+pageterms-param-terms": "The types of terms to get, e.g. 
'description'. If not specified, all types are returned.",
        "apihelp-query+wikibase-description": "Get information about the 
associated Wikibase repository.",
        "apihelp-query+wikibase-example": "Get URL path and other information 
for the Wikibase repository.",
        "apihelp-query+wikibase-param-prop": "Which properties to 
get:\n;<kbd>url</kbd>: Base URL, script path and article path.",
diff --git a/extensions/Wikibase/client/includes/api/PageTerms.php 
b/extensions/Wikibase/client/includes/api/PageTerms.php
index d8f7c5b..2ad55eb 100644
--- a/extensions/Wikibase/client/includes/api/PageTerms.php
+++ b/extensions/Wikibase/client/includes/api/PageTerms.php
@@ -239,6 +239,8 @@
                                ApiBase::PARAM_TYPE => 'integer',
                        ),
                        'terms' => array(
+                               // XXX Ought to get this list from 
Wikibase\Term, its setType() also hardcodes it.
+                               ApiBase::PARAM_TYPE => array( Term::TYPE_ALIAS, 
Term::TYPE_DESCRIPTION, Term::TYPE_LABEL ),
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_HELP_MSG => 
'apihelp-query+pageterms-param-terms',
                        ),
diff --git 
a/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/WikibaseDataAccessTestItemSetUpHelper.php
 
b/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/WikibaseDataAccessTestItemSetUpHelper.php
index d1792ff..69cc56b 100644
--- 
a/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/WikibaseDataAccessTestItemSetUpHelper.php
+++ 
b/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/WikibaseDataAccessTestItemSetUpHelper.php
@@ -11,9 +11,11 @@
 use Wikibase\DataModel\Entity\Property;
 use Wikibase\DataModel\Entity\PropertyId;
 use Wikibase\DataModel\SiteLink;
+use Wikibase\DataModel\SiteLinkList;
 use Wikibase\DataModel\Snak\Snak;
 use Wikibase\DataModel\Snak\SnakList;
 use Wikibase\DataModel\Statement\Statement;
+use Wikibase\DataModel\Statement\StatementList;
 use Wikibase\SnakFactory;
 use Wikibase\Test\MockClientStore;
 
@@ -127,25 +129,21 @@
        /**
         * @param ItemId $id
         * @param string[] $labels
-        * @param Claim[]|null $claims
+        * @param Statement[]|null $statements
         * @param SiteLink[]|null $siteLinks
         *
         * @return Item
         */
-       private function createTestItem( ItemId $id, array $labels, array 
$claims = null, array $siteLinks = null ) {
+       private function createTestItem( ItemId $id, array $labels, array 
$statements = null, array $siteLinks = null ) {
                $item = new Item( $id );
                $item->setLabels( $labels );
 
-               if ( is_array( $siteLinks ) ) {
-                       foreach( $siteLinks as $siteLink ) {
-                               $item->addSiteLink( $siteLink );
-                       }
+               if ( $statements !== null ) {
+                       $item->setStatements( new StatementList( $statements ) 
);
                }
 
-               if ( is_array( $claims ) ) {
-                       foreach( $claims as $claim ) {
-                               $item->addClaim( $claim );
-                       }
+               if ( $siteLinks !== null ) {
+                       $item->setSiteLinkList( new SiteLinkList( $siteLinks ) 
);
                }
 
                $this->mockRepository->putEntity( $item );
diff --git a/extensions/Wikibase/lib/includes/LanguageFallbackChain.php 
b/extensions/Wikibase/lib/includes/LanguageFallbackChain.php
index 1736535..f6d2090 100644
--- a/extensions/Wikibase/lib/includes/LanguageFallbackChain.php
+++ b/extensions/Wikibase/lib/includes/LanguageFallbackChain.php
@@ -68,6 +68,10 @@
         * ), or null when no "acceptable" data can be found.
         */
        public function extractPreferredValue( array $data ) {
+               if ( empty( $data ) ) {
+                       return null;
+               }
+
                foreach ( $this->chain as $languageWithConversion ) {
                        $languageCode = 
$languageWithConversion->getFetchLanguageCode();
 
diff --git 
a/extensions/Wikibase/lib/includes/serializers/DescriptionSerializer.php 
b/extensions/Wikibase/lib/includes/serializers/DescriptionSerializer.php
index 73ad9c1..fb2e6e2 100644
--- a/extensions/Wikibase/lib/includes/serializers/DescriptionSerializer.php
+++ b/extensions/Wikibase/lib/includes/serializers/DescriptionSerializer.php
@@ -79,7 +79,7 @@
         * @return array
         * @throws InvalidArgumentException
         */
-       final public function getSerializedMultilingualValues( $descriptions ) {
+       final public function getSerializedMultilingualValues( array 
$descriptions ) {
                $descriptions = 
$this->multilingualSerializer->filterPreferredMultilingualValues( $descriptions 
);
                return $this->getSerialized( $descriptions );
        }
diff --git 
a/extensions/Wikibase/lib/includes/serializers/MultilingualSerializer.php 
b/extensions/Wikibase/lib/includes/serializers/MultilingualSerializer.php
index 6a885bc..1152d92 100644
--- a/extensions/Wikibase/lib/includes/serializers/MultilingualSerializer.php
+++ b/extensions/Wikibase/lib/includes/serializers/MultilingualSerializer.php
@@ -2,8 +2,6 @@
 
 namespace Wikibase\Lib\Serializers;
 
-use Wikibase\LanguageFallbackChain;
-
 /**
  * Multilingual serializer, for serializer of labels and descriptions.
  *
@@ -36,9 +34,9 @@
         *
         * @since 0.4
         *
-        * @param array $data
+        * @param string[]|array[] $data
         *
-        * @return array
+        * @return array[]
         */
        public function serializeMultilingualValues( array $data ) {
                $values = array();
@@ -78,23 +76,22 @@
         *
         * @param array $allData
         *
-        * @return array
+        * @return array[]
         */
        public function filterPreferredMultilingualValues( array $allData ) {
-               $values = array();
-
                $languageFallbackChains = 
$this->options->getLanguageFallbackChains();
 
-               if ( $languageFallbackChains ) {
-                       /** @var LanguageFallbackChain[] 
$languageFallbackChains */
-                       foreach ( $languageFallbackChains as $languageCode => 
$languageFallbackChain ) {
-                               $data = 
$languageFallbackChain->extractPreferredValue( $allData );
-                               if ( $data !== null ) {
-                                       $values[$languageCode] = $data;
-                               }
+               if ( $languageFallbackChains === null || empty( $allData ) ) {
+                       return $allData;
+               }
+
+               $values = array();
+
+               foreach ( $languageFallbackChains as $languageCode => 
$languageFallbackChain ) {
+                       $data = $languageFallbackChain->extractPreferredValue( 
$allData );
+                       if ( $data !== null ) {
+                               $values[$languageCode] = $data;
                        }
-               } else {
-                       $values = $allData;
                }
 
                return $values;
diff --git 
a/extensions/Wikibase/lib/includes/serializers/SerializationOptions.php 
b/extensions/Wikibase/lib/includes/serializers/SerializationOptions.php
index 2fbbad6..56feb36 100644
--- a/extensions/Wikibase/lib/includes/serializers/SerializationOptions.php
+++ b/extensions/Wikibase/lib/includes/serializers/SerializationOptions.php
@@ -4,6 +4,7 @@
 
 use InvalidArgumentException;
 use RuntimeException;
+use Wikibase\LanguageFallbackChain;
 use Wikibase\LanguageFallbackChainFactory;
 
 /**
@@ -350,8 +351,9 @@
         *
         * @since 0.2
         *
-        * @param array|null $languages array of strings (back compat, as 
language codes)
-        *                     or LanguageFallbackChain objects (requested 
language codes as keys, to identify chains)
+        * @param LanguageFallbackChain[]|string[]|null $languages An array of 
LanguageFallbackChain
+        * objects (requested language codes as keys, to identify chains) or an 
array of language codes
+        * (for backwards compatibility).
         */
        public function setLanguages( array $languages = null ) {
                if ( $languages === null ) {
@@ -381,7 +383,7 @@
         *
         * @since 0.2
         *
-        * @return array|null
+        * @return string[]|null
         */
        public function getLanguages() {
                $languages = $this->getLanguageFallbackChains();
@@ -398,7 +400,7 @@
         *
         * @since 0.4
         *
-        * @return array|null
+        * @return LanguageFallbackChain[]|null
         */
        public function getLanguageFallbackChains() {
                return $this->getOption( self::OPT_LANGUAGES );
@@ -432,4 +434,5 @@
        public function setLanguageFallbackChainFactory( 
LanguageFallbackChainFactory $factory ) {
                $this->setOption( self::OPT_LANGUAGE_FALLBACK_CHAIN_FACTORY, 
$factory );
        }
+
 }
diff --git a/extensions/Wikibase/lib/includes/store/sql/TermSqlIndex.php 
b/extensions/Wikibase/lib/includes/store/sql/TermSqlIndex.php
index 535d2ec..d9a1286 100644
--- a/extensions/Wikibase/lib/includes/store/sql/TermSqlIndex.php
+++ b/extensions/Wikibase/lib/includes/store/sql/TermSqlIndex.php
@@ -312,7 +312,7 @@
         *
         * @param Term $term
         *
-        * @return array
+        * @return string[]
         */
        private function getTermFields( Term $term ) {
                $fields = array(
@@ -321,7 +321,7 @@
                        'term_text' => $term->getText(),
                );
 
-               if ( !Settings::get( 'withoutTermSearchKey' ) ) {
+               if ( $this->supportsSearchKeys() ) {
                        $fields['term_search_key'] = $this->getSearchKey( 
$term->getText(), $term->getLanguage() );
                }
 
@@ -561,9 +561,7 @@
 
                $selectionFields = array( 'term_entity_id' );
 
-               // TODO instead of a DB query, get a setting. Should save on a 
few Database round trips.
                $hasWeight = $this->supportsWeight();
-
                if ( $hasWeight ) {
                        $selectionFields[] = 'term_weight';
                }
@@ -686,35 +684,31 @@
                $text = $term->getText();
 
                if ( $text !== null ) {
-                       if ( $options['caseSensitive']
-                               || Settings::get( 'withoutTermSearchKey' ) ) {
-                               //NOTE: whether this match is *actually* case 
sensitive depends on the collation used in the database.
-                               $textField = 'term_text';
-                       }
-                       else {
+                       // NOTE: Whether this match is *actually* case 
sensitive depends on the collation
+                       // used in the database.
+                       $textField = 'term_text';
+
+                       if ( !$options['caseSensitive'] && 
$this->supportsSearchKeys() ) {
                                $textField = 'term_search_key';
                                $text = $this->getSearchKey( $term->getText(), 
$term->getLanguage() );
                        }
 
                        if ( $options['prefixSearch'] ) {
                                $conditions[] = $textField . $db->buildLike( 
$text, $db->anyString() );
-                       }
-                       else {
+                       } else {
                                $conditions[$textField] = $text;
                        }
                }
 
                if ( $term->getType() !== null ) {
                        $conditions['term_type'] = $term->getType();
-               }
-               elseif ( $termType !== null ) {
+               } elseif ( $termType !== null ) {
                        $conditions['term_type'] = $termType;
                }
 
                if ( $term->getEntityType() !== null ) {
                        $conditions['term_entity_type'] = 
$term->getEntityType();
-               }
-               elseif ( $entityType !== null ) {
+               } elseif ( $entityType !== null ) {
                        $conditions['term_entity_type'] = $entityType;
                }
 
@@ -973,7 +967,14 @@
        }
 
        /**
-        * @return mixed
+        * @return bool
+        */
+       public function supportsSearchKeys() {
+               return !Settings::get( 'withoutTermSearchKey' );
+       }
+
+       /**
+        * @return bool
         */
        public function supportsWeight() {
                return !Settings::get( 'withoutTermWeight' );
diff --git 
a/extensions/Wikibase/lib/tests/phpunit/LanguageFallbackChainTest.php 
b/extensions/Wikibase/lib/tests/phpunit/LanguageFallbackChainTest.php
index a8cea58..eced4e8 100644
--- a/extensions/Wikibase/lib/tests/phpunit/LanguageFallbackChainTest.php
+++ b/extensions/Wikibase/lib/tests/phpunit/LanguageFallbackChainTest.php
@@ -172,6 +172,7 @@
                                'language' => 'en',
                                'source' => null,
                        ) ),
+
                        array( 'fr', 
LanguageFallbackChainFactory::FALLBACK_SELF, array(
                                'kk' => 'baz',
                        ), array(
@@ -190,6 +191,7 @@
                        array( 'sr', 
LanguageFallbackChainFactory::FALLBACK_SELF, array(
                                ':' => 'qux',
                        ), null ),
+                       array( 'en', 
LanguageFallbackChainFactory::FALLBACK_ALL, array(), null ),
                        array( 'ar', 
LanguageFallbackChainFactory::FALLBACK_SELF, array(), null ),
 
                        array( 'de', 
LanguageFallbackChainFactory::FALLBACK_SELF, $entityInfoBuilderArray, array(
diff --git 
a/extensions/Wikibase/lib/tests/phpunit/changes/EntityChangeFactoryTest.php 
b/extensions/Wikibase/lib/tests/phpunit/changes/EntityChangeFactoryTest.php
index 8bc8f3e..9a9f266 100644
--- a/extensions/Wikibase/lib/tests/phpunit/changes/EntityChangeFactoryTest.php
+++ b/extensions/Wikibase/lib/tests/phpunit/changes/EntityChangeFactoryTest.php
@@ -14,7 +14,7 @@
 use Wikibase\Lib\Changes\EntityChangeFactory;
 
 /**
- * @covers Wikibase\Lib\EntityChangeFactory
+ * @covers Wikibase\Lib\Changes\EntityChangeFactory
  *
  * @since 0.5
  *
diff --git a/extensions/Wikibase/repo/Wikibase.hooks.php 
b/extensions/Wikibase/repo/Wikibase.hooks.php
index 419a5e4..d64b774 100644
--- a/extensions/Wikibase/repo/Wikibase.hooks.php
+++ b/extensions/Wikibase/repo/Wikibase.hooks.php
@@ -33,7 +33,6 @@
 use Wikibase\Repo\WikibaseRepo;
 use Wikibase\View\EntityViewPlaceholderExpander;
 use Wikibase\View\Template\TemplateFactory;
-use Wikibase\View\Template\TemplateRegistry;
 use Wikibase\View\TextInjector;
 use WikiPage;
 
@@ -945,10 +944,11 @@
 
                if ( !empty( $placeholders ) ) {
                        $injector = new TextInjector( $placeholders );
+                       $templateFactory = 
TemplateFactory::getDefaultInstance();
                        $userLanguageLookup = new BabelUserLanguageLookup();
                        $termsLanguages = 
WikibaseRepo::getDefaultInstance()->getTermsLanguages();
                        $expander = new EntityViewPlaceholderExpander(
-                               new TemplateFactory( 
TemplateRegistry::getDefaultInstance() ),
+                               $templateFactory,
                                $out->getTitle(),
                                $out->getUser(),
                                $out->getLanguage(),
diff --git a/extensions/Wikibase/repo/i18n/ar.json 
b/extensions/Wikibase/repo/i18n/ar.json
index efee2a9..6e973f1 100644
--- a/extensions/Wikibase/repo/i18n/ar.json
+++ b/extensions/Wikibase/repo/i18n/ar.json
@@ -15,7 +15,8 @@
                        "أحمد المحمودي",
                        "Abanima",
                        "Sonic N800",
-                       "Bibas"
+                       "Bibas",
+                       "Yahya Sakhnini"
                ]
        },
        "wikibase-entity-item": "عنصر",
@@ -28,10 +29,10 @@
        "wikibase-addreference": "إضافة مصدر",
        "wikibase-save-inprogress": "يحفظ...",
        "wikibase-remove-inprogress": "يزيل...",
-       "wikibase-label-empty": "لم يتم تعريف أي وسوم بعد",
+       "wikibase-label-empty": "لم يتم تعريف أي وسوم",
        "wikibase-label-edit-placeholder": "أدخل تعريفاً",
        "wikibase-label-edit-placeholder-language-aware": "أدخل التعريف بـ$1",
-       "wikibase-description-empty": "لم يتم توفير وصف بعد",
+       "wikibase-description-empty": "لم يتم توفير وصف",
        "wikibase-description-edit-placeholder": "أدخل وصفاً",
        "wikibase-description-edit-placeholder-language-aware": "أدخل وصفاً 
بـ$1",
        "wikibase-diffview-reference": "مرجع",
diff --git a/extensions/Wikibase/repo/i18n/de.json 
b/extensions/Wikibase/repo/i18n/de.json
index 4675095..1085db9 100644
--- a/extensions/Wikibase/repo/i18n/de.json
+++ b/extensions/Wikibase/repo/i18n/de.json
@@ -385,7 +385,7 @@
        "wikibase-listdatatypes-string-head": "Zeichenkette",
        "wikibase-listdatatypes-string-body": "Literales Datenfeld für eine 
Glyphenkette. Typische Verwendung sind Kennungen mit geschriebenen Formen, die 
nicht von der Sprache des Lesers abhängig sind.\n* value – ausdrücklicher Wert 
für die sprachspezifische Variantenkette",
        "wikibase-listdatatypes-time-head": "Zeit",
-       "wikibase-listdatatypes-time-body": "Literales Datenfeld für einen 
Zeitwert, angegeben als Zeit mit Genauigkeit und Begrenzungen. Die Zeit wird 
immer intern als gregorianisch gespeichert, kann jedoch andere Formate beim 
Parsen und Formatieren benutzen (?).\n* time – ausdrücklicher Wert für einen 
Zeitpunkt; dargestellt, wie in der Norm ISO8601 beschrieben. Das Jahr hat immer 
11 Ziffern und das Datum ist immer vorzeichenbehaftet im Format 
+00000002013-01-01T00:00:00Z.\n* timezone – ausdrücklicher Wert als 
vorzeichenbehaftete Ganzzahl. Die Zeitzoneninformationen wird als Unterschied 
zur UTC in Minuten angegeben.\n* before – ausdrücklicher Ganzzahlwert für eine 
Anzahl an Einheiten nach der angegebenen Zeit. Die Einheit ist als 
\"precision\" (siehe unten) angegeben.\n* after – ausdrücklicher Ganzzahlwert 
für eine Anzahl an Einheiten vor der angegebenen Zeit. Die Einheit ist als 
\"precision\" (siehe unten) angegeben.\n* precision – ausdrücklicher Wert, 
kodiert als kurze Ganzzahl mit folgender Bedeutung: 0: Milliarden Jahre; 1: 
Hundert Millionen Jahre … 6: Jahrtausende; 7: Jahrhunderte; 8: Jahrzehnte; 9: 
Jahre; 10: Monate; 11: Tage; 12: Stundee; 13: Minuten; 14: Sekunden.\n* 
calendarmodel – ausdrücklicher Wert, angegeben als URI. Er identifiziert das 
Kalendermodell, das zur Anzeige dieses Zeitwertes verwendet werden soll.",
+       "wikibase-listdatatypes-time-body": "Literales Datenfeld für einen 
Zeitwert, angegeben als Zeit mit Genauigkeit und Begrenzungen. Die Zeit wird 
immer intern als gregorianisch gespeichert, kann jedoch andere Formate beim 
Parsen und Formatieren benutzen.\n* time – ausdrücklicher Wert für einen 
Zeitpunkt; dargestellt als Zeitstempel ähnlich ISO 8601, z.&nbsp;B. 
+2013-01-01T00:00:00Z. Das Jahr ist immer vorzeichenbehaftet und muss mit einer 
bis 16 Ziffern aufgefüllt werden.\n* timezone – ausdrücklicher Wert als 
vorzeichenbehaftete Ganzzahl. Die Zeitzoneninformationen werden als Unterschied 
zur UTC in Minuten angegeben.\n* before – ausdrücklicher Ganzzahlwert für eine 
Anzahl an Einheiten nach der angegebenen Zeit. Die Einheit ist als „precision“ 
(siehe unten) angegeben.\n* after – ausdrücklicher Ganzzahlwert für eine Anzahl 
an Einheiten vor der angegebenen Zeit. Die Einheit ist als „precision“ (siehe 
unten) angegeben.\n* precision – ausdrücklicher Wert, kodiert als kurze 
Ganzzahl mit folgender Bedeutung: 0: Milliarden Jahre; 1: Hundert Millionen 
Jahre … 6: Jahrtausende; 7: Jahrhunderte; 8: Jahrzehnte; 9: Jahre; 10: Monate; 
11: Tage; 12: Stunden; 13: Minuten; 14: Sekunden.\n* calendarmodel – 
ausdrücklicher Wert, angegeben als URI. Er identifiziert das Kalendermodell, 
das zur Anzeige dieses Zeitwertes verwendet werden soll.",
        "wikibase-listdatatypes-url-head": "URL",
        "wikibase-listdatatypes-url-body": "Literales Datenfeld für eine URL. 
URLs sind auf die Protokolle beschränkt, die auch für externe Links im Wikitext 
unterstützt werden.",
        "wikibase-concept-uri": "Konzept-URI",
diff --git a/extensions/Wikibase/repo/i18n/en.json 
b/extensions/Wikibase/repo/i18n/en.json
index b4299e2..71e8bd6 100644
--- a/extensions/Wikibase/repo/i18n/en.json
+++ b/extensions/Wikibase/repo/i18n/en.json
@@ -422,7 +422,7 @@
        "wikibase-listdatatypes-string-head": "String",
        "wikibase-listdatatypes-string-body": "Literal data field for a string 
of glyphs. Typical use are identifiers that have written forms which do not 
depend on the language of the reader.\n* value – explicit value for the 
language specific variant string",
        "wikibase-listdatatypes-time-head": "Time",
-       "wikibase-listdatatypes-time-body": "Literal data field for a time 
value. Given as a time with some precision and boundaries. The time is always 
saved internally in the Proleptic Gregorian format, but can use other formats 
during parsing and formatting.(?)\n* time – explicit value for point in time, 
represented per ISO8601, the year always having 11 digits and the date always 
being signed, in the format +00000002013-01-01T00:00:00Z\n* timezone – explicit 
value as a signed integer. Timezone information as an offset from UTC in 
minutes.\n* before – explicit integer value for how many units after the given 
time it could be. The unit is given by the precision.\n* after – explicit 
integer value for how many units before the given time it could be. The unit is 
given by the precision.\n* precision – explicit value encoded in a shortint. 
The numbers have the following meaning: 0 - billion years, 1 - hundred million 
years, ..., 6 - millennium, 7 - century, 8 - decade, 9 - year, 10 - month, 11 - 
day, 12 - hour, 13 - minute, 14 - second.\n* calendarmodel – explicit value 
given as a URI. It will identify the calendar model that should be used to 
display this time value.",
+       "wikibase-listdatatypes-time-body": "Literal data field for a time 
value. Given as a time with some precision and boundaries. The time is always 
saved internally in the Proleptic Gregorian format, but can use other formats 
during parsing and formatting.\n* time – explicit value for point in time, 
represented as a timestamp resembling ISO 8601, e.g. +2013-01-01T00:00:00Z. The 
year is always signed and padded to have between 1 and 16 digits.\n* timezone – 
explicit value as a signed integer. Timezone information as an offset from UTC 
in minutes.\n* before – explicit integer value for how many units after the 
given time it could be. The unit is given by the precision.\n* after – explicit 
integer value for how many units before the given time it could be. The unit is 
given by the precision.\n* precision – explicit value encoded in a shortint. 
The numbers have the following meaning: 0 - billion years, 1 - hundred million 
years, ..., 6 - millennium, 7 - century, 8 - decade, 9 - year, 10 - month, 11 - 
day, 12 - hour, 13 - minute, 14 - second.\n* calendarmodel – explicit value 
given as a URI. It will identify the calendar model that should be used to 
display this time value.",
        "wikibase-listdatatypes-url-head": "URL",
        "wikibase-listdatatypes-url-body": "Literal data field for a URL. URLs 
are restricted to the protocols also supported for external links in wikitext.",
        "wikibase-concept-uri": "Concept URI",
diff --git a/extensions/Wikibase/repo/i18n/pt.json 
b/extensions/Wikibase/repo/i18n/pt.json
index 8794aa5..39cb388 100644
--- a/extensions/Wikibase/repo/i18n/pt.json
+++ b/extensions/Wikibase/repo/i18n/pt.json
@@ -34,10 +34,10 @@
        "wikibase-entitytermsforlanguagelistview-description": "Descrição",
        "wikibase-entitytermsforlanguagelistview-label": "Rótulo",
        "wikibase-entitytermsforlanguagelistview-language": "Idioma",
-       "wikibase-label-empty": "Nenhum rótulo definido ainda.",
+       "wikibase-label-empty": "Nenhum rótulo definido",
        "wikibase-label-edit-placeholder": "introduza um rótulo",
        "wikibase-label-edit-placeholder-language-aware": "introduza um rótulo 
em $1",
-       "wikibase-description-empty": "Nenhuma descrição definida ainda.",
+       "wikibase-description-empty": "Nenhuma descrição definida",
        "wikibase-description-edit-placeholder": "introduza uma descrição",
        "wikibase-description-edit-placeholder-language-aware": "introduza uma 
descrição em $1",
        "wikibase-diffview-reference": "referência",
@@ -60,7 +60,7 @@
        "wikibase-statements": "Declarações",
        "wikibase-terms": "Noutras línguas",
        "wikibase-sitelinkgroupview-input-help-message": "Adicione uma ligação 
de sítio, especificando um sítio e uma respetiva página, edite ou remova 
ligações de sítio existentes.",
-       "wikibase-sitelinks-empty": "Nenhuma página está ligada a este item 
ainda.",
+       "wikibase-sitelinks-empty": "Nenhuma página está ligada a este item.",
        "wikibase-sitelinks-input-help-message": "Defina uma ligação para uma 
página relacionada com este item.",
        "wikibase-sitelinks-special": "Outros sítios",
        "wikibase-badgeselector-badge-placeholder-title": "Clique para atribuir 
um emblema.",
@@ -169,7 +169,7 @@
        "wikibase-setaliases-warning-remove": "Deseja remover todos os nomes 
alternativos para [[$1]]?",
        "special-setlabeldescriptionaliases": "Definir rótulo, descrição e 
nomes alternativos",
        "wikibase-setlabeldescriptionaliases-introfull": "Está a definir o 
rótulo, a descrição e os nomes alternativos em $2 para [[$1]]. Nomes 
alternativos são separados por uma barra vertical (<code>|</code>).",
-       "wikibase-setlabeldescriptionaliases-intro": "Este formulário 
permite-lhe definir o rótulo, a descrição e nomes alternativos de uma entidade. 
Precisa de fornecer o identificador da entidade (ex: Q23), o código de idioma 
(ex: \"pt\"), bem como o respetivo rótulo, descrição e nomes alternativos. 
Nomes alternativos são separados por uma barra vertical (<code>|</code>).",
+       "wikibase-setlabeldescriptionaliases-intro": "Este formulário 
permite-lhe definir o rótulo, a descrição e nomes alternativos de uma entidade. 
Precisa de fornecer o identificador da entidade (ex: Q23) e o código de idioma 
(ex: \"pt\").",
        "wikibase-setlabeldescriptionaliases-label-label": "Rótulo:",
        "wikibase-setlabeldescriptionaliases-description-label": "Descrição:",
        "wikibase-setlabeldescriptionaliases-aliases-label": "Nomes 
alternativos:",
@@ -315,6 +315,7 @@
        "wikibase-property-summary-wbsetaliases-add-remove": "Adicionou ou 
removeu {{PLURAL:$1|nome alternativo|nomes alternativos}} [$2]",
        "wikibase-property-summary-wbsetaliases-add": "Adicionou 
{{PLURAL:$1|nome alternativo|nomes alternativos}} [$2]",
        "wikibase-property-summary-wbsetaliases-remove": "Removeu 
{{PLURAL:$1|nome alternativo|nomes alternativos}} [$2]",
+       "wikibase-property-summary-wbsetlabeldescriptionaliases": "Alterou o 
rótulo, descrição e nomes alternativos para [$2]",
        "wikibase-property-summary-wbsetclaim-update": "Alterou {{PLURAL:$3|uma 
alegação|alegações}}",
        "wikibase-property-summary-wbsetclaim-create": "Criou {{PLURAL:$3|uma 
alegação|alegações}}",
        "wikibase-property-summary-wbsetclaim-update-qualifiers": "Alterou 
{{PLURAL:$4|um qualificador|$4 qualificadores}} de {{PLURAL:$3|uma 
alegação|alegações}}",
diff --git a/extensions/Wikibase/repo/includes/EntitySearchTextGenerator.php 
b/extensions/Wikibase/repo/includes/EntitySearchTextGenerator.php
deleted file mode 100644
index 9f209a4..0000000
--- a/extensions/Wikibase/repo/includes/EntitySearchTextGenerator.php
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-
-namespace Wikibase\Repo;
-
-use Wikibase\DataModel\Entity\EntityDocument;
-use Wikibase\DataModel\Term\AliasGroup;
-use Wikibase\DataModel\Term\AliasGroupList;
-use Wikibase\DataModel\Term\Fingerprint;
-use Wikibase\DataModel\Term\FingerprintProvider;
-
-/**
- * FIXME: OCP violation. Extensions that add new types of entities with
- * new types of terms cannot register proper support.
- *
- * @since 0.5
- *
- * @licence GNU GPL v2+
- * @author Katie Filbert < [email protected] >
- */
-class EntitySearchTextGenerator {
-
-       /**
-        * @param EntityDocument $entity
-        *
-        * @return string
-        */
-       public function generate( EntityDocument $entity ) {
-               if ( $entity instanceof FingerprintProvider ) {
-                       return $this->getTextForFingerprint( 
$entity->getFingerprint() );
-               }
-
-               return '';
-       }
-
-       private function getTextForFingerprint( Fingerprint $fingerprint ) {
-               $text = $this->getArrayAsText( 
$fingerprint->getLabels()->toTextArray() );
-
-               $text .= "\n" . $this->getArrayAsText( 
$fingerprint->getDescriptions()->toTextArray() );
-
-               $text .= $this->getAllAliasesText( 
$fingerprint->getAliasGroups() );
-
-               return $text;
-       }
-
-       /**
-        * @param string[] $elements
-        *
-        * @return string
-        */
-       protected function getArrayAsText( array $elements ) {
-               return implode( "\n", $elements );
-       }
-
-       /**
-        * @param AliasGroupList $aliasGroups
-        *
-        * @return string
-        */
-       protected function getAllAliasesText( AliasGroupList $aliasGroups ) {
-               $text = '';
-
-               /** @var AliasGroup $aliasGroup */
-               foreach ( $aliasGroups as $aliasGroup ) {
-                       $text .= "\n" . implode( "\n", 
$aliasGroup->getAliases() );
-               }
-
-               return $text;
-       }
-
-}
diff --git 
a/extensions/Wikibase/repo/includes/FingerprintSearchTextGenerator.php 
b/extensions/Wikibase/repo/includes/FingerprintSearchTextGenerator.php
new file mode 100644
index 0000000..2d72dff
--- /dev/null
+++ b/extensions/Wikibase/repo/includes/FingerprintSearchTextGenerator.php
@@ -0,0 +1,35 @@
+<?php
+
+namespace Wikibase\Repo;
+
+use Wikibase\DataModel\Term\AliasGroup;
+use Wikibase\DataModel\Term\Fingerprint;
+
+/**
+ * @since 0.5
+ *
+ * @licence GNU GPL v2+
+ * @author Katie Filbert < [email protected] >
+ * @author Thiemo Mättig
+ */
+class FingerprintSearchTextGenerator {
+
+       /**
+        * @param Fingerprint $fingerprint
+        *
+        * @return string
+        */
+       public function generate( Fingerprint $fingerprint ) {
+               $text = implode( "\n", $fingerprint->getLabels()->toTextArray() 
);
+
+               $text .= "\n" . implode( "\n", 
$fingerprint->getDescriptions()->toTextArray() );
+
+               /** @var AliasGroup $aliasGroup */
+               foreach ( $fingerprint->getAliasGroups() as $aliasGroup ) {
+                       $text .= "\n" . implode( "\n", 
$aliasGroup->getAliases() );
+               }
+
+               return trim( $text, "\n" );
+       }
+
+}
diff --git a/extensions/Wikibase/repo/includes/ItemSearchTextGenerator.php 
b/extensions/Wikibase/repo/includes/ItemSearchTextGenerator.php
index a0ba612..4782f3c 100644
--- a/extensions/Wikibase/repo/includes/ItemSearchTextGenerator.php
+++ b/extensions/Wikibase/repo/includes/ItemSearchTextGenerator.php
@@ -9,6 +9,7 @@
  *
  * @licence GNU GPL v2+
  * @author Katie Filbert < [email protected] >
+ * @author Thiemo Mättig
  */
 class ItemSearchTextGenerator {
 
@@ -18,14 +19,14 @@
         * @return string
         */
        public function generate( Item $item ) {
-               $entitySearchTextGenerator = new EntitySearchTextGenerator();
-               $text = $entitySearchTextGenerator->generate( $item );
+               $fingerprintGenerator = new FingerprintSearchTextGenerator();
+               $text = $fingerprintGenerator->generate( 
$item->getFingerprint() );
 
                foreach ( $item->getSiteLinks() as $siteLink ) {
                        $text .= "\n" . $siteLink->getPageName();
                }
 
-               return $text;
+               return trim( $text, "\n" );
        }
 
 }
diff --git 
a/extensions/Wikibase/repo/includes/LabelDescriptionDuplicateDetector.php 
b/extensions/Wikibase/repo/includes/LabelDescriptionDuplicateDetector.php
index 113bbfc..12eecb7 100644
--- a/extensions/Wikibase/repo/includes/LabelDescriptionDuplicateDetector.php
+++ b/extensions/Wikibase/repo/includes/LabelDescriptionDuplicateDetector.php
@@ -64,7 +64,7 @@
                EntityId $ignoreEntityId = null
        ) {
                if ( !is_string( $entityType ) ) {
-                       throw new InvalidArgumentException( '$labels must be an 
array' );
+                       throw new InvalidArgumentException( '$entityType must 
be a string' );
                }
 
                if ( empty( $labels ) && empty( $descriptions ) ) {
@@ -102,12 +102,11 @@
         * @param string $errorCode Error code (for later localization)
         * @param Term[] $terms The conflicting terms.
         *
-        * @return array
+        * @return UniquenessViolation[]
         */
-       private function termsToErrors( $message, $errorCode, $terms ) {
+       private function termsToErrors( $message, $errorCode, array $terms ) {
                $errors = array();
 
-               /* @var Term $term */
                foreach ( $terms as $term ) {
                        $errors[] = new UniquenessViolation(
                                $term->getEntityId(),
diff --git a/extensions/Wikibase/repo/includes/WikibaseRepo.php 
b/extensions/Wikibase/repo/includes/WikibaseRepo.php
index d6cf5fa..7f5573d 100644
--- a/extensions/Wikibase/repo/includes/WikibaseRepo.php
+++ b/extensions/Wikibase/repo/includes/WikibaseRepo.php
@@ -88,7 +88,6 @@
 use Wikibase\ValuesFinder;
 use Wikibase\View\EntityViewFactory;
 use Wikibase\View\Template\TemplateFactory;
-use Wikibase\View\Template\TemplateRegistry;
 
 /**
  * Top level factory for the WikibaseRepo extension.
@@ -1015,8 +1014,7 @@
         * @return EntityParserOutputGeneratorFactory
         */
        public function getEntityParserOutputGeneratorFactory() {
-               $templateFactory = new TemplateFactory( 
TemplateRegistry::getDefaultInstance() );
-
+               $templateFactory = TemplateFactory::getDefaultInstance();
                $entityViewFactory = new EntityViewFactory(
                        $this->getEntityIdHtmlLinkFormatterFactory(),
                        $this->getHtmlSnakFormatterFactory(),
diff --git a/extensions/Wikibase/repo/includes/api/MergeItems.php 
b/extensions/Wikibase/repo/includes/api/MergeItems.php
index fa66c54..2125a89 100644
--- a/extensions/Wikibase/repo/includes/api/MergeItems.php
+++ b/extensions/Wikibase/repo/includes/api/MergeItems.php
@@ -6,6 +6,7 @@
 use ApiMain;
 use LogicException;
 use UsageException;
+use Wikibase\ChangeOp\ChangeOpsMerge;
 use Wikibase\DataModel\Entity\EntityIdParser;
 use Wikibase\DataModel\Entity\EntityIdParsingException;
 use Wikibase\DataModel\Entity\ItemId;
@@ -197,7 +198,7 @@
                        ),
                        'ignoreconflicts' => array(
                                ApiBase::PARAM_ISMULTI => true,
-                               ApiBase::PARAM_TYPE => 'string',
+                               ApiBase::PARAM_TYPE => 
ChangeOpsMerge::$conflictTypes,
                                ApiBase::PARAM_REQUIRED => false,
                        ),
                        'summary' => array(
diff --git a/extensions/Wikibase/repo/includes/content/EntityContent.php 
b/extensions/Wikibase/repo/includes/content/EntityContent.php
index 8142e99..46bdf7d 100644
--- a/extensions/Wikibase/repo/includes/content/EntityContent.php
+++ b/extensions/Wikibase/repo/includes/content/EntityContent.php
@@ -30,7 +30,7 @@
 use Wikibase\Lib\Store\EntityRedirect;
 use Wikibase\Repo\Content\EntityContentDiff;
 use Wikibase\Repo\Content\EntityHandler;
-use Wikibase\Repo\EntitySearchTextGenerator;
+use Wikibase\Repo\FingerprintSearchTextGenerator;
 use Wikibase\Repo\WikibaseRepo;
 use Wikibase\Validators\EntityValidator;
 use WikiPage;
@@ -321,8 +321,8 @@
                        return '';
                }
 
-               $searchTextGenerator = new EntitySearchTextGenerator();
-               $text = $searchTextGenerator->generate( $this->getEntity() );
+               $searchTextGenerator = new FingerprintSearchTextGenerator();
+               $text = $searchTextGenerator->generate( 
$this->getEntity()->getFingerprint() );
 
                if ( !wfRunHooks( 'WikibaseTextForSearchIndex', array( $this, 
&$text ) ) ) {
                        return '';
diff --git a/extensions/Wikibase/repo/includes/content/ItemContent.php 
b/extensions/Wikibase/repo/includes/content/ItemContent.php
index c4d1b5a..779cf09 100644
--- a/extensions/Wikibase/repo/includes/content/ItemContent.php
+++ b/extensions/Wikibase/repo/includes/content/ItemContent.php
@@ -194,8 +194,8 @@
                        return '';
                }
 
-               // TODO: refactor ItemSearchTextGenerator to share an interface 
with EntitySearchTextGenerator,
-               // so we don't have to re-implement getTextForSearchIndex() 
here.
+               // TODO: Refactor ItemSearchTextGenerator to share an interface 
with
+               // FingerprintSearchTextGenerator, so we don't have to 
re-implement getTextForSearchIndex() here.
                $searchTextGenerator = new ItemSearchTextGenerator();
                $text = $searchTextGenerator->generate( $this->getItem() );
 
diff --git a/extensions/Wikibase/repo/includes/store/sql/SqlIdGenerator.php 
b/extensions/Wikibase/repo/includes/store/sql/SqlIdGenerator.php
index 2b02e9f..40b7f48 100644
--- a/extensions/Wikibase/repo/includes/store/sql/SqlIdGenerator.php
+++ b/extensions/Wikibase/repo/includes/store/sql/SqlIdGenerator.php
@@ -4,7 +4,6 @@
 
 use DatabaseBase;
 use MWException;
-use Wikibase\Repo\WikibaseRepo;
 
 /**
  * Unique Id generator implemented using an SQL table.
@@ -28,18 +27,25 @@
        private $db;
 
        /**
+        * @var int[]
+        */
+       private $idBlacklist;
+
+       /**
         * @param string $tableName
         * @param DatabaseBase $database
+        * @param int[] $idBlacklist
         */
-       public function __construct( $tableName, DatabaseBase $database ) {
+       public function __construct( $tableName, DatabaseBase $database, array 
$idBlacklist ) {
                $this->table = $tableName;
                $this->db = $database;
+               $this->idBlacklist = $idBlacklist;
        }
 
        /**
         * @see IdGenerator::getNewId
         *
-        * @param string $type
+        * @param string $type normally is content model id (e.g. wikibase-item 
or wikibase-property)
         *
         * @return int
         */
@@ -58,7 +64,7 @@
         * @throws MWException
         * @return int
         */
-       protected function generateNewId( $type, $retry = true ) {
+       private function generateNewId( $type, $retry = true ) {
                $trx = $this->db->trxLevel();
 
                if ( $trx == 0 ) {
@@ -108,10 +114,7 @@
                        throw new MWException( 'Could not generate a reliably 
unique ID.' );
                }
 
-               $idBlacklist = WikibaseRepo::getDefaultInstance()->
-                       getSettings()->getSetting( 'idBlacklist' );
-
-               if ( in_array( $id, $idBlacklist ) ) {
+               if ( in_array( $id, $this->idBlacklist ) ) {
                        $id = $this->generateNewId( $type );
                }
 
diff --git a/extensions/Wikibase/repo/includes/store/sql/SqlStore.php 
b/extensions/Wikibase/repo/includes/store/sql/SqlStore.php
index 262a224..eb59679 100644
--- a/extensions/Wikibase/repo/includes/store/sql/SqlStore.php
+++ b/extensions/Wikibase/repo/includes/store/sql/SqlStore.php
@@ -119,6 +119,11 @@
        private $useRedirectTargetColumn;
 
        /**
+        * @var int[]
+        */
+       private $idBlacklist;
+
+       /**
         * @param EntityContentDataCodec $contentCodec
         * @param EntityIdParser $entityIdParser
         */
@@ -136,6 +141,7 @@
                $this->cacheType = $settings->getSetting( 'sharedCacheType' );
                $this->cacheDuration = $settings->getSetting( 
'sharedCacheDuration' );
                $this->useRedirectTargetColumn = $settings->getSetting( 
'useRedirectTargetColumn' );
+               $this->idBlacklist = $settings->getSetting( 'idBlacklist' );
        }
 
        /**
@@ -458,7 +464,7 @@
         * @return IdGenerator
         */
        public function newIdGenerator() {
-               return new SqlIdGenerator( 'wb_id_counters', wfGetDB( DB_MASTER 
) );
+               return new SqlIdGenerator( 'wb_id_counters', wfGetDB( DB_MASTER 
), $this->idBlacklist );
        }
 
        /**
diff --git 
a/extensions/Wikibase/repo/tests/phpunit/includes/ChangeOp/ChangeOpQualifierTest.php
 
b/extensions/Wikibase/repo/tests/phpunit/includes/ChangeOp/ChangeOpQualifierTest.php
index 0f727d8..a30f5ce 100644
--- 
a/extensions/Wikibase/repo/tests/phpunit/includes/ChangeOp/ChangeOpQualifierTest.php
+++ 
b/extensions/Wikibase/repo/tests/phpunit/includes/ChangeOp/ChangeOpQualifierTest.php
@@ -16,7 +16,6 @@
 use Wikibase\DataModel\Snak\PropertyValueSnak;
 use Wikibase\DataModel\Snak\Snak;
 use Wikibase\DataModel\Snak\SnakList;
-use Wikibase\DataModel\Statement\Statement;
 use Wikibase\Lib\ClaimGuidGenerator;
 
 /**
@@ -166,9 +165,9 @@
 
                $oldSnak = new PropertyValueSnak( $p11, new StringValue( "old 
qualifier" ) );
 
-               $claim = new Statement( new Claim( new PropertyNoValueSnak( 
$p11 ), new SnakList( array( $oldSnak ) ) ) );
-               $claim->setGuid( $claimGuid );
-               $item->addClaim( $claim );
+               $snak = new PropertyNoValueSnak( $p11 );
+               $qualifiers = new SnakList( array( $oldSnak ) );
+               $item->getStatements()->addNewStatement( $snak, $qualifiers, 
null, $claimGuid );
 
                //NOTE: the mock validator will consider the string "INVALID" 
to be invalid.
                $goodSnak = new PropertyValueSnak( $p11, new StringValue( 
'good' ) );
@@ -209,9 +208,9 @@
 
                $oldSnak = new PropertyValueSnak( $p11, new StringValue( "old 
qualifier" ) );
 
-               $claim = new Statement( new Claim( new PropertyNoValueSnak( 
$p11 ), new SnakList( array( $oldSnak ) ) ) );
-               $claim->setGuid( $claimGuid );
-               $item->addClaim( $claim );
+               $snak = new PropertyNoValueSnak( $p11 );
+               $qualifiers = new SnakList( array( $oldSnak ) );
+               $item->getStatements()->addNewStatement( $snak, $qualifiers, 
null, $claimGuid );
 
                //NOTE: the mock validator will consider the string "INVALID" 
to be invalid.
                $badSnak = new PropertyValueSnak( $p11, new StringValue( 
'INVALID' ) );
diff --git 
a/extensions/Wikibase/repo/tests/phpunit/includes/ChangeOp/ChangeOpReferenceTest.php
 
b/extensions/Wikibase/repo/tests/phpunit/includes/ChangeOp/ChangeOpReferenceTest.php
index ffb4521..248d25c 100644
--- 
a/extensions/Wikibase/repo/tests/phpunit/includes/ChangeOp/ChangeOpReferenceTest.php
+++ 
b/extensions/Wikibase/repo/tests/phpunit/includes/ChangeOp/ChangeOpReferenceTest.php
@@ -6,7 +6,6 @@
 use DataValues\StringValue;
 use InvalidArgumentException;
 use Wikibase\ChangeOp\ChangeOpReference;
-use Wikibase\DataModel\Claim\Claim;
 use Wikibase\DataModel\Claim\Claims;
 use Wikibase\DataModel\Entity\Entity;
 use Wikibase\DataModel\Entity\Item;
@@ -262,9 +261,9 @@
                $oldSnak = new PropertyValueSnak( $p11, new StringValue( "old 
reference" ) );
                $oldReference = new Reference( new SnakList( array( $oldSnak ) 
) );
 
-               $claim = new Statement( new Claim( new PropertyNoValueSnak( 
$p11 ), new SnakList( array( $oldSnak ) ) ) );
-               $claim->setGuid( $claimGuid );
-               $item->addClaim( $claim );
+               $snak = new PropertyNoValueSnak( $p11 );
+               $qualifiers = new SnakList( array( $oldSnak ) );
+               $item->getStatements()->addNewStatement( $snak, $qualifiers, 
null, $claimGuid );
 
                $goodSnak = new PropertyValueSnak( $p11, new StringValue( 
'good' ) );
 
@@ -309,9 +308,9 @@
                $oldSnak = new PropertyValueSnak( $p11, new StringValue( "old 
reference" ) );
                $oldReference = new Reference( new SnakList( array( $oldSnak ) 
) );
 
-               $claim = new Statement( new Claim( new PropertyNoValueSnak( 
$p11 ), new SnakList( array( $oldSnak ) ) ) );
-               $claim->setGuid( $claimGuid );
-               $item->addClaim( $claim );
+               $snak = new PropertyNoValueSnak( $p11 );
+               $qualifiers = new SnakList( array( $oldSnak ) );
+               $item->getStatements()->addNewStatement( $snak, $qualifiers, 
null, $claimGuid );
 
                //NOTE: the mock validator will consider the string "INVALID" 
to be invalid.
                $badSnak = new PropertyValueSnak( $p11, new StringValue( 
'INVALID' ) );
diff --git 
a/extensions/Wikibase/repo/tests/phpunit/includes/EntityParserOutputGeneratorTest.php
 
b/extensions/Wikibase/repo/tests/phpunit/includes/EntityParserOutputGeneratorTest.php
index 810c06c..b87b1e8 100644
--- 
a/extensions/Wikibase/repo/tests/phpunit/includes/EntityParserOutputGeneratorTest.php
+++ 
b/extensions/Wikibase/repo/tests/phpunit/includes/EntityParserOutputGeneratorTest.php
@@ -18,7 +18,6 @@
 use Wikibase\Lib\Store\Sql\SqlEntityInfoBuilderFactory;
 use Wikibase\ValuesFinder;
 use Wikibase\View\Template\TemplateFactory;
-use Wikibase\View\Template\TemplateRegistry;
 
 /**
  * @covers Wikibase\EntityParserOutputGenerator
@@ -109,6 +108,8 @@
        }
 
        private function newEntityParserOutputGenerator() {
+               $templateFactory = TemplateFactory::getDefaultInstance();
+
                return new EntityParserOutputGenerator(
                        $this->getEntityViewFactory(),
                        $this->getConfigBuilderMock(),
@@ -117,7 +118,7 @@
                        new SqlEntityInfoBuilderFactory(),
                        $this->newLanguageFallbackChain(),
                        'en',
-                       new TemplateFactory( 
TemplateRegistry::getDefaultInstance() )
+                       $templateFactory
                );
        }
 
@@ -222,4 +223,5 @@
        private function getParserOptions() {
                return new ParserOptions( null, Language::factory( 'en' ) );
        }
+
 }
diff --git 
a/extensions/Wikibase/repo/tests/phpunit/includes/EntitySearchTextGeneratorTest.php
 
b/extensions/Wikibase/repo/tests/phpunit/includes/EntitySearchTextGeneratorTest.php
deleted file mode 100644
index d4d0f30..0000000
--- 
a/extensions/Wikibase/repo/tests/phpunit/includes/EntitySearchTextGeneratorTest.php
+++ /dev/null
@@ -1,86 +0,0 @@
-<?php
-
-namespace Wikibase\Test;
-
-use Wikibase\DataModel\Entity\EntityDocument;
-use Wikibase\DataModel\Entity\Item;
-use Wikibase\Repo\EntitySearchTextGenerator;
-
-/**
- * @covers Wikibase\Repo\EntitySearchTextGenerator
- *
- * @group WikibaseRepo
- * @group Wikibase
- *
- * @licence GNU GPL v2+
- * @author Daniel Kinzler
- * @author Katie Filbert < [email protected] >
- * @author Thiemo Mättig
- */
-class EntitySearchTextGeneratorTest extends \PHPUnit_Framework_TestCase {
-
-       public function generateProvider() {
-               $item = new Item();
-
-               $item->getFingerprint()->setLabel( 'en', 'Test' );
-               $item->getFingerprint()->setLabel( 'de', 'Testen' );
-               $item->getFingerprint()->setDescription( 'en', 'city in Spain' 
);
-               $item->getFingerprint()->setAliasGroup( 'en', array( 'abc', 
'cde' ) );
-               $item->getFingerprint()->setAliasGroup( 'de', array( 'xyz', 
'uvw' ) );
-
-               $patterns = array(
-                       '/^Test$/',
-                       '/^Testen$/',
-                       '/^city in Spain$/',
-                       '/^abc$/',
-                       '/^cde$/',
-                       '/^uvw$/',
-                       '/^xyz$/',
-                       '/^(?!abcde).*$/',
-               );
-
-               return array(
-                       array( $item, $patterns )
-               );
-       }
-
-       /**
-        * @dataProvider generateProvider
-        * @param EntityDocument $entity
-        * @param string[] $patterns
-        */
-       public function testGenerate( EntityDocument $entity, array $patterns ) 
{
-               $generator = new EntitySearchTextGenerator();
-               $text = $generator->generate( $entity );
-
-               foreach ( $patterns as $pattern ) {
-                       $this->assertRegExp( $pattern . 'm', $text );
-               }
-       }
-
-       public function 
testGivenEntityWithoutFingerprint_emptyStringIsReturned() {
-               $generator = new EntitySearchTextGenerator();
-               $entity = $this->getMock( 
'Wikibase\DataModel\Entity\EntityDocument' );
-               $text = $generator->generate( $entity );
-
-               $this->assertSame( '', $text );
-       }
-
-       public function testGivenEmptyEntity_newlineIsReturned() {
-               $generator = new EntitySearchTextGenerator();
-               $item = new Item();
-               $text = $generator->generate( $item );
-
-               $this->assertSame( "\n", $text );
-       }
-
-       public function testGivenUntrimmedLabel_generateDoesNotTrim() {
-               $item = new Item();
-               $item->getFingerprint()->setLabel( 'en', ' untrimmed label ' );
-               $generator = new EntitySearchTextGenerator();
-               $text = $generator->generate( $item );
-
-               $this->assertSame( " untrimmed label \n", $text );
-       }
-
-}
diff --git 
a/extensions/Wikibase/repo/tests/phpunit/includes/FingerprintSearchTextGeneratorTest.php
 
b/extensions/Wikibase/repo/tests/phpunit/includes/FingerprintSearchTextGeneratorTest.php
new file mode 100644
index 0000000..d57cddb
--- /dev/null
+++ 
b/extensions/Wikibase/repo/tests/phpunit/includes/FingerprintSearchTextGeneratorTest.php
@@ -0,0 +1,77 @@
+<?php
+
+namespace Wikibase\Test;
+
+use Wikibase\DataModel\Term\Fingerprint;
+use Wikibase\Repo\FingerprintSearchTextGenerator;
+
+/**
+ * @covers Wikibase\Repo\FingerprintSearchTextGenerator
+ *
+ * @group WikibaseRepo
+ * @group Wikibase
+ *
+ * @licence GNU GPL v2+
+ * @author Daniel Kinzler
+ * @author Katie Filbert < [email protected] >
+ * @author Thiemo Mättig
+ */
+class FingerprintSearchTextGeneratorTest extends \PHPUnit_Framework_TestCase {
+
+       public function generateProvider() {
+               $fingerprint = new Fingerprint();
+
+               $fingerprint->setLabel( 'en', 'Test' );
+               $fingerprint->setLabel( 'de', 'Testen' );
+               $fingerprint->setDescription( 'en', 'city in Spain' );
+               $fingerprint->setAliasGroup( 'en', array( 'abc', 'cde' ) );
+               $fingerprint->setAliasGroup( 'de', array( 'xyz', 'uvw' ) );
+
+               $patterns = array(
+                       '/^Test$/',
+                       '/^Testen$/',
+                       '/^city in Spain$/',
+                       '/^abc$/',
+                       '/^cde$/',
+                       '/^uvw$/',
+                       '/^xyz$/',
+                       '/^(?!abcde).*$/',
+               );
+
+               return array(
+                       array( $fingerprint, $patterns )
+               );
+       }
+
+       /**
+        * @dataProvider generateProvider
+        * @param Fingerprint $fingerprint
+        * @param string[] $patterns
+        */
+       public function testGenerate( Fingerprint $fingerprint, array $patterns 
) {
+               $generator = new FingerprintSearchTextGenerator();
+               $text = $generator->generate( $fingerprint );
+
+               foreach ( $patterns as $pattern ) {
+                       $this->assertRegExp( $pattern . 'm', $text );
+               }
+       }
+
+       public function testGivenEmptyEntity_emptyStringIsReturned() {
+               $generator = new FingerprintSearchTextGenerator();
+               $fingerprint = new Fingerprint();
+               $text = $generator->generate( $fingerprint );
+
+               $this->assertSame( '', $text );
+       }
+
+       public function testGivenUntrimmedLabel_generateDoesNotTrim() {
+               $fingerprint = new Fingerprint();
+               $fingerprint->setLabel( 'en', ' untrimmed label ' );
+               $generator = new FingerprintSearchTextGenerator();
+               $text = $generator->generate( $fingerprint );
+
+               $this->assertSame( " untrimmed label ", $text );
+       }
+
+}
diff --git 
a/extensions/Wikibase/repo/tests/phpunit/includes/ItemSearchTextGeneratorTest.php
 
b/extensions/Wikibase/repo/tests/phpunit/includes/ItemSearchTextGeneratorTest.php
index 4489c79..5a6e6e6 100644
--- 
a/extensions/Wikibase/repo/tests/phpunit/includes/ItemSearchTextGeneratorTest.php
+++ 
b/extensions/Wikibase/repo/tests/phpunit/includes/ItemSearchTextGeneratorTest.php
@@ -60,12 +60,12 @@
                }
        }
 
-       public function testGivenEmptyItem_newlineIsReturned() {
+       public function testGivenEmptyItem_emptyStringIsReturned() {
                $generator = new ItemSearchTextGenerator();
                $item = new Item();
                $text = $generator->generate( $item );
 
-               $this->assertSame( "\n", $text );
+               $this->assertSame( '', $text );
        }
 
        public function testGivenUntrimmedPageName_generateDoesNotTrim() {
@@ -75,7 +75,7 @@
                $generator = new ItemSearchTextGenerator();
                $text = $generator->generate( $item );
 
-               $this->assertSame( " untrimmed label \n\n untrimmed pageName ", 
$text );
+               $this->assertSame( " untrimmed label \n untrimmed pageName ", 
$text );
        }
 
 }
diff --git 
a/extensions/Wikibase/repo/tests/phpunit/includes/ParserOutputJsConfigBuilderTest.php
 
b/extensions/Wikibase/repo/tests/phpunit/includes/ParserOutputJsConfigBuilderTest.php
index 706572d..0a4c068 100644
--- 
a/extensions/Wikibase/repo/tests/phpunit/includes/ParserOutputJsConfigBuilderTest.php
+++ 
b/extensions/Wikibase/repo/tests/phpunit/includes/ParserOutputJsConfigBuilderTest.php
@@ -4,14 +4,12 @@
 
 use Language;
 use MediaWikiTestCase;
-use Wikibase\DataModel\Claim\Claim;
 use Wikibase\DataModel\Entity\Entity;
 use Wikibase\DataModel\Entity\EntityIdValue;
 use Wikibase\DataModel\Entity\Item;
 use Wikibase\DataModel\Entity\ItemId;
 use Wikibase\DataModel\Entity\PropertyId;
 use Wikibase\DataModel\Snak\PropertyValueSnak;
-use Wikibase\DataModel\Statement\Statement;
 use Wikibase\LanguageFallbackChain;
 use Wikibase\LanguageFallbackChainFactory;
 use Wikibase\Lib\Serializers\SerializationOptions;
@@ -105,11 +103,8 @@
                        new PropertyId( 'P794' ),
                        new EntityIdValue( new ItemId( 'Q9000' ) )
                );
-
-               $statement = new Statement( new Claim( $snak ) );
-               $statement->setGuid( 'P794$muahahaha' );
-
-               $item->addClaim( $statement );
+               $guid = 'P794$muahahaha';
+               $item->getStatements()->addNewStatement( $snak, null, null, 
$guid );
 
                return $item;
        }
diff --git 
a/extensions/Wikibase/repo/tests/phpunit/includes/api/ApiXmlFormatTest.php 
b/extensions/Wikibase/repo/tests/phpunit/includes/api/ApiXmlFormatTest.php
index ea671b6..9fb8029 100644
--- a/extensions/Wikibase/repo/tests/phpunit/includes/api/ApiXmlFormatTest.php
+++ b/extensions/Wikibase/repo/tests/phpunit/includes/api/ApiXmlFormatTest.php
@@ -5,11 +5,9 @@
 use ApiBase;
 use ApiMain;
 use FauxRequest;
-use Wikibase\DataModel\Claim\Claim;
 use Wikibase\DataModel\Entity\Item;
 use Wikibase\DataModel\Entity\Property;
 use Wikibase\DataModel\Snak\PropertyNoValueSnak;
-use Wikibase\DataModel\Statement\Statement;
 use Wikibase\EntityRevision;
 use Wikibase\Repo\WikibaseRepo;
 
@@ -160,13 +158,12 @@
 
                $item = new Item();
                $entityRevision = $store->saveEntity( $item, 'testing', 
$GLOBALS['wgUser'], EDIT_NEW );
+               /** @var Item $item */
                $item = $entityRevision->getEntity();
 
-               $snak = new PropertyNoValueSnak( $propertyId->getNumericId() );
-               $statement = new Statement( new Claim( $snak ) );
-
-               $statement->setGuid( $item->getId()->getSerialization() . 
'$kittens' );
-               $item->addClaim( $statement );
+               $snak = new PropertyNoValueSnak( $propertyId );
+               $guid = $item->getId()->getSerialization() . '$kittens';
+               $item->getStatements()->addNewStatement( $snak, null, null, 
$guid );
                $entityRevision = $store->saveEntity( $item, 'testing more!', 
$GLOBALS['wgUser'] );
 
                return $entityRevision;
diff --git 
a/extensions/Wikibase/repo/tests/phpunit/includes/api/GetClaimsTest.php 
b/extensions/Wikibase/repo/tests/phpunit/includes/api/GetClaimsTest.php
index 40cc8e5..d5819df 100644
--- a/extensions/Wikibase/repo/tests/phpunit/includes/api/GetClaimsTest.php
+++ b/extensions/Wikibase/repo/tests/phpunit/includes/api/GetClaimsTest.php
@@ -72,7 +72,7 @@
 
                foreach ( $statements as $key => $statement ) {
                        $statement->setGuid( $item->getId()->getSerialization() 
. '$D8404CDA-56A1-4334-AF13-A3290BCD9CL' . $key );
-                       $item->addClaim( $statement );
+                       $item->getStatements()->addStatement( $statement );
                }
        }
 
diff --git 
a/extensions/Wikibase/repo/tests/phpunit/includes/api/RemoveClaimsTest.php 
b/extensions/Wikibase/repo/tests/phpunit/includes/api/RemoveClaimsTest.php
index 732ca0f..43e634b 100644
--- a/extensions/Wikibase/repo/tests/phpunit/includes/api/RemoveClaimsTest.php
+++ b/extensions/Wikibase/repo/tests/phpunit/includes/api/RemoveClaimsTest.php
@@ -60,7 +60,7 @@
                foreach ( $statements as $statement ) {
                        $guidGenerator = new ClaimGuidGenerator();
                        $statement->setGuid( $guidGenerator->newGuid( 
$item->getId() ) );
-                       $item->addClaim( $statement );
+                       $item->getStatements()->addStatement( $statement );
                }
 
                $store->saveEntity( $item, '', $GLOBALS['wgUser'], EDIT_UPDATE 
);
diff --git 
a/extensions/Wikibase/repo/tests/phpunit/includes/api/RemoveQualifiersTest.php 
b/extensions/Wikibase/repo/tests/phpunit/includes/api/RemoveQualifiersTest.php
index 26cc2be..cf3b46f 100644
--- 
a/extensions/Wikibase/repo/tests/phpunit/includes/api/RemoveQualifiersTest.php
+++ 
b/extensions/Wikibase/repo/tests/phpunit/includes/api/RemoveQualifiersTest.php
@@ -81,7 +81,7 @@
 
                        $guidGenerator = new ClaimGuidGenerator();
                        $statement->setGuid( $guidGenerator->newGuid( 
$item->getId() ) );
-                       $item->addClaim( $statement );
+                       $item->getStatements()->addStatement( $statement );
 
                        $store->saveEntity( $item, '', $GLOBALS['wgUser'], 
EDIT_UPDATE );
 
diff --git 
a/extensions/Wikibase/repo/tests/phpunit/includes/api/RemoveReferencesTest.php 
b/extensions/Wikibase/repo/tests/phpunit/includes/api/RemoveReferencesTest.php
index c06c260..b834c5c 100644
--- 
a/extensions/Wikibase/repo/tests/phpunit/includes/api/RemoveReferencesTest.php
+++ 
b/extensions/Wikibase/repo/tests/phpunit/includes/api/RemoveReferencesTest.php
@@ -81,7 +81,7 @@
 
                        $guidGenerator = new ClaimGuidGenerator();
                        $statement->setGuid( $guidGenerator->newGuid( 
$item->getId() ) );
-                       $item->addClaim( $statement );
+                       $item->getStatements()->addStatement( $statement );
 
                        $store->saveEntity( $item, '', $GLOBALS['wgUser'], 
EDIT_UPDATE );
 
diff --git 
a/extensions/Wikibase/repo/tests/phpunit/includes/api/ResultBuilderTest.php 
b/extensions/Wikibase/repo/tests/phpunit/includes/api/ResultBuilderTest.php
index 776596d..3a893a4 100644
--- a/extensions/Wikibase/repo/tests/phpunit/includes/api/ResultBuilderTest.php
+++ b/extensions/Wikibase/repo/tests/phpunit/includes/api/ResultBuilderTest.php
@@ -15,7 +15,6 @@
 use Wikibase\DataModel\Snak\PropertySomeValueSnak;
 use Wikibase\DataModel\Snak\PropertyValueSnak;
 use Wikibase\DataModel\Snak\SnakList;
-use Wikibase\DataModel\Statement\Statement;
 use Wikibase\EntityRevision;
 use Wikibase\Lib\Serializers\SerializationOptions;
 use Wikibase\Lib\Serializers\SerializerFactory;
@@ -158,22 +157,20 @@
                $item->addSiteLink( new SiteLink( 'enwiki', 'Berlin', array( 
new ItemId( 'Q333' ) ) ) );
                $item->addSiteLink( new SiteLink( 'zh_classicalwiki', 
'User:Addshore', array() ) );
 
-               $statement = new Statement( new Claim( new 
PropertySomeValueSnak( new PropertyId( 'P65' ) ) ) );
-               $statement->setGuid( 'imaguid' );
+               $snak = new PropertySomeValueSnak( new PropertyId( 'P65' ) );
 
                $qualifiers = new SnakList();
                $qualifiers->addSnak( new PropertySomeValueSnak( new 
PropertyId( 'P65' ) ) );
                $qualifiers->addSnak( new PropertyValueSnak( new PropertyId( 
'P65' ), new StringValue( 'string!' ) ) );
-               $statement->setQualifiers( $qualifiers );
 
                $references = new ReferenceList();
                $referenceSnaks = new SnakList();
                $referenceSnaks->addSnak( new PropertySomeValueSnak( new 
PropertyId( 'P65' ) ) );
                $referenceSnaks->addSnak( new PropertySomeValueSnak( new 
PropertyId( 'P68' ) ) );
                $references->addReference( new Reference( $referenceSnaks ) );
-               $statement->setReferences( $references );
 
-               $item->addClaim( $statement );
+               $guid = 'imaguid';
+               $item->getStatements()->addNewStatement( $snak, $qualifiers, 
$references, $guid );
 
                $entityRevision = new EntityRevision( $item, 33, 
'20131126202923' );
 
diff --git 
a/extensions/Wikibase/repo/tests/phpunit/includes/api/SetClaimTest.php 
b/extensions/Wikibase/repo/tests/phpunit/includes/api/SetClaimTest.php
index 753d348..74a05e0 100644
--- a/extensions/Wikibase/repo/tests/phpunit/includes/api/SetClaimTest.php
+++ b/extensions/Wikibase/repo/tests/phpunit/includes/api/SetClaimTest.php
@@ -420,20 +420,19 @@
                $store = WikibaseRepo::getDefaultInstance()->getEntityStore();
                $serializerFactory = new SerializerFactory();
 
-               // create property
                $property = Property::newFromType( 'quantity' );
                $property = $store->saveEntity( $property, '', 
$GLOBALS['wgUser'], EDIT_NEW )->getEntity();
 
-               // create item
                $item = new Item();
+               /** @var Item $item */
                $item = $store->saveEntity( $item, '', $GLOBALS['wgUser'], 
EDIT_NEW )->getEntity();
 
                // add a claim
                $guidGenerator = new ClaimGuidGenerator();
-               $claim = new Statement( new Claim( new PropertyNoValueSnak( 
$property->getId() ) ) );
-               $claim->setGuid( $guidGenerator->newGuid( $item->getId() ) );
+               $statement = new Statement( new Claim( new PropertyNoValueSnak( 
$property->getId() ) ) );
+               $statement->setGuid( $guidGenerator->newGuid( $item->getId() ) 
);
 
-               $item->addClaim( $claim );
+               $item->getStatements()->addStatement( $statement );
                $store->saveEntity( $item, '', $GLOBALS['wgUser'], EDIT_UPDATE 
);
 
                // try to change the main snak's property
@@ -442,7 +441,7 @@
 
                $badClaim = new Statement( new Claim( new PropertyNoValueSnak( 
$badProperty->getId() ) ) );
 
-               $serializer = $serializerFactory->newSerializerForObject( 
$claim );
+               $serializer = $serializerFactory->newSerializerForObject( 
$statement );
                $serializedBadClaim = $serializer->getSerialized( $badClaim );
 
                $params = array(
diff --git 
a/extensions/Wikibase/repo/tests/phpunit/includes/api/SetClaimValueTest.php 
b/extensions/Wikibase/repo/tests/phpunit/includes/api/SetClaimValueTest.php
index 7badc3b..206ca1a 100644
--- a/extensions/Wikibase/repo/tests/phpunit/includes/api/SetClaimValueTest.php
+++ b/extensions/Wikibase/repo/tests/phpunit/includes/api/SetClaimValueTest.php
@@ -19,7 +19,6 @@
 use Wikibase\DataModel\Entity\Property;
 use Wikibase\DataModel\Entity\PropertyId;
 use Wikibase\DataModel\Snak\PropertyValueSnak;
-use Wikibase\DataModel\Statement\Statement;
 use Wikibase\Lib\EntityIdFormatter;
 use Wikibase\Lib\EntityIdPlainLinkFormatter;
 use Wikibase\Lib\EntityIdValueFormatter;
@@ -77,11 +76,12 @@
                $store = WikibaseRepo::getDefaultInstance()->getEntityStore();
                $store->saveEntity( $item, '', $GLOBALS['wgUser'], EDIT_NEW );
 
-               $statement = new Statement( new Claim( new PropertyValueSnak( 
$propertyId, new StringValue( 'o_O' ) ) ) );
-               $statement->setGuid( $item->getId()->getSerialization() . 
'$D8404CDA-25E4-4334-AG93-A3290BCD9C0P' );
-               $item->addClaim( $statement );
+               $snak = new PropertyValueSnak( $propertyId, new StringValue( 
'o_O' ) );
+               $guid = $item->getId()->getSerialization() . 
'$D8404CDA-25E4-4334-AG93-A3290BCD9C0P';
+               $item->getStatements()->addNewStatement( $snak, null, null, 
$guid );
 
                $store->saveEntity( $item, '', $GLOBALS['wgUser'], EDIT_UPDATE 
);
+
                return $item;
        }
 
diff --git 
a/extensions/Wikibase/repo/tests/phpunit/includes/api/SetQualifierTest.php 
b/extensions/Wikibase/repo/tests/phpunit/includes/api/SetQualifierTest.php
index b9b3fd1..e8e0bdf 100644
--- a/extensions/Wikibase/repo/tests/phpunit/includes/api/SetQualifierTest.php
+++ b/extensions/Wikibase/repo/tests/phpunit/includes/api/SetQualifierTest.php
@@ -12,7 +12,6 @@
 use Wikibase\DataModel\Entity\Property;
 use Wikibase\DataModel\Snak\PropertyValueSnak;
 use Wikibase\DataModel\Snak\Snak;
-use Wikibase\DataModel\Statement\Statement;
 use Wikibase\Lib\ClaimGuidGenerator;
 use Wikibase\Repo\WikibaseRepo;
 
@@ -95,11 +94,11 @@
 
                        $prop = Property::newFromType( 'string' );
                        $propId = $this->makeProperty( $prop )->getId();
-                       $claim = new Statement( new Claim( new 
PropertyValueSnak( $propId, new StringValue( '^_^' ) ) ) );
+                       $snak = new PropertyValueSnak( $propId, new 
StringValue( '^_^' ) );
 
                        $guidGenerator = new ClaimGuidGenerator();
-                       $claim->setGuid( $guidGenerator->newGuid( 
$newItem->getId() ) );
-                       $newItem->addClaim( $claim );
+                       $guid = $guidGenerator->newGuid( $newItem->getId() );
+                       $newItem->getStatements()->addNewStatement( $snak, 
null, null, $guid );
 
                        $store->saveEntity( $newItem, '', $GLOBALS['wgUser'], 
EDIT_UPDATE );
                        $item = $newItem;
diff --git 
a/extensions/Wikibase/repo/tests/phpunit/includes/api/SetReferenceTest.php 
b/extensions/Wikibase/repo/tests/phpunit/includes/api/SetReferenceTest.php
index a196cd3..455facb 100644
--- a/extensions/Wikibase/repo/tests/phpunit/includes/api/SetReferenceTest.php
+++ b/extensions/Wikibase/repo/tests/phpunit/includes/api/SetReferenceTest.php
@@ -70,16 +70,10 @@
                $item = new Item();
                $store->saveEntity( $item, '', $GLOBALS['wgUser'], EDIT_NEW );
 
-               $statement = new Statement( new Claim( new PropertyNoValueSnak( 
self::$propertyIds[0] ) ) );
-               $statement->setGuid( $item->getId()->getSerialization() . 
'$D8505CDA-25E4-4334-AG93-A3290BCD9C0P' );
-
-               $reference = new Reference( new SnakList(
-                       array( new PropertySomeValueSnak( 100 ) )
-               ) );
-
-               $statement->getReferences()->addReference( $reference );
-
-               $item->addClaim( $statement );
+               $snak = new PropertyNoValueSnak( self::$propertyIds[0] );
+               $reference = new Reference( array( new PropertySomeValueSnak( 
100 ) ) );
+               $guid = $item->getId()->getSerialization() . 
'$D8505CDA-25E4-4334-AG93-A3290BCD9C0P';
+               $item->getStatements()->addNewStatement( $snak, null, array( 
$reference ), $guid );
 
                $store->saveEntity( $item, '', $GLOBALS['wgUser'], EDIT_UPDATE 
);
 
@@ -90,14 +84,14 @@
                ) );
 
                $serializedReference = $this->makeValidRequest(
-                       $statement->getGuid(),
+                       $guid,
                        $referenceHash,
                        $reference
                );
 
                // Since the reference got modified, the hash should no longer 
match
                $this->makeInvalidRequest(
-                       $statement->getGuid(),
+                       $guid,
                        $referenceHash,
                        $reference
                );
@@ -113,7 +107,7 @@
 
                // Set reference with two snaks:
                $serializedReference = $this->makeValidRequest(
-                       $statement->getGuid(),
+                       $guid,
                        $referenceHash,
                        $reference
                );
@@ -126,7 +120,7 @@
 
                // Make another request with reordered snaks-order:
                $this->makeValidRequest(
-                       $statement->getGuid(),
+                       $guid,
                        $referenceHash,
                        $serializedReference
                );
@@ -139,19 +133,16 @@
                $store->saveEntity( $item, '', $GLOBALS['wgUser'], EDIT_NEW );
 
                // Create a statement to act upon:
-               $statement = new Statement( new Claim( new PropertyNoValueSnak( 
self::$propertyIds[0] ) ) );
-               $statement->setGuid(
-                       $item->getId()->getSerialization() . 
'$D8505CDA-25E4-4334-AG93-A3290BCD9C0P'
-               );
-
-               $item->addClaim( $statement );
+               $snak = new PropertyNoValueSnak( self::$propertyIds[0] );
+               $guid = $item->getId()->getSerialization() . 
'$D8505CDA-25E4-4334-AG93-A3290BCD9C0P';
+               $item->getStatements()->addNewStatement( $snak, null, null, 
$guid );
 
                $store->saveEntity( $item, '', $GLOBALS['wgUser'], EDIT_UPDATE 
);
 
                $snak = new PropertySomeValueSnak( new PropertyId( 'P23728525' 
) );
                $reference = new Reference( new SnakList( array( $snak ) ) );
 
-               $this->makeInvalidRequest( $statement->getGuid(), null, 
$reference, 'modification-failed' );
+               $this->makeInvalidRequest( $guid, null, $reference, 
'modification-failed' );
        }
 
        public function testSettingIndex() {
@@ -162,9 +153,8 @@
 
                // Create a statement to act upon:
                $statement = new Statement( new Claim( new PropertyNoValueSnak( 
self::$propertyIds[0] ) ) );
-               $statement->setGuid(
-                       $item->getId()->getSerialization() . 
'$D8505CDA-25E4-4334-AG93-A3290BCD9C0P'
-               );
+               $guid = $item->getId()->getSerialization() . 
'$D8505CDA-25E4-4334-AG93-A3290BCD9C0P';
+               $statement->setGuid( $guid );
 
                // Pre-fill statement with three references:
                $references = array(
@@ -177,12 +167,12 @@
                        $statement->getReferences()->addReference( $reference );
                }
 
-               $item->addClaim( $statement );
+               $item->getStatements()->addStatement( $statement );
 
                $store->saveEntity( $item, '', $GLOBALS['wgUser'], EDIT_UPDATE 
);
 
                $this->makeValidRequest(
-                       $statement->getGuid(),
+                       $guid,
                        $references[2]->getHash(),
                        $references[2],
                        0
diff --git 
a/extensions/Wikibase/repo/tests/phpunit/includes/content/ItemContentTest.php 
b/extensions/Wikibase/repo/tests/phpunit/includes/content/ItemContentTest.php
index f4c893f..e232c8a 100644
--- 
a/extensions/Wikibase/repo/tests/phpunit/includes/content/ItemContentTest.php
+++ 
b/extensions/Wikibase/repo/tests/phpunit/includes/content/ItemContentTest.php
@@ -7,7 +7,6 @@
 use Diff\DiffOp\DiffOpAdd;
 use Diff\DiffOp\DiffOpRemove;
 use Title;
-use Wikibase\DataModel\Claim\Claim;
 use Wikibase\DataModel\Entity\Diff\EntityDiff;
 use Wikibase\DataModel\Entity\EntityId;
 use Wikibase\DataModel\Entity\ItemId;
@@ -15,7 +14,6 @@
 use Wikibase\DataModel\SiteLink;
 use Wikibase\DataModel\SiteLinkList;
 use Wikibase\DataModel\Snak\PropertyNoValueSnak;
-use Wikibase\DataModel\Statement\Statement;
 use Wikibase\EntityContent;
 use Wikibase\ItemContent;
 use Wikibase\Lib\Store\EntityRedirect;
@@ -116,9 +114,9 @@
                // @todo this is needed in PropertyContentTest as well
                //       once we have statements in properties
                $contentWithClaim = $this->newEmpty();
-               $claim = new Statement( new Claim( new PropertyNoValueSnak( 83 
) ) );
-               $claim->setGuid( '$testing$' );
-               $contentWithClaim->getEntity()->addClaim( $claim );
+               $snak = new PropertyNoValueSnak( 83 );
+               $guid = '$testing$';
+               
$contentWithClaim->getEntity()->getStatements()->addNewStatement( $snak, null, 
null, $guid );
 
                $cases['claims'] = array(
                        $contentWithClaim,
@@ -150,9 +148,9 @@
                // @todo this is needed in PropertyContentTest as well
                //       once we have statements in properties
                $contentWithClaim = $this->newEmpty();
-               $claim = new Statement( new Claim( new PropertyNoValueSnak( 83 
) ) );
-               $claim->setGuid( '$testing$' );
-               $contentWithClaim->getEntity()->addClaim( $claim );
+               $snak = new PropertyNoValueSnak( 83 );
+               $guid = '$testing$';
+               
$contentWithClaim->getEntity()->getStatements()->addNewStatement( $snak, null, 
null, $guid );
 
                $cases['claims'] = array(
                        $contentWithClaim,
diff --git 
a/extensions/Wikibase/repo/tests/phpunit/includes/store/sql/SqlIdGeneratorTest.php
 
b/extensions/Wikibase/repo/tests/phpunit/includes/store/sql/SqlIdGeneratorTest.php
index adbfab2..f9bf697 100644
--- 
a/extensions/Wikibase/repo/tests/phpunit/includes/store/sql/SqlIdGeneratorTest.php
+++ 
b/extensions/Wikibase/repo/tests/phpunit/includes/store/sql/SqlIdGeneratorTest.php
@@ -2,8 +2,7 @@
 
 namespace Wikibase\Test;
 
-use Wikibase\IdGenerator;
-use Wikibase\Repo\WikibaseRepo;
+use Wikibase\SqlIdGenerator;
 
 /**
  * @covers Wikibase\SqlIdGenerator
@@ -16,21 +15,22 @@
  * @group medium
  *
  * @licence GNU GPL v2+
- * @author Jeroen De Dauw < [email protected] >
+ * @author Katie Filbert < [email protected] >
  */
 class SqlIdGeneratorTest extends \MediaWikiTestCase {
 
-       public function testIdBlacklisting() {
-               /**
-                * @var IdGenerator $clone
-                */
-               $generator = 
WikibaseRepo::getDefaultInstance()->getStore()->newIdGenerator();
-               $idBlacklist = WikibaseRepo::getDefaultInstance()->
-                       getSettings()->getSetting( 'idBlacklist' );
+       public function testGetNewId() {
+               $generator = new SqlIdGenerator( 'wb_id_counters', wfGetDB( 
DB_MASTER ), array() );
 
-               for ( $i = 0; $i < 45; ++$i ) {
-                       $this->assertFalse( in_array( $generator->getNewId( 
'blacklisttest' ), $idBlacklist ) );
-               }
+               $id = $generator->getNewId( 'wikibase-kittens' );
+               $this->assertSame( 1, $id );
+       }
+
+       public function testIdBlacklisting() {
+               $generator = new SqlIdGenerator( 'wb_id_counters', wfGetDB( 
DB_MASTER ), array( 1, 2 ) );
+
+               $id = $generator->getNewId( 'wikibase-blacklist' );
+               $this->assertSame( 3, $id );
        }
 
 }
diff --git 
a/extensions/Wikibase/repo/tests/phpunit/includes/store/sql/TermSearchKeyBuilderTest.php
 
b/extensions/Wikibase/repo/tests/phpunit/includes/store/sql/TermSearchKeyBuilderTest.php
index 4e9461d..629b437 100644
--- 
a/extensions/Wikibase/repo/tests/phpunit/includes/store/sql/TermSearchKeyBuilderTest.php
+++ 
b/extensions/Wikibase/repo/tests/phpunit/includes/store/sql/TermSearchKeyBuilderTest.php
@@ -44,10 +44,10 @@
         * @param boolean $matches
         */
        public function testRebuildSearchKey( $languageCode, $termText, 
$searchText, $matches ) {
-               $withoutTermSearchKey = WikibaseRepo::getDefaultInstance()->
-                       getSettings()->getSetting( 'withoutTermSearchKey' );
+               /* @var TermSqlIndex $termCache */
+               $termCache = 
WikibaseRepo::getDefaultInstance()->getStore()->getTermIndex();
 
-               if ( $withoutTermSearchKey ) {
+               if ( !$termCache->supportsSearchKeys() ) {
                        $this->markTestSkipped( "can't test search key if 
withoutTermSearchKey option is set." );
                }
 
@@ -56,8 +56,6 @@
                $item->setLabel( $languageCode, $termText );
 
                // save term
-               /* @var TermSqlIndex $termCache */
-               $termCache = 
WikibaseRepo::getDefaultInstance()->getStore()->getTermIndex();
                $termCache->clear();
                $termCache->saveTermsOfEntity( $item );
 
diff --git 
a/extensions/Wikibase/repo/tests/phpunit/includes/store/sql/TermSqlIndexTest.php
 
b/extensions/Wikibase/repo/tests/phpunit/includes/store/sql/TermSqlIndexTest.php
index 847fc24..61b8c10 100644
--- 
a/extensions/Wikibase/repo/tests/phpunit/includes/store/sql/TermSqlIndexTest.php
+++ 
b/extensions/Wikibase/repo/tests/phpunit/includes/store/sql/TermSqlIndexTest.php
@@ -8,7 +8,6 @@
 use Wikibase\DataModel\Term\AliasGroupList;
 use Wikibase\DataModel\Term\Fingerprint;
 use Wikibase\DataModel\Term\TermList;
-use Wikibase\Repo\WikibaseRepo;
 use Wikibase\StringNormalizer;
 use Wikibase\Term;
 use Wikibase\TermSqlIndex;
@@ -58,14 +57,12 @@
         * @dataProvider termProvider
         */
        public function testGetMatchingTerms2( $languageCode, $termText, 
$searchText, $matches ) {
-               $withoutTermSearchKey = WikibaseRepo::getDefaultInstance()->
-                       getSettings()->getSetting( 'withoutTermSearchKey' );
+               $termIndex = $this->getTermIndex();
 
-               if ( $withoutTermSearchKey ) {
+               if ( !$termIndex->supportsSearchKeys() ) {
                        $this->markTestSkipped( "can't test search key if 
withoutTermSearchKey option is set." );
                }
 
-               $termIndex = $this->getTermIndex();
                $termIndex->clear();
 
                $item = new Item( new ItemId( 'Q42' ) );
diff --git 
a/extensions/Wikibase/repo/tests/phpunit/includes/store/sql/WikiPageEntityStoreTest.php
 
b/extensions/Wikibase/repo/tests/phpunit/includes/store/sql/WikiPageEntityStoreTest.php
index 2f9539d..dc9d088 100644
--- 
a/extensions/Wikibase/repo/tests/phpunit/includes/store/sql/WikiPageEntityStoreTest.php
+++ 
b/extensions/Wikibase/repo/tests/phpunit/includes/store/sql/WikiPageEntityStoreTest.php
@@ -70,7 +70,7 @@
 
                $store = new WikiPageEntityStore(
                        new EntityContentFactory( $typeMap ),
-                       new SqlIdGenerator( 'wb_id_counters', wfGetDB( 
DB_MASTER ) )
+                       new SqlIdGenerator( 'wb_id_counters', wfGetDB( 
DB_MASTER ), array() )
                );
 
                return array( $store, $lookup );
diff --git a/extensions/Wikibase/view/src/Module/TemplateModule.php 
b/extensions/Wikibase/view/src/Module/TemplateModule.php
index 585296e..aa4f67f 100644
--- a/extensions/Wikibase/view/src/Module/TemplateModule.php
+++ b/extensions/Wikibase/view/src/Module/TemplateModule.php
@@ -5,7 +5,7 @@
 use FormatJson;
 use ResourceLoaderContext;
 use ResourceLoaderFileModule;
-use Wikibase\View\Template\TemplateRegistry;
+use Wikibase\View\Template\TemplateFactory;
 
 /**
  * Injects templates into JavaScript.
@@ -27,8 +27,8 @@
         */
        public function getScript( ResourceLoaderContext $context ) {
                // register HTML templates
-               $templateRegistry = TemplateRegistry::getDefaultInstance();
-               $templatesJson = FormatJson::encode( 
$templateRegistry->getTemplates() );
+               $templateFactory = TemplateFactory::getDefaultInstance();
+               $templatesJson = FormatJson::encode( 
$templateFactory->getTemplates() );
 
                // template store JavaScript initialisation
                $script = <<<EOT
diff --git a/extensions/Wikibase/view/src/Template/TemplateFactory.php 
b/extensions/Wikibase/view/src/Template/TemplateFactory.php
index caab761..191ce99 100644
--- a/extensions/Wikibase/view/src/Template/TemplateFactory.php
+++ b/extensions/Wikibase/view/src/Template/TemplateFactory.php
@@ -5,13 +5,29 @@
 /**
  * @license GNU GPL v2+
  * @author Adrian Lang < [email protected] >
+ * @author Thiemo Mättig
  */
 class TemplateFactory {
+
+       /**
+        * @var TemplateFactory
+        */
+       private static $instance;
 
        /**
         * @var TemplateRegistry
         */
        private $templateRegistry;
+
+       public static function getDefaultInstance() {
+               if ( self::$instance === null ) {
+                       self::$instance = new self(
+                               new TemplateRegistry( include( __DIR__ . 
'/../../resources/templates.php' ) )
+                       );
+               }
+
+               return self::$instance;
+       }
 
        /**
         * @param TemplateRegistry $templateRegistry
@@ -21,8 +37,16 @@
        }
 
        /**
+        * @return string[] Array containing all raw template strings.
+        */
+       public function getTemplates() {
+               return $this->templateRegistry->getTemplates();
+       }
+
+       /**
         * @param string $key
         * @param array $params
+        *
         * @return Template
         */
        public function get( $key, array $params ) {
diff --git a/extensions/Wikibase/view/src/Template/TemplateRegistry.php 
b/extensions/Wikibase/view/src/Template/TemplateRegistry.php
index c99e2e7..885ad35 100644
--- a/extensions/Wikibase/view/src/Template/TemplateRegistry.php
+++ b/extensions/Wikibase/view/src/Template/TemplateRegistry.php
@@ -17,27 +17,14 @@
 class TemplateRegistry {
 
        /**
-        * @var TemplateRegistry
-        */
-       private static $instance;
-
-       /**
         * @var string[]
         */
        private $templates = array();
 
-       public static function getDefaultInstance() {
-               if ( self::$instance === null ) {
-                       self::$instance = new self( include( __DIR__ . 
'/../../resources/templates.php' ) );
-               }
-
-               return self::$instance;
-       }
-
        /**
         * @param string[] $templates
         */
-       function __construct( array $templates = array() ) {
+       public function __construct( array $templates = array() ) {
                $this->addTemplates( $templates );
        }
 
diff --git a/extensions/Wikibase/view/tests/phpunit/ClaimHtmlGeneratorTest.php 
b/extensions/Wikibase/view/tests/phpunit/ClaimHtmlGeneratorTest.php
index fb0ccd0..2637828 100644
--- a/extensions/Wikibase/view/tests/phpunit/ClaimHtmlGeneratorTest.php
+++ b/extensions/Wikibase/view/tests/phpunit/ClaimHtmlGeneratorTest.php
@@ -17,7 +17,6 @@
 use Wikibase\View\ClaimHtmlGenerator;
 use Wikibase\View\SnakHtmlGenerator;
 use Wikibase\View\Template\TemplateFactory;
-use Wikibase\View\Template\TemplateRegistry;
 
 /**
  * @covers Wikibase\View\ClaimHtmlGenerator
@@ -77,10 +76,7 @@
                Claim $claim,
                $patterns
        ) {
-               $templateFactory = new TemplateFactory(
-                       TemplateRegistry::getDefaultInstance()
-               );
-
+               $templateFactory = TemplateFactory::getDefaultInstance();
                $claimHtmlGenerator = new ClaimHtmlGenerator(
                        $templateFactory,
                        $snakHtmlGenerator
diff --git a/extensions/Wikibase/view/tests/phpunit/ClaimsViewTest.php 
b/extensions/Wikibase/view/tests/phpunit/ClaimsViewTest.php
index 4da5922..370c2ab 100644
--- a/extensions/Wikibase/view/tests/phpunit/ClaimsViewTest.php
+++ b/extensions/Wikibase/view/tests/phpunit/ClaimsViewTest.php
@@ -18,7 +18,6 @@
 use Wikibase\View\ClaimHtmlGenerator;
 use Wikibase\View\StatementGroupListView;
 use Wikibase\View\Template\TemplateFactory;
-use Wikibase\View\Template\TemplateRegistry;
 
 /**
  * @covers Wikibase\View\StatementGroupListView
@@ -122,7 +121,7 @@
         * @return StatementGroupListView
         */
        private function newStatementGroupListView( EntityIdFormatter 
$propertyIdFormatter ) {
-               $templateFactory = new TemplateFactory( 
TemplateRegistry::getDefaultInstance() );
+               $templateFactory = TemplateFactory::getDefaultInstance();
 
                return new StatementGroupListView(
                        $templateFactory,
diff --git a/extensions/Wikibase/view/tests/phpunit/EntityTermsViewTest.php 
b/extensions/Wikibase/view/tests/phpunit/EntityTermsViewTest.php
index 70c53d7..5d84902 100644
--- a/extensions/Wikibase/view/tests/phpunit/EntityTermsViewTest.php
+++ b/extensions/Wikibase/view/tests/phpunit/EntityTermsViewTest.php
@@ -8,7 +8,6 @@
 use Wikibase\DataModel\Term\Fingerprint;
 use Wikibase\View\EntityTermsView;
 use Wikibase\View\Template\TemplateFactory;
-use Wikibase\View\Template\TemplateRegistry;
 use Wikibase\View\TextInjector;
 
 /**
@@ -48,7 +47,7 @@
        }
 
        private function getEntityTermsView( $languageCode = 'en', $called = 
null ) {
-               $templateFactory = new TemplateFactory( 
TemplateRegistry::getDefaultInstance() );
+               $templateFactory = TemplateFactory::getDefaultInstance();
 
                if ( $called === null ) {
                        $called = $this->any();
diff --git a/extensions/Wikibase/view/tests/phpunit/EntityViewFactoryTest.php 
b/extensions/Wikibase/view/tests/phpunit/EntityViewFactoryTest.php
index 2358aeb..664f936 100644
--- a/extensions/Wikibase/view/tests/phpunit/EntityViewFactoryTest.php
+++ b/extensions/Wikibase/view/tests/phpunit/EntityViewFactoryTest.php
@@ -8,7 +8,6 @@
 use Wikibase\Lib\SnakFormatter;
 use Wikibase\View\EntityViewFactory;
 use Wikibase\View\Template\TemplateFactory;
-use Wikibase\View\Template\TemplateRegistry;
 
 /**
  * @covers Wikibase\View\EntityViewFactory
@@ -78,13 +77,15 @@
        }
 
        private function getEntityViewFactory() {
+               $templateFactory = TemplateFactory::getDefaultInstance();
+
                return new EntityViewFactory(
                        $this->getEntityIdFormatterFactory(),
                        $this->getSnakFormatterFactory(),
                        $this->getMock( 'Wikibase\Lib\Store\EntityLookup' ),
                        $this->getSiteStore(),
                        $this->getMock( 'DataTypes\DataTypeFactory' ),
-                       new TemplateFactory( 
TemplateRegistry::getDefaultInstance() ),
+                       $templateFactory,
                        $this->getMock( 'Wikibase\Lib\LanguageNameLookup' ),
                        array(),
                        array(),
diff --git 
a/extensions/Wikibase/view/tests/phpunit/EntityViewPlaceholderExpanderTest.php 
b/extensions/Wikibase/view/tests/phpunit/EntityViewPlaceholderExpanderTest.php
index f4c0165..3d95df3 100644
--- 
a/extensions/Wikibase/view/tests/phpunit/EntityViewPlaceholderExpanderTest.php
+++ 
b/extensions/Wikibase/view/tests/phpunit/EntityViewPlaceholderExpanderTest.php
@@ -14,7 +14,6 @@
 use Wikibase\Lib\WikibaseContentLanguages;
 use Wikibase\View\EntityViewPlaceholderExpander;
 use Wikibase\View\Template\TemplateFactory;
-use Wikibase\View\Template\TemplateRegistry;
 
 /**
  * @covers Wikibase\View\EntityViewPlaceholderExpander
@@ -40,6 +39,8 @@
         * @return EntityViewPlaceholderExpander
         */
        private function newExpander( User $user, EntityRevisionLookup 
$entityRevisionLookup, ItemId $itemId ) {
+               $templateFactory = TemplateFactory::getDefaultInstance();
+
                $title = $this->getMockBuilder( 'Title')
                        ->disableOriginalConstructor()
                        ->getMock();
@@ -49,19 +50,17 @@
                $idParser = $this->getMockBuilder( 
'Wikibase\DataModel\Entity\EntityIdParser' )
                        ->disableOriginalConstructor()
                        ->getMock();
-
                $idParser->expects( $this->any() )
                        ->method( 'parse' )
                        ->will( $this->returnValue( $itemId ) );
 
                $userLanguages = $this->getMock( 
'Wikibase\Lib\UserLanguageLookup' );
-
                $userLanguages->expects( $this->any() )
                        ->method( 'getAllUserLanguages' )
                        ->will( $this->returnValue( array( 'de', 'en', 'ru' ) ) 
);
 
                return new EntityViewPlaceholderExpander(
-                       new TemplateFactory( 
TemplateRegistry::getDefaultInstance() ),
+                       $templateFactory,
                        $title,
                        $user,
                        $language,
diff --git a/extensions/Wikibase/view/tests/phpunit/ItemViewTest.php 
b/extensions/Wikibase/view/tests/phpunit/ItemViewTest.php
index 1ec47a9..12dcde3 100644
--- a/extensions/Wikibase/view/tests/phpunit/ItemViewTest.php
+++ b/extensions/Wikibase/view/tests/phpunit/ItemViewTest.php
@@ -5,9 +5,9 @@
 use Wikibase\DataModel\Entity\EntityId;
 use Wikibase\DataModel\Entity\Item;
 use Wikibase\DataModel\Entity\ItemId;
+use Wikibase\DataModel\Statement\StatementList;
 use Wikibase\View\ItemView;
 use Wikibase\View\Template\TemplateFactory;
-use Wikibase\View\Template\TemplateRegistry;
 
 /**
  * @covers Wikibase\View\ItemView
@@ -28,12 +28,11 @@
 
        protected function makeEntity( EntityId $id, array $statements = 
array() ) {
                $item = new Item( $id );
+
                $item->setLabel( 'en', "label:$id" );
                $item->setDescription( 'en', "description:$id" );
 
-               foreach ( $statements as $statement ) {
-                       $item->addClaim( $statement );
-               }
+               $item->setStatements( new StatementList( $statements ) );
 
                return $item;
        }
@@ -50,8 +49,9 @@
        }
 
        public function provideTestGetHtml() {
+               $templateFactory = TemplateFactory::getDefaultInstance();
                $itemView = new ItemView(
-                       new TemplateFactory( 
TemplateRegistry::getDefaultInstance() ),
+                       $templateFactory,
                        $this->getMockBuilder( 'Wikibase\View\EntityTermsView' )
                                ->disableOriginalConstructor()
                                ->getMock(),
diff --git a/extensions/Wikibase/view/tests/phpunit/PropertyViewTest.php 
b/extensions/Wikibase/view/tests/phpunit/PropertyViewTest.php
index 89f79a2..098580d 100644
--- a/extensions/Wikibase/view/tests/phpunit/PropertyViewTest.php
+++ b/extensions/Wikibase/view/tests/phpunit/PropertyViewTest.php
@@ -9,9 +9,9 @@
 use Wikibase\DataModel\Entity\Property;
 use Wikibase\DataModel\Entity\PropertyId;
 use Wikibase\DataModel\Statement\Statement;
+use Wikibase\DataModel\Statement\StatementList;
 use Wikibase\View\PropertyView;
 use Wikibase\View\Template\TemplateFactory;
-use Wikibase\View\Template\TemplateRegistry;
 
 /**
  * @covers Wikibase\View\EntityView
@@ -37,21 +37,13 @@
         * @return Entity
         */
        protected function makeEntity( EntityId $id, array $statements = 
array() ) {
-               $dataTypeId = 'string';
-
-               if ( is_string( $id ) ) {
-                       $id = new PropertyId( $id );
-               }
-
-               $property = Property::newFromType( $dataTypeId );
+               $property = Property::newFromType( 'string' );
                $property->setId( $id );
 
                $property->setLabel( 'en', "label:$id" );
                $property->setDescription( 'en', "description:$id" );
 
-               foreach ( $statements as $statement ) {
-                       $property->addClaim( $statement );
-               }
+               $property->setStatements( new StatementList( $statements ) );
 
                return $property;
        }
@@ -80,8 +72,9 @@
        }
 
        public function provideTestGetHtml() {
+               $templateFactory = TemplateFactory::getDefaultInstance();
                $propertyView = new PropertyView(
-                       new TemplateFactory( 
TemplateRegistry::getDefaultInstance() ),
+                       $templateFactory,
                        $this->getMockBuilder( 'Wikibase\View\EntityTermsView' )
                                ->disableOriginalConstructor()
                                ->getMock(),
@@ -116,4 +109,5 @@
 
                return $dataTypeFactory;
        }
+
 }
diff --git a/extensions/Wikibase/view/tests/phpunit/SiteLinksViewTest.php 
b/extensions/Wikibase/view/tests/phpunit/SiteLinksViewTest.php
index a9b459a..5e1aa3d 100644
--- a/extensions/Wikibase/view/tests/phpunit/SiteLinksViewTest.php
+++ b/extensions/Wikibase/view/tests/phpunit/SiteLinksViewTest.php
@@ -14,7 +14,6 @@
 use Wikibase\View\EditSectionGenerator;
 use Wikibase\View\SiteLinksView;
 use Wikibase\View\Template\TemplateFactory;
-use Wikibase\View\Template\TemplateRegistry;
 
 /**
  * @covers Wikibase\View\SiteLinksView
@@ -30,7 +29,7 @@
  * @author Adrian Heine <[email protected]>
  * @author Bene* < [email protected] >
  */
-class SiteLinksViewTest extends \MediaWikiTestCase {
+class SiteLinksViewTest extends MediaWikiTestCase {
 
        /**
         * @dataProvider getHtmlProvider
@@ -160,9 +159,10 @@
         * @return SiteLinksView
         */
        private function getSiteLinksView() {
+               $templateFactory = TemplateFactory::getDefaultInstance();
 
                return new SiteLinksView(
-                       new TemplateFactory( 
TemplateRegistry::getDefaultInstance() ),
+                       $templateFactory,
                        $this->newSiteList(),
                        $this->getEditSectionGeneratorMock(),
                        $this->getEntityLookupMock(),
diff --git a/extensions/Wikibase/view/tests/phpunit/SnakHtmlGeneratorTest.php 
b/extensions/Wikibase/view/tests/phpunit/SnakHtmlGeneratorTest.php
index ccacf0a..2289b55 100644
--- a/extensions/Wikibase/view/tests/phpunit/SnakHtmlGeneratorTest.php
+++ b/extensions/Wikibase/view/tests/phpunit/SnakHtmlGeneratorTest.php
@@ -13,7 +13,6 @@
 use Wikibase\Lib\SnakFormatter;
 use Wikibase\View\SnakHtmlGenerator;
 use Wikibase\View\Template\TemplateFactory;
-use Wikibase\View\Template\TemplateRegistry;
 
 /**
  * @covers Wikibase\View\SnakHtmlGenerator
@@ -39,8 +38,9 @@
                Snak $snak,
                $patterns
        ) {
+               $templateFactory = TemplateFactory::getDefaultInstance();
                $snakHtmlGenerator = new SnakHtmlGenerator(
-                       new TemplateFactory( 
TemplateRegistry::getDefaultInstance() ),
+                       $templateFactory,
                        $snakFormatter,
                        $propertyIdFormatter
                );
diff --git 
a/extensions/Wikibase/view/tests/phpunit/ToolbarEditSectionGeneratorTest.php 
b/extensions/Wikibase/view/tests/phpunit/ToolbarEditSectionGeneratorTest.php
index 8af14d3..e6069bb 100644
--- a/extensions/Wikibase/view/tests/phpunit/ToolbarEditSectionGeneratorTest.php
+++ b/extensions/Wikibase/view/tests/phpunit/ToolbarEditSectionGeneratorTest.php
@@ -3,14 +3,11 @@
 namespace Wikibase\Test;
 
 use MediaWikiTestCase;
-use SpecialPage;
-use SpecialPageFactory;
 use Wikibase\DataModel\Claim\Claim;
 use Wikibase\DataModel\Entity\PropertyId;
 use Wikibase\DataModel\Snak\PropertyNoValueSnak;
 use Wikibase\DataModel\Statement\Statement;
 use Wikibase\View\Template\TemplateFactory;
-use Wikibase\View\Template\TemplateRegistry;
 use Wikibase\View\ToolbarEditSectionGenerator;
 
 /**
@@ -58,7 +55,6 @@
                        $expectedMatch,
                        $generator->getLabelDescriptionAliasesEditSection( 
$languageCode, $entityId )
                );
-
        }
 
        public function getLabelDescriptionAliasesEditSectionProvider() {
@@ -78,7 +74,6 @@
                $generator = $this->newToolbarEditSectionGenerator();
 
                $this->assertRegExp( $expectedMatch, 
$generator->getSiteLinksEditSection( $entityId ) );
-
        }
 
        public function getSiteLinksEditSectionProvider() {
@@ -97,7 +92,6 @@
                        '<span class="wikibase-toolbar-container"></span>',
                        $generator->getStatementEditSection( $statement )
                );
-
        }
 
        public function getStatementEditSection() {
@@ -113,10 +107,10 @@
                        ->will( $this->returnCallback( function( $specialPage, 
$params = array() ) {
                                return 'Special:' . $specialPage . '/' . 
implode( '/', $params );
                        } ) );
-               return new ToolbarEditSectionGenerator(
-                       $specialPageLinker,
-                       new TemplateFactory( 
TemplateRegistry::getDefaultInstance() )
-               );
+
+               $templateFactory = TemplateFactory::getDefaultInstance();
+
+               return new ToolbarEditSectionGenerator( $specialPageLinker, 
$templateFactory );
        }
 
 }
diff --git a/vendor/autoload.php b/vendor/autoload.php
index a1fdd61..f642dc8 100644
--- a/vendor/autoload.php
+++ b/vendor/autoload.php
@@ -4,4 +4,4 @@
 
 require_once __DIR__ . '/composer' . '/autoload_real.php';
 
-return ComposerAutoloaderInit5a71055dc5042c75e91541f286d7b83b::getLoader();
+return ComposerAutoloaderInitc0a3768d434154ce38a32c8879b374f4::getLoader();
diff --git a/vendor/composer/autoload_classmap.php 
b/vendor/composer/autoload_classmap.php
index 0491ac5..a9416d9 100644
--- a/vendor/composer/autoload_classmap.php
+++ b/vendor/composer/autoload_classmap.php
@@ -797,7 +797,7 @@
     'Wikibase\\Repo\\Diff\\EntityDiffVisualizer' => $baseDir . 
'/extensions/Wikibase/repo/includes/Diff/EntityDiffVisualizer.php',
     'Wikibase\\Repo\\EntityIdHtmlLinkFormatterFactory' => $baseDir . 
'/extensions/Wikibase/repo/includes/EntityIdHtmlLinkFormatterFactory.php',
     'Wikibase\\Repo\\EntityNamespaceLookup' => $baseDir . 
'/extensions/Wikibase/repo/includes/EntityNamespaceLookup.php',
-    'Wikibase\\Repo\\EntitySearchTextGenerator' => $baseDir . 
'/extensions/Wikibase/repo/includes/EntitySearchTextGenerator.php',
+    'Wikibase\\Repo\\FingerprintSearchTextGenerator' => $baseDir . 
'/extensions/Wikibase/repo/includes/FingerprintSearchTextGenerator.php',
     'Wikibase\\Repo\\GenericEventDispatcher' => $baseDir . 
'/extensions/Wikibase/repo/includes/GenericEventDispatcher.php',
     'Wikibase\\Repo\\Hooks\\LabelPrefetchHookHandlers' => $baseDir . 
'/extensions/Wikibase/repo/includes/Hooks/LabelPrefetchHookHandlers.php',
     'Wikibase\\Repo\\Hooks\\LinkBeginHookHandler' => $baseDir . 
'/extensions/Wikibase/repo/includes/Hooks/LinkBeginHookHandler.php',
@@ -1027,10 +1027,10 @@
     'Wikibase\\Test\\EntityPerPageTableTest' => $baseDir . 
'/extensions/Wikibase/repo/tests/phpunit/includes/store/sql/EntityPerPageTableTest.php',
     'Wikibase\\Test\\EntityRetrievingTermLookupTest' => $baseDir . 
'/extensions/Wikibase/lib/tests/phpunit/store/EntityRetrievingTermLookupTest.php',
     'Wikibase\\Test\\EntityRevisionLookupTest' => $baseDir . 
'/extensions/Wikibase/lib/tests/phpunit/EntityRevisionLookupTest.php',
-    'Wikibase\\Test\\EntitySearchTextGeneratorTest' => $baseDir . 
'/extensions/Wikibase/repo/tests/phpunit/includes/EntitySearchTextGeneratorTest.php',
     'Wikibase\\Test\\EntitySerializerBaseTest' => $baseDir . 
'/extensions/Wikibase/lib/tests/phpunit/serializers/EntitySerializerBaseTest.php',
     'Wikibase\\Test\\EntityTermLookupTest' => $baseDir . 
'/extensions/Wikibase/lib/tests/phpunit/store/EntityTermLookupTest.php',
     'Wikibase\\Test\\FingerprintChangeOpFactoryTest' => $baseDir . 
'/extensions/Wikibase/repo/tests/phpunit/includes/ChangeOp/FingerprintChangeOpFactoryTest.php',
+    'Wikibase\\Test\\FingerprintSearchTextGeneratorTest' => $baseDir . 
'/extensions/Wikibase/repo/tests/phpunit/includes/FingerprintSearchTextGeneratorTest.php',
     'Wikibase\\Test\\GenericExceptionLocalizerTest' => $baseDir . 
'/extensions/Wikibase/lib/tests/phpunit/Localizer/GenericExceptionLocalizerTest.php',
     'Wikibase\\Test\\HttpAcceptNegotiatorTest' => $baseDir . 
'/extensions/Wikibase/repo/tests/phpunit/includes/LinkedData/HttpAcceptNegotiatorTest.php',
     'Wikibase\\Test\\HttpAcceptParserTest' => $baseDir . 
'/extensions/Wikibase/repo/tests/phpunit/includes/LinkedData/HttpAcceptParserTest.php',
diff --git a/vendor/composer/autoload_real.php 
b/vendor/composer/autoload_real.php
index 0c6b8dc..e379257 100644
--- a/vendor/composer/autoload_real.php
+++ b/vendor/composer/autoload_real.php
@@ -2,7 +2,7 @@
 
 // autoload_real.php @generated by Composer
 
-class ComposerAutoloaderInit5a71055dc5042c75e91541f286d7b83b
+class ComposerAutoloaderInitc0a3768d434154ce38a32c8879b374f4
 {
     private static $loader;
 
@@ -19,9 +19,9 @@
             return self::$loader;
         }
 
-        
spl_autoload_register(array('ComposerAutoloaderInit5a71055dc5042c75e91541f286d7b83b',
 'loadClassLoader'), true, false);
+        
spl_autoload_register(array('ComposerAutoloaderInitc0a3768d434154ce38a32c8879b374f4',
 'loadClassLoader'), true, false);
         self::$loader = $loader = new \Composer\Autoload\ClassLoader();
-        
spl_autoload_unregister(array('ComposerAutoloaderInit5a71055dc5042c75e91541f286d7b83b',
 'loadClassLoader'));
+        
spl_autoload_unregister(array('ComposerAutoloaderInitc0a3768d434154ce38a32c8879b374f4',
 'loadClassLoader'));
 
         $map = require __DIR__ . '/autoload_namespaces.php';
         foreach ($map as $namespace => $path) {
@@ -42,14 +42,14 @@
 
         $includeFiles = require __DIR__ . '/autoload_files.php';
         foreach ($includeFiles as $file) {
-            composerRequire5a71055dc5042c75e91541f286d7b83b($file);
+            composerRequirec0a3768d434154ce38a32c8879b374f4($file);
         }
 
         return $loader;
     }
 }
 
-function composerRequire5a71055dc5042c75e91541f286d7b83b($file)
+function composerRequirec0a3768d434154ce38a32c8879b374f4($file)
 {
     require $file;
 }
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index b8ec8a4..3167797 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -1199,12 +1199,12 @@
         "source": {
             "type": "git",
             "url": 
"https://github.com/wikimedia/mediawiki-extensions-Wikibase.git";,
-            "reference": "86f87316c8f8c0ea438839f98aabd0345b23be4f"
+            "reference": "8d21687a97a5636b0b2522302343ada7f16088dc"
         },
         "dist": {
             "type": "zip",
-            "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/86f87316c8f8c0ea438839f98aabd0345b23be4f";,
-            "reference": "86f87316c8f8c0ea438839f98aabd0345b23be4f",
+            "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/8d21687a97a5636b0b2522302343ada7f16088dc";,
+            "reference": "8d21687a97a5636b0b2522302343ada7f16088dc",
             "shasum": ""
         },
         "require": {
@@ -1231,7 +1231,7 @@
         "conflict": {
             "mediawiki/mediawiki": "<1.23"
         },
-        "time": "2015-04-07 09:45:04",
+        "time": "2015-04-07 20:21:37",
         "type": "mediawiki-extension",
         "installation-source": "dist",
         "autoload": {

-- 
To view, visit https://gerrit.wikimedia.org/r/268181
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I8442ad7a466ee5f710ccc37070eb5673dd5dfcaa
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikidata
Gerrit-Branch: REL1_25
Gerrit-Owner: Paladox <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to